- |
-
- |
-
+
+
+
+
+
+
+
+ {{ user.name }}
+
{{ user.email }}
- {{ user.name }}
+
+
+
+
+ {{ user.email }}
+
+
+
+
+
+ 0 && !error && isRevoking">{{ "revokeUsersWarning" | i18n }}
+
+
+
+ | {{ (accountDeprovisioning.enabled ? "member" : "user") | i18n }} |
+
+ {{ "details" | i18n }}
+ |
+
+
+
+
+ |
+
|
-
+ |
-
@@ -95,55 +78,21 @@
-
+
- | {{ "member" | i18n }} |
- {{ "status" | i18n }} |
+
+ {{ (accountDeprovisioning.enabled ? "member" : "user") | i18n }}
+ |
+ {{ "status" | i18n }} |
-
-
-
-
-
-
- {{ user.email }}
- {{ user.name }}
-
-
- |
-
- {{ statuses.get(user.id) }}
- |
-
- {{ "bulkFilteredMessage" | i18n }}
- |
-
-
-
-
-
-
-
- | {{ "member" | i18n }} |
- {{ "status" | i18n }} |
-
-
-
-
-
-
-
-
-
-
- {{ user.email }}
- {{ user.name }}
-
-
+ |
+
|
{{ statuses.get(user.id) }}
@@ -157,7 +106,13 @@
- |
diff --git a/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts b/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts
index 578c220f396..3d19511a252 100644
--- a/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts
+++ b/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts
@@ -25,15 +25,14 @@ describe("WeakPasswordsReportComponent", () => {
let passwordStrengthService: MockProxy;
let organizationService: MockProxy;
let syncServiceMock: MockProxy;
- let accountService: FakeAccountService;
const userId = Utils.newGuid() as UserId;
+ const accountService: FakeAccountService = mockAccountServiceWith(userId);
beforeEach(() => {
syncServiceMock = mock();
passwordStrengthService = mock();
organizationService = mock();
organizationService.organizations$.mockReturnValue(of([]));
- accountService = mockAccountServiceWith(userId);
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
TestBed.configureTestingModule({
diff --git a/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.ts
index 8b781b77378..c374ecd0e4a 100644
--- a/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.ts
+++ b/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.ts
@@ -59,7 +59,6 @@ export class WeakPasswordsReportComponent extends CipherReportComponent implemen
this.weakPasswordCiphers = [];
this.filterStatus = [0];
this.findWeakPasswords(allCiphers);
- this.weakPasswordCiphers = this.sortCiphers(this.weakPasswordCiphers, "score", false);
}
protected findWeakPasswords(ciphers: CipherView[]): void {
@@ -113,29 +112,6 @@ export class WeakPasswordsReportComponent extends CipherReportComponent implemen
this.filterCiphersByOrg(this.weakPasswordCiphers);
}
- onSortChange(field: string, event: Event) {
- const target = event.target as HTMLInputElement;
- const ascending = target.checked;
- this.weakPasswordCiphers = this.sortCiphers(this.weakPasswordCiphers, field, ascending);
- }
-
- protected sortCiphers(
- ciphers: ReportResult[],
- field: string,
- ascending: boolean,
- ): ReportResult[] {
- return ciphers.sort((a, b) => {
- const aValue = a[field as keyof ReportResult];
- const bValue = b[field as keyof ReportResult];
-
- if (aValue === bValue) {
- return 0;
- }
- const comparison = aValue > bValue ? 1 : -1;
- return ascending ? comparison : -comparison;
- });
- }
-
protected canManageCipher(c: CipherView): boolean {
// this will only ever be false from the org view;
return true;
diff --git a/apps/web/src/app/tools/send/access.component.html b/apps/web/src/app/tools/send/send-access/access.component.html
similarity index 100%
rename from apps/web/src/app/tools/send/access.component.html
rename to apps/web/src/app/tools/send/send-access/access.component.html
diff --git a/apps/web/src/app/tools/send/access.component.ts b/apps/web/src/app/tools/send/send-access/access.component.ts
similarity index 99%
rename from apps/web/src/app/tools/send/access.component.ts
rename to apps/web/src/app/tools/send/send-access/access.component.ts
index b76c3853d52..da8c845dfe9 100644
--- a/apps/web/src/app/tools/send/access.component.ts
+++ b/apps/web/src/app/tools/send/send-access/access.component.ts
@@ -19,7 +19,7 @@ import { NoItemsModule, ToastService } from "@bitwarden/components";
import { KeyService } from "@bitwarden/key-management";
import { ExpiredSendIcon } from "@bitwarden/send-ui";
-import { SharedModule } from "../../shared";
+import { SharedModule } from "../../../shared";
import { SendAccessFileComponent } from "./send-access-file.component";
import { SendAccessPasswordComponent } from "./send-access-password.component";
diff --git a/apps/web/src/app/tools/send/send-access/index.ts b/apps/web/src/app/tools/send/send-access/index.ts
new file mode 100644
index 00000000000..c9df5ce5193
--- /dev/null
+++ b/apps/web/src/app/tools/send/send-access/index.ts
@@ -0,0 +1,2 @@
+export { AccessComponent } from "./access.component";
+export { SendAccessExplainerComponent } from "./send-access-explainer.component";
diff --git a/apps/web/src/app/tools/send/send-access-explainer.component.html b/apps/web/src/app/tools/send/send-access/send-access-explainer.component.html
similarity index 100%
rename from apps/web/src/app/tools/send/send-access-explainer.component.html
rename to apps/web/src/app/tools/send/send-access/send-access-explainer.component.html
diff --git a/apps/web/src/app/tools/send/send-access-explainer.component.ts b/apps/web/src/app/tools/send/send-access/send-access-explainer.component.ts
similarity index 84%
rename from apps/web/src/app/tools/send/send-access-explainer.component.ts
rename to apps/web/src/app/tools/send/send-access/send-access-explainer.component.ts
index e7106110a65..ec39d970444 100644
--- a/apps/web/src/app/tools/send/send-access-explainer.component.ts
+++ b/apps/web/src/app/tools/send/send-access/send-access-explainer.component.ts
@@ -1,6 +1,6 @@
import { Component } from "@angular/core";
-import { SharedModule } from "../../shared";
+import { SharedModule } from "../../../shared";
@Component({
selector: "app-send-access-explainer",
diff --git a/apps/web/src/app/tools/send/send-access-file.component.html b/apps/web/src/app/tools/send/send-access/send-access-file.component.html
similarity index 100%
rename from apps/web/src/app/tools/send/send-access-file.component.html
rename to apps/web/src/app/tools/send/send-access/send-access-file.component.html
diff --git a/apps/web/src/app/tools/send/send-access-file.component.ts b/apps/web/src/app/tools/send/send-access/send-access-file.component.ts
similarity index 94%
rename from apps/web/src/app/tools/send/send-access-file.component.ts
rename to apps/web/src/app/tools/send/send-access/send-access-file.component.ts
index b55e955f355..eec0bfd787b 100644
--- a/apps/web/src/app/tools/send/send-access-file.component.ts
+++ b/apps/web/src/app/tools/send/send-access/send-access-file.component.ts
@@ -2,7 +2,7 @@
// @ts-strict-ignore
import { Component, Input } from "@angular/core";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
@@ -13,7 +13,7 @@ import { SendAccessView } from "@bitwarden/common/tools/send/models/view/send-ac
import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction";
import { ToastService } from "@bitwarden/components";
-import { SharedModule } from "../../shared";
+import { SharedModule } from "../../../shared";
@Component({
selector: "app-send-access-file",
diff --git a/apps/web/src/app/tools/send/send-access-password.component.html b/apps/web/src/app/tools/send/send-access/send-access-password.component.html
similarity index 100%
rename from apps/web/src/app/tools/send/send-access-password.component.html
rename to apps/web/src/app/tools/send/send-access/send-access-password.component.html
diff --git a/apps/web/src/app/tools/send/send-access-password.component.ts b/apps/web/src/app/tools/send/send-access/send-access-password.component.ts
similarity index 95%
rename from apps/web/src/app/tools/send/send-access-password.component.ts
rename to apps/web/src/app/tools/send/send-access/send-access-password.component.ts
index bd98e9d18c8..0cfd93fcea0 100644
--- a/apps/web/src/app/tools/send/send-access-password.component.ts
+++ b/apps/web/src/app/tools/send/send-access/send-access-password.component.ts
@@ -4,7 +4,7 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from "@angu
import { FormBuilder, Validators } from "@angular/forms";
import { Subject, takeUntil } from "rxjs";
-import { SharedModule } from "../../shared";
+import { SharedModule } from "../../../shared";
@Component({
selector: "app-send-access-password",
diff --git a/apps/web/src/app/tools/send/send-access-text.component.html b/apps/web/src/app/tools/send/send-access/send-access-text.component.html
similarity index 100%
rename from apps/web/src/app/tools/send/send-access-text.component.html
rename to apps/web/src/app/tools/send/send-access/send-access-text.component.html
diff --git a/apps/web/src/app/tools/send/send-access-text.component.ts b/apps/web/src/app/tools/send/send-access/send-access-text.component.ts
similarity index 97%
rename from apps/web/src/app/tools/send/send-access-text.component.ts
rename to apps/web/src/app/tools/send/send-access/send-access-text.component.ts
index 6568fe482ad..6f9bc798d4b 100644
--- a/apps/web/src/app/tools/send/send-access-text.component.ts
+++ b/apps/web/src/app/tools/send/send-access/send-access-text.component.ts
@@ -8,7 +8,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl
import { SendAccessView } from "@bitwarden/common/tools/send/models/view/send-access.view";
import { ToastService } from "@bitwarden/components";
-import { SharedModule } from "../../shared";
+import { SharedModule } from "../../../shared";
@Component({
selector: "app-send-access-text",
diff --git a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.html b/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.html
index fbe0649c7aa..61fc290f6fe 100644
--- a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.html
+++ b/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.html
@@ -70,11 +70,11 @@
- {{ "grantAddAccessCollectionWarning" | i18n }}
+ {{ "grantManageCollectionWarning" | i18n }}
{{ "grantCollectionAccess" | i18n }}
{{
diff --git a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts
index 0af0d720b0e..3dc3b8f9f84 100644
--- a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts
+++ b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts
@@ -12,6 +12,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions";
import { EventType } from "@bitwarden/common/enums";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
@@ -355,8 +356,8 @@ export class VaultItemDialogComponent implements OnInit, OnDestroy {
this.formConfig.mode = "edit";
this.formConfig.initialValues = null;
}
-
- let cipher = await this.cipherService.get(cipherView.id);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ let cipher = await this.cipherService.get(cipherView.id, activeUserId);
// When the form config is used within the Admin Console, retrieve the cipher from the admin endpoint (if not found in local state)
if (this.formConfig.isAdminConsole && (cipher == null || this.formConfig.admin)) {
@@ -366,6 +367,9 @@ export class VaultItemDialogComponent implements OnInit, OnDestroy {
const cipherData = new CipherData(cipherResponse);
cipher = new Cipher(cipherData);
+
+ // Update organizationUseTotp from server response
+ this.cipher.organizationUseTotp = cipher.organizationUseTotp;
}
// Store the updated cipher so any following edits use the most up to date cipher
@@ -445,10 +449,13 @@ export class VaultItemDialogComponent implements OnInit, OnDestroy {
result.action === AttachmentDialogResult.Removed ||
result.action === AttachmentDialogResult.Uploaded
) {
- const updatedCipher = await this.cipherService.get(this.formConfig.originalCipher?.id);
const activeUserId = await firstValueFrom(
this.accountService.activeAccount$.pipe(map((a) => a?.id)),
);
+ const updatedCipher = await this.cipherService.get(
+ this.formConfig.originalCipher?.id,
+ activeUserId,
+ );
const updatedCipherView = await updatedCipher.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(updatedCipher, activeUserId),
@@ -487,9 +494,7 @@ export class VaultItemDialogComponent implements OnInit, OnDestroy {
if (config.originalCipher == null) {
return;
}
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
return await config.originalCipher.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(config.originalCipher, activeUserId),
);
@@ -571,10 +576,14 @@ export class VaultItemDialogComponent implements OnInit, OnDestroy {
// - The cipher is unassigned
const asAdmin = this.organization?.canEditAllCiphers || cipherIsUnassigned;
+ const activeUserId = await firstValueFrom(
+ this.accountService.activeAccount$.pipe(map((a) => a?.id)),
+ );
+
if (this.cipher.isDeleted) {
- await this.cipherService.deleteWithServer(this.cipher.id, asAdmin);
+ await this.cipherService.deleteWithServer(this.cipher.id, activeUserId, asAdmin);
} else {
- await this.cipherService.softDeleteWithServer(this.cipher.id, asAdmin);
+ await this.cipherService.softDeleteWithServer(this.cipher.id, activeUserId, asAdmin);
}
}
diff --git a/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.html b/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.html
index 7e59853851c..befeee43f69 100644
--- a/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.html
+++ b/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.html
@@ -22,7 +22,7 @@
[routerLink]="[]"
[queryParams]="{ itemId: cipher.id, action: clickAction }"
queryParamsHandling="merge"
- [replaceUrl]="extensionRefreshEnabled"
+ [replaceUrl]="true"
title="{{ 'editItemWithName' | i18n: cipher.name }}"
type="button"
appStopProp
diff --git a/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.ts b/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.ts
index 556d3d54594..5f686fcec9c 100644
--- a/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.ts
+++ b/apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.ts
@@ -1,12 +1,9 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Component, EventEmitter, Input, OnInit, Output } from "@angular/core";
-import { firstValueFrom } from "rxjs";
import { CollectionView } from "@bitwarden/admin-console/common";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { CipherType } from "@bitwarden/common/vault/enums";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
@@ -25,11 +22,6 @@ import { RowHeightClass } from "./vault-items.component";
export class VaultCipherRowComponent implements OnInit {
protected RowHeightClass = RowHeightClass;
- /**
- * Flag to determine if the extension refresh feature flag is enabled.
- */
- protected extensionRefreshEnabled = false;
-
@Input() disabled: boolean;
@Input() cipher: CipherView;
@Input() showOwner: boolean;
@@ -42,6 +34,7 @@ export class VaultCipherRowComponent implements OnInit {
@Input() collections: CollectionView[];
@Input() viewingOrgVault: boolean;
@Input() canEditCipher: boolean;
+ @Input() canAssignCollections: boolean;
@Input() canManageCollection: boolean;
@Output() onEvent = new EventEmitter();
@@ -52,27 +45,20 @@ export class VaultCipherRowComponent implements OnInit {
protected CipherType = CipherType;
private permissionList = getPermissionList();
private permissionPriority = [
- "canManage",
- "canEdit",
- "canEditExceptPass",
- "canView",
- "canViewExceptPass",
+ "manageCollection",
+ "editItems",
+ "editItemsHidePass",
+ "viewItems",
+ "viewItemsHidePass",
];
protected organization?: Organization;
- constructor(
- private configService: ConfigService,
- private i18nService: I18nService,
- ) {}
+ constructor(private i18nService: I18nService) {}
/**
* Lifecycle hook for component initialization.
- * Checks if the extension refresh feature flag is enabled to provide to template.
*/
async ngOnInit(): Promise {
- this.extensionRefreshEnabled = await firstValueFrom(
- this.configService.getFeatureFlag$(FeatureFlag.ExtensionRefresh),
- );
if (this.cipher.organizationId != null) {
this.organization = this.organizations.find((o) => o.id === this.cipher.organizationId);
}
@@ -82,7 +68,7 @@ export class VaultCipherRowComponent implements OnInit {
if (this.cipher.decryptionFailure) {
return "showFailedToDecrypt";
}
- return this.extensionRefreshEnabled ? "view" : null;
+ return "view";
}
protected get showTotpCopyButton() {
@@ -101,7 +87,7 @@ export class VaultCipherRowComponent implements OnInit {
}
protected get showAssignToCollections() {
- return this.organizations?.length && this.canEditCipher && !this.cipher.isDeleted;
+ return this.organizations?.length && this.canAssignCollections && !this.cipher.isDeleted;
}
protected get showClone() {
@@ -118,7 +104,7 @@ export class VaultCipherRowComponent implements OnInit {
protected get permissionText() {
if (!this.cipher.organizationId || this.cipher.collectionIds.length === 0) {
- return this.i18nService.t("canManage");
+ return this.i18nService.t("manageCollection");
}
const filteredCollections = this.collections.filter((collection) => {
@@ -208,6 +194,6 @@ export class VaultCipherRowComponent implements OnInit {
return true; // Always show checkbox in individual vault or for non-org items
}
- return this.organization.canEditAllCiphers || this.cipher.edit;
+ return this.organization.canEditAllCiphers || (this.cipher.edit && this.cipher.viewPassword);
}
}
diff --git a/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.html b/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.html
index 2f9e84fc6d5..c7d16908241 100644
--- a/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.html
+++ b/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.html
@@ -11,7 +11,7 @@
/>
|
- |
diff --git a/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.ts b/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.ts
index 404e26fc210..d07ba46d136 100644
--- a/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.ts
+++ b/apps/web/src/app/vault/components/vault-items/vault-collection-row.component.ts
@@ -74,7 +74,7 @@ export class VaultCollectionRowComponent {
get permissionText() {
if (this.collection.id == Unassigned && this.organization?.canEditUnassignedCiphers) {
- return this.i18nService.t("canEdit");
+ return this.i18nService.t("editItems");
}
if ((this.collection as CollectionAdminView).assigned) {
const permissionList = getPermissionList();
diff --git a/apps/web/src/app/vault/components/vault-items/vault-items.component.html b/apps/web/src/app/vault/components/vault-items/vault-items.component.html
index 653d05ef129..a32def5fc0c 100644
--- a/apps/web/src/app/vault/components/vault-items/vault-items.component.html
+++ b/apps/web/src/app/vault/components/vault-items/vault-items.component.html
@@ -144,6 +144,7 @@
[collections]="allCollections"
[checked]="selection.isSelected(item)"
[canEditCipher]="canEditCipher(item.cipher)"
+ [canAssignCollections]="canAssignCollections(item.cipher)"
[canManageCollection]="canManageCollection(item.cipher)"
(checkedToggled)="selection.toggle(item)"
(onEvent)="event($event)"
diff --git a/apps/web/src/app/vault/components/vault-items/vault-items.component.ts b/apps/web/src/app/vault/components/vault-items/vault-items.component.ts
index 3e1cf173a47..a641c5b5908 100644
--- a/apps/web/src/app/vault/components/vault-items/vault-items.component.ts
+++ b/apps/web/src/app/vault/components/vault-items/vault-items.component.ts
@@ -236,6 +236,13 @@ export class VaultItemsComponent {
return (organization.canEditAllCiphers && this.viewingOrgVault) || cipher.edit;
}
+ protected canAssignCollections(cipher: CipherView) {
+ const organization = this.allOrganizations.find((o) => o.id === cipher.organizationId);
+ return (
+ (organization?.canEditAllCiphers && this.viewingOrgVault) || cipher.canAssignToCollections
+ );
+ }
+
protected canManageCollection(cipher: CipherView) {
// If the cipher is not part of an organization (personal item), user can manage it
if (cipher.organizationId == null) {
@@ -461,7 +468,7 @@ export class VaultItemsComponent {
private allCiphersHaveEditAccess(): boolean {
return this.selection.selected
.filter(({ cipher }) => cipher)
- .every(({ cipher }) => cipher?.edit);
+ .every(({ cipher }) => cipher?.edit && cipher?.viewPassword);
}
private getUniqueOrganizationIds(): Set {
diff --git a/apps/web/src/app/vault/individual-vault/add-edit.component.ts b/apps/web/src/app/vault/individual-vault/add-edit.component.ts
index 62ce55848f5..a794687c45b 100644
--- a/apps/web/src/app/vault/individual-vault/add-edit.component.ts
+++ b/apps/web/src/app/vault/individual-vault/add-edit.component.ts
@@ -66,7 +66,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On
protected messagingService: MessagingService,
eventCollectionService: EventCollectionService,
protected policyService: PolicyService,
- protected organizationService: OrganizationService,
+ organizationService: OrganizationService,
logService: LogService,
passwordRepromptService: PasswordRepromptService,
dialogService: DialogService,
@@ -143,11 +143,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On
}, 1000);
}
- const extensionRefreshEnabled = await firstValueFrom(
- this.configService.getFeatureFlag$(FeatureFlag.ExtensionRefresh),
- );
-
- this.cardIsExpired = extensionRefreshEnabled && isCardExpired(this.cipher.card);
+ this.cardIsExpired = isCardExpired(this.cipher.card);
}
ngOnDestroy() {
@@ -307,8 +303,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On
this.cipher.type === CipherType.Login &&
this.cipher.login.totp &&
this.organization?.productTierType != ProductTierType.Free &&
- ((this.canAccessPremium && this.cipher.organizationId == null) ||
- this.cipher.organizationUseTotp)
+ (this.cipher.organizationUseTotp || this.canAccessPremium)
);
}
diff --git a/apps/web/src/app/vault/individual-vault/attachments.component.ts b/apps/web/src/app/vault/individual-vault/attachments.component.ts
index a6c25b71fd4..c6079dbe78f 100644
--- a/apps/web/src/app/vault/individual-vault/attachments.component.ts
+++ b/apps/web/src/app/vault/individual-vault/attachments.component.ts
@@ -4,7 +4,7 @@ import { AttachmentsComponent as BaseAttachmentsComponent } from "@bitwarden/ang
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
diff --git a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts
index becfcb8f588..86019fe745e 100644
--- a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts
+++ b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component.ts
@@ -2,10 +2,13 @@
// @ts-strict-ignore
import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog";
import { Component, Inject } from "@angular/core";
+import { firstValueFrom } from "rxjs";
import { CollectionService, CollectionView } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
+import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
@@ -61,6 +64,7 @@ export class BulkDeleteDialogComponent {
private apiService: ApiService,
private collectionService: CollectionService,
private toastService: ToastService,
+ private accountService: AccountService,
) {
this.cipherIds = params.cipherIds ?? [];
this.permanent = params.permanent;
@@ -115,10 +119,12 @@ export class BulkDeleteDialogComponent {
private async deleteCiphers(): Promise {
const asAdmin = this.organization?.canEditAllCiphers;
+
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
if (this.permanent) {
- await this.cipherService.deleteManyWithServer(this.cipherIds, asAdmin);
+ await this.cipherService.deleteManyWithServer(this.cipherIds, activeUserId, asAdmin);
} else {
- await this.cipherService.softDeleteManyWithServer(this.cipherIds, asAdmin);
+ await this.cipherService.softDeleteManyWithServer(this.cipherIds, activeUserId, asAdmin);
}
}
diff --git a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts
index 295d3ccc435..27e441e946e 100644
--- a/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts
+++ b/apps/web/src/app/vault/individual-vault/bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component.ts
@@ -3,9 +3,10 @@
import { DialogConfig, DialogRef, DIALOG_DATA } from "@angular/cdk/dialog";
import { Component, Inject, OnInit } from "@angular/core";
import { FormBuilder, Validators } from "@angular/forms";
-import { firstValueFrom, map, Observable } from "rxjs";
+import { firstValueFrom, Observable } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
@@ -48,8 +49,6 @@ export class BulkMoveDialogComponent implements OnInit {
});
folders$: Observable;
- private activeUserId$ = this.accountService.activeAccount$.pipe(map((a) => a?.id));
-
constructor(
@Inject(DIALOG_DATA) params: BulkMoveDialogParams,
private dialogRef: DialogRef,
@@ -65,7 +64,7 @@ export class BulkMoveDialogComponent implements OnInit {
}
async ngOnInit() {
- const activeUserId = await firstValueFrom(this.activeUserId$);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
this.folders$ = this.folderService.folderViews$(activeUserId);
this.formGroup.patchValue({
folderId: (await firstValueFrom(this.folders$))[0].id,
@@ -81,7 +80,12 @@ export class BulkMoveDialogComponent implements OnInit {
return;
}
- await this.cipherService.moveManyWithServer(this.cipherIds, this.formGroup.value.folderId);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.cipherService.moveManyWithServer(
+ this.cipherIds,
+ this.formGroup.value.folderId,
+ activeUserId,
+ );
this.toastService.showToast({
variant: "success",
title: null,
diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/services/abstractions/vault-filter.service.ts b/apps/web/src/app/vault/individual-vault/vault-filter/services/abstractions/vault-filter.service.ts
index 7e6f7eb8588..b8494c8aa54 100644
--- a/apps/web/src/app/vault/individual-vault/vault-filter/services/abstractions/vault-filter.service.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-filter/services/abstractions/vault-filter.service.ts
@@ -4,10 +4,8 @@ import { Observable } from "rxjs";
import { CollectionAdminView, CollectionView } from "@bitwarden/admin-console/common";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { FolderView } from "@bitwarden/common/src/vault/models/view/folder.view";
import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node";
+import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import {
CipherTypeFilter,
diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.spec.ts b/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.spec.ts
index 8d74f69ed06..15f5e1cd876 100644
--- a/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.spec.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.spec.ts
@@ -71,7 +71,7 @@ describe("vault filter service", () => {
policyService.policyAppliesToActiveUser$
.calledWith(PolicyType.SingleOrg)
.mockReturnValue(singleOrgPolicy);
- cipherService.cipherViews$ = cipherViews;
+ cipherService.cipherViews$.mockReturnValue(cipherViews);
vaultFilterService = new VaultFilterService(
organizationService,
diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.ts b/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.ts
index 9b24f95e2ea..67c369fa0f2 100644
--- a/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-filter/services/vault-filter.service.ts
@@ -5,6 +5,7 @@ import {
BehaviorSubject,
combineLatest,
combineLatestWith,
+ filter,
firstValueFrom,
map,
Observable,
@@ -68,14 +69,16 @@ export class VaultFilterService implements VaultFilterServiceAbstraction {
switchMap((userId) =>
combineLatest([
this.folderService.folderViews$(userId),
- this.cipherService.cipherViews$,
+ this.cipherService.cipherViews$(userId),
this._organizationFilter,
]),
),
+ filter(([folders, ciphers, org]) => !!ciphers), // ciphers may be null, meaning decryption is in progress. Ignore this emission
switchMap(([folders, ciphers, org]) => {
return this.filterFolders(folders, ciphers, org);
}),
);
+
folderTree$: Observable> = this.filteredFolders$.pipe(
map((folders) => this.buildFolderTree(folders)),
);
@@ -274,6 +277,7 @@ export class VaultFilterService implements VaultFilterServiceAbstraction {
folderCopy.id = f.id;
folderCopy.revisionDate = f.revisionDate;
folderCopy.icon = "bwi-folder";
+ folderCopy.fullName = f.name; // save full folder name before separating it into parts
const parts = f.name != null ? f.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) : [];
ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);
});
diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/components/vault-filter-section.component.html b/apps/web/src/app/vault/individual-vault/vault-filter/shared/components/vault-filter-section.component.html
index bb52dd4feb7..6dd00375f44 100644
--- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/components/vault-filter-section.component.html
+++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/components/vault-filter-section.component.html
@@ -121,7 +121,7 @@
>
-
+
{{ addInfo.text | i18n }}
diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts
index 10888aea13e..9259dd08114 100644
--- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts
@@ -1,10 +1,8 @@
import { CollectionAdminView } from "@bitwarden/admin-console/common";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { FolderView } from "@bitwarden/common/src/vault/models/view/folder.view";
import { CipherType } from "@bitwarden/common/vault/enums";
import { ITreeNodeObject } from "@bitwarden/common/vault/models/domain/tree-node";
+import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
export type CipherStatus = "all" | "favorites" | "trash" | CipherType;
@@ -12,5 +10,13 @@ export type CipherTypeFilter = ITreeNodeObject & { type: CipherStatus; icon: str
export type CollectionFilter = CollectionAdminView & {
icon: string;
};
-export type FolderFilter = FolderView & { icon: string };
+export type FolderFilter = FolderView & {
+ icon: string;
+ /**
+ * Full folder name.
+ *
+ * Used for when the folder `name` property is be separated into parts.
+ */
+ fullName?: string;
+};
export type OrganizationFilter = Organization & { icon: string; hideOptions?: boolean };
diff --git a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.html b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.html
index 8ac6138db7c..8d576098a74 100644
--- a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.html
+++ b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.html
@@ -69,88 +69,48 @@
-
-
-
-
- {{ "new" | i18n }}
-
-
-
-
- {{ "typeLogin" | i18n }}
-
-
-
- {{ "typeCard" | i18n }}
-
-
-
- {{ "typeIdentity" | i18n }}
-
-
-
- {{ "note" | i18n }}
-
-
-
- {{ "typeSshKey" | i18n }}
-
-
-
-
- {{ "folder" | i18n }}
-
-
-
- {{ "collection" | i18n }}
-
-
-
-
-
- {{ "new" | i18n }}
-
-
-
-
- {{ "item" | i18n }}
-
-
-
- {{ "folder" | i18n }}
-
-
-
- {{ "collection" | i18n }}
-
-
-
-
+
+
+ {{ "new" | i18n }}
+
+
+
+
+ {{ "typeLogin" | i18n }}
+
+
+
+ {{ "typeCard" | i18n }}
+
+
+
+ {{ "typeIdentity" | i18n }}
+
+
+
+ {{ "note" | i18n }}
+
+
+
+ {{ "typeSshKey" | i18n }}
+
+
+
+
+ {{ "folder" | i18n }}
+
+
+
+ {{ "collection" | i18n }}
+
+
diff --git a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts
index 75b39a2ca40..63af397e726 100644
--- a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts
@@ -9,13 +9,10 @@ import {
OnInit,
Output,
} from "@angular/core";
-import { firstValueFrom } from "rxjs";
import { Unassigned, CollectionView } from "@bitwarden/admin-console/common";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { CipherType } from "@bitwarden/common/vault/enums";
import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node";
@@ -50,7 +47,6 @@ export class VaultHeaderComponent implements OnInit {
protected All = All;
protected CollectionDialogTabType = CollectionDialogTabType;
protected CipherType = CipherType;
- protected extensionRefreshEnabled: boolean;
/**
* Boolean to determine the loading state of the header.
@@ -85,16 +81,9 @@ export class VaultHeaderComponent implements OnInit {
/** Emits an event when the delete collection button is clicked in the header */
@Output() onDeleteCollection = new EventEmitter();
- constructor(
- private i18nService: I18nService,
- private configService: ConfigService,
- ) {}
+ constructor(private i18nService: I18nService) {}
- async ngOnInit() {
- this.extensionRefreshEnabled = await firstValueFrom(
- this.configService.getFeatureFlag$(FeatureFlag.ExtensionRefresh),
- );
- }
+ async ngOnInit() {}
/**
* The id of the organization that is currently being filtered on.
diff --git a/apps/web/src/app/vault/individual-vault/vault-onboarding/services/abstraction/vault-onboarding.service.ts b/apps/web/src/app/vault/individual-vault/vault-onboarding/services/abstraction/vault-onboarding.service.ts
index 379c97672e7..7d3ff32c0f8 100644
--- a/apps/web/src/app/vault/individual-vault/vault-onboarding/services/abstraction/vault-onboarding.service.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-onboarding/services/abstraction/vault-onboarding.service.ts
@@ -1,10 +1,10 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
import { Observable } from "rxjs";
+import { UserId } from "@bitwarden/common/types/guid";
+
import { VaultOnboardingTasks } from "../vault-onboarding.service";
export abstract class VaultOnboardingService {
- vaultOnboardingState$: Observable;
- abstract setVaultOnboardingTasks(newState: VaultOnboardingTasks): Promise;
+ abstract setVaultOnboardingTasks(userId: UserId, newState: VaultOnboardingTasks): Promise;
+ abstract vaultOnboardingState$(userId: UserId): Observable;
}
diff --git a/apps/web/src/app/vault/individual-vault/vault-onboarding/services/vault-onboarding.service.ts b/apps/web/src/app/vault/individual-vault/vault-onboarding/services/vault-onboarding.service.ts
index 95cb568a840..e6f8b815484 100644
--- a/apps/web/src/app/vault/individual-vault/vault-onboarding/services/vault-onboarding.service.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-onboarding/services/vault-onboarding.service.ts
@@ -1,14 +1,13 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
import { Injectable } from "@angular/core";
import { Observable } from "rxjs";
import {
- ActiveUserState,
+ SingleUserState,
StateProvider,
UserKeyDefinition,
VAULT_ONBOARDING,
} from "@bitwarden/common/platform/state";
+import { UserId } from "@bitwarden/common/types/guid";
import { VaultOnboardingService as VaultOnboardingServiceAbstraction } from "./abstraction/vault-onboarding.service";
@@ -26,20 +25,20 @@ const VAULT_ONBOARDING_KEY = new UserKeyDefinition(
clearOn: [], // do not clear tutorials
},
);
-
@Injectable()
export class VaultOnboardingService implements VaultOnboardingServiceAbstraction {
- private vaultOnboardingState: ActiveUserState;
- vaultOnboardingState$: Observable;
+ constructor(private stateProvider: StateProvider) {}
- constructor(private stateProvider: StateProvider) {
- this.vaultOnboardingState = this.stateProvider.getActive(VAULT_ONBOARDING_KEY);
- this.vaultOnboardingState$ = this.vaultOnboardingState.state$;
+ private vaultOnboardingState(userId: UserId): SingleUserState {
+ return this.stateProvider.getUser(userId, VAULT_ONBOARDING_KEY);
}
- async setVaultOnboardingTasks(newState: VaultOnboardingTasks): Promise {
- await this.vaultOnboardingState.update(() => {
- return { ...newState };
- });
+ vaultOnboardingState$(userId: UserId): Observable {
+ return this.vaultOnboardingState(userId).state$;
+ }
+
+ async setVaultOnboardingTasks(userId: UserId, newState: VaultOnboardingTasks): Promise {
+ const state = this.vaultOnboardingState(userId);
+ await state.update(() => ({ ...newState }));
}
}
diff --git a/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.html b/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.html
index b9647e3237d..aa56daac071 100644
--- a/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.html
+++ b/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.html
@@ -22,12 +22,7 @@
{{ "onboardingImportDataDetailsPartOne" | i18n }}
- {{
- (extensionRefreshEnabled
- ? "onboardingImportDataDetailsLoginLink"
- : "onboardingImportDataDetailsLink"
- ) | i18n
- }}
+ {{ "onboardingImportDataDetailsLoginLink" | i18n }}
{{ "onboardingImportDataDetailsPartTwoNoOrgs" | i18n }}
diff --git a/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.spec.ts b/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.spec.ts
index e017bc9b35d..62abc0c0b34 100644
--- a/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.spec.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.spec.ts
@@ -7,10 +7,14 @@ import { Subject, of } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
+import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
+import { Utils } from "@bitwarden/common/platform/misc/utils";
import { StateProvider } from "@bitwarden/common/platform/state";
+import { FakeAccountService, mockAccountServiceWith } from "@bitwarden/common/spec";
+import { UserId } from "@bitwarden/common/types/guid";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
import { VaultOnboardingMessages } from "@bitwarden/common/vault/enums/vault-onboarding.enum";
@@ -25,10 +29,11 @@ describe("VaultOnboardingComponent", () => {
let mockPolicyService: MockProxy;
let mockI18nService: MockProxy;
let mockVaultOnboardingService: MockProxy;
- let mockStateProvider: Partial;
let setInstallExtLinkSpy: any;
let individualVaultPolicyCheckSpy: any;
let mockConfigService: MockProxy;
+ const mockAccountService: FakeAccountService = mockAccountServiceWith(Utils.newGuid() as UserId);
+ let mockStateProvider: Partial;
beforeEach(() => {
mockPolicyService = mock();
@@ -38,6 +43,7 @@ describe("VaultOnboardingComponent", () => {
getProfile: jest.fn(),
};
mockVaultOnboardingService = mock();
+ mockConfigService = mock();
mockStateProvider = {
getActive: jest.fn().mockReturnValue(
of({
@@ -47,7 +53,6 @@ describe("VaultOnboardingComponent", () => {
}),
),
};
- mockConfigService = mock();
// eslint-disable-next-line @typescript-eslint/no-floating-promises
TestBed.configureTestingModule({
@@ -59,8 +64,9 @@ describe("VaultOnboardingComponent", () => {
{ provide: VaultOnboardingServiceAbstraction, useValue: mockVaultOnboardingService },
{ provide: I18nService, useValue: mockI18nService },
{ provide: ApiService, useValue: mockApiService },
- { provide: StateProvider, useValue: mockStateProvider },
{ provide: ConfigService, useValue: mockConfigService },
+ { provide: AccountService, useValue: mockAccountService },
+ { provide: StateProvider, useValue: mockStateProvider },
],
}).compileComponents();
fixture = TestBed.createComponent(VaultOnboardingComponent);
@@ -71,11 +77,15 @@ describe("VaultOnboardingComponent", () => {
.mockReturnValue(undefined);
jest.spyOn(component, "checkCreationDate").mockReturnValue(null);
jest.spyOn(window, "postMessage").mockImplementation(jest.fn());
- (component as any).vaultOnboardingService.vaultOnboardingState$ = of({
- createAccount: true,
- importData: false,
- installExtension: false,
- });
+ (component as any).vaultOnboardingService.vaultOnboardingState$ = jest
+ .fn()
+ .mockImplementation(() => {
+ return of({
+ createAccount: true,
+ importData: false,
+ installExtension: false,
+ });
+ });
});
it("should create", () => {
@@ -169,12 +179,15 @@ describe("VaultOnboardingComponent", () => {
.spyOn((component as any).vaultOnboardingService, "setVaultOnboardingTasks")
.mockReturnValue(Promise.resolve());
- (component as any).vaultOnboardingService.vaultOnboardingState$ = of({
- createAccount: true,
- importData: false,
- installExtension: false,
- });
-
+ (component as any).vaultOnboardingService.vaultOnboardingState$ = jest
+ .fn()
+ .mockImplementation(() => {
+ return of({
+ createAccount: true,
+ importData: false,
+ installExtension: false,
+ });
+ });
const eventData = { data: { command: VaultOnboardingMessages.HasBwInstalled } };
(component as any).showOnboarding = true;
diff --git a/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.ts b/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.ts
index 3535d31852e..4b69e3977c6 100644
--- a/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.ts
+++ b/apps/web/src/app/vault/individual-vault/vault-onboarding/vault-onboarding.component.ts
@@ -18,9 +18,11 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { PolicyType } from "@bitwarden/common/admin-console/enums";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
+import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
+import { UserId } from "@bitwarden/common/types/guid";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
import { VaultOnboardingMessages } from "@bitwarden/common/vault/enums/vault-onboarding.enum";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
@@ -58,25 +60,25 @@ export class VaultOnboardingComponent implements OnInit, OnChanges, OnDestroy {
protected onboardingTasks$: Observable;
protected showOnboarding = false;
- protected extensionRefreshEnabled = false;
+ private activeId: UserId;
constructor(
protected platformUtilsService: PlatformUtilsService,
protected policyService: PolicyService,
private apiService: ApiService,
private vaultOnboardingService: VaultOnboardingServiceAbstraction,
private configService: ConfigService,
+ private accountService: AccountService,
) {}
async ngOnInit() {
- this.onboardingTasks$ = this.vaultOnboardingService.vaultOnboardingState$;
+ this.activeId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
+ this.onboardingTasks$ = this.vaultOnboardingService.vaultOnboardingState$(this.activeId);
+
await this.setOnboardingTasks();
this.setInstallExtLink();
this.individualVaultPolicyCheck();
this.checkForBrowserExtension();
- this.extensionRefreshEnabled = await this.configService.getFeatureFlag(
- FeatureFlag.ExtensionRefresh,
- );
}
async ngOnChanges(changes: SimpleChanges) {
@@ -87,7 +89,7 @@ export class VaultOnboardingComponent implements OnInit, OnChanges, OnDestroy {
importData: this.ciphers.length > 0,
installExtension: currentTasks.installExtension,
};
- await this.vaultOnboardingService.setVaultOnboardingTasks(updatedTasks);
+ await this.vaultOnboardingService.setVaultOnboardingTasks(this.activeId, updatedTasks);
}
}
@@ -116,7 +118,7 @@ export class VaultOnboardingComponent implements OnInit, OnChanges, OnDestroy {
importData: currentTasks.importData,
installExtension: true,
};
- await this.vaultOnboardingService.setVaultOnboardingTasks(updatedTasks);
+ await this.vaultOnboardingService.setVaultOnboardingTasks(this.activeId, updatedTasks);
}
}
@@ -159,7 +161,7 @@ export class VaultOnboardingComponent implements OnInit, OnChanges, OnDestroy {
private async saveCompletedTasks(vaultTasks: VaultOnboardingTasks) {
this.showOnboarding = Object.values(vaultTasks).includes(false);
- await this.vaultOnboardingService.setVaultOnboardingTasks(vaultTasks);
+ await this.vaultOnboardingService.setVaultOnboardingTasks(this.activeId, vaultTasks);
}
individualVaultPolicyCheck() {
diff --git a/apps/web/src/app/vault/individual-vault/vault.component.ts b/apps/web/src/app/vault/individual-vault/vault.component.ts
index 7215c980206..51c00ca18b8 100644
--- a/apps/web/src/app/vault/individual-vault/vault.component.ts
+++ b/apps/web/src/app/vault/individual-vault/vault.component.ts
@@ -1,15 +1,7 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { DialogRef } from "@angular/cdk/dialog";
-import {
- ChangeDetectorRef,
- Component,
- NgZone,
- OnDestroy,
- OnInit,
- ViewChild,
- ViewContainerRef,
-} from "@angular/core";
+import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core";
import { ActivatedRoute, Params, Router } from "@angular/router";
import {
BehaviorSubject,
@@ -42,7 +34,6 @@ import {
Unassigned,
} from "@bitwarden/admin-console/common";
import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe";
-import { ModalService } from "@bitwarden/angular/services/modal.service";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { SearchService } from "@bitwarden/common/abstractions/search.service";
@@ -53,13 +44,12 @@ import {
} from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { OrganizationBillingServiceAbstraction } from "@bitwarden/common/billing/abstractions";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billing-api.service.abstraction";
import { EventType } from "@bitwarden/common/enums";
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
@@ -71,12 +61,13 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
import { CipherType } from "@bitwarden/common/vault/enums";
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
-import { Cipher } from "@bitwarden/common/vault/models/domain/cipher";
import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { ServiceUtils } from "@bitwarden/common/vault/service-utils";
import { DialogService, Icons, ToastService } from "@bitwarden/components";
import {
+ AddEditFolderDialogComponent,
+ AddEditFolderDialogResult,
CipherFormConfig,
CollectionAssignmentResult,
DecryptionFailureDialogComponent,
@@ -103,13 +94,11 @@ import { VaultItemEvent } from "../components/vault-items/vault-item-event";
import { VaultItemsModule } from "../components/vault-items/vault-items.module";
import { getNestedCollectionTree } from "../utils/collection-utils";
-import { AddEditComponent } from "./add-edit.component";
import {
AttachmentDialogCloseResult,
AttachmentDialogResult,
AttachmentsV2Component,
} from "./attachments-v2.component";
-import { AttachmentsComponent } from "./attachments.component";
import {
BulkDeleteDialogResult,
openBulkDeleteDialog,
@@ -118,7 +107,6 @@ import {
BulkMoveDialogResult,
openBulkMoveDialog,
} from "./bulk-action-dialogs/bulk-move-dialog/bulk-move-dialog.component";
-import { FolderAddEditDialogResult, openFolderAddEditDialog } from "./folder-add-edit.component";
import { VaultBannersComponent } from "./vault-banners/vault-banners.component";
import { VaultFilterComponent } from "./vault-filter/components/vault-filter.component";
import { VaultFilterService } from "./vault-filter/services/abstractions/vault-filter.service";
@@ -159,15 +147,6 @@ const SearchTextDebounceInterval = 200;
})
export class VaultComponent implements OnInit, OnDestroy {
@ViewChild("vaultFilter", { static: true }) filterComponent: VaultFilterComponent;
- @ViewChild("attachments", { read: ViewContainerRef, static: true })
- attachmentsModalRef: ViewContainerRef;
- @ViewChild("folderAddEdit", { read: ViewContainerRef, static: true })
- folderAddEditModalRef: ViewContainerRef;
- @ViewChild("cipherAddEdit", { read: ViewContainerRef, static: true })
- cipherAddEditModalRef: ViewContainerRef;
- @ViewChild("share", { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;
- @ViewChild("collectionsModal", { read: ViewContainerRef, static: true })
- collectionsModalRef: ViewContainerRef;
trashCleanupWarning: string = null;
kdfIterations: number;
@@ -188,11 +167,9 @@ export class VaultComponent implements OnInit, OnDestroy {
protected selectedCollection: TreeNode | undefined;
protected canCreateCollections = false;
protected currentSearchText$: Observable;
- private activeUserId: UserId;
private searchText$ = new Subject();
private refresh$ = new BehaviorSubject(null);
private destroy$ = new Subject();
- private extensionRefreshEnabled: boolean;
private hasSubscription$ = new BehaviorSubject(false);
private vaultItemDialogRef?: DialogRef | undefined;
@@ -259,7 +236,6 @@ export class VaultComponent implements OnInit, OnDestroy {
private router: Router,
private changeDetectorRef: ChangeDetectorRef,
private i18nService: I18nService,
- private modalService: ModalService,
private dialogService: DialogService,
private messagingService: MessagingService,
private platformUtilsService: PlatformUtilsService,
@@ -277,7 +253,6 @@ export class VaultComponent implements OnInit, OnDestroy {
private eventCollectionService: EventCollectionService,
private searchService: SearchService,
private searchPipe: SearchPipe,
- private configService: ConfigService,
private apiService: ApiService,
private billingAccountProfileStateService: BillingAccountProfileStateService,
private toastService: ToastService,
@@ -296,9 +271,7 @@ export class VaultComponent implements OnInit, OnDestroy {
: "trashCleanupWarning",
);
- this.activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
const firstSetup$ = this.route.queryParams.pipe(
first(),
@@ -362,13 +335,15 @@ export class VaultComponent implements OnInit, OnDestroy {
this.currentSearchText$ = this.route.queryParams.pipe(map((queryParams) => queryParams.search));
const ciphers$ = combineLatest([
- this.cipherService.cipherViews$.pipe(filter((c) => c !== null)),
+ this.cipherService.cipherViews$(activeUserId).pipe(filter((c) => c !== null)),
filter$,
this.currentSearchText$,
]).pipe(
filter(([ciphers, filter]) => ciphers != undefined && filter != undefined),
concatMap(async ([ciphers, filter, searchText]) => {
- const failedCiphers = await firstValueFrom(this.cipherService.failedToDecryptCiphers$);
+ const failedCiphers = await firstValueFrom(
+ this.cipherService.failedToDecryptCiphers$(activeUserId),
+ );
const filterFunction = createFilterFunction(filter);
// Append any failed to decrypt ciphers to the top of the cipher list
const allCiphers = [...failedCiphers, ...ciphers];
@@ -436,15 +411,15 @@ export class VaultComponent implements OnInit, OnDestroy {
firstSetup$
.pipe(
switchMap(() => this.route.queryParams),
- // Only process the queryParams if the dialog is not open (only when extension refresh is enabled)
- filter(() => this.vaultItemDialogRef == undefined || !this.extensionRefreshEnabled),
+ // Only process the queryParams if the dialog is not open
+ filter(() => this.vaultItemDialogRef == undefined),
switchMap(async (params) => {
const cipherId = getCipherIdFromParams(params);
if (cipherId) {
- if (await this.cipherService.get(cipherId)) {
+ if (await this.cipherService.get(cipherId, activeUserId)) {
let action = params.action;
- // Default to "view" if extension refresh is enabled
- if (action == null && this.extensionRefreshEnabled) {
+ // Default to "view"
+ if (action == null) {
action = "view";
}
@@ -484,7 +459,7 @@ export class VaultComponent implements OnInit, OnDestroy {
firstSetup$
.pipe(
- switchMap(() => this.cipherService.failedToDecryptCiphers$),
+ switchMap(() => this.cipherService.failedToDecryptCiphers$(activeUserId)),
map((ciphers) => ciphers.filter((c) => !c.isDeleted)),
filter((ciphers) => ciphers.length > 0),
take(1),
@@ -505,7 +480,7 @@ export class VaultComponent implements OnInit, OnDestroy {
switchMap(() =>
combineLatest([
filter$,
- this.billingAccountProfileStateService.hasPremiumFromAnySource$(this.activeUserId),
+ this.billingAccountProfileStateService.hasPremiumFromAnySource$(activeUserId),
allCollections$,
this.organizations$,
ciphers$,
@@ -543,11 +518,6 @@ export class VaultComponent implements OnInit, OnDestroy {
this.refreshing = false;
},
);
-
- // Check if the extension refresh feature flag is enabled
- this.extensionRefreshEnabled = await this.configService.getFeatureFlag(
- FeatureFlag.ExtensionRefresh,
- );
}
ngOnDestroy() {
@@ -607,20 +577,24 @@ export class VaultComponent implements OnInit, OnDestroy {
await this.filterComponent.filters?.organizationFilter?.action(orgNode);
}
- addFolder = async (): Promise => {
- openFolderAddEditDialog(this.dialogService);
+ addFolder = (): void => {
+ AddEditFolderDialogComponent.open(this.dialogService);
};
editFolder = async (folder: FolderFilter): Promise => {
- const dialog = openFolderAddEditDialog(this.dialogService, {
- data: {
- folderId: folder.id,
+ const dialogRef = AddEditFolderDialogComponent.open(this.dialogService, {
+ editFolderConfig: {
+ // Shallow copy is used so the original folder object is not modified
+ folder: {
+ ...folder,
+ name: folder.fullName ?? folder.name, // If the filter has a fullName populated, use that as the editable name
+ },
},
});
- const result = await lastValueFrom(dialog.closed);
+ const result = await lastValueFrom(dialogRef.closed);
- if (result === FolderAddEditDialogResult.Deleted) {
+ if (result === AddEditFolderDialogResult.Deleted) {
await this.router.navigate([], {
queryParams: { folderId: null },
queryParamsHandling: "merge",
@@ -637,8 +611,7 @@ export class VaultComponent implements OnInit, OnDestroy {
* Handles opening the attachments dialog for a cipher.
* Runs several checks to ensure that the user has the correct permissions
* and then opens the attachments dialog.
- * Uses the new AttachmentsV2Component if the extensionRefresh feature flag is enabled.
- *
+ * Uses the new AttachmentsV2Component
* @param cipher
* @returns
*/
@@ -663,51 +636,20 @@ export class VaultComponent implements OnInit, OnDestroy {
}
}
- const canEditAttachments = await this.canEditAttachments(cipher);
+ const dialogRef = AttachmentsV2Component.open(this.dialogService, {
+ cipherId: cipher.id as CipherId,
+ });
- let madeAttachmentChanges = false;
+ const result: AttachmentDialogCloseResult = await lastValueFrom(dialogRef.closed);
- if (this.extensionRefreshEnabled) {
- const dialogRef = AttachmentsV2Component.open(this.dialogService, {
- cipherId: cipher.id as CipherId,
- });
-
- const result: AttachmentDialogCloseResult = await lastValueFrom(dialogRef.closed);
-
- if (
- result.action === AttachmentDialogResult.Uploaded ||
- result.action === AttachmentDialogResult.Removed
- ) {
- this.refresh();
- }
-
- return;
+ if (
+ result.action === AttachmentDialogResult.Uploaded ||
+ result.action === AttachmentDialogResult.Removed
+ ) {
+ this.refresh();
}
- const [modal] = await this.modalService.openViewRef(
- AttachmentsComponent,
- this.attachmentsModalRef,
- (comp) => {
- comp.cipherId = cipher.id;
- comp.viewOnly = !canEditAttachments;
- comp.onUploadedAttachment
- .pipe(takeUntil(this.destroy$))
- .subscribe(() => (madeAttachmentChanges = true));
- comp.onDeletedAttachment
- .pipe(takeUntil(this.destroy$))
- .subscribe(() => (madeAttachmentChanges = true));
- comp.onReuploadedAttachment
- .pipe(takeUntil(this.destroy$))
- .subscribe(() => (madeAttachmentChanges = true));
- },
- );
-
- modal.onClosed.pipe(takeUntil(this.destroy$)).subscribe(() => {
- if (madeAttachmentChanges) {
- this.refresh();
- }
- madeAttachmentChanges = false;
- });
+ return;
}
/**
@@ -746,48 +688,13 @@ export class VaultComponent implements OnInit, OnDestroy {
await this.go({ cipherId: null, itemId: null, action: null });
}
- async addCipher(cipherType?: CipherType) {
- const type = cipherType ?? this.activeFilter.cipherType;
-
- if (this.extensionRefreshEnabled) {
- return this.addCipherV2(type);
- }
-
- const component = (await this.editCipher(null)) as AddEditComponent;
- component.type = type;
- if (
- this.activeFilter.organizationId !== "MyVault" &&
- this.activeFilter.organizationId != null
- ) {
- component.organizationId = this.activeFilter.organizationId;
- component.collections = (
- await firstValueFrom(this.vaultFilterService.filteredCollections$)
- ).filter((c) => !c.readOnly && c.id != null);
- }
- const selectedColId = this.activeFilter.collectionId;
- if (selectedColId !== "AllCollections" && selectedColId != null) {
- const selectedCollection = (
- await firstValueFrom(this.vaultFilterService.filteredCollections$)
- ).find((c) => c.id === selectedColId);
- component.organizationId = selectedCollection?.organizationId;
- if (!selectedCollection.readOnly) {
- component.collectionIds = [selectedColId];
- }
- }
- component.folderId = this.activeFilter.folderId;
- }
-
/**
* Opens the add cipher dialog.
* @param cipherType The type of cipher to add.
- * @returns The dialog reference.
*/
- async addCipherV2(cipherType?: CipherType) {
- const cipherFormConfig = await this.cipherFormConfigService.buildConfig(
- "add",
- null,
- cipherType,
- );
+ async addCipher(cipherType?: CipherType) {
+ const type = cipherType ?? this.activeFilter.cipherType;
+ const cipherFormConfig = await this.cipherFormConfigService.buildConfig("add", null, type);
const collectionId =
this.activeFilter.collectionId !== "AllCollections" && this.activeFilter.collectionId != null
? this.activeFilter.collectionId
@@ -818,8 +725,15 @@ export class VaultComponent implements OnInit, OnDestroy {
return this.editCipherId(cipher?.id, cloneMode);
}
+ /**
+ * Edit a cipher using the new VaultItemDialog.
+ * @param id
+ * @param cloneMode
+ * @returns
+ */
async editCipherId(id: string, cloneMode?: boolean) {
- const cipher = await this.cipherService.get(id);
+ const activeUserId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
+ const cipher = await this.cipherService.get(id, activeUserId);
if (
cipher &&
@@ -831,49 +745,6 @@ export class VaultComponent implements OnInit, OnDestroy {
return;
}
- if (this.extensionRefreshEnabled) {
- await this.editCipherIdV2(cipher, cloneMode);
- return;
- }
-
- const [modal, childComponent] = await this.modalService.openViewRef(
- AddEditComponent,
- this.cipherAddEditModalRef,
- (comp) => {
- comp.cipherId = id;
- comp.collectionId = this.selectedCollection?.node.id;
-
- comp.onSavedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {
- modal.close();
- this.refresh();
- });
- comp.onDeletedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {
- modal.close();
- this.refresh();
- });
- comp.onRestoredCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {
- modal.close();
- this.refresh();
- });
- },
- );
-
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- modal.onClosedPromise().then(() => {
- void this.go({ cipherId: null, itemId: null, action: null });
- });
-
- return childComponent;
- }
-
- /**
- * Edit a cipher using the new VaultItemDialog.
- *
- * @param cipher
- * @param cloneMode
- */
- private async editCipherIdV2(cipher: Cipher, cloneMode?: boolean) {
const cipherFormConfig = await this.cipherFormConfigService.buildConfig(
cloneMode ? "clone" : "edit",
cipher.id as CipherId,
@@ -898,7 +769,8 @@ export class VaultComponent implements OnInit, OnDestroy {
* @returns Promise
*/
async viewCipherById(id: string) {
- const cipher = await this.cipherService.get(id);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ const cipher = await this.cipherService.get(id, activeUserId);
// If cipher exists (cipher is null when new) and MP reprompt
// is on for this cipher, then show password reprompt.
if (
@@ -1071,11 +943,7 @@ export class VaultComponent implements OnInit, OnDestroy {
}
}
- const component = await this.editCipher(cipher, true);
-
- if (component != null) {
- component.cloneMode = true;
- }
+ await this.editCipher(cipher, true);
}
restore = async (c: CipherView): Promise => {
@@ -1093,7 +961,8 @@ export class VaultComponent implements OnInit, OnDestroy {
}
try {
- await this.cipherService.restoreWithServer(c.id);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.cipherService.restoreWithServer(c.id, activeUserId);
this.toastService.showToast({
variant: "success",
title: null,
@@ -1175,7 +1044,8 @@ export class VaultComponent implements OnInit, OnDestroy {
}
try {
- await this.deleteCipherWithServer(c.id, permanent);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.deleteCipherWithServer(c.id, activeUserId, permanent);
this.toastService.showToast({
variant: "success",
@@ -1310,10 +1180,10 @@ export class VaultComponent implements OnInit, OnDestroy {
}
}
- protected deleteCipherWithServer(id: string, permanent: boolean) {
+ protected deleteCipherWithServer(id: string, userId: UserId, permanent: boolean) {
return permanent
- ? this.cipherService.deleteWithServer(id)
- : this.cipherService.softDeleteWithServer(id);
+ ? this.cipherService.deleteWithServer(id, userId)
+ : this.cipherService.softDeleteWithServer(id, userId);
}
protected async repromptCipher(ciphers: CipherView[]) {
@@ -1326,15 +1196,6 @@ export class VaultComponent implements OnInit, OnDestroy {
this.refresh$.next();
}
- private async canEditAttachments(cipher: CipherView) {
- if (cipher.organizationId == null || cipher.edit) {
- return true;
- }
-
- const organization = this.allOrganizations.find((o) => o.id === cipher.organizationId);
- return organization.canEditAllCiphers;
- }
-
private async go(queryParams: any = null) {
if (queryParams == null) {
queryParams = {
diff --git a/apps/web/src/app/vault/individual-vault/view.component.ts b/apps/web/src/app/vault/individual-vault/view.component.ts
index 9aa92f3995c..baae6f28bf1 100644
--- a/apps/web/src/app/vault/individual-vault/view.component.ts
+++ b/apps/web/src/app/vault/individual-vault/view.component.ts
@@ -15,6 +15,7 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service"
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { CollectionId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
+import { PremiumUpgradePromptService } from "@bitwarden/common/vault/abstractions/premium-upgrade-prompt.service";
import { ViewPasswordHistoryService } from "@bitwarden/common/vault/abstractions/view-password-history.service";
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
@@ -25,13 +26,8 @@ import {
DialogService,
ToastService,
} from "@bitwarden/components";
+import { CipherViewComponent } from "@bitwarden/vault";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { PremiumUpgradePromptService } from "../../../../../../libs/common/src/vault/abstractions/premium-upgrade-prompt.service";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { CipherViewComponent } from "../../../../../../libs/vault/src/cipher-view/cipher-view.component";
import { SharedModule } from "../../shared/shared.module";
import { WebVaultPremiumUpgradePromptService } from "../services/web-premium-upgrade-prompt.service";
import { WebViewPasswordHistoryService } from "../services/web-view-password-history.service";
@@ -169,10 +165,11 @@ export class ViewComponent implements OnInit {
*/
protected async deleteCipher(): Promise {
const asAdmin = this.organization?.canEditAllCiphers;
+ const userId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
if (this.cipher.isDeleted) {
- await this.cipherService.deleteWithServer(this.cipher.id, asAdmin);
+ await this.cipherService.deleteWithServer(this.cipher.id, userId, asAdmin);
} else {
- await this.cipherService.softDeleteWithServer(this.cipher.id, asAdmin);
+ await this.cipherService.softDeleteWithServer(this.cipher.id, userId, asAdmin);
}
}
diff --git a/apps/web/src/app/vault/org-vault/add-edit.component.ts b/apps/web/src/app/vault/org-vault/add-edit.component.ts
index 75042a63e91..8490ec6c9db 100644
--- a/apps/web/src/app/vault/org-vault/add-edit.component.ts
+++ b/apps/web/src/app/vault/org-vault/add-edit.component.ts
@@ -2,6 +2,7 @@
// @ts-strict-ignore
import { DatePipe } from "@angular/common";
import { Component } from "@angular/core";
+import { firstValueFrom } from "rxjs";
import { CollectionService } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
@@ -10,6 +11,7 @@ import { EventCollectionService } from "@bitwarden/common/abstractions/event/eve
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
@@ -98,8 +100,9 @@ export class AddEditComponent extends BaseAddEditComponent {
protected async loadCipher() {
this.isAdminConsoleAction = true;
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
// Calling loadCipher first to assess if the cipher is unassigned. If null use apiService getCipherAdmin
- const firstCipherCheck = await super.loadCipher();
+ const firstCipherCheck = await super.loadCipher(activeUserId);
if (!this.organization.canEditAllCiphers && firstCipherCheck != null) {
return firstCipherCheck;
@@ -123,7 +126,8 @@ export class AddEditComponent extends BaseAddEditComponent {
protected async deleteCipher() {
if (!this.organization.canEditAllCiphers) {
- return super.deleteCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ return super.deleteCipher(activeUserId);
}
return this.cipher.isDeleted
? this.apiService.deleteCipherAdmin(this.cipherId)
diff --git a/apps/web/src/app/vault/org-vault/attachments.component.ts b/apps/web/src/app/vault/org-vault/attachments.component.ts
index c8badffb36f..c2ad82bc27a 100644
--- a/apps/web/src/app/vault/org-vault/attachments.component.ts
+++ b/apps/web/src/app/vault/org-vault/attachments.component.ts
@@ -1,12 +1,14 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Component, OnInit } from "@angular/core";
+import { firstValueFrom } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
@@ -74,7 +76,8 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On
protected async loadCipher() {
if (!this.organization.canEditAllCiphers) {
- return await super.loadCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ return await super.loadCipher(activeUserId);
}
const response = await this.apiService.getCipherAdmin(this.cipherId);
return new Cipher(new CipherData(response));
@@ -89,9 +92,9 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On
);
}
- protected deleteCipherAttachment(attachmentId: string) {
+ protected deleteCipherAttachment(attachmentId: string, userId: UserId) {
if (!this.organization.canEditAllCiphers) {
- return super.deleteCipherAttachment(attachmentId);
+ return super.deleteCipherAttachment(attachmentId, userId);
}
return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);
}
diff --git a/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.spec.ts b/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.spec.ts
index d10f83fd42b..9ee13bf077a 100644
--- a/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.spec.ts
+++ b/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.spec.ts
@@ -8,12 +8,10 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli
import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
-import { CipherId } from "@bitwarden/common/types/guid";
+import { mockAccountServiceWith } from "@bitwarden/common/spec";
+import { CipherId, UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { Account } from "../../../../../../../libs/importer/src/importers/lastpass/access/models";
import { RoutedVaultFilterService } from "../../individual-vault/vault-filter/services/routed-vault-filter.service";
import { AdminConsoleCipherFormConfigService } from "./admin-console-cipher-form-config.service";
@@ -29,6 +27,7 @@ describe("AdminConsoleCipherFormConfigService", () => {
isMember: true,
enabled: true,
status: OrganizationUserStatusType.Confirmed,
+ userId: "UserId",
};
const testOrg2 = {
id: "333-999-888",
@@ -37,6 +36,7 @@ describe("AdminConsoleCipherFormConfigService", () => {
isMember: true,
enabled: true,
status: OrganizationUserStatusType.Confirmed,
+ userId: "UserId",
};
const policyAppliesToActiveUser$ = new BehaviorSubject(true);
const collection = {
@@ -83,10 +83,7 @@ describe("AdminConsoleCipherFormConfigService", () => {
},
{ provide: ApiService, useValue: { getCipherAdmin } },
{ provide: CipherService, useValue: { get: getCipher } },
- {
- provide: AccountService,
- useValue: { activeAccount$: new BehaviorSubject(new Account()) },
- },
+ { provide: AccountService, useValue: mockAccountServiceWith("UserId" as UserId) },
],
});
adminConsoleConfigService = TestBed.inject(AdminConsoleCipherFormConfigService);
@@ -203,7 +200,7 @@ describe("AdminConsoleCipherFormConfigService", () => {
await adminConsoleConfigService.buildConfig("edit", cipherId);
expect(getCipherAdmin).not.toHaveBeenCalled();
- expect(getCipher).toHaveBeenCalledWith(cipherId);
+ expect(getCipher).toHaveBeenCalledWith(cipherId, "UserId");
});
});
});
diff --git a/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.ts b/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.ts
index 348037fdbea..19259ba4033 100644
--- a/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.ts
+++ b/apps/web/src/app/vault/org-vault/services/admin-console-cipher-form-config.service.ts
@@ -10,19 +10,13 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli
import { OrganizationUserStatusType, PolicyType } from "@bitwarden/common/admin-console/enums";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
-import { CipherId } from "@bitwarden/common/types/guid";
+import { CipherId, UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CipherType } from "@bitwarden/common/vault/enums";
import { CipherData } from "@bitwarden/common/vault/models/data/cipher.data";
import { Cipher } from "@bitwarden/common/vault/models/domain/cipher";
+import { CipherFormConfig, CipherFormConfigService, CipherFormMode } from "@bitwarden/vault";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import {
- CipherFormConfig,
- CipherFormConfigService,
- CipherFormMode,
-} from "../../../../../../../libs/vault/src/cipher-form/abstractions/cipher-form-config.service";
import { RoutedVaultFilterService } from "../../individual-vault/vault-filter/services/routed-vault-filter.service";
/** Admin Console implementation of the `CipherFormConfigService`. */
@@ -106,7 +100,7 @@ export class AdminConsoleCipherFormConfigService implements CipherFormConfigServ
return null;
}
- const localCipher = await this.cipherService.get(id);
+ const localCipher = await this.cipherService.get(id, organization.userId as UserId);
// Fetch from the API because we don't need the permissions in local state OR the cipher was not found (e.g. unassigned)
if (organization.canEditAllCiphers || localCipher == null) {
diff --git a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.html b/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.html
index 8178e3b2935..2c1e0077ac3 100644
--- a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.html
+++ b/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.html
@@ -104,8 +104,8 @@
*ngIf="filter.type !== 'trash' && filter.collectionId !== Unassigned && organization"
class="tw-shrink-0"
>
-
-
+
+
-
-
- {{ "typeLogin" | i18n }}
-
-
-
- {{ "typeCard" | i18n }}
-
-
-
- {{ "typeIdentity" | i18n }}
-
-
-
- {{ "note" | i18n }}
-
+
+
+
+ {{ "typeLogin" | i18n }}
+
+
+
+ {{ "typeCard" | i18n }}
+
+
+
+ {{ "typeIdentity" | i18n }}
+
+
+
+ {{ "note" | i18n }}
+
+
-
+
{{ "collection" | i18n }}
@@ -145,56 +147,5 @@
-
-
-
-
-
-
- {{ "new" | i18n }}
-
-
-
-
- {{ "item" | i18n }}
-
-
-
- {{ "collection" | i18n }}
-
-
-
-
-
-
-
- {{ "newItem" | i18n }}
-
-
-
-
-
- {{ "newCollection" | i18n }}
-
-
diff --git a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts b/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts
index 7f118a48db3..e3c99231a86 100644
--- a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts
+++ b/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts
@@ -13,7 +13,6 @@ import {
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { ProductTierType } from "@bitwarden/common/billing/enums";
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { CipherType } from "@bitwarden/common/vault/enums";
@@ -90,11 +89,6 @@ export class VaultHeaderComponent implements OnInit {
protected CollectionDialogTabType = CollectionDialogTabType;
- /**
- * Whether the extension refresh feature flag is enabled.
- */
- protected extensionRefreshEnabled = false;
-
/** The cipher type enum. */
protected CipherType = CipherType;
@@ -106,11 +100,7 @@ export class VaultHeaderComponent implements OnInit {
private configService: ConfigService,
) {}
- async ngOnInit() {
- this.extensionRefreshEnabled = await this.configService.getFeatureFlag(
- FeatureFlag.ExtensionRefresh,
- );
- }
+ async ngOnInit() {}
get title() {
const headerType = this.i18nService.t("collections").toLowerCase();
diff --git a/apps/web/src/app/vault/org-vault/vault.component.ts b/apps/web/src/app/vault/org-vault/vault.component.ts
index fe76f9842e9..f14a8fcf5ee 100644
--- a/apps/web/src/app/vault/org-vault/vault.component.ts
+++ b/apps/web/src/app/vault/org-vault/vault.component.ts
@@ -1,15 +1,7 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { DialogRef } from "@angular/cdk/dialog";
-import {
- ChangeDetectorRef,
- Component,
- NgZone,
- OnDestroy,
- OnInit,
- ViewChild,
- ViewContainerRef,
-} from "@angular/core";
+import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit } from "@angular/core";
import { ActivatedRoute, Params, Router } from "@angular/router";
import {
BehaviorSubject,
@@ -37,12 +29,10 @@ import {
import {
CollectionAdminService,
CollectionAdminView,
- CollectionService,
CollectionView,
Unassigned,
} from "@bitwarden/admin-console/common";
import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe";
-import { ModalService } from "@bitwarden/angular/services/modal.service";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { SearchService } from "@bitwarden/common/abstractions/search.service";
@@ -50,6 +40,7 @@ import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-conso
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { OrganizationBillingServiceAbstraction } from "@bitwarden/common/billing/abstractions";
import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billing-api.service.abstraction";
import { EventType } from "@bitwarden/common/enums";
@@ -62,7 +53,7 @@ import { MessagingService } from "@bitwarden/common/platform/abstractions/messag
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { SyncService } from "@bitwarden/common/platform/sync";
-import { CipherId, CollectionId, OrganizationId } from "@bitwarden/common/types/guid";
+import { CipherId, CollectionId, OrganizationId, UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
import { CipherType } from "@bitwarden/common/vault/enums";
@@ -127,7 +118,6 @@ import {
import { VaultHeaderComponent } from "../org-vault/vault-header/vault-header.component";
import { getNestedCollectionTree } from "../utils/collection-utils";
-import { AddEditComponent } from "./add-edit.component";
import {
BulkCollectionsDialogComponent,
BulkCollectionsDialogResult,
@@ -166,13 +156,6 @@ enum AddAccessStatusType {
export class VaultComponent implements OnInit, OnDestroy {
protected Unassigned = Unassigned;
- @ViewChild("attachments", { read: ViewContainerRef, static: true })
- attachmentsModalRef: ViewContainerRef;
- @ViewChild("cipherAddEdit", { read: ViewContainerRef, static: true })
- cipherAddEditModalRef: ViewContainerRef;
- @ViewChild("collectionsModal", { read: ViewContainerRef, static: true })
- collectionsModalRef: ViewContainerRef;
-
trashCleanupWarning: string = null;
activeFilter: VaultFilter = new VaultFilter();
@@ -210,7 +193,6 @@ export class VaultComponent implements OnInit, OnDestroy {
private refresh$ = new BehaviorSubject(null);
private destroy$ = new Subject();
protected addAccessStatus$ = new BehaviorSubject(0);
- private extensionRefreshEnabled: boolean;
private resellerManagedOrgAlert: boolean;
private vaultItemDialogRef?: DialogRef | undefined;
@@ -249,7 +231,6 @@ export class VaultComponent implements OnInit, OnDestroy {
private changeDetectorRef: ChangeDetectorRef,
private syncService: SyncService,
private i18nService: I18nService,
- private modalService: ModalService,
private dialogService: DialogService,
private messagingService: MessagingService,
private broadcasterService: BroadcasterService,
@@ -265,7 +246,6 @@ export class VaultComponent implements OnInit, OnDestroy {
private eventCollectionService: EventCollectionService,
private totpService: TotpService,
private apiService: ApiService,
- private collectionService: CollectionService,
private toastService: ToastService,
private configService: ConfigService,
private cipherFormConfigService: CipherFormConfigService,
@@ -278,10 +258,6 @@ export class VaultComponent implements OnInit, OnDestroy {
) {}
async ngOnInit() {
- this.extensionRefreshEnabled = await this.configService.getFeatureFlag(
- FeatureFlag.ExtensionRefresh,
- );
-
this.resellerManagedOrgAlert = await this.configService.getFeatureFlag(
FeatureFlag.ResellerManagedOrgAlert,
);
@@ -555,7 +531,7 @@ export class VaultComponent implements OnInit, OnDestroy {
firstSetup$
.pipe(
switchMap(() => combineLatest([this.route.queryParams, allCipherMap$])),
- filter(() => this.vaultItemDialogRef == undefined || !this.extensionRefreshEnabled),
+ filter(() => this.vaultItemDialogRef == undefined),
switchMap(async ([qParams, allCiphersMap]) => {
const cipherId = getCipherIdFromParams(qParams);
@@ -586,15 +562,15 @@ export class VaultComponent implements OnInit, OnDestroy {
return;
}
- // Default to "view" if extension refresh is enabled
- if (action == null && this.extensionRefreshEnabled) {
+ // Default to "view"
+ if (action == null) {
action = "view";
}
if (action === "view") {
await this.viewCipherById(cipher);
} else {
- await this.editCipherId(cipher, false);
+ await this.editCipher(cipher, false);
}
} else {
this.toastService.showToast({
@@ -836,27 +812,8 @@ export class VaultComponent implements OnInit, OnDestroy {
}
}
+ /** Opens the Add/Edit Dialog */
async addCipher(cipherType?: CipherType) {
- if (this.extensionRefreshEnabled) {
- return this.addCipherV2(cipherType);
- }
-
- let collections: CollectionView[] = [];
-
- // Admins limited to only adding items to collections they have access to.
- collections = await firstValueFrom(this.editableCollections$);
-
- await this.editCipher(null, false, (comp) => {
- comp.type = cipherType || this.activeFilter.cipherType;
- comp.collections = collections;
- if (this.activeFilter.collectionId) {
- comp.collectionIds = [this.activeFilter.collectionId];
- }
- });
- }
-
- /** Opens the Add/Edit Dialog. Only to be used when the BrowserExtension feature flag is active */
- async addCipherV2(cipherType?: CipherType) {
const cipherFormConfig = await this.cipherFormConfigService.buildConfig(
"add",
null,
@@ -877,24 +834,8 @@ export class VaultComponent implements OnInit, OnDestroy {
* Edit the given cipher or add a new cipher
* @param cipherView - When set, the cipher to be edited
* @param cloneCipher - `true` when the cipher should be cloned.
- * Used in place of the `additionalComponentParameters`, as
- * the `editCipherIdV2` method has a differing implementation.
- * @param defaultComponentParameters - A method that takes in an instance of
- * the `AddEditComponent` to edit methods directly.
*/
- async editCipher(
- cipher: CipherView | null,
- cloneCipher: boolean,
- additionalComponentParameters?: (comp: AddEditComponent) => void,
- ) {
- return this.editCipherId(cipher, cloneCipher, additionalComponentParameters);
- }
-
- async editCipherId(
- cipher: CipherView | null,
- cloneCipher: boolean,
- additionalComponentParameters?: (comp: AddEditComponent) => void,
- ) {
+ async editCipher(cipher: CipherView | null, cloneCipher: boolean) {
if (
cipher &&
cipher.reprompt !== 0 &&
@@ -905,55 +846,6 @@ export class VaultComponent implements OnInit, OnDestroy {
return;
}
- if (this.extensionRefreshEnabled) {
- await this.editCipherIdV2(cipher, cloneCipher);
- return;
- }
-
- const defaultComponentParameters = (comp: AddEditComponent) => {
- comp.organization = this.organization;
- comp.organizationId = this.organization.id;
- comp.cipherId = cipher?.id;
- comp.collectionId = this.activeFilter.collectionId;
- comp.onSavedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {
- modal.close();
- this.refresh();
- });
- comp.onDeletedCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {
- modal.close();
- this.refresh();
- });
- comp.onRestoredCipher.pipe(takeUntil(this.destroy$)).subscribe(() => {
- modal.close();
- this.refresh();
- });
- };
-
- const [modal, childComponent] = await this.modalService.openViewRef(
- AddEditComponent,
- this.cipherAddEditModalRef,
- additionalComponentParameters == null
- ? defaultComponentParameters
- : (comp) => {
- defaultComponentParameters(comp);
- additionalComponentParameters(comp);
- },
- );
-
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- modal.onClosedPromise().then(() => {
- this.go({ cipherId: null, itemId: null, action: null });
- });
-
- return childComponent;
- }
-
- /**
- * Edit a cipher using the new AddEditCipherDialogV2 component.
- * Only to be used behind the ExtensionRefresh feature flag.
- */
- private async editCipherIdV2(cipher: CipherView | null, cloneCipher: boolean) {
const cipherFormConfig = await this.cipherFormConfigService.buildConfig(
cloneCipher ? "clone" : "edit",
cipher?.id as CipherId | null,
@@ -1038,16 +930,7 @@ export class VaultComponent implements OnInit, OnDestroy {
}
}
- let collections: CollectionView[] = [];
-
- // Admins limited to only adding items to collections they have access to.
- collections = await firstValueFrom(this.editableCollections$);
-
- await this.editCipher(cipher, true, (comp) => {
- comp.cloneMode = true;
- comp.collections = collections;
- comp.collectionIds = cipher.collectionIds;
- });
+ await this.editCipher(cipher, true);
}
restore = async (c: CipherView): Promise => {
@@ -1070,8 +953,9 @@ export class VaultComponent implements OnInit, OnDestroy {
// Allow restore of an Unassigned Item
try {
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
const asAdmin = this.organization?.canEditAnyCollection || c.isUnassigned;
- await this.cipherService.restoreWithServer(c.id, asAdmin);
+ await this.cipherService.restoreWithServer(c.id, activeUserId, asAdmin);
this.toastService.showToast({
variant: "success",
title: null,
@@ -1162,7 +1046,8 @@ export class VaultComponent implements OnInit, OnDestroy {
}
try {
- await this.deleteCipherWithServer(c.id, permanent, c.isUnassigned);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.deleteCipherWithServer(c.id, activeUserId, permanent, c.isUnassigned);
this.toastService.showToast({
variant: "success",
title: null,
@@ -1450,11 +1335,16 @@ export class VaultComponent implements OnInit, OnDestroy {
});
}
- protected deleteCipherWithServer(id: string, permanent: boolean, isUnassigned: boolean) {
+ protected deleteCipherWithServer(
+ id: string,
+ userId: UserId,
+ permanent: boolean,
+ isUnassigned: boolean,
+ ) {
const asAdmin = this.organization?.canEditAllCiphers || isUnassigned;
return permanent
- ? this.cipherService.deleteWithServer(id, asAdmin)
- : this.cipherService.softDeleteWithServer(id, asAdmin);
+ ? this.cipherService.deleteWithServer(id, userId, asAdmin)
+ : this.cipherService.softDeleteWithServer(id, userId, asAdmin);
}
protected async repromptCipher(ciphers: CipherView[]) {
diff --git a/apps/web/src/app/vault/services/web-view-password-history.service.ts b/apps/web/src/app/vault/services/web-view-password-history.service.ts
index 728a3b7e245..b1451b268de 100644
--- a/apps/web/src/app/vault/services/web-view-password-history.service.ts
+++ b/apps/web/src/app/vault/services/web-view-password-history.service.ts
@@ -1,11 +1,9 @@
import { Injectable } from "@angular/core";
+import { ViewPasswordHistoryService } from "@bitwarden/common/vault/abstractions/view-password-history.service";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { DialogService } from "@bitwarden/components";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { ViewPasswordHistoryService } from "../../../../../../libs/common/src/vault/abstractions/view-password-history.service";
import { openPasswordHistoryDialog } from "../individual-vault/password-history.component";
/**
diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json
index 41f173c5854..6addd540801 100644
--- a/apps/web/src/locales/af/messages.json
+++ b/apps/web/src/locales/af/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Wysig vouer"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Basisdomein",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "bv.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Dien in"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "’n Kennisgewing is na u toestel gestuur."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Weergawe $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Hergenereer wagwoord"
- },
"length": {
"message": "Lengte"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Gevaarsone"
},
- "dangerZoneDesc": {
- "message": "Versigtig, hierdie aksies is onomkeerbaar!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Bestuur"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Deaktiveer"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "U herstelkode vir Bitwarden-tweestapaantekening"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Stel minimum vereistes vir opstelling van wagwoordgenereerder."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Een of meer organisasiebeleide beïnvloed u genereerderinstellings."
- },
"masterPasswordPolicyInEffect": {
"message": "Een of meer organisasiebeleide stel die volgende eise aan u hoofwagwoord:"
},
@@ -6666,15 +6717,6 @@
"message": "Genereerder",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Wat wil u genereer?"
- },
- "passwordType": {
- "message": "Wagwoordtipe"
- },
- "regenerateUsername": {
- "message": "Hergenereer gebruikersnaam"
- },
"generateUsername": {
"message": "Genereer gebruikersnaam"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Gebruikersnaamtipe"
- },
"plusAddressedEmail": {
"message": "E-posadres met plus",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Gebruik u domein se opgestelde allesomvattende inmandjie."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Lukraak",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Gasheernaam",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API-toegangsteken"
- },
"deviceVerification": {
"message": "Toestelbevestiging"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Geen versameling"
},
- "canView": {
- "message": "Kan bekyk"
- },
- "canViewExceptPass": {
- "message": "Kan bekyk, behalwe wagwoorde"
- },
- "canEdit": {
- "message": "Kan wysig"
- },
- "canEditExceptPass": {
- "message": "Kan wysig behalwe wagwoorde"
- },
"noCollectionsAdded": {
"message": "Geen versamelings toegevoeg"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json
index e2c95934b58..7cd5b2eef01 100644
--- a/apps/web/src/locales/ar/messages.json
+++ b/apps/web/src/locales/ar/messages.json
@@ -1,6 +1,6 @@
{
"allApplications": {
- "message": "All applications"
+ "message": "كل التطبيقات"
},
"criticalApplications": {
"message": "Critical applications"
@@ -96,19 +96,19 @@
"message": "Apps marked as critical"
},
"application": {
- "message": "Application"
+ "message": "تطبيق"
},
"atRiskPasswords": {
"message": "At-risk passwords"
},
"requestPasswordChange": {
- "message": "Request password change"
+ "message": "طلب تغيير كلمة المرور"
},
"totalPasswords": {
"message": "Total passwords"
},
"searchApps": {
- "message": "Search applications"
+ "message": "البحث في التطبيقات"
},
"atRiskMembers": {
"message": "At-risk members"
@@ -147,7 +147,7 @@
}
},
"totalMembers": {
- "message": "Total members"
+ "message": "إجمالي الأعضاء"
},
"atRiskApplications": {
"message": "At-risk applications"
@@ -199,7 +199,7 @@
"message": "ملاحظات"
},
"note": {
- "message": "Note"
+ "message": "ملاحظة"
},
"customFields": {
"message": "حقول مخصصة"
@@ -208,19 +208,19 @@
"message": "اسم حامل البطاقة"
},
"loginCredentials": {
- "message": "Login credentials"
+ "message": "معلومات الدخول"
},
"personalDetails": {
- "message": "Personal details"
+ "message": "البيانات الشخصية"
},
"identification": {
- "message": "Identification"
+ "message": "التعريف"
},
"contactInfo": {
- "message": "Contact info"
+ "message": "معلومات الاتصال"
},
"cardDetails": {
- "message": "Card details"
+ "message": "بيانات البطاقة"
},
"cardBrandDetails": {
"message": "$BRAND$ details",
@@ -232,13 +232,13 @@
}
},
"itemHistory": {
- "message": "Item history"
+ "message": "تاريخ العنصر"
},
"authenticatorKey": {
- "message": "Authenticator key"
+ "message": "مفتاح المصادقة"
},
"autofillOptions": {
- "message": "Autofill options"
+ "message": "خيارات الملء التلقائي"
},
"websiteUri": {
"message": "Website (URI)"
@@ -432,17 +432,17 @@
"message": "قيمة منطقية"
},
"cfTypeCheckbox": {
- "message": "Checkbox"
+ "message": "مربع اختيار"
},
"cfTypeLinked": {
"message": "مرتبط",
"description": "This describes a field that is 'linked' (related) to another field."
},
"fieldType": {
- "message": "Field type"
+ "message": "نوع الحقل"
},
"fieldLabel": {
- "message": "Field label"
+ "message": "اسم الحقل"
},
"remove": {
"message": "إزالة"
@@ -455,7 +455,7 @@
"description": "This is the folder for uncategorized items"
},
"selfOwnershipLabel": {
- "message": "You",
+ "message": "أنت",
"description": "Used as a label to indicate that the user is the owner of an item."
},
"addFolder": {
@@ -464,6 +464,18 @@
"editFolder": {
"message": "تعديل المجلد"
},
+ "newFolder": {
+ "message": "مجلد جديد"
+ },
+ "folderName": {
+ "message": "اسم المجلد"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "هل أنت متأكد من أنك تريد حذف هذا المجلد بشكل دائم؟"
+ },
"baseDomain": {
"message": "النطاق الأساسي",
"description": "Domain name. Example: website.com"
@@ -508,7 +520,7 @@
"message": "توليد كلمة مرور"
},
"generatePassphrase": {
- "message": "Generate passphrase"
+ "message": "توليد عبارة مرور"
},
"checkPassword": {
"message": "تحقق مما إذا تم الكشف عن كلمة المرور."
@@ -611,7 +623,7 @@
"message": "ملاحظة سرية"
},
"typeSshKey": {
- "message": "SSH key"
+ "message": "مفتاح بروتوكول النقل الآمن"
},
"typeLoginPlural": {
"message": "تسجيلات الدخول"
@@ -644,7 +656,7 @@
"message": "الاسم الكامل"
},
"address": {
- "message": "Address"
+ "message": "العنوان"
},
"address1": {
"message": "العنوان 1"
@@ -723,19 +735,10 @@
"message": "عنصر"
},
"itemDetails": {
- "message": "Item details"
+ "message": "تفاصيل العنصر"
},
"itemName": {
- "message": "Item name"
- },
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
+ "message": "اسم العنصر"
},
"ex": {
"message": "مثال.",
@@ -761,7 +764,7 @@
}
},
"copySuccessful": {
- "message": "Copy Successful"
+ "message": "تم النسخ بنجاح"
},
"copyValue": {
"message": "نسخ القيمة",
@@ -772,11 +775,11 @@
"description": "Copy password to clipboard"
},
"copyPassphrase": {
- "message": "Copy passphrase",
+ "message": "نسخ عبارة المرور",
"description": "Copy passphrase to clipboard"
},
"passwordCopied": {
- "message": "Password copied"
+ "message": "تم نسخ كلمة المرور"
},
"copyUsername": {
"message": "نسخ اسم المستخدم",
@@ -795,7 +798,7 @@
"description": "Copy URI to clipboard"
},
"copyCustomField": {
- "message": "Copy $FIELD$",
+ "message": "نسخ $FIELD$",
"placeholders": {
"field": {
"content": "$1",
@@ -804,34 +807,34 @@
}
},
"copyWebsite": {
- "message": "Copy website"
+ "message": "نسخ الموقع الإلكتروني"
},
"copyNotes": {
- "message": "Copy notes"
+ "message": "نسخ الملاحظات"
},
"copyAddress": {
- "message": "Copy address"
+ "message": "نسخ العنوان"
},
"copyPhone": {
"message": "Copy phone"
},
"copyEmail": {
- "message": "Copy email"
+ "message": "نسخ البريد الإلكتروني"
},
"copyCompany": {
- "message": "Copy company"
+ "message": "نسخ الشركة"
},
"copySSN": {
- "message": "Copy Social Security number"
+ "message": "نسخ رقم الضمان الاجتماعي"
},
"copyPassportNumber": {
- "message": "Copy passport number"
+ "message": "نسخ رقم جواز السفر"
},
"copyLicenseNumber": {
- "message": "Copy license number"
+ "message": "نسخ رقم الرخصة"
},
"copyName": {
- "message": "Copy name"
+ "message": "نسخ الاسم"
},
"me": {
"message": "أنا"
@@ -991,22 +994,22 @@
"message": "تم تسجيل الخروج"
},
"loggedOutDesc": {
- "message": "You have been logged out of your account."
+ "message": "لقد تم تسجيل خروجك من الحساب."
},
"loginExpired": {
"message": "انتهت صَلاحِيَة جَلسة الدخول."
},
"restartRegistration": {
- "message": "Restart registration"
+ "message": "إعادة التسجيل"
},
"expiredLink": {
- "message": "Expired link"
+ "message": "رابط منتهي الصلاحية"
},
"pleaseRestartRegistrationOrTryLoggingIn": {
- "message": "Please restart registration or try logging in."
+ "message": "الرجاء إعادة تشغيل التسجيل أو محاولة تسجيل الدخول."
},
"youMayAlreadyHaveAnAccount": {
- "message": "You may already have an account"
+ "message": "قد يكون لديك حساب بالفعل"
},
"logOutConfirmation": {
"message": "هل أنت متأكد من أنك تريد تسجيل الخروج؟"
@@ -1033,7 +1036,7 @@
"message": "تسجيل الدخول باستخدام الجهاز يجب أن يتم إعداده في إعدادات تطبيق Bitwarden. هل تحتاج إلى خيار آخر؟"
},
"needAnotherOptionV1": {
- "message": "Need another option?"
+ "message": "هل تحتاج إلى خيار آخر؟"
},
"loginWithMasterPassword": {
"message": "تسجيل الدخول باستخدام كلمة المرور الرئيسية"
@@ -1048,13 +1051,13 @@
"message": "استخدم طريقة أخرى للولوج"
},
"logInWithPasskey": {
- "message": "Log in with passkey"
+ "message": "تسجيل الدخول باستخدام مفتاح المرور"
},
"useSingleSignOn": {
"message": "Use single sign-on"
},
"welcomeBack": {
- "message": "Welcome back"
+ "message": "مرحباً بعودتك"
},
"invalidPasskeyPleaseTryAgain": {
"message": "مفتاح المرور غير صالح. الرجاء المحاولة مرة أخرى."
@@ -1078,13 +1081,13 @@
"message": "Keep this window open and follow prompts from your browser."
},
"errorCreatingPasskey": {
- "message": "Error creating passkey"
+ "message": "خطأ في إنشاء مفتاح المرور"
},
"errorCreatingPasskeyInfo": {
"message": "There was a problem creating your passkey."
},
"passkeySuccessfullyCreated": {
- "message": "Passkey successfully created!"
+ "message": "تم إنشاء مفتاح المرور بنجاح!"
},
"customPasskeyNameInfo": {
"message": "Name your passkey to help you identify it."
@@ -1132,16 +1135,16 @@
"message": "Passkey limit reached. Remove a passkey to add another."
},
"tryAgain": {
- "message": "Try again"
+ "message": "حاول مرة أخرى"
},
"createAccount": {
"message": "إنشاء حساب"
},
"newToBitwarden": {
- "message": "New to Bitwarden?"
+ "message": "هل أنت جديد في بيتواردن؟"
},
"setAStrongPassword": {
- "message": "Set a strong password"
+ "message": "تعيين كلمة مرور قوية"
},
"finishCreatingYourAccountBySettingAPassword": {
"message": "Finish creating your account by setting a password"
@@ -1156,16 +1159,16 @@
"message": "تسجيل الدخول"
},
"logInToBitwarden": {
- "message": "Log in to Bitwarden"
+ "message": "تسجيل الدخول إلى بيتواردن"
},
"authenticationTimeout": {
- "message": "Authentication timeout"
+ "message": "مهلة المصادقة"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
},
"verifyIdentity": {
- "message": "Verify your Identity"
+ "message": "قم بتأكيد هويتك"
},
"weDontRecognizeThisDevice": {
"message": "We don't recognize this device. Enter the code sent to your email to verify your identity."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "بَدْء تسجيل الدخول"
},
+ "logInRequestSent": {
+ "message": "تم إرسال الطلب"
+ },
"submit": {
"message": "قدِّم"
},
@@ -1235,7 +1241,7 @@
"message": "الإعدادات"
},
"accountEmail": {
- "message": "Account email"
+ "message": "البريد الإلكتروني للحساب"
},
"requestHint": {
"message": "Request hint"
@@ -1287,7 +1293,7 @@
"message": "Your new account has been created!"
},
"youHaveBeenLoggedIn": {
- "message": "You have been logged in!"
+ "message": "لقد قمت بتسجيل الدخول!"
},
"trialAccountCreated": {
"message": "تم إنشاء الحساب بنجاح."
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "تم إرسال إشعار إلى جهازك."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "هل تحاول الوصول إلى حسابك؟"
+ },
+ "accessAttemptBy": {
+ "message": "محاولة تسجيل الدخول بواسطة $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "تأكيد الوصول"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "الإصدار $VERSION_NUMBER$",
"placeholders": {
@@ -1414,7 +1447,7 @@
"message": "إرسال رمز التحقق إلى البريد الإلكتروني مرة أخرى"
},
"useAnotherTwoStepMethod": {
- "message": "Use another two-step login method"
+ "message": "استخدام طريقة أخرى لتسجيل الدخول بخطوتين"
},
"insertYubiKey": {
"message": "Insert your YubiKey into your computer's USB port, then touch its button."
@@ -1468,7 +1501,7 @@
"message": "FIDO U2F security a key"
},
"webAuthnTitle": {
- "message": "Passkey"
+ "message": "مفتاح المرور"
},
"webAuthnDesc": {
"message": "Use your device's biometrics or a FIDO2 compatible security key."
@@ -1480,7 +1513,7 @@
"message": "البريد الإلكتروني"
},
"emailDescV2": {
- "message": "Enter a code sent to your email."
+ "message": "أدخل الرمز الذي تم إرساله إلى بريدك الإلكتروني."
},
"continue": {
"message": "استمرار"
@@ -1587,7 +1620,7 @@
"message": "تصدير"
},
"exportFrom": {
- "message": "Export from"
+ "message": "التصدير من"
},
"exportVault": {
"message": "تصدير الخزانة"
@@ -1611,10 +1644,10 @@
"message": "تأكيد التنسيق"
},
"filePassword": {
- "message": "File password"
+ "message": "كلمة مرور الملف"
},
"confirmFilePassword": {
- "message": "Confirm file password"
+ "message": "تأكيد كلمة مرور الملف"
},
"accountRestrictedOptionDescription": {
"message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account."
@@ -1626,7 +1659,7 @@
"message": "نوع التصدير"
},
"accountRestricted": {
- "message": "Account restricted"
+ "message": "تم تقييد الحساب"
},
"passwordProtected": {
"message": "Password protected"
@@ -1664,38 +1697,35 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "إعادة توليد كلمة المرور"
- },
"length": {
"message": "الطول"
},
"passwordMinLength": {
- "message": "Minimum password length"
+ "message": "الحد الأدنى لطول كلمة المرور"
},
"uppercase": {
- "message": "Uppercase (A-Z)",
+ "message": "أحرف كبيرة (من A إلى Z)",
"description": "deprecated. Use uppercaseLabel instead."
},
"lowercase": {
- "message": "Lowercase (a-z)",
+ "message": "أحرف صغيرة (من a إلى z)",
"description": "deprecated. Use lowercaseLabel instead."
},
"numbers": {
- "message": "Numbers (0-9)",
+ "message": "أرقام (من 0 إلى 9)",
"description": "deprecated. Use numbersLabel instead."
},
"specialCharacters": {
- "message": "Special characters (!@#$%^&*)"
+ "message": "أحرف خاصة (!@#$%^&*)"
},
"numWords": {
"message": "عدد الكلمات"
},
"wordSeparator": {
- "message": "Word separator"
+ "message": "فاصل الكلمات"
},
"capitalize": {
- "message": "Capitalize",
+ "message": "كبِّر الحروف",
"description": "Make the first letter of a word uppercase."
},
"includeNumber": {
@@ -1709,7 +1739,7 @@
"message": "سجل كلمات المرور"
},
"generatorHistory": {
- "message": "Generator history"
+ "message": "سجل المولد"
},
"clearGeneratorHistoryTitle": {
"message": "Clear generator history"
@@ -1718,16 +1748,16 @@
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
},
"noPasswordsInList": {
- "message": "There are no passwords to list."
+ "message": "لا توجد كلمات مرور للعرض."
},
"clearHistory": {
- "message": "Clear history"
+ "message": "مسح السجل"
},
"nothingToShow": {
- "message": "Nothing to show"
+ "message": "لا يوجد شيء لعرضه"
},
"nothingGeneratedRecently": {
- "message": "You haven't generated anything recently"
+ "message": "لم تقم بتوليد أي شيء مؤخراً"
},
"clear": {
"message": "مسح",
@@ -1767,10 +1797,10 @@
"message": "الرجاء تسجيل الدخول مرة أخرى."
},
"currentSession": {
- "message": "Current session"
+ "message": "الجلسة الحالية"
},
"requestPending": {
- "message": "Request pending"
+ "message": "الطلب معلًق"
},
"logBackInOthersToo": {
"message": "Please log back in. If you are using other Bitwarden applications log out and back in to those as well."
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "منطقة خطرة"
},
- "dangerZoneDesc": {
- "message": "احذر، لن تستطيع التراجع عن هذه الإجراءات!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "تسجيل الدخول لجهاز جديد"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -1894,13 +1939,13 @@
"message": "Proceed below to delete your account and all vault data."
},
"deleteAccountWarning": {
- "message": "Deleting your account is permanent. It cannot be undone."
+ "message": "حذف حسابك بشكل نهائي. لا يمكن التراجع عنه."
},
"accountDeleted": {
- "message": "Account deleted"
+ "message": "تم حذف الحساب"
},
"accountDeletedDesc": {
- "message": "Your account has been closed and all associated data has been deleted."
+ "message": "لقد تم إغلاق حسابك وتم حذف جميع البيانات المرتبطة به."
},
"deleteOrganizationWarning": {
"message": "Deleting your organization is permanent. It cannot be undone."
@@ -1919,11 +1964,11 @@
"description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)"
},
"onboardingImportDataDetailsLink": {
- "message": "new item",
+ "message": "عنصر جديد",
"description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)"
},
"onboardingImportDataDetailsLoginLink": {
- "message": "new login",
+ "message": "تسجيل دخول جديد",
"description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new login instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)"
},
"onboardingImportDataDetailsPartTwoNoOrgs": {
@@ -1968,22 +2013,22 @@
"message": "Data is not formatted correctly. Please check your import file and try again."
},
"importNothingError": {
- "message": "Nothing was imported."
+ "message": "لم يتم استيراد أي شيء."
},
"importEncKeyError": {
"message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data."
},
"destination": {
- "message": "Destination"
+ "message": "الوجهة"
},
"learnAboutImportOptions": {
"message": "Learn about your import options"
},
"selectImportFolder": {
- "message": "Select a folder"
+ "message": "تحديد المجلد"
},
"selectImportCollection": {
- "message": "Select a collection"
+ "message": "اختر مجموعة"
},
"importTargetHint": {
"message": "Select this option if you want the imported file contents moved to a $DESTINATION$",
@@ -2008,13 +2053,13 @@
"message": "اختيار ملف"
},
"noFileChosen": {
- "message": "No file chosen"
+ "message": "لم يتم اختيار ملف"
},
"orCopyPasteFileContents": {
"message": "او قم بنسخ ولصق محتويات مِلَفّ الاستيراد"
},
"instructionsFor": {
- "message": "$NAME$ Instructions",
+ "message": "تعليمات $NAME$",
"description": "The title for the import tool instructions.",
"placeholders": {
"name": {
@@ -2033,7 +2078,7 @@
"message": "تخصيص تجرِبة خزانة الويب الخاصة بك."
},
"preferencesUpdated": {
- "message": "Preferences saved"
+ "message": "تم حفظ التفضيلات"
},
"language": {
"message": "اللّغة"
@@ -2048,7 +2093,7 @@
"message": "Show a recognizable image next to each login."
},
"default": {
- "message": "Default"
+ "message": "الافتراضي"
},
"domainRules": {
"message": "قواعد النطاق"
@@ -2063,13 +2108,13 @@
"message": "Custom equivalent domains"
},
"exclude": {
- "message": "Exclude"
+ "message": "استثناء"
},
"include": {
- "message": "Include"
+ "message": "تضمين"
},
"customize": {
- "message": "Customize"
+ "message": "تخصيص"
},
"newCustomDomain": {
"message": "New custom domain"
@@ -2121,17 +2166,17 @@
"message": "View recovery code"
},
"providers": {
- "message": "Providers",
+ "message": "المزودون",
"description": "Two-step login providers such as YubiKey, Duo, Authenticator apps, Email, etc."
},
"enable": {
- "message": "Turn on"
+ "message": "تفعيل"
},
"enabled": {
- "message": "Turned on"
+ "message": "تم التفعيل"
},
"restoreAccess": {
- "message": "Restore access"
+ "message": "استعادة الوصول"
},
"premium": {
"message": "بريميوم",
@@ -2155,14 +2200,26 @@
"manage": {
"message": "إدارة"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "عرض العناصر"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "تعديل العناصر"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
- "message": "Turn off"
+ "message": "إيقاف"
},
"revokeAccess": {
- "message": "Revoke access"
+ "message": "إلغاء الوصول"
},
"twoStepLoginProviderEnabled": {
"message": "This two-step login provider is active on your account."
@@ -2174,16 +2231,16 @@
"message": "Download an authenticator app such as"
},
"twoStepAuthenticatorInstructionInfix1": {
- "message": ","
+ "message": "،"
},
"twoStepAuthenticatorInstructionInfix2": {
- "message": "or"
+ "message": "أو"
},
"twoStepAuthenticatorInstructionSuffix": {
"message": "."
},
"continueToExternalUrlTitle": {
- "message": "Continue to $URL$?",
+ "message": "هل تريد المتابعة إلى $URL$؟",
"placeholders": {
"url": {
"content": "$1",
@@ -2195,7 +2252,7 @@
"message": "You are leaving Bitwarden and launching an external website in a new window."
},
"twoStepContinueToBitwardenUrlTitle": {
- "message": "Continue to bitwarden.com?"
+ "message": "هل تريد المتابعة إلى bitwarden.com؟"
},
"twoStepContinueToBitwardenUrlDesc": {
"message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website."
@@ -2207,10 +2264,10 @@
"message": "Could not load QR code. Try again or use the key below."
},
"key": {
- "message": "Key"
+ "message": "المفتاح"
},
"twoStepAuthenticatorEnterCodeV2": {
- "message": "Verification code"
+ "message": "رمز التحقق"
},
"twoStepAuthenticatorReaddDesc": {
"message": "In case you need to add it to another device, below is the QR code (or key) required by your authenticator app."
@@ -2234,7 +2291,7 @@
"message": "Touch the YubiKey's button."
},
"twoFactorYubikeySaveForm": {
- "message": "Save the form."
+ "message": "حفظ النموذج."
},
"twoFactorYubikeyWarning": {
"message": "Due to platform limitations, YubiKeys cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when YubiKeys cannot be used. Supported platforms:"
@@ -2291,7 +2348,7 @@
"message": "Enter the Bitwarden application information from your Duo Admin panel."
},
"twoFactorDuoClientId": {
- "message": "Client Id"
+ "message": "معرّف العميل"
},
"twoFactorDuoClientSecret": {
"message": "Client Secret"
@@ -2336,7 +2393,7 @@
"message": "If the security key has a button, touch it."
},
"twoFactorU2fSaveForm": {
- "message": "Save the form."
+ "message": "حفظ النموذج."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -2366,7 +2420,7 @@
"message": "You have not set up any two-step login providers yet. After you have set up a two-step login provider you can check back here for your recovery code."
},
"printCode": {
- "message": "Print code",
+ "message": "طباعة الرمز",
"description": "Print 2FA recovery code"
},
"reports": {
@@ -2381,13 +2435,13 @@
"description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization vault."
},
"unsecuredWebsitesReport": {
- "message": "Unsecure websites"
+ "message": "مواقع الويب غير الآمنة"
},
"unsecuredWebsitesReportDesc": {
"message": "URLs that start with http:// don’t use the best available encryption. Change the login URIs for these accounts to https:// for safer browsing."
},
"unsecuredWebsitesFound": {
- "message": "Unsecured websites found"
+ "message": "تم العثور على مواقع ويب غير آمنة"
},
"unsecuredWebsitesFoundReportDesc": {
"message": "We found $COUNT$ items in your $VAULT$ with unsecured URIs. You should change their URI scheme to https:// if the website allows it.",
@@ -2431,7 +2485,7 @@
"message": "No websites were found in your vault with a missing two-step login configuration."
},
"instructions": {
- "message": "Instructions"
+ "message": "التعليمات"
},
"exposedPasswordsReport": {
"message": "Exposed passwords"
@@ -2474,13 +2528,13 @@
}
},
"weakPasswordsReport": {
- "message": "Weak passwords"
+ "message": "كلمات المرور الضعيفة"
},
"weakPasswordsReportDesc": {
"message": "Weak passwords can be easily guessed by attackers. Change these passwords to strong ones using the password generator."
},
"weakPasswordsFound": {
- "message": "Weak passwords found"
+ "message": "تم العثور على كلمات مرور ضعيفة"
},
"weakPasswordsFoundReportDesc": {
"message": "We found $COUNT$ items in your $VAULT$ with passwords that are not strong. You should update them to use stronger passwords.",
@@ -2527,10 +2581,10 @@
"message": "No logins in your vault have passwords that are being reused."
},
"timesReused": {
- "message": "Times reused"
+ "message": "عدد مرات إعادة الاستخدام"
},
"reusedXTimes": {
- "message": "Reused $COUNT$ times",
+ "message": "تمت إعادة الاستخدام $COUNT$ مرة",
"placeholders": {
"count": {
"content": "$1",
@@ -2560,7 +2614,7 @@
}
},
"goodNews": {
- "message": "Good news",
+ "message": "أخبار جيدة!",
"description": "ex. Good News, No Breached Accounts Found!"
},
"breachUsernameFound": {
@@ -2586,7 +2640,7 @@
"message": "موقع الويب"
},
"affectedUsers": {
- "message": "Affected users"
+ "message": "المستخدمون المتأثرون"
},
"breachOccurred": {
"message": "Breach occurred"
@@ -2598,24 +2652,24 @@
"message": "An error occurred trying to load the report. Try again"
},
"billing": {
- "message": "Billing"
+ "message": "الفوترة"
},
"billingPlanLabel": {
- "message": "Billing plan"
+ "message": "خطة الفوترة"
},
"paymentType": {
- "message": "Payment type"
+ "message": "طريقة الدفع"
},
"accountCredit": {
"message": "Account credit",
"description": "Financial term. In the case of Bitwarden, a positive balance means that you owe money, while a negative balance means that you have a credit (Bitwarden owes you money)."
},
"accountBalance": {
- "message": "Account balance",
+ "message": "رصيد الحساب",
"description": "Financial term. In the case of Bitwarden, a positive balance means that you owe money, while a negative balance means that you have a credit (Bitwarden owes you money)."
},
"addCredit": {
- "message": "Add credit",
+ "message": "إضافة رصيد",
"description": "Add more credit to your account's balance."
},
"amount": {
@@ -2688,10 +2742,10 @@
"message": "Bitwarden Families plan."
},
"addons": {
- "message": "Add-ons"
+ "message": "الإضافات"
},
"premiumAccess": {
- "message": "Premium access"
+ "message": "الوصول المميز"
},
"premiumAccessDesc": {
"message": "You can add Premium access to all members of your organization for $PRICE$ /$INTERVAL$.",
@@ -2739,13 +2793,13 @@
"message": "سنة"
},
"yr": {
- "message": "yr"
+ "message": "سنة"
},
"month": {
"message": "شهر"
},
"monthAbbr": {
- "message": "mo.",
+ "message": "شهر",
"description": "Short abbreviation for 'month'"
},
"paymentChargedAnnually": {
@@ -2767,10 +2821,10 @@
"message": "Your plan comes with a free 7 day trial. Your payment method will not be charged until the trial has ended. You may cancel at any time."
},
"paymentInformation": {
- "message": "Payment information"
+ "message": "معلومات الدفع"
},
"billingInformation": {
- "message": "Billing information"
+ "message": "معلومات الفوترة"
},
"billingTrialSubLabel": {
"message": "Your payment method will not be charged during the 7 day free trial."
@@ -2782,13 +2836,13 @@
"message": "Select the PayPal button to log into your PayPal account, then click the Submit button below to continue."
},
"cancelSubscription": {
- "message": "Cancel subscription"
+ "message": "إلغاء الاشتراك"
},
"subscriptionExpiration": {
- "message": "Subscription expiration"
+ "message": "تاريخ انتهاء الاشتراك"
},
"subscriptionCanceled": {
- "message": "The subscription has been canceled."
+ "message": "تم إلغاء الاشتراك."
},
"pendingCancellation": {
"message": "Pending cancellation"
@@ -2809,40 +2863,40 @@
"message": "Are you sure you want to cancel? You will lose access to all of this subscription's features at the end of this billing cycle."
},
"canceledSubscription": {
- "message": "Subscription canceled"
+ "message": "تم إلغاء الإشتراك"
},
"neverExpires": {
- "message": "Never expires"
+ "message": "صلاحية غير محدودة"
},
"status": {
- "message": "Status"
+ "message": "الحالة"
},
"nextCharge": {
- "message": "Next charge"
+ "message": "الدفعة القادمة"
},
"details": {
"message": "التفاصيل"
},
"downloadLicense": {
- "message": "Download license"
+ "message": "تنزيل الرخصة"
},
"viewBillingToken": {
"message": "View Billing Token"
},
"updateLicense": {
- "message": "Update license"
+ "message": "تحديث الرخصة"
},
"manageSubscription": {
- "message": "Manage subscription"
+ "message": "إدارة الاشتراك"
},
"launchCloudSubscription": {
"message": "Launch Cloud Subscription"
},
"storage": {
- "message": "Storage"
+ "message": "مساحة التخزين"
},
"addStorage": {
- "message": "Add storage"
+ "message": "إضافة مساحة تخزين"
},
"removeStorage": {
"message": "Remove storage"
@@ -2861,47 +2915,47 @@
}
},
"paymentMethod": {
- "message": "Payment method"
+ "message": "طريقة الدفع"
},
"noPaymentMethod": {
"message": "No payment method on file."
},
"addPaymentMethod": {
- "message": "Add payment method"
+ "message": "إضافة طريقة دفع"
},
"changePaymentMethod": {
- "message": "Change payment method"
+ "message": "تغيير طريقة الدفع"
},
"invoices": {
- "message": "Invoices"
+ "message": "الفواتير"
},
"noUnpaidInvoices": {
- "message": "No unpaid invoices."
+ "message": "لا يوجد فواتير غير مدفوعة."
},
"noPaidInvoices": {
- "message": "No paid invoices."
+ "message": "لا يوجد فواتير مدفوعة."
},
"paid": {
- "message": "Paid",
+ "message": "مدفوع",
"description": "Past tense status of an invoice. ex. Paid or unpaid."
},
"unpaid": {
- "message": "Unpaid",
+ "message": "غير مدفوع",
"description": "Past tense status of an invoice. ex. Paid or unpaid."
},
"transactions": {
- "message": "Transactions",
+ "message": "الحركات المالية",
"description": "Payment/credit transactions."
},
"noTransactions": {
- "message": "No transactions."
+ "message": "لا يوجد حركات مالية."
},
"chargeNoun": {
"message": "Charge",
"description": "Noun. A charge from a payment method."
},
"refundNoun": {
- "message": "Refund",
+ "message": "استرداد مالي",
"description": "Noun. A refunded payment that was charged."
},
"chargesStatement": {
@@ -2938,7 +2992,7 @@
"message": "Contact customer support"
},
"contactSupportShort": {
- "message": "Contact Support"
+ "message": "الاتصال بالدعم الفني"
},
"updatedPaymentMethod": {
"message": "Updated payment method."
@@ -2983,7 +3037,7 @@
"message": "البريد الإلكتروني للفوترة"
},
"businessName": {
- "message": "Business name"
+ "message": "الاسم التجاري"
},
"chooseYourPlan": {
"message": "اختر خِطَّة اشتراكك"
@@ -3030,7 +3084,7 @@
}
},
"planNameFamilies": {
- "message": "Families"
+ "message": "العائلات"
},
"planDescFamilies": {
"message": "For personal use, to share with family & friends."
@@ -3063,7 +3117,7 @@
}
},
"additionalUsers": {
- "message": "Additional users"
+ "message": "مستخدمين إضافيين"
},
"costPerUser": {
"message": "$COST$ per user",
@@ -3180,13 +3234,13 @@
"message": "شهريا"
},
"annually": {
- "message": "Annually"
+ "message": "سنويّاً"
},
"annual": {
- "message": "Annual"
+ "message": "سنوي"
},
"basePrice": {
- "message": "Base price"
+ "message": "السعر الأساسي"
},
"organizationCreated": {
"message": "Organization created"
@@ -3198,7 +3252,7 @@
"message": "Organization upgraded"
},
"leave": {
- "message": "Leave"
+ "message": "خروج"
},
"leaveOrganizationConfirmation": {
"message": "Are you sure you want to leave this organization?"
@@ -3282,25 +3336,25 @@
"message": "Access control"
},
"readOnly": {
- "message": "Read only"
+ "message": "للقراءة فقط"
},
"newCollection": {
- "message": "New collection"
+ "message": "مجموعة جديدة"
},
"addCollection": {
- "message": "Add collection"
+ "message": "إضافة مجموعة"
},
"editCollection": {
- "message": "Edit collection"
+ "message": "تعديل المجموعة"
},
"collectionInfo": {
- "message": "Collection info"
+ "message": "بيانات المجموعة"
},
"deleteCollectionConfirmation": {
- "message": "Are you sure you want to delete this collection?"
+ "message": "هل أنت متأكد من أنك تريد حذف هذه المجموعة؟"
},
"editMember": {
- "message": "Edit member"
+ "message": "تعديل العضو"
},
"fieldOnTabRequiresAttention": {
"message": "A field on the '$TAB$' tab requires your attention.",
@@ -3324,10 +3378,10 @@
}
},
"inviteSingleEmailDesc": {
- "message": "You have 1 invite remaining."
+ "message": "تبقى لك دعوة واحدة."
},
"inviteZeroEmailDesc": {
- "message": "You have 0 invites remaining."
+ "message": "لم يتبق لك أي دعوات."
},
"userUsingTwoStep": {
"message": "This user is using two-step login to protect their account."
@@ -3384,10 +3438,10 @@
"message": "Event"
},
"unknown": {
- "message": "Unknown"
+ "message": "مجهول"
},
"loadMore": {
- "message": "Load more"
+ "message": "تحميل المزيد"
},
"mobile": {
"message": "Mobile",
@@ -3444,7 +3498,7 @@
"message": "Incorrect PIN"
},
"pin": {
- "message": "PIN",
+ "message": "رقم التعريف الشخصي",
"description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device."
},
"exportedVault": {
@@ -3616,10 +3670,10 @@
}
},
"deletedCollections": {
- "message": "Deleted collections"
+ "message": "المجموعات المحذوفة"
},
"deletedCollectionId": {
- "message": "Deleted collection $ID$.",
+ "message": "المجموعة المحذوفة $ID$.",
"placeholders": {
"id": {
"content": "$1",
@@ -3917,13 +3971,13 @@
"message": "No email?"
},
"goBack": {
- "message": "Go back"
+ "message": "الرجوع إلى الخلف"
},
"toEditYourEmailAddress": {
"message": "to edit your email address."
},
"view": {
- "message": "View"
+ "message": "عرض"
},
"invalidDateRange": {
"message": "Invalid date range."
@@ -3932,10 +3986,10 @@
"message": "لقد حدث خطأ."
},
"userAccess": {
- "message": "User access"
+ "message": "وصول المستخدم"
},
"userType": {
- "message": "User type"
+ "message": "نوع المستخدم"
},
"groupAccess": {
"message": "Group access"
@@ -3950,7 +4004,7 @@
"message": "Resend invitation"
},
"resendEmail": {
- "message": "Resend email"
+ "message": "إعادة إرسال البريد الإلكتروني"
},
"hasBeenReinvited": {
"message": "$USER$ reinvited",
@@ -3962,10 +4016,10 @@
}
},
"confirm": {
- "message": "Confirm"
+ "message": "تأكيد"
},
"confirmUser": {
- "message": "Confirm user"
+ "message": "تأكيد المستخدم"
},
"hasBeenConfirmed": {
"message": "$USER$ confirmed.",
@@ -3977,7 +4031,7 @@
}
},
"confirmUsers": {
- "message": "Confirm members"
+ "message": "تأكيد الأعضاء"
},
"usersNeedConfirmed": {
"message": "You have members that have accepted their invitation, but still need to be confirmed. Members will not have access to the organization until they are confirmed."
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "المولّد",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "ما الذي ترغب في توليده؟"
- },
- "passwordType": {
- "message": "نوع كلمة المرور"
- },
- "regenerateUsername": {
- "message": "إعادة توليد اسم المستخدم"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "اسم المضيف",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json
index 279fc202748..4c49936c88e 100644
--- a/apps/web/src/locales/az/messages.json
+++ b/apps/web/src/locales/az/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Qovluğa düzəliş et"
},
+ "newFolder": {
+ "message": "Yeni qovluq"
+ },
+ "folderName": {
+ "message": "Qovluq adı"
+ },
+ "folderHintText": {
+ "message": "Ana qovluğun adından sonra \"/\" əlavə edərək qovluğu ardıcıl yerləşdirin. Nümunə: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Bu qovluğu həmişəlik silmək istədiyinizə əminsiniz?"
+ },
"baseDomain": {
"message": "Baza domeni",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Element adı"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "\"Yalnız baxma\" icazələrinə sahib kolleksiyaları silə bilməzsiniz: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "məs.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Giriş etmə başladıldı"
},
+ "logInRequestSent": {
+ "message": "Tələb göndərildi"
+ },
"submit": {
"message": "Göndər"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Cihazınıza bir bildiriş göndərildi."
},
+ "notificationSentDevicePart1": {
+ "message": "Cihazınızda Bitwarden kilidini açın, ya da "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Hesabınıza müraciət etməyə çalışırsınız?"
+ },
+ "accessAttemptBy": {
+ "message": "$EMAIL$ ilə müraciət cəhdi",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Müraciəti təsdiqlə"
+ },
+ "denyAccess": {
+ "message": "Müraciətə rədd cavabı ver"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "veb tətbiqinizdə"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Təsdiqləməzdən əvvəl Barmaq izi ifadəsinin aşağıdakı ifadə ilə uyuşduğuna əmin olun."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Cihazınızda Bitwarden-in kilidini açın. Təsdiqləməzdən əvvəl Barmaq izi ifadəsinin aşağıdakı ifadə ilə uyuşduğuna əmin olun."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Cihazınıza bir bildiriş göndərildi"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Hesabınızın kilidinin açıq olduğuna və barmaq izi ifadəsinin digər cihazda uyuşduğuna əmin olun"
- },
"versionNumber": {
"message": "Versiya $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Anlaşılmaz xarakterlərdən çəkin",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Parolu yenidən yarat"
- },
"length": {
"message": "Uzunluq"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Təhlükəli zona"
},
- "dangerZoneDesc": {
- "message": "Diqqətli olun, bu əməliyyatları geri qaytara bilməzsiniz!"
- },
- "dangerZoneDescSingular": {
- "message": "Diqqətli olun, bu əməliyyatı geri qaytara bilməzsiniz!"
- },
"deauthorizeSessions": {
"message": "Seansların səlahiyyətlərini götür"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Davam etsəniz, hazırkı seansınız bitəcək, təkrar giriş etməyiniz tələb olunacaq. Fəallaşdırılıbsa, iki addımlı giriş üçün yenidən soruşulacaq. Digər cihazlardakı aktiv seanslar, bir saata qədər aktiv qalmağa davam edə bilər."
},
+ "newDeviceLoginProtection": {
+ "message": "Yeni cihaz girişi"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Yeni cihaz girişi qorumasını söndür"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Yeni cihaz girişi qorumasını işə sal"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Yeni bir cihazdan giriş etdiyiniz zaman Bitwarden göndərən doğrulama e-poçtlarını dayandırmaq üçün aşağıdakı addımları izləyin."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Yeni bir cihazdan giriş etdiyiniz zaman Bitwarden-in sizə doğrulama e-poçtlarını göndərməsi üçün aşağıdakı addımları izləyin."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Yeni cihaz girişi qorumasını söndürsəniz, ana parolunuzu bilən hər kəs, istənilən cihazdan hesabınıza müraciət edə bilər. Hesabınızı doğrulama e-poçtları olmadan qorumaq üçün iki addımlı girişi qurun."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Yeni cihaz girişi qoruması dəyişiklikləri saxlanıldı"
+ },
"sessionsDeauthorized": {
"message": "Bütün seansların səlahiyyəti götürüldü"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "İdarə et"
},
- "canManage": {
- "message": "İdarə edə bilər"
+ "manageCollection": {
+ "message": "Kolleksiyanı idarə et"
+ },
+ "viewItems": {
+ "message": "Elementlərə bax"
+ },
+ "viewItemsHidePass": {
+ "message": "Elementlərə, gizli parollara bax"
+ },
+ "editItems": {
+ "message": "Elementlərə düzəliş et"
+ },
+ "editItemsHidePass": {
+ "message": "Elementlərə, gizli parollara düzəliş et"
},
"disable": {
"message": "Sıradan çıxart"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Güvənlik açarı oxunarkən problem yarandı. Yenidən sınayın."
},
- "twoFactorWebAuthnWarning": {
- "message": "Platforma məhdudiyyətlərinə görə, WebAuthn bütün Bitwarden tətbiqlərində istifadə edilə bilmir. WebAuthn istifadə edilə bilməyəndə, hesabınıza müraciət edə bilməyiniz üçün başqa bir iki addımlı giriş provayderini fəallaşdırmalısınız. Dəstəklənən platformalar:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "WebAuthn dəstəkli brauzerə sahib masaüstü/dizüstü kompüterdə veb seyf və brauzer uzantıları (FIDO U2F açıq olan Chrome, Opera, Vivaldi və ya Firefox)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Platforma məhdudiyyətlərinə görə, WebAuthn bütün Bitwarden tətbiqlərində istifadə edilə bilmir. WebAuthn istifadə edilə bilməyəndə, hesabınıza müraciət edə bilməyiniz üçün başqa bir iki addımlı giriş provayderini fəallaşdırmalısınız."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwarden iki addımlı giriş üçün geri qaytarma kodunuz"
@@ -2998,7 +3052,7 @@
"message": "Əlavə istifadəçi yerləri"
},
"userSeatsDesc": {
- "message": "İstifadəçi sayı"
+ "message": "# / istifadəçi yeri"
},
"userSeatsAdditionalDesc": {
"message": "Planınızda $BASE_SEATS$ istifadəçi yeri var. İstifadəçiləri, istifadəçi/ay başına $SEAT_PRICE$ qarşılığında əlavə edə bilərsiniz.",
@@ -4269,7 +4323,7 @@
"message": "Sirr Menecerinə abunəliyiniz üçün bir limit müəyyən edin. Bu limitə çatanda, yeni istifadəçiləri dəvət edə bilməyəcəksiniz."
},
"maxSeatLimit": {
- "message": "Maksimum yer limiti (ixtiyari)",
+ "message": "Yer limiti (ixtiyari)",
"description": "Upper limit of seats to allow through autoscaling"
},
"maxSeatCost": {
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Parol yaradıcı üçün tələbləri ayarla."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Bir və ya daha çox təşkilat siyasətləri yaradıcı seçimlərinizə təsir edir."
- },
"masterPasswordPolicyInEffect": {
"message": "Bir və ya daha çox təşkilat siyasəti, aşağıdakı tələbləri qarşılamaq üçün ana parolunuzu tələb edir:"
},
@@ -6666,15 +6717,6 @@
"message": "Yaradıcı",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Nə yaratmaq istəyirsiniz?"
- },
- "passwordType": {
- "message": "Parol növü"
- },
- "regenerateUsername": {
- "message": "İstifadəçi adını yenidən yarat"
- },
"generateUsername": {
"message": "İstifadəçi adı yarat"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "İstifadəçi adı növü"
- },
"plusAddressedEmail": {
"message": "Plyus ünvanlı e-poçt",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Domeninizin konfiqurasiya edilmiş hamısını yaxalama gələn qutusunu istifadə edin."
},
+ "useThisEmail": {
+ "message": "Bu e-poçtu istifadə et"
+ },
"random": {
"message": "Təsadüfi",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Host adı",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API müraciət tokeni"
- },
"deviceVerification": {
"message": "Cihaz doğrulaması"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Kolleksiya yoxdur"
},
- "canView": {
- "message": "Baxa bilər"
- },
- "canViewExceptPass": {
- "message": "Parollar istisna olmaqla baxa bilər"
- },
- "canEdit": {
- "message": "Düzəliş edə bilər"
- },
- "canEditExceptPass": {
- "message": "Parollar istisna olmaqla düzəliş edə bilər"
- },
"noCollectionsAdded": {
"message": "Heç bir kolleksiya əlavə edilmədi"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Kolleksiya silinməsini sahibləri və adminləri ilə məhdudlaşdır"
},
+ "limitItemDeletionDesc": {
+ "message": "Elementin silinməsini \"İdarə edə bilər\" icazəsinə sahib üzvlərlə məhdudlaşdır"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Sahiblər və adminlər bütün kolleksiyaları və elementləri idarə edə bilər"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL-si",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Domen ləqəbi"
- },
"alreadyHaveAccount": {
"message": "Artıq bir hesabınız var?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Bu kolleksiyanı idarə etmək üçün müraciətiniz yoxdur."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "İdarə edə bilər icazələri əskikdir"
+ "grantManageCollectionWarningTitle": {
+ "message": "\"Kolleksiyanı idarə etmə\" icazələri əskikdir"
},
- "grantAddAccessCollectionWarning": {
- "message": "Kolleksiyanın silinməsi daxil olmaqla tam kolleksiya idarəetməsinə icazə vermək üçün \"İdarə edə bilər\" icazələrini verin."
+ "grantManageCollectionWarning": {
+ "message": "Kolleksiyanın silinməsi daxil olmaqla tam kolleksiya idarəetməsinə icazə vermək üçün \"Kolleksiyanı idarə etmə\" icazələrini verin."
},
"grantCollectionAccess": {
"message": "Qrup və ya üzvlərin bu kolleksiyaya müraciətinə icazə verin."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Açıqlayıcı kod"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "\"Yalnız baxma\" icazələrinə sahib kolleksiyaları silə bilməzsiniz: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Vacib bildiriş"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "İnzibatçılar, artıq götürülmüş domenlərə aid üzv hesablarını silmə imkanına sahibdir."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Bu əməliyyat, seyfdəki bütün elementlər daxil olmaqla üzv hesabını siləcək. Bu, əvvəlki Sil əməliyyatını əvəz edir."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Silmək, yeni bir əməliyyatdır!"
+ },
+ "seatsRemaining": {
+ "message": "Bu təşkilata təyin edilmiş $TOTAL$ yerdən $REMAINING$ yeriniz qalıb. Abunəliyinizi idarə etmək üçün provayderinizlə əlaqə saxlayın.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Mövcud təşkilat"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Provayder Portalınıza əlavə ediləcək təşkilatı seçin."
+ },
+ "noOrganizations": {
+ "message": "Sadalanacaq heç bir təşkilat yoxdur."
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Provayder abunəliyiniz, təşkilatınızın abunəliyində qalan vaxt üçün bir kredit alacaq."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Bu təşkilatı bura əlavə etmək istəyirsiniz: $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Mövcud təşkilat əlavə edildi"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Təyin edilmiş yer sayı, boş yer sayından çoxdur."
}
}
diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json
index d6162821907..8dcb31a1d0f 100644
--- a/apps/web/src/locales/be/messages.json
+++ b/apps/web/src/locales/be/messages.json
@@ -1,24 +1,24 @@
{
"allApplications": {
- "message": "All applications"
+ "message": "Усе праграмы"
},
"criticalApplications": {
- "message": "Critical applications"
+ "message": "Крытычныя праграмы"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Кіраванне доступам"
},
"riskInsights": {
- "message": "Risk Insights"
+ "message": "Разуменне рызык"
},
"passwordRisk": {
- "message": "Password Risk"
+ "message": "Рызыка пароля"
},
"reviewAtRiskPasswords": {
- "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
+ "message": "Праглядайце паролі, якія знаходзяцца ў зоне рызыкі (ненадзейныя, скампраметаваныя або паўторна выкарыстаныя) ва ўсіх вашых праграмах. Выберыце найбольш крытычныя праграмы для вызначэння прыярытэту бяспекі дзеянняў для вашых карыстальнікаў, якія выкарыстоўваюць рызыкоўныя паролі."
},
"dataLastUpdated": {
- "message": "Data last updated: $DATE$",
+ "message": "Апошняе абнаўленне даных: $DATE$",
"placeholders": {
"date": {
"content": "$1",
@@ -27,19 +27,19 @@
}
},
"notifiedMembers": {
- "message": "Notified members"
+ "message": "Апавешчаныя ўдзельнікі"
},
"revokeMembers": {
- "message": "Revoke members"
+ "message": "Адклікаць удзельнікаў"
},
"restoreMembers": {
- "message": "Restore members"
+ "message": "Аднавіць удзельнікаў"
},
"cannotRestoreAccessError": {
- "message": "Cannot restore organization access"
+ "message": "Немагчыма аднавіць доступ да арганізацыі"
},
"allApplicationsWithCount": {
- "message": "All applications ($COUNT$)",
+ "message": "Усе праграмы ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -48,10 +48,10 @@
}
},
"createNewLoginItem": {
- "message": "Create new login item"
+ "message": "Стварыць новы элемент запісу ўваходу"
},
"criticalApplicationsWithCount": {
- "message": "Critical applications ($COUNT$)",
+ "message": "Крытычныя праграмы ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -60,7 +60,7 @@
}
},
"notifiedMembersWithCount": {
- "message": "Notified members ($COUNT$)",
+ "message": "Апавешчаныя ўдзельнікі ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -69,7 +69,7 @@
}
},
"noAppsInOrgTitle": {
- "message": "No applications found in $ORG NAME$",
+ "message": "Праграмы ў $ORG NAME$ не знойдзены",
"placeholders": {
"org name": {
"content": "$1",
@@ -78,43 +78,43 @@
}
},
"noAppsInOrgDescription": {
- "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords."
+ "message": "Тут будуць адлюстроўвацца праграмы па меры таго, як карыстальнікі будуць захоўваць запісы ўваходу, якія знаходзяцца ў зоне рызыкі. Пазначце крытычныя праграмы і апавяшчайце карыстальнікаў аб неабходнасці абнавіць паролі."
},
"noCriticalAppsTitle": {
- "message": "You haven't marked any applications as a Critical"
+ "message": "Вы не пазначылі ніводную праграму ў якасці кратычнай"
},
"noCriticalAppsDescription": {
- "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords."
+ "message": "Выберыце найбольш крытычныя праграмы для выяўлення пароляў, якія знаходзяцца ў зоне рызыкі. Апавяшчайце карыстальнікаў аб неабходнасці змяніць іх."
},
"markCriticalApps": {
- "message": "Mark critical apps"
+ "message": "Пазначыць крытычныя праграмы"
},
"markAppAsCritical": {
- "message": "Mark app as critical"
+ "message": "Пазначыць праграму як крытычную"
},
"appsMarkedAsCritical": {
- "message": "Apps marked as critical"
+ "message": "Праграмы пазначаныя як крытычныя"
},
"application": {
- "message": "Application"
+ "message": "Праграма"
},
"atRiskPasswords": {
- "message": "At-risk passwords"
+ "message": "Паролі ў зоне рызыкі"
},
"requestPasswordChange": {
- "message": "Request password change"
+ "message": "Запытаць змену пароля"
},
"totalPasswords": {
- "message": "Total passwords"
+ "message": "Усяго пароляў"
},
"searchApps": {
- "message": "Search applications"
+ "message": "Пошук праграм"
},
"atRiskMembers": {
- "message": "At-risk members"
+ "message": "Удзельнікі ў зоне рызыкі"
},
"atRiskMembersWithCount": {
- "message": "At-risk members ($COUNT$)",
+ "message": "Удзельнікі ў зоне рызыкі ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -123,7 +123,7 @@
}
},
"atRiskApplicationsWithCount": {
- "message": "At-risk applications ($COUNT$)",
+ "message": "Праграмы ў зоне рызыкі ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -132,13 +132,13 @@
}
},
"atRiskMembersDescription": {
- "message": "These members are logging into applications with weak, exposed, or reused passwords."
+ "message": "Гэтыя ўдзельнікі ўваходзяць у праграму з ненадзейнымі, скампраметаванымі або паўторна выкарыстанымі паролямі."
},
"atRiskApplicationsDescription": {
- "message": "These applications have weak, exposed, or reused passwords."
+ "message": "Гэтыя праграмы маюць ненадзейныя, скампраметаваныя або паўторна выкарыстаныя паролі."
},
"atRiskMembersDescriptionWithApp": {
- "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.",
+ "message": "Гэтыя ўдзельнікі ўваходзяць у праграму $APPNAME$ з ненадзейнымі, скампраметаванымі або паўторна выкарыстанымі паролямі.",
"placeholders": {
"appname": {
"content": "$1",
@@ -147,19 +147,19 @@
}
},
"totalMembers": {
- "message": "Total members"
+ "message": "Усяго ўдзельнікаў"
},
"atRiskApplications": {
- "message": "At-risk applications"
+ "message": "Праграмы ў зоне рызыкі"
},
"totalApplications": {
- "message": "Total applications"
+ "message": "Усяго праграм"
},
"unmarkAsCriticalApp": {
- "message": "Unmark as critical app"
+ "message": "Зняць пазнаку крытычнай праграмы"
},
"criticalApplicationSuccessfullyUnmarked": {
- "message": "Critical application successfully unmarked"
+ "message": "Пазнака з крытычнай праграмы паспяхова знята"
},
"whatTypeOfItem": {
"message": "Які гэта элемент запісу?"
@@ -260,10 +260,10 @@
"message": "Дадаць вэб-сайт"
},
"deleteWebsite": {
- "message": "Delete website"
+ "message": "Выдаліць вэб-сайт"
},
"defaultLabel": {
- "message": "Default ($VALUE$)",
+ "message": "Прадвызначана ($VALUE$)",
"description": "A label that indicates the default value for a field with the current default value in parentheses.",
"placeholders": {
"value": {
@@ -273,7 +273,7 @@
}
},
"showMatchDetection": {
- "message": "Show match detection $WEBSITE$",
+ "message": "Паказаць выяўленне супадзенняў $WEBSITE$",
"placeholders": {
"website": {
"content": "$1",
@@ -282,7 +282,7 @@
}
},
"hideMatchDetection": {
- "message": "Hide match detection $WEBSITE$",
+ "message": "Схаваць выяўленне супадзенняў $WEBSITE$",
"placeholders": {
"website": {
"content": "$1",
@@ -291,7 +291,7 @@
}
},
"autoFillOnPageLoad": {
- "message": "Autofill on page load?"
+ "message": "Аўтазапаўняць пры загрузцы старонкі?"
},
"number": {
"message": "Нумар"
@@ -306,7 +306,7 @@
"message": "Код бяспекі (CVV)"
},
"securityCodeSlashCVV": {
- "message": "Security code / CVV"
+ "message": "Код бяспекі (CVV)"
},
"identityName": {
"message": "Імя пасведчання"
@@ -384,10 +384,10 @@
"message": "Доктар"
},
"cardExpiredTitle": {
- "message": "Expired card"
+ "message": "Картка пратэрмінавана"
},
"cardExpiredMessage": {
- "message": "If you've renewed it, update the card's information"
+ "message": "Калі вы падаўжалі картку, то абнавіце яе звесткі"
},
"expirationMonth": {
"message": "Месяц завяршэння"
@@ -399,7 +399,7 @@
"message": "Ключ аўтэнтыфікацыі (TOTP)"
},
"totpHelperTitle": {
- "message": "Make 2-step verification seamless"
+ "message": "Спрасціце двухэтапную праверку"
},
"totpHelper": {
"message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field."
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Рэдагаваць папку"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Асноўны дамен",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "напр.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Ініцыяваны ўваход"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Адправіць"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Апавяшчэнне было адпраўлена на вашу прыладу."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Версія $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Паўторна генерыраваць пароль"
- },
"length": {
"message": "Даўжыня"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Небяспечная зона"
},
- "dangerZoneDesc": {
- "message": "Асцярожна, гэтыя дзеянні з'яўляюцца незваротнымі!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Скасаваць аўтарызацыю сеанса"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Працягваючы, вы таксама выйдзіце з бягучага сеанса і вам неабходна будзе ўвайсці паўторна. Вы таксама атрымаеце паўторны запыт двухэтапнага ўваходу, калі гэта функцыя ў вас уключана. Сеансы на іншых прыладах могуць заставацца актыўнымі на працягу адной гадзіны."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Аўтарызацыя ўсіх сеансаў скасавана"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Кіраванне"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Адключыць"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Праблема чытання ключа бяспекі. Паспрабуйце яшчэ раз."
},
- "twoFactorWebAuthnWarning": {
- "message": "У сувязі з абмежаваннямі платформы, WebAuthn немагчыма выкарыстоўваць ва ўсіх праграмах Bitwarden. Вам неабходна актываваць іншага пастаўшчыка двухэтапнага ўваходу, каб вы маглі атрымаць доступ да свайго ўліковага запісу, калі немагчыма скарыстацца WebAuthn. Платформы, які падтрымліваюцца:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Вэб-сховішча і пашырэнні браўзера на камп'ютары/ноўтбуку з браўзерам, які падтрымлівае WebAuthn (Chrome, Opera, Vivaldi або Firefox з уключаным FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Ваш код аднаўлення двухэтапнага ўваходу Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Прызначыць патрабаванні для генератара пароляў."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Адна або больш палітык арганізацыі ўплывае на налады генератара."
- },
"masterPasswordPolicyInEffect": {
"message": "Адна або больш палітык арганізацыі патрабуе, каб ваш асноўны пароль адпавядаў наступным патрабаванням:"
},
@@ -6666,15 +6717,6 @@
"message": "Генератар",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Што вы хочаце генерыраваць?"
- },
- "passwordType": {
- "message": "Тып пароля"
- },
- "regenerateUsername": {
- "message": "Паўторна генерыраваць імя карыстальніка"
- },
"generateUsername": {
"message": "Генерыраваць імя карыстальніка"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Тып імя карыстальніка"
- },
"plusAddressedEmail": {
"message": "Адрасы электроннай пошты з плюсам",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Выкарыстоўвайце сваю сканфігураваную скрыню для ўсёй пошты дамена."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Выпадкова",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Назва вузла",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Токен доступу да API"
- },
"deviceVerification": {
"message": "Праверка прылады"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Няма калекцый"
},
- "canView": {
- "message": "Можа праглядаць"
- },
- "canViewExceptPass": {
- "message": "Можа праглядаць (без пароляў)"
- },
- "canEdit": {
- "message": "Можа рэдагаваць"
- },
- "canEditExceptPass": {
- "message": "Можа рэдагаваць (без пароляў)"
- },
"noCollectionsAdded": {
"message": "Няма дадзеных калекцый"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Мянушка дамена"
- },
"alreadyHaveAccount": {
"message": "Ужо маеце ўліковы запіс?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json
index 4101445cc7b..c985e4eb74e 100644
--- a/apps/web/src/locales/bg/messages.json
+++ b/apps/web/src/locales/bg/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Редактиране на папка"
},
+ "newFolder": {
+ "message": "Нова папка"
+ },
+ "folderName": {
+ "message": "Име на папката"
+ },
+ "folderHintText": {
+ "message": "Можете да вложите една папка в друга като въведете името на горната папка, а след това „/“. Пример: Социални/Форуми"
+ },
+ "deleteFolderPermanently": {
+ "message": "Наистина ли искате да изтриете тази папка окончателно?"
+ },
"baseDomain": {
"message": "Основен домейн",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Име на елемента"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Не можете да премахвате колекции с права „Само за преглед“: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "напр.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Вписването е стартирано"
},
+ "logInRequestSent": {
+ "message": "Заявката е изпратена"
+ },
"submit": {
"message": "Подаване"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Към устройството Ви е изпратено известие."
},
+ "notificationSentDevicePart1": {
+ "message": "Отключете Битоурден на устройството си или в "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Опитвате ли се да получите достъп до акаунта си?"
+ },
+ "accessAttemptBy": {
+ "message": "Опит за достъп от $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Разрешаване на достъпа"
+ },
+ "denyAccess": {
+ "message": "Отказване на достъпа"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "приложението по уеб"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Уверете се, че уникалната фраза съвпада с тази по-долу, преди да одобрите."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Отключете Битоурден на устройството си. Уверете се, че уникалната фраза съвпада с тази по-долу, преди да одобрите."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Към устройството Ви е изпратено известие"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Уверете се, че регистрацията Ви е отключена и че уникалната фраза съвпада с другото устройство"
- },
"versionNumber": {
"message": "Версия $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Без нееднозначни знаци",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Друга парола"
- },
"length": {
"message": "Дължина"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "ОПАСНО"
},
- "dangerZoneDesc": {
- "message": "Внимание, тези действия са необратими!"
- },
- "dangerZoneDescSingular": {
- "message": "Внимание, това действие е необратимо!"
- },
"deauthorizeSessions": {
"message": "Прекратяване на сесии"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Действието ще прекрати и текущата ви сесия, след което ще се наложи отново да се впишете. Ако сте включили двустепенна идентификация, ще се наложи да повторите и нея. Активните сесии на другите устройства може да останат такива до един час."
},
+ "newDeviceLoginProtection": {
+ "message": "Вписване от ново устройство"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Изключване на защитата за вписване от ново устройство"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Включване на защитата за вписване от ново устройство"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Продължете по-долу, за да изключите е-писмата за потвърждение, които Битуорден изпраща, когато се вписвате от ново устройство."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Продължете по-долу, за да посочите, че искате Биуорден да изпраща е-писма за потвърждение, когато се вписвате от ново устройство."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Ако защитата за вписване от ново устройство е изключена, всеки, който знае главната Ви парола, ще може да получи достъп до акаунта Ви от всяко устройство. Ако искате да защитите акаунта си без потвърждение чрез е-поща, настройте двустепенното удостоверяване."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Промените на защитата за вписване от ново устройство са запазени"
+ },
"sessionsDeauthorized": {
"message": "Всички сесии са прекратени"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Управление"
},
- "canManage": {
- "message": "Може да управлява"
+ "manageCollection": {
+ "message": "Управление на колекцията"
+ },
+ "viewItems": {
+ "message": "Преглед на елементите"
+ },
+ "viewItemsHidePass": {
+ "message": "Преглед на елементите, със скрити пароли"
+ },
+ "editItems": {
+ "message": "Редактиране на елементите"
+ },
+ "editItemsHidePass": {
+ "message": "Редактиране на елементите, със скрити пароли"
},
"disable": {
"message": "Изключване"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Проблем при изчитането на ключа за сигурност. Пробвайте отново."
},
- "twoFactorWebAuthnWarning": {
- "message": "Поради платформени ограничения устройствата на WebAuthn не могат да се използват с всички приложения на Битуорден. В такъв случай ще трябва да добавите друг доставчик на двустепенно удостоверяване, за да имате достъп до абонамента си, дори когато WebAuthn не работи. Поддържани платформи:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Трезорът по уеб както и разширенията за браузърите с поддръжка на WebAuthn (Chrome, Opera, Vivaldi и Firefox с поддръжка на FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Поради платформени ограничения устройствата на WebAuthn не могат да се използват с всички приложения на Битуорден. Ще трябва да настроите друг доставчик на двустепенно удостоверяване, за да имате достъп до акаунта си, когато WebAuthn не може да се ползва."
},
"twoFactorRecoveryYourCode": {
"message": "Код за възстановяване на достъпа до Битуорден при двустепенна идентификация"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Задаване на минимална сила на генератора на пароли."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Поне една политика на организация влияе на настройките на генерирането на паролите."
- },
"masterPasswordPolicyInEffect": {
"message": "Поне една политика на организация има следните изисквания към главната ви парола:"
},
@@ -6666,15 +6717,6 @@
"message": "Генератор",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Какво бихте искали да генерирате?"
- },
- "passwordType": {
- "message": "Тип парола"
- },
- "regenerateUsername": {
- "message": "Повторно генериране на потр. име"
- },
"generateUsername": {
"message": "Генериране на потр. име"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Тип потребителско име"
- },
"plusAddressedEmail": {
"message": "Адрес на е-поща с плюс",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Използване на тази е-поща"
+ },
"random": {
"message": "Произволно",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Име на сървъра",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Идентификатор за достъп до API"
- },
"deviceVerification": {
"message": "Потвърждаване на устройствата"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Няма колекция"
},
- "canView": {
- "message": "Може да преглежда"
- },
- "canViewExceptPass": {
- "message": "Може да преглежда, без пароли"
- },
- "canEdit": {
- "message": "Може да редактира"
- },
- "canEditExceptPass": {
- "message": "Може да редактира, без пароли"
- },
"noCollectionsAdded": {
"message": "Няма добавени колекции"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Ограничаване на изтриването на колекции, така че да може да се извършва само от собствениците и администраторите"
},
+ "limitItemDeletionDesc": {
+ "message": "Ограничаване на изтриването на елементи, така че да може да се извършва само от членове с правомощие за управление"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Собствениците и администраторите могат да управляват всички колекции и елементи"
},
@@ -8656,9 +8686,6 @@
"message": "Адрес на собствения сървър",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Псевдонимен домейн"
- },
"alreadyHaveAccount": {
"message": "Вече имате регистрация?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Нямате достъп за управление на тази колекция."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Липсват правомощия за управление"
+ "grantManageCollectionWarningTitle": {
+ "message": "Липсват правомощия за управление на колекции"
},
- "grantAddAccessCollectionWarning": {
- "message": "Дайте правомощия за управление, за да позволите пълното управление на колекции, включително изтриването им."
+ "grantManageCollectionWarning": {
+ "message": "Дайте правомощия за управление на колекциите, за да позволите пълното управление на колекции, включително изтриването им."
},
"grantCollectionAccess": {
"message": "Дайте права на групи и членове до тази колекция."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Код от описанието"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Не можете да премахвате колекции с права „Само за преглед“: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Важно съобщение"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Администраторите вече имат възможността да изтриват акаунтите на членовете, които принадлежат към присвоен домейн."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Това действие ще изтрие акаунта на члена, включително всички елементи в неговия трезор. Това заменя предишното действие за Премахване."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Изтриването е ново действие!"
+ },
+ "seatsRemaining": {
+ "message": "Остават Ви $REMAINING$ от общо $TOTAL$ места в тази организация. Свържете се с доставчика си, ако искате да управлявате абонамента си.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Съществуваща организация"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Изберете организацията, която искате да добавите към своя Портал за доставчици."
+ },
+ "noOrganizations": {
+ "message": "Няма организации за показване"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Вашият абонамент за доставчик ще получи кредит за оставащото време в абонамента на организацията, ако има такова."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Искате ли да добавите тази организация към $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Добавена е съществуваща организация"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Назначените места превишават наличния брой."
}
}
diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json
index b8e792b4466..c2b6fdf4671 100644
--- a/apps/web/src/locales/bn/messages.json
+++ b/apps/web/src/locales/bn/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "ফোল্ডার সম্পাদনা"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "ভিত্তি ডোমেইন",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "উদাহরণ",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "সংস্করণ $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "পাসওয়ার্ড উৎপাদকের কনফিগারেশনের জন্য ন্যূনতম প্রয়োজনীয়তা সেট করুন।"
},
- "passwordGeneratorPolicyInEffect": {
- "message": "এক বা একাধিক সংস্থার নীতিগুলি আপনার উৎপাদকের সেটিংসকে প্রভাবিত করছে।"
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json
index 242679272f8..a4750d36eac 100644
--- a/apps/web/src/locales/bs/messages.json
+++ b/apps/web/src/locales/bs/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Uredite folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Osnovni domen",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "npr.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Verzija $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json
index 1eaa7fcea95..b9e8f0f2336 100644
--- a/apps/web/src/locales/ca/messages.json
+++ b/apps/web/src/locales/ca/messages.json
@@ -3,22 +3,22 @@
"message": "Totes les aplicacions"
},
"criticalApplications": {
- "message": "Critical applications"
+ "message": "Aplicacions crítiques"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Intel·ligència d'accés"
},
"riskInsights": {
- "message": "Risk Insights"
+ "message": "Coneixements de risc"
},
"passwordRisk": {
- "message": "Password Risk"
+ "message": "Risc de contrasenya"
},
"reviewAtRiskPasswords": {
- "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
+ "message": "Reviseu les contrasenyes de risc (febles, exposades o reutilitzades) a totes les aplicacions. Seleccioneu les aplicacions més crítiques per prioritzar les accions de seguretat perquè els usuaris aborden les contrasenyes de risc."
},
"dataLastUpdated": {
- "message": "Data last updated: $DATE$",
+ "message": "Última actualització de les dades: $DATE$",
"placeholders": {
"date": {
"content": "$1",
@@ -27,19 +27,19 @@
}
},
"notifiedMembers": {
- "message": "Notified members"
+ "message": "Membres notificats"
},
"revokeMembers": {
- "message": "Revoke members"
+ "message": "Revoca membres"
},
"restoreMembers": {
- "message": "Restore members"
+ "message": "Restaura membres"
},
"cannotRestoreAccessError": {
- "message": "Cannot restore organization access"
+ "message": "No es pot restaurar l'accés a l'organització"
},
"allApplicationsWithCount": {
- "message": "All applications ($COUNT$)",
+ "message": "Totes les aplicacions ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -48,10 +48,10 @@
}
},
"createNewLoginItem": {
- "message": "Create new login item"
+ "message": "Crea un nou element d'inici de sessió"
},
"criticalApplicationsWithCount": {
- "message": "Critical applications ($COUNT$)",
+ "message": "Aplicacions crítiques ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -60,7 +60,7 @@
}
},
"notifiedMembersWithCount": {
- "message": "Notified members ($COUNT$)",
+ "message": "Membres notificats ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -102,13 +102,13 @@
"message": "At-risk passwords"
},
"requestPasswordChange": {
- "message": "Request password change"
+ "message": "Sol·licita canvi de contrasenya"
},
"totalPasswords": {
- "message": "Total passwords"
+ "message": "Contrasenyes totals"
},
"searchApps": {
- "message": "Search applications"
+ "message": "Cerca d'aplicacions"
},
"atRiskMembers": {
"message": "At-risk members"
@@ -147,7 +147,7 @@
}
},
"totalMembers": {
- "message": "Total members"
+ "message": "Nombre total de membres"
},
"atRiskApplications": {
"message": "At-risk applications"
@@ -232,7 +232,7 @@
}
},
"itemHistory": {
- "message": "Item history"
+ "message": "Historial d'elements"
},
"authenticatorKey": {
"message": "Clau autenticadora"
@@ -432,17 +432,17 @@
"message": "Booleà"
},
"cfTypeCheckbox": {
- "message": "Checkbox"
+ "message": "Casella de selecció"
},
"cfTypeLinked": {
"message": "Enllaçat",
"description": "This describes a field that is 'linked' (related) to another field."
},
"fieldType": {
- "message": "Field type"
+ "message": "Tipus de camp"
},
"fieldLabel": {
- "message": "Field label"
+ "message": "Etiqueta del camp"
},
"remove": {
"message": "Suprimeix"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edita la carpeta"
},
+ "newFolder": {
+ "message": "Carpeta nova"
+ },
+ "folderName": {
+ "message": "Nom de la carpeta"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Domini base",
"description": "Domain name. Example: website.com"
@@ -508,7 +520,7 @@
"message": "Genera contrasenya"
},
"generatePassphrase": {
- "message": "Generate passphrase"
+ "message": "Genera frase de pas"
},
"checkPassword": {
"message": "Comprova si la contrasenya ha estat exposada."
@@ -611,7 +623,7 @@
"message": "Nota segura"
},
"typeSshKey": {
- "message": "SSH key"
+ "message": "Clau SSH"
},
"typeLoginPlural": {
"message": "Inicis de sessió"
@@ -644,7 +656,7 @@
"message": "Nom complet"
},
"address": {
- "message": "Address"
+ "message": "Adreça"
},
"address1": {
"message": "Adreça 1"
@@ -689,7 +701,7 @@
"message": "Visualitza l'element"
},
"newItemHeader": {
- "message": "New $TYPE$",
+ "message": "Nou $TYPE$",
"placeholders": {
"type": {
"content": "$1",
@@ -698,7 +710,7 @@
}
},
"editItemHeader": {
- "message": "Edit $TYPE$",
+ "message": "Edita $TYPE$",
"placeholders": {
"type": {
"content": "$1",
@@ -707,7 +719,7 @@
}
},
"viewItemType": {
- "message": "View $ITEMTYPE$",
+ "message": "Mostra $ITEMTYPE$",
"placeholders": {
"itemtype": {
"content": "$1",
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nom d'element"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -761,7 +764,7 @@
}
},
"copySuccessful": {
- "message": "Copy Successful"
+ "message": "Còpia correcta"
},
"copyValue": {
"message": "Copia el valor",
@@ -772,11 +775,11 @@
"description": "Copy password to clipboard"
},
"copyPassphrase": {
- "message": "Copy passphrase",
+ "message": "Copia frase de pas",
"description": "Copy passphrase to clipboard"
},
"passwordCopied": {
- "message": "Password copied"
+ "message": "S'ha copiat la contrasenya"
},
"copyUsername": {
"message": "Copia el nom d'usuari",
@@ -795,7 +798,7 @@
"description": "Copy URI to clipboard"
},
"copyCustomField": {
- "message": "Copy $FIELD$",
+ "message": "Copia $FIELD$",
"placeholders": {
"field": {
"content": "$1",
@@ -804,31 +807,31 @@
}
},
"copyWebsite": {
- "message": "Copy website"
+ "message": "Copia el lloc web"
},
"copyNotes": {
- "message": "Copy notes"
+ "message": "Copia notes"
},
"copyAddress": {
- "message": "Copy address"
+ "message": "Copia l'adreça"
},
"copyPhone": {
- "message": "Copy phone"
+ "message": "Copia telèfon"
},
"copyEmail": {
- "message": "Copy email"
+ "message": "Copia el correu electrònic"
},
"copyCompany": {
- "message": "Copy company"
+ "message": "Copia empresa"
},
"copySSN": {
- "message": "Copy Social Security number"
+ "message": "Copia número de la Seguretat Social"
},
"copyPassportNumber": {
- "message": "Copy passport number"
+ "message": "Copia el número de passaport"
},
"copyLicenseNumber": {
- "message": "Copy license number"
+ "message": "Copia el número de llicència"
},
"copyName": {
"message": "Copia el nom"
@@ -922,7 +925,7 @@
}
},
"itemsMovedToOrg": {
- "message": "Items moved to $ORGNAME$",
+ "message": "S'han desplaçat elements a $ORGNAME$",
"placeholders": {
"orgname": {
"content": "$1",
@@ -931,7 +934,7 @@
}
},
"itemMovedToOrg": {
- "message": "Item moved to $ORGNAME$",
+ "message": "S'ha desplaçat un element a $ORGNAME$",
"placeholders": {
"orgname": {
"content": "$1",
@@ -985,25 +988,25 @@
"message": "Nivell d'accés"
},
"accessing": {
- "message": "Accessing"
+ "message": "Accedint a"
},
"loggedOut": {
"message": "Sessió tancada"
},
"loggedOutDesc": {
- "message": "You have been logged out of your account."
+ "message": "Heu tancat la sessió del compte."
},
"loginExpired": {
"message": "La vostra sessió ha caducat."
},
"restartRegistration": {
- "message": "Restart registration"
+ "message": "Reinicia el registre"
},
"expiredLink": {
"message": "Enllaç caducat"
},
"pleaseRestartRegistrationOrTryLoggingIn": {
- "message": "Please restart registration or try logging in."
+ "message": "Reinicieu el registre o proveu d'iniciar sessió."
},
"youMayAlreadyHaveAnAccount": {
"message": "És possible que ja tingueu un compte"
@@ -1033,7 +1036,7 @@
"message": "L'inici de sessió amb el dispositiu ha d'estar activat a la configuració de l'aplicació Bitwarden. Necessiteu una altra opció?"
},
"needAnotherOptionV1": {
- "message": "Need another option?"
+ "message": "Necessiteu una altra opció?"
},
"loginWithMasterPassword": {
"message": "Inici de sessió amb contrasenya mestra"
@@ -1048,13 +1051,13 @@
"message": "Utilitzeu un mètode d'inici de sessió diferent"
},
"logInWithPasskey": {
- "message": "Log in with passkey"
+ "message": "Inicieu sessió amb la clau de pas"
},
"useSingleSignOn": {
- "message": "Use single sign-on"
+ "message": "Usa inici de sessió únic"
},
"welcomeBack": {
- "message": "Welcome back"
+ "message": "Benvingut/da de nou"
},
"invalidPasskeyPleaseTryAgain": {
"message": "Clau d'accés no vàlida. Torneu-ho a provar."
@@ -1138,7 +1141,7 @@
"message": "Crea un compte"
},
"newToBitwarden": {
- "message": "New to Bitwarden?"
+ "message": "Nou a Bitwarden?"
},
"setAStrongPassword": {
"message": "Estableix una contrasenya segura"
@@ -1156,32 +1159,35 @@
"message": "Inicia sessió"
},
"logInToBitwarden": {
- "message": "Log in to Bitwarden"
+ "message": "Inicia sessió a Bitwarden"
},
"authenticationTimeout": {
- "message": "Authentication timeout"
+ "message": "Temps d'espera d'autenticació"
},
"authenticationSessionTimedOut": {
- "message": "The authentication session timed out. Please restart the login process."
+ "message": "La sessió d'autenticació s'ha esgotat. Reinicieu el procés d'inici de sessió."
},
"verifyIdentity": {
"message": "Verificació de la vostra identitat"
},
"weDontRecognizeThisDevice": {
- "message": "We don't recognize this device. Enter the code sent to your email to verify your identity."
+ "message": "No reconeixem aquest dispositiu. Introduïu el codi que us hem enviat al correu electrònic per verificar la identitat."
},
"continueLoggingIn": {
- "message": "Continue logging in"
+ "message": "Continua l'inici de sessió"
},
"whatIsADevice": {
- "message": "What is a device?"
+ "message": "Què és un dispositiu?"
},
"aDeviceIs": {
- "message": "A device is a unique installation of the Bitwarden app where you have logged in. Reinstalling, clearing app data, or clearing your cookies could result in a device appearing multiple times."
+ "message": "Un dispositiu és una instal·lació única de l'aplicació Bitwarden on heu iniciat la sessió. Si torneu a instal·lar, suprimir les dades de l'aplicació o suprimir les galetes, pot ser que un dispositiu aparega diverses vegades."
},
"logInInitiated": {
"message": "S'ha iniciat la sessió"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Envia"
},
@@ -1213,7 +1219,7 @@
"message": "Pista de la contrasenya mestra (opcional)"
},
"newMasterPassHint": {
- "message": "New master password hint (optional)"
+ "message": "Pista de la contrasenya mestra (opcional)"
},
"masterPassHintLabel": {
"message": "Pista de la contrasenya mestra"
@@ -1235,16 +1241,16 @@
"message": "Configuració"
},
"accountEmail": {
- "message": "Account email"
+ "message": "Correu electrònic del compte"
},
"requestHint": {
- "message": "Request hint"
+ "message": "Sol·licita pista"
},
"requestPasswordHint": {
- "message": "Request password hint"
+ "message": "Sol·licita pista de la contrasenya"
},
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
- "message": "Enter your account email address and your password hint will be sent to you"
+ "message": "Introduïu l'adreça de correu electrònic del compte i se us enviarà la pista de contrasenya"
},
"passwordHint": {
"message": "Pista de la contrasenya"
@@ -1284,10 +1290,10 @@
"message": "El vostre compte s'ha creat correctament. Ara ja podeu entrar."
},
"newAccountCreated2": {
- "message": "Your new account has been created!"
+ "message": "S'ha creat el vostre compte nou!"
},
"youHaveBeenLoggedIn": {
- "message": "You have been logged in!"
+ "message": "Heu iniciat sessió!"
},
"trialAccountCreated": {
"message": "Compte creat amb èxit."
@@ -1308,7 +1314,7 @@
"message": "La caixa forta està bloquejada"
},
"yourAccountIsLocked": {
- "message": "Your account is locked"
+ "message": "El compte està bloquejat"
},
"uuid": {
"message": "UUID"
@@ -1371,11 +1377,38 @@
"notificationSentDevice": {
"message": "S'ha enviat una notificació al vostre dispositiu."
},
- "aNotificationWasSentToYourDevice": {
- "message": "A notification was sent to your device"
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirmeu l'accés"
+ },
+ "denyAccess": {
+ "message": "Denega l'accés"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "aplicació web"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "aNotificationWasSentToYourDevice": {
+ "message": "S'ha enviat una notificació al vostre dispositiu"
},
"versionNumber": {
"message": "Versió $VERSION_NUMBER$",
@@ -1480,7 +1513,7 @@
"message": "Correu electrònic"
},
"emailDescV2": {
- "message": "Enter a code sent to your email."
+ "message": "Introduïu el codi que us hem enviat al correu electrònic."
},
"continue": {
"message": "Continua"
@@ -1661,12 +1694,9 @@
"description": "deprecated. Use avoidAmbiguous instead."
},
"avoidAmbiguous": {
- "message": "Avoid ambiguous characters",
+ "message": "Eviteu caràcters ambigus",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenera contrasenya"
- },
"length": {
"message": "Longitud"
},
@@ -1702,29 +1732,29 @@
"message": "Inclou número"
},
"generatorPolicyInEffect": {
- "message": "Enterprise policy requirements have been applied to your generator options.",
+ "message": "Els requisits de la política empresarial s'han aplicat a les opcions del generador.",
"description": "Indicates that a policy limits the credential generator screen."
},
"passwordHistory": {
"message": "Historial de les contrasenyes"
},
"generatorHistory": {
- "message": "Generator history"
+ "message": "Historial del generador"
},
"clearGeneratorHistoryTitle": {
- "message": "Clear generator history"
+ "message": "Neteja l'historial del generador"
},
"cleargGeneratorHistoryDescription": {
- "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
+ "message": "Si continueu, totes les entrades se suprimiran permanentment de l'historial del generador. Esteu segur que voleu continuar?"
},
"noPasswordsInList": {
"message": "No hi ha cap contrasenya a llistar."
},
"clearHistory": {
- "message": "Clear history"
+ "message": "Neteja l'historial"
},
"nothingToShow": {
- "message": "Nothing to show"
+ "message": "Res a mostrar"
},
"nothingGeneratedRecently": {
"message": "You haven't generated anything recently"
@@ -1767,10 +1797,10 @@
"message": "Torneu a iniciar sessió."
},
"currentSession": {
- "message": "Current session"
+ "message": "Sessió actual"
},
"requestPending": {
- "message": "Request pending"
+ "message": "Sol·licitud pendent"
},
"logBackInOthersToo": {
"message": "Torneu a iniciar la sessió. Si esteu utilitzant altres aplicacions Bitwarden, tanqueu-les i torneu-les a obrir també."
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona perillosa"
},
- "dangerZoneDesc": {
- "message": "Aneu amb compte, aquestes accions no són reversibles!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Desautoritza sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "El procediment també tancarà la sessió actual, i l'heu de tornar a iniciar. També demanarà iniciar la sessió en dues passes, si està habilitada. Les sessions actives d'altres dispositius poden mantenir-se actives fins a una hora."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Totes les sessions estan desautoritzades"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Administra"
},
- "canManage": {
- "message": "Pot gestionar"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edita elements"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Inhabilita"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Hi ha hagut un problema en llegir la clau de seguretat. Torneu-ho a provar."
},
- "twoFactorWebAuthnWarning": {
- "message": "A causa de les limitacions de la plataforma, WebAuthn no es pot utilitzar en totes les aplicacions Bitwarden. Heu d’habilitar un altre proveïdor d’inici de sessió en dos passos perquè pugueu accedir al vostre compte quan no es puga utilitzar WebAuthn. Plataformes compatibles:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Caixa forta web i extensions de navegador en un escriptori/portàtil amb un navegador compatible amb WebAuthn (Chrome, Opera, Vivaldi, o Firefox amb FIDO U2F activat)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "El codi de recuperació d'inici de sessió en dues passes de Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Estableix els requisits mínims per a la configuració del generador de contrasenyes."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Una o més polítiques d’organització afecten la configuració del generador."
- },
"masterPasswordPolicyInEffect": {
"message": "Una o més polítiques d’organització requereixen que la vostra contrasenya principal complisca els requisits següents:"
},
@@ -6666,15 +6717,6 @@
"message": "Generador",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Què voleu generar?"
- },
- "passwordType": {
- "message": "Tipus de contrasenya"
- },
- "regenerateUsername": {
- "message": "Regenera el nom d'usuari"
- },
"generateUsername": {
"message": "Genera un nom d'usuari"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tipus de nom d'usuari"
- },
"plusAddressedEmail": {
"message": "Adreça amb sufix",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Utilitzeu la safata d'entrada global configurada del vostre domini."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Aleatori",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Nom de l'amfitrió",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token d'accés a l'API"
- },
"deviceVerification": {
"message": "Verificació del dispositiu"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Cap col·lecció"
},
- "canView": {
- "message": "Pot veure"
- },
- "canViewExceptPass": {
- "message": "Pot veure, excepte les contrasenyes"
- },
- "canEdit": {
- "message": "Pot editar"
- },
- "canEditExceptPass": {
- "message": "Pot editar, excepte les contrasenyes"
- },
"noCollectionsAdded": {
"message": "No s'han afegit col·leccions"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Els propietaris i els administradors poden gestionar totes les col·leccions i articles"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alies de domini"
- },
"alreadyHaveAccount": {
"message": "Ja tens un compte?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "No teniu accés per gestionar aquesta col·lecció."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Concedeix als grups o membres l'accés a aquesta col·lecció."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json
index ef9d0e5968c..4fa1a50512c 100644
--- a/apps/web/src/locales/cs/messages.json
+++ b/apps/web/src/locales/cs/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Upravit složku"
},
+ "newFolder": {
+ "message": "Nová složka"
+ },
+ "folderName": {
+ "message": "Název složky"
+ },
+ "folderHintText": {
+ "message": "Vnořte složku přidáním názvu nadřazené složky následovaného znakem \"/\". Příklad: Sociální/Fóra"
+ },
+ "deleteFolderPermanently": {
+ "message": "Opravdu chcete trvale smazat tuto složku?"
+ },
"baseDomain": {
"message": "Základní doména",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Název položky"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Nemůžete odebrat kolekce s oprávněními jen pro zobrazení: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "např.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Bylo zahájeno přihlášení"
},
+ "logInRequestSent": {
+ "message": "Požadavek odeslán"
+ },
"submit": {
"message": "Odeslat"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Na Vaše zařízení bylo odesláno oznámení."
},
+ "notificationSentDevicePart1": {
+ "message": "Odemknout Bitwarden na Vašem zařízení nebo na "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Pokoušíte se získat přístup k Vašemu účtu?"
+ },
+ "accessAttemptBy": {
+ "message": "Pokus o přístup z $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Potvrdit přístup"
+ },
+ "denyAccess": {
+ "message": "Zamítnout přístup"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "webová aplikace"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Před schválením se ujistěte, že fráze otisku prstu odpovídá frázi níže."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Odemkněte Bitwarden na Vašem zařízení. Před schválením se ujistěte, že fráze otisku prstu odpovídá frázi níže."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Na Vaše zařízení bylo odesláno oznámení"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Ujistěte se, že je Váš trezor odemčen a fráze otisku prstu se shodují s druhým zařízením"
- },
"versionNumber": {
"message": "Verze $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Nepoužívat zaměnitelné znaky",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Vygenerovat jiné heslo"
- },
"length": {
"message": "Délka"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Nebezpečná zóna"
},
- "dangerZoneDesc": {
- "message": "Opatrně. Tyto akce se nedají vrátit!"
- },
- "dangerZoneDescSingular": {
- "message": "Opatrně, tato akce je nevratná!"
- },
"deauthorizeSessions": {
"message": "Zrušit autorizaci relací"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Pokud chcete pokračovat, budete také odhlášeni z aktuální relace a bude nutné se znovu přihlásit. Pokud používáte dvoufázové přihlášení, bude také vyžadováno. Aktivní relace na jiných zařízeních mohou nadále zůstat aktivní po dobu až jedné hodiny."
},
+ "newDeviceLoginProtection": {
+ "message": "Nové přihlášení do zařízení"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Vypnout ochranu pro přihlášení z nového zařízení"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Zapnout ochranu pro přihlášení z nového zařízení"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Pokračujte níže a vypněte ověřovací e-maily od Bitwardenu, když se přihlásíte z nového zařízení."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Níže postupujte tak, aby Vám Bitwarden zasílal ověřovací e-maily při přihlášení z nového zařízení."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Pokud je ochrana přihlášení z nového zařízení vypnutá, může kdokoli s Vaším hlavním heslem přistupovat k Vašemu účtu z libovolného zařízení. Chcete-li svůj účet chránit bez ověřovacích e-mailů, nastavte dvoufázové přihlašování."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Změny ochrany přihlášení z nového zařízení byly uloženy"
+ },
"sessionsDeauthorized": {
"message": "Všechny relace byly zrušeny"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Spravovat"
},
- "canManage": {
- "message": "Může spravovat"
+ "manageCollection": {
+ "message": "Spravovat kolekci"
+ },
+ "viewItems": {
+ "message": "Zobrazit položky"
+ },
+ "viewItemsHidePass": {
+ "message": "Zobrazit položky, skrytá hesla"
+ },
+ "editItems": {
+ "message": "Upravit položky"
+ },
+ "editItemsHidePass": {
+ "message": "Upravit položky, skrytá hesla"
},
"disable": {
"message": "Vypnout"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Při čtení bezpečnostního klíče došlo k potížím. Zkuste to znovu."
},
- "twoFactorWebAuthnWarning": {
- "message": "Z důvodu omezení platformy nelze WebAuthn použít ve všech aplikacích Bitwarden. Měli byste využít i jiného poskytovatele dvoufaktorového přihlášení, abyste měli přístup ke svému účtu, když nelze použít WebAuthn. Podporované platformy:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Webový trezor a rozšíření pro prohlížeče na počítači/notebooku s podporou WebAuthn (Chrome, Opera, Vivaldi nebo Firefox se zapnutým FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Z důvodu omezení platformy nelze WebAuthn použít ve všech aplikacích Bitwarden. Měli byste využít i jiného poskytovatele dvoufaktorového přihlášení, abyste měli přístup ke svému účtu, když nelze použít WebAuthn."
},
"twoFactorRecoveryYourCode": {
"message": "Váš kód pro obnovení dvoufázového přihlášení"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Nastaví požadavky pro generátor hesel."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Jedna nebo více zásad organizace ovlivňují nastavení generátoru."
- },
"masterPasswordPolicyInEffect": {
"message": "Jedna nebo více zásad organizace vyžaduje, aby hlavní heslo splňovalo následující požadavky:"
},
@@ -6666,15 +6717,6 @@
"message": "Generátor",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Co chcete vygenerovat?"
- },
- "passwordType": {
- "message": "Typ hesla"
- },
- "regenerateUsername": {
- "message": "Znovu vygenerovat uživatelské jméno"
- },
"generateUsername": {
"message": "Vygenerovat uživatelské jméno"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Typ uživatelského jména"
- },
"plusAddressedEmail": {
"message": "E-mailová adresa s plusem",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Použijte nakonfigurovanou univerzální schránku své domény."
},
+ "useThisEmail": {
+ "message": "Použít tento e-mail"
+ },
"random": {
"message": "Náhodně",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Název hostitele",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Přístupový token API"
- },
"deviceVerification": {
"message": "Ověřování zařízení"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Žádná kolekce"
},
- "canView": {
- "message": "Může zobrazit"
- },
- "canViewExceptPass": {
- "message": "Může zobrazit kromě hesel"
- },
- "canEdit": {
- "message": "Může upravovat"
- },
- "canEditExceptPass": {
- "message": "Může upravovat kromě hesel"
- },
"noCollectionsAdded": {
"message": "Nebyly přidány žádné kolekce"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Omezí mazání kolekce na vlastníky a správce"
},
+ "limitItemDeletionDesc": {
+ "message": "Omezit smazání položky na členy s oprávněním ke správě"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Vlastníci a správci mohou spravovat všechny kolekce a předměty"
},
@@ -8656,9 +8686,6 @@
"message": "Adresa URL serveru vlastního hostování",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Doména aliasu"
- },
"alreadyHaveAccount": {
"message": "Už máte účet?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Nemáte přístup ke správě této kolekce."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Chybějící oprávnění \"Může spravovat\""
+ "grantManageCollectionWarningTitle": {
+ "message": "Chybějící oprávnění pro správu kolekcí"
},
- "grantAddAccessCollectionWarning": {
- "message": "Udělte oprávnění \"Může spravovat\" pro úplnou správu kolekce, včetně jejího smazání."
+ "grantManageCollectionWarning": {
+ "message": "Udělte oprávnění \"Spravovat kolekci\" pro úplnou správu kolekce, včetně jejího smazání."
},
"grantCollectionAccess": {
"message": "Udělí skupinám nebo členům přístup k této kolekci."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Kód z popisu"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Nemůžete odebrat kolekce s oprávněními jen pro zobrazení: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Důležité upozornění"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Správci mají nyní možnost smazat účty členů, které patří k nárokované doméně."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Tato akce smaže účet uživatele včetně všech jeho položek v trezoru. Tím se nahradí předchozí akce odebrání."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Smazat je nová akce!"
+ },
+ "seatsRemaining": {
+ "message": "Máte zbývajících $REMAINING$ uživatelů z $TOTAL$ uživatelů přidělených této organizaci. Kontaktujte svého poskytovatele pro správu předplatného.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existující organizace"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Vyberte organizaci pro přidání do portálu poskytovatele."
+ },
+ "noOrganizations": {
+ "message": "Žádné organizace k zobrazení"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Předplatné poskytovatele obdrží kredit za zbývající čas v předplatném organizace."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Chcete přidat tuto organizaci do $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Přidána existující organizace"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Přiřazení uživatelé překračují dostupné uživatele."
}
}
diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json
index 3c5141cdf79..01c4f390ddc 100644
--- a/apps/web/src/locales/cy/messages.json
+++ b/apps/web/src/locales/cy/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json
index 4f05af78def..bd357b4cba4 100644
--- a/apps/web/src/locales/da/messages.json
+++ b/apps/web/src/locales/da/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Redigér mappe"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Basisdomæne",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Emnenavn"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Samlinger med kun tilladelsen Vis kan ikke fjernes: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "eks.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Indlogning påbegyndt"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Indsend"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "En notifikation er sendt til din enhed."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "En notifikation er sendt til enheden"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Sørg for, at boksen er oplåst, samt at fingeraftrykssætningen matcher på den anden enhed"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Undgå tvetydige tegn",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerér adgangskode"
- },
"length": {
"message": "Længde"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Farezone"
},
- "dangerZoneDesc": {
- "message": "Pas på, disse handlinger er irreversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Forsigtig, denne handling er irreversibel!"
- },
"deauthorizeSessions": {
"message": "Fjern sessionsgodkendelser"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Fortsættes, logges man også ud af denne session og vil skulle logge ind igen. Der anmodes også om totrins-login igen, såfremt funktionen er opsat. Aktive sessioner på andre enheder kan forblive aktive i op til én time."
},
+ "newDeviceLoginProtection": {
+ "message": "Nyt enheds-login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Slå nyt enheds-login beskyttelse fra"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Slå nyt enheds-login beskyttelse til"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Fortsæt nedenfor for at deaktivere Bitwarden-bekræftelsesmails ved indlogning fra en ny enhed."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Fortsæt nedenfor for at få tilsendt Bitwarden-bekræftelsesmails ved indlogning fra en ny enhed."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Med den nye enheds-login beskyttelse slået fra kan alle med hovedadgangskoden tilgå brugerkontoen fra enhver enhed. For at beskytte brugerkontoen uden bekræftelsesmails, opsæt totrins-login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Ændringer i ny enheds-login beskyttelse er gemt"
+ },
"sessionsDeauthorized": {
"message": "Godkendelser for alle sessioner fjernet"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Håndtér"
},
- "canManage": {
- "message": "Kan håndtere"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Deaktivér"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Problem med at læse sikkerhedsnøglen. Forsøg igen."
},
- "twoFactorWebAuthnWarning": {
- "message": "Grundet platformsbegrænsninger kan WebAuthn ikke bruges i alle Bitwarden-applikationer. Man bør opsætte en anden totrins-loginudbyder, så man kan tilgå sin konto, når WebAuthn ikke kan benyttes. Understøttede platforme:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web-boks og browserudvidelser på en stationær/bærbar computer med en WebAuthn-aktiveret browser (Chrome, Opera, Vivaldi eller Firefox med FIDO U2F aktiveret)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Gendannelseskoden til Bitwarden totrins-login"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Angiv krav til adgangskodegenerator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Én eller flere organisationspolitikker påvirker dine generatorindstillinger."
- },
"masterPasswordPolicyInEffect": {
"message": "Én eller flere organisationspolitikker kræver din hovedadgangskode opfylder følgende krav:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Hvad ønskes genereret?"
- },
- "passwordType": {
- "message": "Adgangskodetype"
- },
- "regenerateUsername": {
- "message": "Regenerér brugernavn"
- },
"generateUsername": {
"message": "Generér brugernavn"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Brugernavnstype"
- },
"plusAddressedEmail": {
"message": "Plus adresseret e-mail",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Brug den for domænet opsatte Fang-alle indbakke."
},
+ "useThisEmail": {
+ "message": "Benyt denne e-mail"
+ },
"random": {
"message": "Tilfældig",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Værtsnavn",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API-adgangstoken"
- },
"deviceVerification": {
"message": "Enhedsbekræftelse"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Ingen samling"
},
- "canView": {
- "message": "Kan se"
- },
- "canViewExceptPass": {
- "message": "Kan se, undtagen adgangskoder"
- },
- "canEdit": {
- "message": "Kan redigere"
- },
- "canEditExceptPass": {
- "message": "Kan redigere, undtagen adgangskoder"
- },
"noCollectionsAdded": {
"message": "Ingen samlinger tilføjet"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Begræns samlingsslettelse til ejere og admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Ejere og admins kan håndtere alle samlinger og emner"
},
@@ -8656,9 +8686,6 @@
"message": "URL til selv-hostet server",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Aliasdomæne"
- },
"alreadyHaveAccount": {
"message": "Har allerede en konto?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Du har ikke adgang til at håndtere denne samling."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Manglende Kan håndtere tilladelser"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Tildel Kan håndtere tilladelser for at tillade fuld samlingshåndtering, herunder sletning af samling."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Tildel grupper eller medlemmer adgang til denne samling."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Beskrivelseskode"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Samlinger med kun tilladelsen Vis kan ikke fjernes: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Vigtig notits"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json
index 4f250187b74..ffc65be543c 100644
--- a/apps/web/src/locales/de/messages.json
+++ b/apps/web/src/locales/de/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Ordner bearbeiten"
},
+ "newFolder": {
+ "message": "Neuer Ordner"
+ },
+ "folderName": {
+ "message": "Ordnername"
+ },
+ "folderHintText": {
+ "message": "Verschachtel einen Ordner, indem du den Namen des übergeordneten Ordners hinzufügst, gefolgt von einem „/“. Beispiel: Sozial/Foren"
+ },
+ "deleteFolderPermanently": {
+ "message": "Bist du sicher, dass du diesen Ordner dauerhaft löschen willst?"
+ },
"baseDomain": {
"message": "Basisdomäne",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Eintrags-Name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Du kannst Sammlungen mit Leseberechtigung nicht entfernen: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "Bsp.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Anmeldung eingeleitet"
},
+ "logInRequestSent": {
+ "message": "Anfrage gesendet"
+ },
"submit": {
"message": "Absenden"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Eine Benachrichtigung wurde an dein Gerät gesendet."
},
+ "notificationSentDevicePart1": {
+ "message": "Entsperre Bitwarden auf deinem Gerät oder mit der "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Versuchst du auf dein Konto zuzugreifen?"
+ },
+ "accessAttemptBy": {
+ "message": "Zugriffsversuch von $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Zugriff bestätigen"
+ },
+ "denyAccess": {
+ "message": "Zugriff ablehnen"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "Web-App"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Stelle vor der Genehmigung sicher, dass die Fingerabdruck-Phrase mit der unten stehenden übereinstimmt."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Entsperre Bitwarden auf deinem Gerät. Stelle vor der Genehmigung sicher, dass die Fingerabdruck-Phrase mit der unten stehenden übereinstimmt."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Eine Benachrichtigung wurde an dein Gerät gesendet"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Stelle sicher, dass dein Konto entsperrt ist und die Fingerabdruck-Phrase mit der vom anderen Gerät übereinstimmt"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Mehrdeutige Zeichen vermeiden",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Passwort neu generieren"
- },
"length": {
"message": "Länge"
},
@@ -1839,21 +1869,36 @@
"dangerZone": {
"message": "Gefahrenzone"
},
- "dangerZoneDesc": {
- "message": "Vorsicht, diese Aktionen sind nicht umkehrbar!"
- },
- "dangerZoneDescSingular": {
- "message": "Vorsicht, diese Aktion ist nicht mehr rückgängig zu machen!"
- },
"deauthorizeSessions": {
"message": "Sitzungen abmelden"
},
"deauthorizeSessionsDesc": {
- "message": "Bist du besorgt, dass dein Konto auf einem anderen Gerät angemeldet ist? Fahre unten fort, um alle Computer oder Geräte, die du zuvor verwendet hast, zu deaktivieren. Dieser Sicherheitsschritt wird empfohlen, wenn du zuvor einen öffentlichen Computer verwendet oder dein Passwort versehentlich auf einem Gerät gespeichert hast, das dir nicht gehört. Dieser Schritt löscht auch alle zuvor gespeicherten zweistufigen Anmeldesitzungen."
+ "message": "Bist du besorgt, dass dein Konto auf einem anderen Gerät angemeldet ist? Fahre unten fort, um dich von allen Computern oder Geräten, die du zuvor verwendet hast, abzumelden. Dieser Sicherheitsschritt wird empfohlen, wenn du zuvor einen öffentlichen Computer verwendet oder dein Passwort versehentlich auf einem Gerät gespeichert hast, das dir nicht gehört. Dieser Schritt löscht auch alle zuvor gespeicherten zweistufigen Anmeldesitzungen."
},
"deauthorizeSessionsWarning": {
"message": "Wenn du fortfährst, wirst du auch von deiner aktuellen Sitzung abgemeldet, so dass du dich erneut anmelden musst. Du wirst auch aufgefordert, dich erneut in zwei Schritten anzumelden, falls dies eingerichtet ist. Aktive Sitzungen auf anderen Geräten können noch bis zu einer Stunde lang aktiv bleiben."
},
+ "newDeviceLoginProtection": {
+ "message": "Neue Geräteanmeldung"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Neuen Geräte-Anmeldeschutz deaktivieren"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Neuen Geräte-Anmeldeschutz aktivieren"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Fahre unten fort, um die Verifizierungs-E-Mails von Bitwarden zu deaktivieren, wenn du dich von einem neuen Gerät aus anmeldest."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Fahre unten fort, um Verifizierungs-E-Mails von Bitwarden zu erhalten, wenn du dich von einem neuen Gerät aus anmeldest."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Wenn der neue Geräte-Anmeldeschutz ausgeschaltet ist, kann jeder mit deinem Master-Passwort von jedem Gerät aus auf dein Konto zugreifen. Um dein Konto ohne Verifizierungs-E-Mails zu schützen, richte die Zwei-Faktor-Authentifizierung ein."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Änderungen am neuen Geräte-Anmeldeschutz gespeichert"
+ },
"sessionsDeauthorized": {
"message": "Alle Sitzungen wurden abgemeldet"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Verwalten"
},
- "canManage": {
- "message": "Darf verwalten"
+ "manageCollection": {
+ "message": "Sammlung verwalten"
+ },
+ "viewItems": {
+ "message": "Einträge anzeigen"
+ },
+ "viewItemsHidePass": {
+ "message": "Einträge anzeigen, versteckte Passwörter"
+ },
+ "editItems": {
+ "message": "Einträge bearbeiten"
+ },
+ "editItemsHidePass": {
+ "message": "Einträge bearbeiten, versteckte Passwörter"
},
"disable": {
"message": "Deaktivieren"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Es gab ein Problem beim Lesen des Sicherheitsschlüssels, bitte versuche es erneut."
},
- "twoFactorWebAuthnWarning": {
- "message": "Aufgrund von Plattformbeschränkungen kann WebAuthn nicht in allen Bitwarden-Anwendungen verwendet werden. Du solltest einen anderen Zwei-Faktor-Authentifizierungsanbieter aktivieren, damit du auf dein Konto zugreifen kannst, wenn WebAuthn nicht verwendet werden kann. Unterstützte Plattformen:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web-Tresor und Browser-Erweiterungen auf einem Desktop/Laptop mit einem WebAuthn-fähigen Browser (Chrome, Opera, Vivaldi oder Firefox mit aktiviertem FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Aufgrund von Plattformbeschränkungen kann WebAuthn nicht in allen Bitwarden-Anwendungen verwendet werden. Du solltest einen anderen Zwei-Faktor-Authentifizierungsanbieter einrichten, damit du auf dein Konto zugreifen kannst, wenn WebAuthn nicht verwendet werden kann."
},
"twoFactorRecoveryYourCode": {
"message": "Ihr Wiederherstellungsschlüssel für die Zwei-Faktor-Anmeldung in Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Mindestanforderungen für den Passwort-Generator festlegen."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Eine oder mehrere Organisationsrichtlinien beeinflussen deine Generator-Einstellungen."
- },
"masterPasswordPolicyInEffect": {
"message": "Eine oder mehrere Organisationsrichtlinien erfordern, dass dein Master-Passwort die folgenden Anforderungen erfüllt:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Was möchtest du generieren?"
- },
- "passwordType": {
- "message": "Passworttyp"
- },
- "regenerateUsername": {
- "message": "Benutzername neu generieren"
- },
"generateUsername": {
"message": "Benutzername generieren"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Benutzernamenstyp"
- },
"plusAddressedEmail": {
"message": "Plus-adressierte E-Mail-Adresse",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Verwende den konfigurierten Catch-All-Posteingang deiner Domain."
},
+ "useThisEmail": {
+ "message": "Diese E-Mail-Adresse verwenden"
+ },
"random": {
"message": "Zufällig",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API-Zugriffstoken"
- },
"deviceVerification": {
"message": "Geräteverifizierung"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Keine Sammlung"
},
- "canView": {
- "message": "Darf anzeigen"
- },
- "canViewExceptPass": {
- "message": "Darf anzeigen, Passwörter ausgenommen"
- },
- "canEdit": {
- "message": "Darf bearbeiten"
- },
- "canEditExceptPass": {
- "message": "Darf bearbeiten, Passwörter ausgenommen"
- },
"noCollectionsAdded": {
"message": "Keine Sammlungen hinzugefügt"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Das Löschen von Sammlungen auf Eigentümer und Administratoren beschränken"
},
+ "limitItemDeletionDesc": {
+ "message": "Löschung von Einträgen auf Mitglieder mit der \"Darf verwalten\"-Berechtigung beschränken"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Besitzer und Administratoren können alle Sammlungen und Einträge verwalten"
},
@@ -8656,9 +8686,6 @@
"message": "Selbst gehostete Server-URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias-Domain"
- },
"alreadyHaveAccount": {
"message": "Hast du bereits ein Konto?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Du hast keinen Zugriff zur Verwaltung dieser Sammlung."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Fehlende \"Darf verwalten\"-Berechtigungen"
+ "grantManageCollectionWarningTitle": {
+ "message": "Berechtigungen zur Verwaltung von Sammlungen fehlen"
},
- "grantAddAccessCollectionWarning": {
- "message": "\"Darf verwalten\"-Berechtigungen gewähren, um die vollständige Sammlungsverwaltung einschließlich der Löschung von Sammlungen zu ermöglichen."
+ "grantManageCollectionWarning": {
+ "message": "Berechtigungen zur Verwaltung von Sammlungen gewähren, um die vollständige Verwaltung von Sammlungen, einschließlich der Löschung von Sammlungen, zu erlauben."
},
"grantCollectionAccess": {
"message": "Gewähre Gruppen oder Mitgliedern Zugriff auf diese Sammlung."
@@ -9286,7 +9313,7 @@
"message": "Monat pro Mitglied"
},
"monthPerMemberBilledAnnually": {
- "message": "month per member billed annually"
+ "message": "Monat pro Mitglied jährlich in Rechnung gestellt"
},
"seats": {
"message": "Benutzerplätze"
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Beschreibungscode"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Du kannst Sammlungen mit Leseberechtigung nicht entfernen: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Wichtiger Hinweis"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administratoren haben nun die Möglichkeit, Mitgliedskonten, die zu einer beanspruchten Domain gehören, zu löschen."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Diese Aktion löscht das Mitgliedskonto, einschließlich aller Einträge in seinem Tresor. Dies ersetzt die vorherige Entfernen-Aktion."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Löschen ist eine neue Aktion!"
+ },
+ "seatsRemaining": {
+ "message": "Du hast $REMAINING$ Plätze von $TOTAL$ dieser Organisation zugewiesenen Plätzen verfügbar. Kontaktiere deinen Anbieter, um dein Abonnement zu verwalten.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Vorhandene Organisation"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Wähle eine Organisation aus, um sie deinem Anbieterportal hinzuzufügen."
+ },
+ "noOrganizations": {
+ "message": "Keine Sammlungen vorhanden"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Dein Anbieterabonnement erhält ein Guthaben für jede verbleibende Zeit im Abonnement der Organisation."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Möchtest du diese Organisation zu $PROVIDER$ hinzufügen?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Vorhandene Organisation hinzugefügt"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Die zugewiesenen Plätze überschreiten die verfügbaren Plätze."
}
}
diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json
index e13bd4ee5ea..ea5f11e9162 100644
--- a/apps/web/src/locales/el/messages.json
+++ b/apps/web/src/locales/el/messages.json
@@ -3,22 +3,22 @@
"message": "Όλες οι εφαρμογές"
},
"criticalApplications": {
- "message": "Critical applications"
+ "message": "Κρίσιμες εφαρμογές"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Πληροφορίες Πρόσβασης"
},
"riskInsights": {
- "message": "Risk Insights"
+ "message": "Insights Κινδύνου"
},
"passwordRisk": {
- "message": "Password Risk"
+ "message": "Ρίσκος Κωδικού Πρόσβασης"
},
"reviewAtRiskPasswords": {
- "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
+ "message": "Ελέξτε τους κωδικούς πρόσβασης (αδύναμους, εκτεθειμένους ή επαναχρησιμοποιούμενους) σε όλες τις εφαρμογές. Επιλέξτε τις πιο κρίσιμες εφαρμογές σας για να δώσετε προτεραιότητα στις ενέργειες ασφαλείας για τους χρήστες σας ώστε να αντιμετωπίσουν τους εκτεθειμένους κωδικούς πρόσβασης."
},
"dataLastUpdated": {
- "message": "Data last updated: $DATE$",
+ "message": "Τελευταία ενημέρωση δεδομένων: $DATE$",
"placeholders": {
"date": {
"content": "$1",
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Επεξεργασία Φακέλου"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Βασικός τομέας",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Όνομα αντικειμένου"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Δεν μπορείτε να αφαιρέσετε συλλογές που έχουν μόνο δικαιώματα Προβολής: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "πχ.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Η σύνδεση ξεκίνησε"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Υποβολή"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Μια ειδοποίηση έχει σταλεί στη συσκευή σας."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Έκδοση $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Επαναδημιουργία Κωδικού"
- },
"length": {
"message": "Μήκος"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Επικίνδυνη Ζώνη"
},
- "dangerZoneDesc": {
- "message": "Προσοχή, αυτές οι ενέργειες είναι μη αναστρέψιμες!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Κατάργηση Εξουσιοδότησης Συνεδριών"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Η διαδικασία θα σας αποσυνδέσει από την τρέχουσα συνεδρία και θα σας ζητήσει να συνδεθείτε ξανά. Οι ενεργές συνεδρίες σε άλλες συσκευές ενδέχεται να παραμείνουν ενεργοποιημένες για έως και μία ώρα."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Η Ανακληθεί η Πρόσβαση από Όλες τις Συνεδρίες"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Διαχείριση"
},
- "canManage": {
- "message": "Δυνατότητα διαχείρισης"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Απενεργοποίηση"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Παρουσιάστηκε πρόβλημα κατά την ανάγνωση του κλειδιού ασφαλείας. Προσπάθησε ξανά."
},
- "twoFactorWebAuthnWarning": {
- "message": "Λόγω περιορισμών της πλατφόρμας, το WebAuthn δεν μπορεί να χρησιμοποιηθεί σε όλες τις εφαρμογές Bitwarden. Θα πρέπει να ενεργοποιήσετε έναν άλλο πάροχο σύνδεσης δύο βημάτων, ώστε να έχετε πρόσβαση στο λογαριασμό σας όταν δεν μπορεί να χρησιμοποιηθεί το WebAuthn. Υποστηριζόμενες πλατφόρμες:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault και επεκτάσεις browser σε έναν σταθερό / φορητό υπολογιστή με ένα πρόγραμμα περιήγησης WebAuthn (Chrome, Opera, Vivaldi, ή Firefox με FIDO U2F ενεργοποιημένο)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Ο Bitwarden κωδικός ανάκτησης, εισόδου δύο βημάτων"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Ελάχιστες απαιτήσεις διαμόρφωσης γεννήτριας κωδικών."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Μία ή περισσότερες πολιτικές του οργανισμού επηρεάζουν τις ρυθμίσεις της γεννήτριας."
- },
"masterPasswordPolicyInEffect": {
"message": "Σε μία ή περισσότερες πολιτικές του οργανισμού απαιτείται ο κύριος κωδικός να πληρεί τις ακόλουθες απαιτήσεις:"
},
@@ -6666,15 +6717,6 @@
"message": "Γεννήτρια",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Τι θα θέλατε να δημιουργήσετε;"
- },
- "passwordType": {
- "message": "Τύπος Κωδικού"
- },
- "regenerateUsername": {
- "message": "Επαναδημιουργία Ονόματος Χρήστη"
- },
"generateUsername": {
"message": "Δημιουργία Ονόματος Χρήστη"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Τύπος Ονόματος Χρήστη"
- },
"plusAddressedEmail": {
"message": "Συν Διεύθυνση Email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Χρησιμοποιήστε τα διαμορφωμένα εισερχόμενα catch-all του domain σας."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Τυχαίο",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Όνομα κεντρικού υπολογιστή",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Διακριτικό πρόσβασης API"
- },
"deviceVerification": {
"message": "Επαλήθευση συσκευής"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Καμία συλλογή"
},
- "canView": {
- "message": "Δυνατότητα προβολής"
- },
- "canViewExceptPass": {
- "message": "Δυνατότητα προβολής, εκτός των κωδικών πρόσβασης"
- },
- "canEdit": {
- "message": "Δυνατότητα επεξεργασίας"
- },
- "canEditExceptPass": {
- "message": "Δυνατότητα επεξεργασίας, εκτός των κωδικών πρόσβασης"
- },
"noCollectionsAdded": {
"message": "Δεν προστέθηκαν συλλογές"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Οι ιδιοκτήτες και οι διαχειριστές μπορούν να διαχειριστούν όλες τις συλλογές και τα στοιχεία"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Ψευδώνυμο τομέα"
- },
"alreadyHaveAccount": {
"message": "Έχετε ήδη λογαριασμό;"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Δεν έχετε πρόσβαση για να διαχειριστείτε αυτήν τη συλλογή."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Δεν μπορείτε να αφαιρέσετε συλλογές που έχουν μόνο δικαιώματα Προβολής: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index fa81a80385b..0f48595f09b 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -485,6 +485,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -749,15 +761,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1203,6 +1206,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1392,12 +1398,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1685,9 +1718,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -2191,8 +2221,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2389,11 +2431,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4731,9 +4770,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6702,15 +6738,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6751,9 +6778,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6973,9 +6997,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7687,18 +7708,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8646,6 +8655,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8695,9 +8707,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8759,11 +8768,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10113,6 +10122,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10303,5 +10321,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification" : {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json
index 82035102328..24aa0b675ab 100644
--- a/apps/web/src/locales/en_GB/messages.json
+++ b/apps/web/src/locales/en_GB/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "e.g.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorise sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails Bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have Bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorised"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organisation policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organisation policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organisation. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organisation"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organisation to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organisations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organisation's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organisation to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organisation"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json
index 40ca8bf14ed..f4e4756b393 100644
--- a/apps/web/src/locales/en_IN/messages.json
+++ b/apps/web/src/locales/en_IN/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "e.g.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorise sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if enabled. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails Bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have Bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorised"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Disable"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn enabled browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F enabled)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set minimum requirements for password generator configuration."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organisation policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organisation policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organisation. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organisation"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organisation to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organisations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organisation's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organisation to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organisation"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json
index 574e483d97a..a864ee99590 100644
--- a/apps/web/src/locales/eo/messages.json
+++ b/apps/web/src/locales/eo/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Redakti dosierujon"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Baza domajno",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ekz.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Sendu"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versio $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regeneri Pasvorton"
- },
"length": {
"message": "Longo"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danĝera Zono"
},
- "dangerZoneDesc": {
- "message": "Atentu, ĉi tiuj agoj ne estas reigeblaj!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Senrajtigi Sesiojn"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Se vi daŭrigos vian adiaŭadon de la nuna seanco, necesos vin saluti denove. Oni ankaŭ demandos de vi du-faktoran aŭtentigon, se tiu elekteblo estas ebligita. La seancoj aktivaj sur aliaj aparatoj povas resti daŭre aktivaj ankoraŭ unu horon."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Ĉiuj Sesioj Neaŭtorizitaj"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Administri"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Neebligi"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Via kodo de senpaneigo de du-ŝtupa saluto de Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Agordi minimumajn postulojn por agordi pasvortan generilon."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Unu aŭ pluraj organizaj politikoj influas viajn generatorajn agordojn."
- },
"masterPasswordPolicyInEffect": {
"message": "Unu aŭ pluraj organizaj politikoj postulas vian ĉefan pasvorton por plenumi la jenajn postulojn:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Hazarda",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Domajna nomo",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json
index 381f13e3066..3ed9b7964f8 100644
--- a/apps/web/src/locales/es/messages.json
+++ b/apps/web/src/locales/es/messages.json
@@ -6,7 +6,7 @@
"message": "Aplicaciones críticas"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Inteligencia de Acceso"
},
"riskInsights": {
"message": "Risk Insights"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Editar carpeta"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Dominio base",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nombre del elemento"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "No puedes eliminar colecciones con permisos de solo visualización: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ej.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Inicio de sesión en proceso"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Enviar"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Se ha enviado una notificación a tu dispositivo."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versión $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerar contraseña"
- },
"length": {
"message": "Longitud"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona peligrosa"
},
- "dangerZoneDesc": {
- "message": "¡Cuidado, estas acciones no son reversibles!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Desautorizar sesiones"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceder también cerrará tu sesión actual, requiriendo que vuelvas a identificarte. También se te pedirá nuevamente tu autenticación en dos pasos en caso de que la tengas habilitada. Las sesiones activas en otros dispositivos pueden mantenerse activas hasta una hora más."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Desautorizadas todas las sesiones"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Gestionar"
},
- "canManage": {
- "message": "Puede gestionar"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Desactivar"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Hubo un problema al leer la llave de seguridad. Inténtalo de nuevo."
},
- "twoFactorWebAuthnWarning": {
- "message": "Debido a las limitaciones de la plataforma, WebAuthn no puede ser utilizado en todas las aplicaciones de Bitwarden. Debería habilitar otro proveedor de inicio de sesión en dos-pasos para que pueda acceder a su cuenta cuando WebAuthn no pueda ser usado. Plataformas soportadas:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Caja fuerte web y extensiones de navegador en un escritorio/portátil con un navegador WebAuthn habilitado (Chrome, Opera, Vivaldi o Firefox con FIDO U2F habilitado)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Tu código de recuperación de inicio de sesión de dos pasos de Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Establecer requisitos mínimos para la configuración del generador de contraseñas."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Una o más políticas de la organización están afectando su configuración del generador."
- },
"masterPasswordPolicyInEffect": {
"message": "Una o más políticas de la organización requieren que su contraseña maestra cumpla con los siguientes requisitos:"
},
@@ -6666,15 +6717,6 @@
"message": "Generador",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "¿Qué desea generar?"
- },
- "passwordType": {
- "message": "Tipo de contraseña"
- },
- "regenerateUsername": {
- "message": "Regenerar nombre de usuario"
- },
"generateUsername": {
"message": "Generar nombre de usuario"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tipo de nombre de usuario"
- },
"plusAddressedEmail": {
"message": "Correo electrónico más dirigido",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Utiliza la bandeja de entrada global configurada de tu dominio."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Aleatorio",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Nombre del host",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token de acceso API"
- },
"deviceVerification": {
"message": "Verificación del dispositivo"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Sin colecciones"
},
- "canView": {
- "message": "Puede ver"
- },
- "canViewExceptPass": {
- "message": "Puede ver, excepto contraseñas"
- },
- "canEdit": {
- "message": "Puede editar"
- },
- "canEditExceptPass": {
- "message": "Puede editar, excepto contraseñas"
- },
"noCollectionsAdded": {
"message": "No hay colecciones añadidas"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Propietarios y administradores pueden gestionar todas las colecciones y elementos"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Dominio alias"
- },
"alreadyHaveAccount": {
"message": "¿Ya tienes una cuenta?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "No puedes eliminar colecciones con permisos de solo visualización: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json
index e41f27be411..ede248d2b93 100644
--- a/apps/web/src/locales/et/messages.json
+++ b/apps/web/src/locales/et/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Muuda kausta"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Domeen",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Kirje nimi"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Sa ei saa eemaldada neid kogumikke ainult vaatamisloaga: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "nt.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Sisselogimine käivitatud"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Kinnita"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Sinu seadmesse saadeti teavitus."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versioon $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Genereeri parool uuesti"
- },
"length": {
"message": "Pikkus"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Ohtlik tsoon"
},
- "dangerZoneDesc": {
- "message": "Ettevaatust, neid toiminguid ei saa tagasi võtta!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Sessioonide tühistamine"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Jätkatest logitakse sind ka käimasolevast sessioonist välja, mistõttu pead kontosse uuesti sisse logima. Lisaks võidakse küsida kaheastmelist kinnitust, kui see on sisse lülitatud. Teised kontoga ühendatud seadmed võivad jääda sisselogituks kuni üheks tunniks."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Kõikidest seadmetest on välja logitud"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Haldus"
},
- "canManage": {
- "message": "Saab muuta"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Keela"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Turvavõtme lugemisel tekkis tõrge. Proovi uuesti."
},
- "twoFactorWebAuthnWarning": {
- "message": "Mõnede platvormi piirangute tõttu ei saa WebAuthn'i kõikide Bitwardeni rakendustega kasutada. Võiksid kaaluda teise kaheastmelise kinnitamise aktiveerimist olukordadeks, kus WebAuthn'i ei saa kasutada. Toetatud platvormid:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Veebihoidla- ja brauseri laiendused laua- ja sülearvutis, kus on WebAuthn toega brauser (Chrome, Opera, Vivaldi või Firefox, kus on FIDO U2F sisse lülitatud)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwardeni kaheastmelise logimise varukood"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Määra parooli genereerija konfiguratsiooni tingimused."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Organisatsiooni seaded mõjutavad parooli genereerija sätteid."
- },
"masterPasswordPolicyInEffect": {
"message": "Üks või enam organisatsiooni eeskirja nõuavad, et ülemparool vastaks nendele nõudmistele:"
},
@@ -6666,15 +6717,6 @@
"message": "Genereerija",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Mida sa soovid genereerida?"
- },
- "passwordType": {
- "message": "Parooli tüüp"
- },
- "regenerateUsername": {
- "message": "Genereeri kasutajanimi uuesti"
- },
"generateUsername": {
"message": "Genereeri kasutajanimi"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Kasutajanime tüüp"
- },
"plusAddressedEmail": {
"message": "Plussiga e-posti aadress",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Kasuta domeenipõhist kogumisaadressi."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Juhuslik",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hosti nimi",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API võti"
- },
"deviceVerification": {
"message": "Seadme kinnitamine"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domeen"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Sa ei saa eemaldada neid kogumikke ainult vaatamisloaga: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json
index 43447fb4a9f..0b230da1545 100644
--- a/apps/web/src/locales/eu/messages.json
+++ b/apps/web/src/locales/eu/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Editatu Karpeta"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Oinarrizko domeinua",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "adb.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Saioa hastea martxan da"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Bidali"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Jakinarazpen bat bidali da zure gailura."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "$VERSION_NUMBER$ bertsioa",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Berrezarri pasahitza"
- },
"length": {
"message": "Luzera"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Eremu arriskutsua"
},
- "dangerZoneDesc": {
- "message": "Kontuz, ekintza hauek ez dira itzulgarriak!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Baimena kendu saio hasierei"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Jarraitzeak uneko saioa itxiko du eta berriro saioa hasteko eskatuko zaizu. Gaituta badago, berriz ere bi urratseko saioa hasiera eskatuko zaizu. Beste gailu batzuetako saio aktiboek ordubete iraun dezakete aktibo."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Saio guztiei baimena kendua"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Kudeatu"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Desgaitu"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Arazo bat egon da segurtasun-gakoa irakurtzean. Saiatu berriro mesedez."
},
- "twoFactorWebAuthnWarning": {
- "message": "Plataformaren mugak direla eta, WebAuthn ezin da erabili Bitwarden-en aplikazio guztietan. Bi urratseko saio hasierako beste hornitzaile bat gaitu beharko duzu, WebAuthn erabili ezin denean zure kontuan sartzeko. Plataforma bateragarriak:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Webguneko kutxa gotorra eta nabigatzailearen gehiagarriak mahaigain/ordenagailu eramangarri batean, WebAuthn nabigatzaile gaitu batekin (Chrome, Opera, Vivaldi edo Firefox, FIDO U2F gaitua duena)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Zure Bitwardeneko bi urratseko saio hasierako berreskuratze-kodea"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Ezarri pasahitz sortzailearen gutxieneko baldintzak."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Erakundeko politika batek edo gehiagok sortzailearen konfigurazioari eragiten diote."
- },
"masterPasswordPolicyInEffect": {
"message": "Erakundeko politika batek edo gehiagok pasahitz nagusia behar dute baldintza hauek betetzeko:"
},
@@ -6666,15 +6717,6 @@
"message": "Sortzailea",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Zer sortu nahi duzu?"
- },
- "passwordType": {
- "message": "Pasahitz mota"
- },
- "regenerateUsername": {
- "message": "Berrezarri erabiltzaile izena"
- },
"generateUsername": {
"message": "Sortu erabiltzaile izena"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Erabiltzaile izen mota"
- },
"plusAddressedEmail": {
"message": "Atzizkidun emaila",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Erabili zure domeinuan konfiguratutako sarrerako ontzia."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Ausazkoa",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Ostalariaren izena",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token sarbide API-a"
- },
"deviceVerification": {
"message": "Gailu egiaztapena"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Ikus dezake"
- },
- "canViewExceptPass": {
- "message": "Ikus dezake, pasahitza izan ezik"
- },
- "canEdit": {
- "message": "Editatu dezake"
- },
- "canEditExceptPass": {
- "message": "Editatu dezake, pasahitza izan ezik"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json
index af7ae6e06d4..cfcf12c7907 100644
--- a/apps/web/src/locales/fa/messages.json
+++ b/apps/web/src/locales/fa/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "ويرايش پوشه"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "دامنه پایه",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "مثال.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "ورود به سیستم آغاز شد"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "ثبت"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "یک اعلان به دستگاه شما ارسال شده است."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "نسخه $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "تولید مجدد کلمه عبور"
- },
"length": {
"message": "طول"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "منطقهی خطر"
},
- "dangerZoneDesc": {
- "message": "مراقب باشید، این اقدامات قابل برگشت نیستند!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "لغو مجوز نشستها"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "ادامه دادن همچنین شما را از نشست فعلی خود خارج میکند و باید دوباره وارد سیستم شوید. در صورت راه اندازی مجدداً از شما خواسته میشود تا دوباره به سیستم دو مرحله ای بپردازید. جلسات فعال در دستگاههای دیگر ممکن است تا یک ساعت فعال بمانند."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "همه نشستها غیرمجاز است"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "مدیریت"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "خاموش کردن"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "مشکلی در خواندن کلید امنیتی وجود داشت. دوباره امتحان کنید."
},
- "twoFactorWebAuthnWarning": {
- "message": "به دلیل محدودیتهای پلتفرم، WebAuthn نمیتواند در همه برنامههای Bitwarden استفاده شود. باید یک ارائهدهندهی ورود دو مرحلهای دیگر راهاندازی کنید تا زمانی که WebAuthn قابل استفاده نیست، بتوانید به حساب خود دسترسی داشته باشید. پلتفرم های پشتیبانی شده:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "گاوصندوق وب و برنامههای افزودنی مرورگر روی دسکتاپ/لپتاپ با مرورگر پشتیبانیشده از WebAuthn (Chrome، Opera، Vivaldi یا Firefox با FIDO U2F روشن)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "کد بازیابی ورود دو مرحله ای Bitwarden شما"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "الزامات را برای تولید کننده کلمه عبور تنظیم کنید."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "یک یا چند سیاست سازمان بر تنظیمات تولید کننده شما تأثیر میگذارد."
- },
"masterPasswordPolicyInEffect": {
"message": "یک یا چند سیاست سازمانی برای تأمین شرایط زیر به کلمه عبور اصلی شما احتیاج دارد:"
},
@@ -6666,15 +6717,6 @@
"message": "تولید کننده",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "چه چیزی دوست دارید تولید کنید؟"
- },
- "passwordType": {
- "message": "نوع کلمه عبور"
- },
- "regenerateUsername": {
- "message": "ایجاد مجدد نام کاربری"
- },
"generateUsername": {
"message": "ایجاد نام کاربری"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "نوع نام کاربری"
- },
"plusAddressedEmail": {
"message": "به علاوه نشانی ایمیل داده شده",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "از صندوق ورودی پیکربندی شده دامنه خود استفاده کنید."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "تصادفی",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "نام میزبان",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "توکن دسترسی API"
- },
"deviceVerification": {
"message": "تأیید دستگاه"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "مجموعه ای وجود ندارد"
},
- "canView": {
- "message": "میتواند مشاهده کند"
- },
- "canViewExceptPass": {
- "message": "قابل مشاهده، به غیر از کلمههای عبور"
- },
- "canEdit": {
- "message": "میتواند ویرایش کند"
- },
- "canEditExceptPass": {
- "message": "قابل ویرایش، به غیر از کلمههای عبور"
- },
"noCollectionsAdded": {
"message": "مجموعه ای اضافه نشد"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "دامنه مستعار"
- },
"alreadyHaveAccount": {
"message": "پیشتر حساب کاربری داشته اید؟"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json
index dcb2d9046f5..00d56fdb1c1 100644
--- a/apps/web/src/locales/fi/messages.json
+++ b/apps/web/src/locales/fi/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Muokkaa kansiota"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Pääverkkotunnus",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Kohteen nimi"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Et voi poistaa kokoelmia, joihin sinulla on vain tarkasteluoikeus: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "esim.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Kirjautuminen aloitettu"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Jatka"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Laitteellesi on lähetetty ilmoitus."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Laitteeseesi lähetettiin ilmoitus"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versio $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Vältä epäselviä merkkejä",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Luo uusi salasana"
- },
"length": {
"message": "Pituus"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Vaaravyöhyke"
},
- "dangerZoneDesc": {
- "message": "Ole varovainen! Näitä toimintoja ei ole mahdollista kumota!"
- },
- "dangerZoneDescSingular": {
- "message": "Ole varoivainen. Tätä ei ole mahdollista perua!"
- },
"deauthorizeSessions": {
"message": "Mitätöi kaikki istunnot"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Jatkaminen uloskirjaa myös nykyisen istunnon pakottaen uudelleenkirjautumisen sekä kaksivaiheinen kirjautumisen, jos se on määritetty. Muiden laitteiden aktiiviset istunnot saattavat toimia vielä tunnin ajan."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Kaikki istunnot mitätöitiin"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Hallitse"
},
- "canManage": {
- "message": "Voi hallita"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Poista käytöstä"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Suojausavainta luettaessa havaittiin ongelma. Yritä uudelleen."
},
- "twoFactorWebAuthnWarning": {
- "message": "Alustakohtaisten rajoitusten vuoksi WebAuthn-todennuslaiteet eivät ole käytettävissä kaikissa Bitwarden-sovelluksissa. Sinun tulisi määrittää eri kaksivaiheisen kirjautumisen todentaja, jotta pääset tilillesi myös silloin kun WebAuthn-laitteen käyttö ei ole mahdollista. Tuetut alustat:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Verkkoholvi ja selainlaajennukset pöytäkoneissa/kannettavissa, joissa on WebAuthn-tekniikkaa tukeva selain (Chrome, Opera, Vivaldi tai Firefox FIDO U2F käyttöön otettuna)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwardenin kaksivaiheisen kirjautumisen palautuskoodisi"
@@ -3324,10 +3378,10 @@
}
},
"inviteSingleEmailDesc": {
- "message": "You have 1 invite remaining."
+ "message": "Sinulla on 1 kutsu jäljellä."
},
"inviteZeroEmailDesc": {
- "message": "You have 0 invites remaining."
+ "message": "Sinulla on 0 kutsua jäljellä."
},
"userUsingTwoStep": {
"message": "Käyttäjä on suojannut tilinsä kaksivaiheisella kirjautumisella."
@@ -3832,22 +3886,22 @@
"message": "Laite"
},
"loginStatus": {
- "message": "Login status"
+ "message": "Kirjautumisen tila"
},
"firstLogin": {
- "message": "First login"
+ "message": "Ensimmäinen kirjautuminen"
},
"trusted": {
- "message": "Trusted"
+ "message": "Luotettu"
},
"needsApproval": {
- "message": "Needs approval"
+ "message": "Vaatii hyväksynnän"
},
"areYouTryingtoLogin": {
- "message": "Are you trying to log in?"
+ "message": "Yritätkö kirjautua sisään?"
},
"logInAttemptBy": {
- "message": "Login attempt by $EMAIL$",
+ "message": "Kirjautumisyritys osoitteella $EMAIL$",
"placeholders": {
"email": {
"content": "$1",
@@ -3890,10 +3944,10 @@
"message": "Login request has already expired."
},
"justNow": {
- "message": "Just now"
+ "message": "Juuri nyt"
},
"requestedXMinutesAgo": {
- "message": "Requested $MINUTES$ minutes ago",
+ "message": "Pyydetty $MINUTES$ minuuttia sitten",
"placeholders": {
"minutes": {
"content": "$1",
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Aseta salasanageneraattorin vaatimukset."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Yksi tai useampi organisaatiokäytäntö vaikuttaa generaattorisi asetuksiin."
- },
"masterPasswordPolicyInEffect": {
"message": "Yksi tai useampi organisaatiokäytäntö edellyttää, että pääsalasanasi täyttää seuraavat vaatimukset:"
},
@@ -5798,11 +5849,11 @@
"message": "Bitwarden could not decrypt the vault item(s) listed below."
},
"contactCSToAvoidDataLossPart1": {
- "message": "Contact customer success",
+ "message": "Ota yhteyttä asiakkaaseen",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"contactCSToAvoidDataLossPart2": {
- "message": "to avoid additional data loss.",
+ "message": "lisätietojen menettämisen välttämiseksi.",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"accountRecoveryManageUsers": {
@@ -6666,15 +6717,6 @@
"message": "Generaattori",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Mitä haluat luoda?"
- },
- "passwordType": {
- "message": "Salasanan tyyppi"
- },
- "regenerateUsername": {
- "message": "Luo uusi käyttäjätunnus"
- },
"generateUsername": {
"message": "Luo käyttäjätunnus"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Käyttäjätunnuksen tyyppi"
- },
"plusAddressedEmail": {
"message": "Plus+merkkinen sähköposti",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Käytä verkkotunnuksesi catch-all-postilaatikkoa."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Satunnainen",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Isäntä",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API-käyttötunniste"
- },
"deviceVerification": {
"message": "Laitevahvistus"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Ei kokoelmaa"
},
- "canView": {
- "message": "Voi tarkastella"
- },
- "canViewExceptPass": {
- "message": "Voi tarkastella (ei salasanoja)"
- },
- "canEdit": {
- "message": "Voi muokata"
- },
- "canEditExceptPass": {
- "message": "Voi muokata (ei salasanoja)"
- },
"noCollectionsAdded": {
"message": "Kokoelmia ei ole lisätty"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Rajoita kokoelmien poisto omistajille ja ylläpitäjille"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Omistajat ja ylläpitäjät voivat hallita kaikkia kokoelmia ja kohteita"
},
@@ -8656,9 +8686,6 @@
"message": "Itse ylläpidetyn palvelimen URL-osoite",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Aliaksen verkkotunnus"
- },
"alreadyHaveAccount": {
"message": "Onko sinulla jo tili?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Oikeutesi eivät riitä kokoelman hallintaan."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "\"Voi hallita\" -käyttöoikeus puuttuu"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Myönnä ”Voi hallita” -oikeus, joka mahdollistaa kokoelman täydellisen hallinnan, mukaan lukien sen poistamisen."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Myönnä ryhmille tai henkilöille kokoelman käyttöoikeus."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Et voi poistaa kokoelmia, joihin sinulla on vain tarkasteluoikeus: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Tärkeä ilmoitus"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json
index 7c5aa918fff..42b4882bf20 100644
--- a/apps/web/src/locales/fil/messages.json
+++ b/apps/web/src/locales/fil/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Baguhin ang folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "hal.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Sinimulan ang pag-log in"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Ipadala"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Nakapagpadala na ng notipikasyon sa device mo."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Bersyon $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Gumawa ng isa pang password"
- },
"length": {
"message": "Haba"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Mapanganib na lugar"
},
- "dangerZoneDesc": {
- "message": "Mag-ingat, wala nang bawian sa mga gagawin mo rito!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "I-deauthorize ang mga sesyon"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Mala-log out ka rin sa kasalukuyan mong sesyon kung tutuloy ka, at kakailanganin mong mag-log in ulit. Kakailanganin mo ring ulitin ang dalawang-hakbang na pag-log in kung naka-set up ito. Maaaring manatiling aktibo ang mga sesyon sa iba pang device nang hanggang isang oras."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Na-deauthorize lahat ng mga sesyon"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Pamahalaan"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Isara"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Nagkaproblema sa pagbabasa ng security key. Pakisubukan ulit."
},
- "twoFactorWebAuthnWarning": {
- "message": "Hindi magagamit sa lahat ng mga aplikasyon ng Bitwarden ang WebAuthn dahil sa mga limitasyon ng platform. Dapat mag-set up ka ng isa pang provider ng dalawang-hakbang na pag-log in para ma-access mo ang account mo sakaling hindi magamit ang WebAuthn. Mga suportadong platform:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault at mga ekstensyon pang-browser sa desktop/laptop na may browser na sinusuportahan ang WebAuthn (Chrome, Opera, Vivaldi, o Firefox na nakabukas ang FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Code pang-recover mo sa dalawang-hakbang na pag-log in sa Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Magtakda ng mga kinakailangan para sa generator ng password."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Isang o higit pang patakaran ng organisasyon ay nakakaapekto sa iyong mga setting ng generator."
- },
"masterPasswordPolicyInEffect": {
"message": "Isang o higit pang mga patakaran ng organisasyon ay nangangailangan ng iyong master password upang matugunan ang sumusunod na kinakailangan:"
},
@@ -6666,15 +6717,6 @@
"message": "Magmamana",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Ano ang nais mong bumuo?"
- },
- "passwordType": {
- "message": "Uri ng Password"
- },
- "regenerateUsername": {
- "message": "Muling bumuo ng username"
- },
"generateUsername": {
"message": "Lumikha ng username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Uri ng username"
- },
"plusAddressedEmail": {
"message": "Plus na naka-address na email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Gamitin ang naka configure na inbox ng catch all ng iyong domain."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Pangalan ng Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token ng Access sa API"
- },
"deviceVerification": {
"message": "Pag verify ng aparato"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Walang koleksyon"
},
- "canView": {
- "message": "Maaaring tingnan"
- },
- "canViewExceptPass": {
- "message": "Maaaring tingnan, maliban sa mga password"
- },
- "canEdit": {
- "message": "Maaaring i-edit"
- },
- "canEditExceptPass": {
- "message": "Maaaring mag edit, maliban sa mga password"
- },
"noCollectionsAdded": {
"message": "Walang idinagdag na mga koleksyon"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json
index af178713cfc..a5a55255c28 100644
--- a/apps/web/src/locales/fr/messages.json
+++ b/apps/web/src/locales/fr/messages.json
@@ -114,7 +114,7 @@
"message": "Membres à risque"
},
"atRiskMembersWithCount": {
- "message": "At-risk members ($COUNT$)",
+ "message": "Membres à risque ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -132,13 +132,13 @@
}
},
"atRiskMembersDescription": {
- "message": "These members are logging into applications with weak, exposed, or reused passwords."
+ "message": "Ces membres se connectent à des applications avec des mots de passe faibles, exposés ou réutilisés."
},
"atRiskApplicationsDescription": {
"message": "Ces applications ont des mots de passe faibles, exposés ou réutilisés."
},
"atRiskMembersDescriptionWithApp": {
- "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.",
+ "message": "Ces membres se connectent à $APPNAME$ avec des mots de passe faibles, exposés ou réutilisés.",
"placeholders": {
"appname": {
"content": "$1",
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Modifier le dossier"
},
+ "newFolder": {
+ "message": "Nouveau dossier"
+ },
+ "folderName": {
+ "message": "Nom de dossier"
+ },
+ "folderHintText": {
+ "message": "Créez un sous-dossier en ajoutant le nom du dossier parent suivi d'un \"/\". Par exemple : Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Êtes-vous sûr de vouloir supprimer définitivement ce dossier ?"
+ },
"baseDomain": {
"message": "Domaine de base",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nom de l’élément"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Vous ne pouvez pas supprimer des collections avec les autorisations d'affichage uniquement : $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Connexion initiée"
},
+ "logInRequestSent": {
+ "message": "Demande envoyée"
+ },
"submit": {
"message": "Soumettre"
},
@@ -1342,7 +1348,7 @@
"message": "Aucun élément à afficher."
},
"noPermissionToViewAllCollectionItems": {
- "message": "Vous n'avez pas la permission de voir tous les éléments de cette collection."
+ "message": "Vous n'avez pas l'autorisation d'afficher tous les éléments de cette collection."
},
"youDoNotHavePermissions": {
"message": "Vous n'avez pas les autorisations pour cette collection"
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Une notification a été envoyée à votre appareil."
},
+ "notificationSentDevicePart1": {
+ "message": "Déverrouillez Bitwarden sur votre appareil ou sur le "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Essayez-vous d'accéder à votre compte ?"
+ },
+ "accessAttemptBy": {
+ "message": "Tentative d'accès par $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirmer l'accès"
+ },
+ "denyAccess": {
+ "message": "Refuser l'accès"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "application web"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Assurez-vous que la phrase d'empreinte correspond à celle ci-dessous avant d'approuver."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Déverrouillez Bitwarden sur votre appareil. Assurez-vous que la phrase d'empreinte correspond à celle ci-dessous avant d'approuver."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Une notification a été envoyée à votre appareil"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Assurez-vous que votre compte est déverrouillé et que la phrase d'empreinte correspond à l'autre appareil"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Éviter les caractères ambigus",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Régénérer un mot de passe"
- },
"length": {
"message": "Longueur"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zone de danger"
},
- "dangerZoneDesc": {
- "message": "Attention, ces actions sont irréversibles !"
- },
- "dangerZoneDescSingular": {
- "message": "Attention, cette action est irréversible!"
- },
"deauthorizeSessions": {
"message": "Révoquer les sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "En poursuivant, vous serez également déconnecté de votre session en cours, ce qui vous obligera à vous reconnecter. Vous serez également invité à vous reconnecter via l'authentification à deux facteurs, si elle est configurée. Les sessions actives sur d'autres appareils peuvent rester actives pendant encore une heure."
},
+ "newDeviceLoginProtection": {
+ "message": "Connexion à un nouvel appareil"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Désactivez la protection de connexion du nouvel appareil"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Activez la protection de connexion du nouvel appareil"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Procédez ci-dessous pour désactiver les courriels de vérification envoyés par Bitwarden lorsque vous vous connectez à partir d'un nouvel appareil."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Procédez ci-dessous pour que Bitwarden vous envoie des courriels de vérification lorsque vous vous connectez à partir d'un nouvel appareil."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Avec la protection de connexion d'un nouvel appareil désactivée, toute personne ayant votre mot de passe maître peut accéder à votre compte depuis n'importe quel appareil. Pour protéger votre compte sans courriel de vérification, configurez la connexion en deux étapes."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Modifications de la protection de connexion de l'appareil enregistrées"
+ },
"sessionsDeauthorized": {
"message": "Toutes les sessions ont été révoquées"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Gérer"
},
- "canManage": {
- "message": "Peut gérer"
+ "manageCollection": {
+ "message": "Gérer la collection"
+ },
+ "viewItems": {
+ "message": "Afficher les éléments"
+ },
+ "viewItemsHidePass": {
+ "message": "Afficher les éléments, les mots de passe cachés"
+ },
+ "editItems": {
+ "message": "Modifier les items"
+ },
+ "editItemsHidePass": {
+ "message": "Modifier les éléments, les mots de passe cachés"
},
"disable": {
"message": "Désactiver"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Un problème est survenu lors de la lecture de la clé de sécurité. Veuillez réessayer."
},
- "twoFactorWebAuthnWarning": {
- "message": "En raison des limitations de la plate-forme, WebAuthn ne peut pas être utilisé sur toutes les applications Bitwarden. Vous devriez mettre en place un autre fournisseur d'authentification à deux facteurs afin de pouvoir accéder à votre compte lorsque WebAuthn ne peut pas être utilisé. Plateformes supportées :"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Coffre web et extensions sur un ordinateur fixe/portable avec un navigateur compatible WebAuthn (Chrome, Opera, Vivaldi ou Firefox avec FIDO U2F activé)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "En raison des limitations de plate-forme, WebAuthn ne peut pas être utilisé sur toutes les applications Bitwarden. Vous devriez mettre en place un autre fournisseur d'authentification à deux facteurs afin de pouvoir accéder à votre compte lorsque WebAuthn ne peut pas être utilisé."
},
"twoFactorRecoveryYourCode": {
"message": "Votre code de récupération de d'authentification à deux facteurs Bitwarden"
@@ -3324,7 +3378,7 @@
}
},
"inviteSingleEmailDesc": {
- "message": "You have 1 invite remaining."
+ "message": "Il vous reste 1 invitation."
},
"inviteZeroEmailDesc": {
"message": "Il vous reste 0 invitations."
@@ -3348,7 +3402,7 @@
"message": "Propriétaire"
},
"ownerDesc": {
- "message": "L’utilisateur avec l’accès le plus élevé qui peut gérer tous les aspects de votre organisation."
+ "message": "Gérer tous les aspects de votre organisation, y compris la facturation et les abonnements"
},
"clientOwnerDesc": {
"message": "Cet utilisateur doit être indépendant du fournisseur. Si le fournisseur est dissocié de l'organisation, cet utilisateur conservera la propriété de l'organisation."
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Définir les exigences pour le générateur de mot de passe."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Une ou plusieurs politiques de sécurité de l'organisation affectent les paramètres de votre générateur."
- },
"masterPasswordPolicyInEffect": {
"message": "Une ou plusieurs politiques de sécurité de l'organisation exigent que votre mot de passe principal réponde aux exigences suivantes :"
},
@@ -5117,7 +5168,7 @@
"message": "Accordez et gérez l'accès d'urgence pour les contacts de confiance. Les contacts de confiance peuvent demander l'accès pour afficher ou reprendre le contrôle de votre compte en cas d'urgence. Consultez notre page d'aide pour plus d'informations et de détails sur le fonctionnement du partage à divulgation nulle de connaissance (zero knowledge sharing)."
},
"emergencyAccessOwnerWarning": {
- "message": "Vous êtes propriétaire d'une ou de plusieurs organisations. Si vous autorisez la prise de contrôle à un contact d'urgence, il sera en mesure d'utiliser toutes vos permissions de propriétaire après la prise de contrôle."
+ "message": "Vous êtes propriétaire d'une ou de plusieurs organisations. Si vous autorisez la prise de contrôle à un contact d'urgence, il sera en mesure d'utiliser toutes vos autorisations de propriétaire après la prise de contrôle."
},
"trustedEmergencyContacts": {
"message": "Contacts d'urgence de confiance"
@@ -5344,7 +5395,7 @@
"message": "Permissions"
},
"permission": {
- "message": "Permission"
+ "message": "Autorisation"
},
"accessEventLogs": {
"message": "Accéder aux journaux d'événements"
@@ -6626,7 +6677,7 @@
}
},
"accessDenied": {
- "message": "Accès Refusé. Vous n'avez pas la permission de voir cette page."
+ "message": "Accès Refusé. Vous n'avez pas l'autorisation d'afficher cette page."
},
"masterPassword": {
"message": "Mot de passe principal"
@@ -6666,15 +6717,6 @@
"message": "Générateur",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Que souhaitez-vous générer ?"
- },
- "passwordType": {
- "message": "Type de mot de passe"
- },
- "regenerateUsername": {
- "message": "Régénérer le Nom d'Utilisateur"
- },
"generateUsername": {
"message": "Générer le Nom d'Utilisateur"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Type de Nom d'Utilisateur"
- },
"plusAddressedEmail": {
"message": "Courriel Adressé Plus",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Utilisez la boîte de réception du collecteur (catch-all) configurée de votre domaine."
},
+ "useThisEmail": {
+ "message": "Utiliser ce courriel"
+ },
"random": {
"message": "Aléatoire",
"description": "Generates domain-based username using random letters"
@@ -6762,7 +6804,7 @@
"message": "Service"
},
"unknownCipher": {
- "message": "Élément inconnu, vous devrez peut-être vous connecter avec un autre compte pour accéder à cet élément."
+ "message": "Élément inconnu, vous devrez peut-être demander l'autorisation d'accéder à cet élément."
},
"cannotSponsorSelf": {
"message": "Vous ne pouvez pas réclamer pour le compte actif. Saisissez un courriel différent."
@@ -6934,9 +6976,6 @@
"message": "Nom d'hôte",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Jetons d'accès API"
- },
"deviceVerification": {
"message": "Vérification de l'Appareil"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Aucune collection"
},
- "canView": {
- "message": "Peut voir"
- },
- "canViewExceptPass": {
- "message": "Peut voir, sauf les mots de passe"
- },
- "canEdit": {
- "message": "Peut modifier"
- },
- "canEditExceptPass": {
- "message": "Peut modifier, sauf les mots de passe"
- },
"noCollectionsAdded": {
"message": "Pas de collections ajoutées"
},
@@ -7850,7 +7877,7 @@
"message": "Sélectionner les groupes"
},
"userPermissionOverrideHelperDesc": {
- "message": "Les permissions définies pour un membre remplaceront les permissions définies par le groupe de ce membre."
+ "message": "Les autorisations définies pour un membre remplaceront les autorisations définies par le groupe de ce membre."
},
"noMembersOrGroupsAdded": {
"message": "Aucun membre ou groupe ajouté"
@@ -8237,7 +8264,7 @@
"message": "Exiger que les membres existants changent leurs mots de passe"
},
"smProjectDeleteAccessRestricted": {
- "message": "Vous n'avez pas les droits pour supprimer ce projet",
+ "message": "Vous n'avez pas les autorisations pour supprimer ce projet",
"description": "The individual description shown to the user when the user doesn't have access to delete a project."
},
"smProjectsDeleteBulkConfirmation": {
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limiter la suppression de collections aux propriétaires et administrateurs"
},
+ "limitItemDeletionDesc": {
+ "message": "Limite la suppression de l'élément aux membres avec l'autorisation Peut gérer"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Les propriétaires et les administrateurs peuvent gérer toutes les collections et tous les éléments"
},
@@ -8656,9 +8686,6 @@
"message": "URL du serveur auto-hébergé",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Domaine de l'alias"
- },
"alreadyHaveAccount": {
"message": "Vous avez déjà un compte ?"
},
@@ -8669,7 +8696,7 @@
"message": "Sauter directement au contenu"
},
"managePermissionRequired": {
- "message": "Au moins un membre ou un groupe doit avoir la permission peut gérer."
+ "message": "Au moins un membre ou un groupe doit avoir l'autorisation peut gérer."
},
"typePasskey": {
"message": "Passkey"
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Vous n'avez pas accès à la gestion de cette collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "\"Peut Gérer les Permissions\" manquant"
+ "grantManageCollectionWarningTitle": {
+ "message": "Autorisations pour Gérer la Collection manquantes"
},
- "grantAddAccessCollectionWarning": {
- "message": "Accorder \"Peut Gérer les Permissions\" pour permettre une gestion complète de la collection, y compris la suppression de la collection."
+ "grantManageCollectionWarning": {
+ "message": "Accorde les autorisations pour Gérer la collection pour permettre la gestion complète de la collection incluant sa suppression."
},
"grantCollectionAccess": {
"message": "Accorder l'accès à cette collection aux groupes ou aux membres."
@@ -9437,16 +9464,16 @@
"message": "Informations sur les taxes mises à jour"
},
"billingInvalidTaxIdError": {
- "message": "Invalid tax ID, if you believe this is an error please contact support."
+ "message": "ID de taxe non valide, si vous pensez qu'il s'agit d'une erreur, veuillez contacter le support."
},
"billingTaxIdTypeInferenceError": {
- "message": "We were unable to validate your tax ID, if you believe this is an error please contact support."
+ "message": "Nous n'avons pu valider votre ID de taxes. Si vous pensez que c'est une erreur, veuillez contacter le support s'il-vous-plaît."
},
"billingPreviewInvalidTaxIdError": {
- "message": "Invalid tax ID, if you believe this is an error please contact support."
+ "message": "ID de taxe non valide, si vous pensez qu'il s'agit d'une erreur, veuillez contacter le support."
},
"billingPreviewInvoiceError": {
- "message": "An error occurred while previewing the invoice. Please try again later."
+ "message": "Une erreur s'est produite lors de la prévisualisation de la facture. Veuillez réessayer plus tard."
},
"unverified": {
"message": "Non vérifié"
@@ -9489,7 +9516,7 @@
"message": "(Aucune collection)"
},
"memberAccessReportNoCollectionPermission": {
- "message": "(Aucune permission de collection)"
+ "message": "(Aucune Autorisation de Collection)"
},
"memberAccessReportNoGroup": {
"message": "(Aucun groupe)"
@@ -9531,7 +9558,7 @@
"message": " Contactez le Support Client pour rétablir votre abonnement."
},
"secretPeopleDescription": {
- "message": "Autoriser les groupes ou les personnes à accéder à ce secret. Les permissions définies pour les personnes remplaceront les permissions définies par les groupes."
+ "message": "Autoriser les groupes ou les personnes à accéder à ce secret. Les autorisations définies pour les personnes remplaceront les autorisations définies par les groupes."
},
"secretPeopleEmptyMessage": {
"message": "Ajouter des personnes ou des groupes pour partager l'accès à ce secret"
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Code descripteur"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Vous ne pouvez pas supprimer des collections avec les autorisations d'affichage uniquement : $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Avis important"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Les administrateurs ont maintenant la possibilité de supprimer les comptes de membre qui appartiennent à un domaine revendiqué."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Cette action supprimera le compte du membre, incluant tous les éléments de son coffre. Cela remplace l'action précédente de Supprimer."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Supprimer est une nouvelle action !"
+ },
+ "seatsRemaining": {
+ "message": "Vous avez $REMAINING$ places restantes sur $TOTAL$ attribuées à cette organisation. Contactez votre fournisseur pour gérer votre abonnement.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Organisation existante"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Sélectionnez une organisation à ajouter à votre Portail fournisseur."
+ },
+ "noOrganizations": {
+ "message": "Il n'y a aucune organisation à lister"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Votre abonnement à un fournisseur recevra un crédit pour tout temps restant dans l'abonnement de l'organisation."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Voulez-vous ajouter cette organisation à $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Organisation existante ajoutée"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Les places assignées dépassent les places disponibles."
}
}
diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json
index 436b28dbabd..f5cd301fc5f 100644
--- a/apps/web/src/locales/gl/messages.json
+++ b/apps/web/src/locales/gl/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nome do elemento"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Non podes eliminar coleccións con permisos de só lectura: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Non podes eliminar coleccións con permisos de só lectura: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json
index c9e552cab94..27ea87bcfe4 100644
--- a/apps/web/src/locales/he/messages.json
+++ b/apps/web/src/locales/he/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "ערוך תיקייה"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "שם בסיס הדומיין",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "לדוגמא",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "שלח"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "גרסה $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "צור סיסמה חדשה"
- },
"length": {
"message": "אורך"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "אזור מסוכן"
},
- "dangerZoneDesc": {
- "message": "זהירות, פעולות אלה לא ניתנות לביטול!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "בטל הרשאות סשנים"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "בכדי להמשיך הסשן הנוכחי ינותק, ותדרש להזין את פרטי הכניסה החדשים וגם את פרטי האימות הדו-שלבי, אם הוא מאופשר. כל הסשנים הפעילים במכשירים אחרים ישארו פעילים עד שעה ממועד הכניסה החדשה."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "הוסרה ההרשאה מכל הסשנים"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "נהל"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "בטל"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "היתה בעיה בקריאת מפתח האבטחה. נסה בשנית."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "קוד השחזור שלך עבור כניסה דו שלבית לBitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "הגדר דרישות מינימום במחולל הסיסמאות."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "מדיניות ארגונית אחת או יותר משפיעה על הגדרות המחולל שלך."
- },
"masterPasswordPolicyInEffect": {
"message": "אחד או יותר מכללי מדיניות הארגון דורשים שסיסמתך הראשית תעמוד בדרישות הבאות:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json
index 8e94756b311..266a868e435 100644
--- a/apps/web/src/locales/hi/messages.json
+++ b/apps/web/src/locales/hi/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json
index 6a4ee04be4e..a847caf7644 100644
--- a/apps/web/src/locales/hr/messages.json
+++ b/apps/web/src/locales/hr/messages.json
@@ -114,7 +114,7 @@
"message": "Rizični korisnici"
},
"atRiskMembersWithCount": {
- "message": "At-risk members ($COUNT$)",
+ "message": "Izloženi članovi ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -123,7 +123,7 @@
}
},
"atRiskApplicationsWithCount": {
- "message": "At-risk applications ($COUNT$)",
+ "message": "Izložene aplikacije ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -132,13 +132,13 @@
}
},
"atRiskMembersDescription": {
- "message": "These members are logging into applications with weak, exposed, or reused passwords."
+ "message": "Ovi članovi se prijavljuju u aplikacije slabim, izloženim ili ponovno korištenim lozinkama."
},
"atRiskApplicationsDescription": {
- "message": "These applications have weak, exposed, or reused passwords."
+ "message": "Ove aplikacije imaju slabe, izložene ili ponovno korištene lozinke."
},
"atRiskMembersDescriptionWithApp": {
- "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.",
+ "message": "Ovi članovi se u $APPNAME$ prijavljuju slabim, izloženim ili ponovno korištenim lozinkama.",
"placeholders": {
"appname": {
"content": "$1",
@@ -156,10 +156,10 @@
"message": "Ukupno aplikacija"
},
"unmarkAsCriticalApp": {
- "message": "Unmark as critical app"
+ "message": "Odznači kao kritičnu aplikaciju"
},
"criticalApplicationSuccessfullyUnmarked": {
- "message": "Critical application successfully unmarked"
+ "message": "Kritična aplikacija uspješno odznačena"
},
"whatTypeOfItem": {
"message": "Koja je ovo vrsta stavke?"
@@ -235,7 +235,7 @@
"message": "Povijest stavke"
},
"authenticatorKey": {
- "message": "Kôd za provjeru"
+ "message": "Ključ autentifikatora"
},
"autofillOptions": {
"message": "Postavke auto-ispune"
@@ -405,7 +405,7 @@
"message": "Bitwarden može pohraniti i ispuniti kodove za dvostruku autentifikaciju. Kopiraj i zalijepi ključ u ovo polje."
},
"totpHelperWithCapture": {
- "message": "Bitwarden može pohraniti i ispuniti kodove za dvostruku autentifikaciju. Odaberi ikonu kamere i označi QR kôd za provjeru autentičnosti ove web stranice ili kopiraj i zalijepi ključ u ovo polje."
+ "message": "Bitwarden može pohraniti i ispuniti kodove provjeru dvostruke autentifikacije. Odaberi ikonu kamere i označi QR kôd za provjeru autentičnosti ove web stranice ili kopiraj i zalijepi ključ u ovo polje."
},
"learnMoreAboutAuthenticators": {
"message": "Više o autentifikatorima"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Uredi mapu"
},
+ "newFolder": {
+ "message": "Nova mapa"
+ },
+ "folderName": {
+ "message": "Naziv mape"
+ },
+ "folderHintText": {
+ "message": "Ugnijezdi mapu dodavanjem naziva roditeljske mape i znaka kroz. Npr. Mreže/Forumi"
+ },
+ "deleteFolderPermanently": {
+ "message": "Sigurno želiš trajno izbrisati ovu mapu?"
+ },
"baseDomain": {
"message": "Primarna domena",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Naziv stavke"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "S dopuštenjima samo za prikaz ne možeš ukloniti zbirke: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "npr.",
"description": "Short abbreviation for 'example'."
@@ -1168,20 +1171,23 @@
"message": "Potvrdi svoj identitet"
},
"weDontRecognizeThisDevice": {
- "message": "We don't recognize this device. Enter the code sent to your email to verify your identity."
+ "message": "Ne prepoznajemo ovaj uređaj. Za potvrdu identiteta unesi kôd poslan e-poštom."
},
"continueLoggingIn": {
- "message": "Continue logging in"
+ "message": "Nastavi prijavu"
},
"whatIsADevice": {
- "message": "What is a device?"
+ "message": "Što je uređaj?"
},
"aDeviceIs": {
- "message": "A device is a unique installation of the Bitwarden app where you have logged in. Reinstalling, clearing app data, or clearing your cookies could result in a device appearing multiple times."
+ "message": "Uređaj je jedinstvena instalacija Bitwarden aplikacije gdje si prijavljen/a. Ponovna instalacija, brisanje podataka aplikacije ili kolačića može rezultirati višestrukim prikazom uređaja."
},
"logInInitiated": {
"message": "Pokrenuta prijava"
},
+ "logInRequestSent": {
+ "message": "Zahtjev poslan"
+ },
"submit": {
"message": "Pošalji"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Obavijest je poslana na tvoj uređaj."
},
+ "notificationSentDevicePart1": {
+ "message": "Otključaj Bitwarden na svojem uređaju ili na "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Pokušavaš li pristupiti svom računu?"
+ },
+ "accessAttemptBy": {
+ "message": "$EMAIL$ pokušava pristupiti",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Potvrdi pristup"
+ },
+ "denyAccess": {
+ "message": "Odbij pristup"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web trezoru"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Provjeri slaže li se jedinstvena fraza s ovdje prikazanom prije odobravanja."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Otključaj Bitwarden na svojem uređaju. Provjeri slaže li se jedinstvena fraza s ovdje prikazanom prije odobravanja."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Obavijest je poslana na tvoj uređaj"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Provjeri je li trezor otključan i slaže li se jedinstvena fraza s drugim uređajem"
- },
"versionNumber": {
"message": "Verzija $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Izbjegavaj dvosmislene znakove",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Ponovno generiraj lozinku"
- },
"length": {
"message": "Duljina"
},
@@ -1767,10 +1797,10 @@
"message": "Molimo, ponovno se prijavi."
},
"currentSession": {
- "message": "Current session"
+ "message": "Trenutna sesija"
},
"requestPending": {
- "message": "Request pending"
+ "message": "Zahtjev u tijeku"
},
"logBackInOthersToo": {
"message": "Molimo, ponovno se prijavi. Ako koristiš druge aplikacije Bitwarden i u njima napravi odjavu/prijavu."
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "OPASNA zona!"
},
- "dangerZoneDesc": {
- "message": "Pažljivo, ove akcije su konačne i ne mogu se poništiti!"
- },
- "dangerZoneDescSingular": {
- "message": "Pažljivo, ova radnja se ne može poništiti!"
- },
"deauthorizeSessions": {
"message": "Deautoriziraj sesije"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Ako nastaviš, trenutna sesija će biti zatvorena, što će zahtijevati ponovnu prijavu uklljučujući i prijavu dvostrukom autentifikacijom, ako je ona aktivna. Aktivne sesije na drugim uređajima mogu ostati aktivne još jedan sat."
},
+ "newDeviceLoginProtection": {
+ "message": "Prijava novog uređaja"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Isključi zaštitu prijave novih uređaja"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Uključi zaštitu prijave novih uređaja"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Za prestanak dobivanja e-pošte kada se prijaviš s novog uređaja, nastavi niže."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Za dobivanje e-pošte kada se prijaviš s novog uređaja, nastavi niže."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Ako je zaštita prijave novih uređaja isključena, bilo tko s tvojom glavnom lozinkom može pristupiti tvom računu s bilo kojeg uređaja. Za zaštitu svog računa bez potvrde e-poštom, uključi dvostruku autentifikaciju."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Promjene zaštite prijave novih uređaja su spremljene"
+ },
"sessionsDeauthorized": {
"message": "Sve sesije deautorizirane"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Upravljaj"
},
- "canManage": {
- "message": "Može upravljati"
+ "manageCollection": {
+ "message": "Upravljaj zbirkom"
+ },
+ "viewItems": {
+ "message": "Prikaz stavke"
+ },
+ "viewItemsHidePass": {
+ "message": "Prikaz stavke, skrivene lozinke"
+ },
+ "editItems": {
+ "message": "Uredi stavke"
+ },
+ "editItemsHidePass": {
+ "message": "Uredi stavke, skrivene lozinke"
},
"disable": {
"message": "Onemogući"
@@ -2198,7 +2255,7 @@
"message": "Nastavi na bitwarden.com?"
},
"twoStepContinueToBitwardenUrlDesc": {
- "message": "Bitwarden autentifikator omogućuje pohranu ključeva za autentifikaciju i generiranje TOTP kodova za dvostruku autentifikaciju. Saznaj više na bitwarden.com."
+ "message": "Bitwarden autentifikator omogućuje pohranu ključeva za autentifikator i generiranje TOTP kodova za provjeru dvostruke autentifikacije. Saznaj više na bitwarden.com."
},
"twoStepAuthenticatorScanCodeV2": {
"message": "Skeniraj donji QR kôd svojom autentifikatorskom aplikacijom ili unesi ključ."
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Došlo je do pogreške kod očitavanja sigurnosnog ključa. Pokušaj ponovno."
},
- "twoFactorWebAuthnWarning": {
- "message": "Zbog platformskih ograničenja, WebAuthn nije moguće koristiti s Bitwarden aplikacijama na svim platformama. Za pristup računu kada nije moguće koristiti WebAuthn, trebalo bi uključiti drugog pružatelja prijave dvostrukom autentifikacijom. Platforme na kojima je WebAuthn podržan:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web trezor i proširenja preglednika na stolnim/prijenosnim računalima s WebAuthn podržanim preglednikom (npr. Chrome, Opera, Vivaldi ili Firefox s omogućenim WebAuthn)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Zbog platformskih ograničenja, WebAuthn nije moguće koristiti sa svim Bitwarden aplikacijama. Uključi drugi način dvostruke autentifikacije za pristup računu kada se ne može koristiti WebAuthn."
},
"twoFactorRecoveryYourCode": {
"message": "Tvoj kôd za oporavak Bitwarden prijave dvostrukom autentifikacijom"
@@ -3324,10 +3378,10 @@
}
},
"inviteSingleEmailDesc": {
- "message": "You have 1 invite remaining."
+ "message": "Imaš jednu preostalu pozivnicu."
},
"inviteZeroEmailDesc": {
- "message": "You have 0 invites remaining."
+ "message": "Nemaš preostalih pozivnica."
},
"userUsingTwoStep": {
"message": "Ovaj korisnik upotrebljava prijavu u dva koraka za zaštitu svog računa."
@@ -3781,7 +3835,7 @@
}
},
"unlinkedSso": {
- "message": "Unlinked SSO."
+ "message": "SSO odspojen."
},
"unlinkedSsoUser": {
"message": "Odspojen SSO za korisnika $ID$.",
@@ -3832,22 +3886,22 @@
"message": "Uređaj"
},
"loginStatus": {
- "message": "Login status"
+ "message": "Status prijave"
},
"firstLogin": {
- "message": "First login"
+ "message": "Prva prijava"
},
"trusted": {
- "message": "Trusted"
+ "message": "Pouzdan"
},
"needsApproval": {
- "message": "Needs approval"
+ "message": "Zahtjeva odobrenje"
},
"areYouTryingtoLogin": {
- "message": "Are you trying to log in?"
+ "message": "Pokušavaš li se prijaviti?"
},
"logInAttemptBy": {
- "message": "Login attempt by $EMAIL$",
+ "message": "$EMAIL$ se pokušava prijaviti",
"placeholders": {
"email": {
"content": "$1",
@@ -3856,22 +3910,22 @@
}
},
"deviceType": {
- "message": "Device Type"
+ "message": "Vrsta uređaja"
},
"ipAddress": {
- "message": "IP Address"
+ "message": "IP Adresa"
},
"confirmLogIn": {
- "message": "Confirm login"
+ "message": "Potvrdi prijavu"
},
"denyLogIn": {
- "message": "Deny login"
+ "message": "Odbij prijavu"
},
"thisRequestIsNoLongerValid": {
- "message": "This request is no longer valid."
+ "message": "Ovaj zahtjev više nije valjan."
},
"logInConfirmedForEmailOnDevice": {
- "message": "Login confirmed for $EMAIL$ on $DEVICE$",
+ "message": "Prijava za $EMAIL$ potvrđena na uređaju $DEVICE$",
"placeholders": {
"email": {
"content": "$1",
@@ -3884,16 +3938,16 @@
}
},
"youDeniedALogInAttemptFromAnotherDevice": {
- "message": "You denied a login attempt from another device. If this really was you, try to log in with the device again."
+ "message": "Odbijena je prijava na drugom uređaju. Ako si ovo stvarno ti, pokušaj se ponovno prijaviti uređajem."
},
"loginRequestHasAlreadyExpired": {
- "message": "Login request has already expired."
+ "message": "Zahtjev za prijavu je već istekao."
},
"justNow": {
- "message": "Just now"
+ "message": "Upravo"
},
"requestedXMinutesAgo": {
- "message": "Requested $MINUTES$ minutes ago",
+ "message": "Zatraženo prije $MINUTES$ minute/a",
"placeholders": {
"minutes": {
"content": "$1",
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Postavi pravila sigurnosti koje mora zadovoljiti generator lozinki."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Jedna ili više organizacijskih pravila utječe na postavke generatora."
- },
"masterPasswordPolicyInEffect": {
"message": "Jedna ili više organizacijskih pravila zahtijeva da tvoja glavna lozinka ispunjava sljedeće uvjete:"
},
@@ -5792,17 +5843,17 @@
"message": "Greška"
},
"decryptionError": {
- "message": "Decryption error"
+ "message": "Pogreška pri dešifriranju"
},
"couldNotDecryptVaultItemsBelow": {
- "message": "Bitwarden could not decrypt the vault item(s) listed below."
+ "message": "Bitwarden nije mogao dešifrirati sljedeće stavke trezora."
},
"contactCSToAvoidDataLossPart1": {
- "message": "Contact customer success",
+ "message": "Kontaktiraj službu za korisnike",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"contactCSToAvoidDataLossPart2": {
- "message": "to avoid additional data loss.",
+ "message": "kako bi izbjegli gubitak podataka.",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"accountRecoveryManageUsers": {
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Što želiš generirati?"
- },
- "passwordType": {
- "message": "Tip lozinke"
- },
- "regenerateUsername": {
- "message": "Ponovno generiraj korisničko ime"
- },
"generateUsername": {
"message": "Generiraj korisničko ime"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tip korisničkog imena"
- },
"plusAddressedEmail": {
"message": "Plus adresa e-pošte",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Koristi konfigurirani catch-all sandučić svoje domene."
},
+ "useThisEmail": {
+ "message": "Koristi ovu e-poštu"
+ },
"random": {
"message": "Nasumično",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Naziv poslužitelja",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token za API pristup"
- },
"deviceVerification": {
"message": "Provjera uređaja"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Nema zbirke"
},
- "canView": {
- "message": "Može vidjeti"
- },
- "canViewExceptPass": {
- "message": "Može vidjeti, osim lozinke"
- },
- "canEdit": {
- "message": "Može urediti"
- },
- "canEditExceptPass": {
- "message": "Može urediti, osim lozinke"
- },
"noCollectionsAdded": {
"message": "Niti jedna zbirka nije dodana"
},
@@ -8284,31 +8311,31 @@
"message": "Pouzdani uređaji"
},
"memberDecryptionOptionTdeDescPart1": {
- "message": "Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The",
+ "message": "Članovi neće trebati glavnu lozinku kada se prijavljuju putem SSO-a. Glavnu lozinku zamjenjuje ključem za šifriranje pohranjen na uređaju, što taj uređaj čini pouzdanim. Prvi uređaj na kojem član kreira svoj račun i s kojeg se prijavi bit će pouzdan. Nove uređaje morat će odobriti ili postojeći pouzdani uređaj ili administrator. Pravilo",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink1": {
- "message": "single organization",
+ "message": "isključive organizacije,",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart2": {
- "message": "policy,",
+ "message": "",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink2": {
- "message": "SSO required",
+ "message": "obavezne SSO prijave",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart3": {
- "message": "policy, and",
+ "message": "i",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink3": {
- "message": "account recovery administration",
+ "message": "administracije oporavka računa",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart4": {
- "message": "policy will turn on when this option is used.",
+ "message": "biti će uključeni ako se koristi ova opcija.",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"orgPermissionsUpdatedMustSetPassword": {
@@ -8387,16 +8414,16 @@
"message": "Odobri zahtjev"
},
"deviceApproved": {
- "message": "Device approved"
+ "message": "Uređaj odobren"
},
"deviceRemoved": {
- "message": "Device removed"
+ "message": "Uređaj uklonjen"
},
"removeDevice": {
- "message": "Remove device"
+ "message": "Ukloni uređaj"
},
"removeDeviceConfirmation": {
- "message": "Are you sure you want to remove this device?"
+ "message": "Sigurno želiš ukoniti ovaj uređaj?"
},
"noDeviceRequests": {
"message": "Nema zahtjeva na čekanju"
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Omogući brisanje zbirki samo vlasnicima i adminima"
},
+ "limitItemDeletionDesc": {
+ "message": "Ograniči brisanje stavke samo članovima koji imaju dozvolu „Moguće upravljanje”"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Vlasnici i admini mogu upravljati svim zbirkama i stavkama"
},
@@ -8656,9 +8686,6 @@
"message": "URL vlastitog poslužitelja",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domene"
- },
"alreadyHaveAccount": {
"message": "Već imaš račun?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Nemaš pristup za upravljanje ovom zbirkom."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Neodstaju prava „Moguće upravljanje”"
+ "grantManageCollectionWarningTitle": {
+ "message": "Nedostaju prava za upravljanje zbirkom"
},
- "grantAddAccessCollectionWarning": {
- "message": "Dodijeli prava „Moguće upravljanje” kako bi dozvolili puni pristup zbirkama uključujući brisanje."
+ "grantManageCollectionWarning": {
+ "message": "Dodijeli potpuna prava upravljanja zbirkom što uključuje i brisanje."
},
"grantCollectionAccess": {
"message": "Dodijeli grupama i članovima pristup ovoj zbirki."
@@ -9286,7 +9313,7 @@
"message": "mjesečno po korisniku"
},
"monthPerMemberBilledAnnually": {
- "message": "month per member billed annually"
+ "message": "mjesečno po članu, naplata godišnje"
},
"seats": {
"message": "Mjesta"
@@ -9437,16 +9464,16 @@
"message": "Ažurirane porezne informacije"
},
"billingInvalidTaxIdError": {
- "message": "Invalid tax ID, if you believe this is an error please contact support."
+ "message": "Neispravni porezni broj. Ako misliš da je broj ispravan, kontaktiraj podršku."
},
"billingTaxIdTypeInferenceError": {
- "message": "We were unable to validate your tax ID, if you believe this is an error please contact support."
+ "message": "Nismo mogli provjeriti tvoj porezni broj. Ako misliš da je broj ispravan, kontaktiraj podršku."
},
"billingPreviewInvalidTaxIdError": {
- "message": "Invalid tax ID, if you believe this is an error please contact support."
+ "message": "Neispravni porezni broj. Ako misliš da je broj ispravan, kontaktiraj podršku."
},
"billingPreviewInvoiceError": {
- "message": "An error occurred while previewing the invoice. Please try again later."
+ "message": "Greška kod pregleda fakture. Pokušaj ponovno kasnije."
},
"unverified": {
"message": "Nepotvrđeno"
@@ -9809,13 +9836,13 @@
"message": "Algoritam ključa"
},
"sshPrivateKey": {
- "message": "Private key"
+ "message": "Privatni ključ"
},
"sshPublicKey": {
- "message": "Public key"
+ "message": "Javni ključ"
},
"sshFingerprint": {
- "message": "Fingerprint"
+ "message": "Otisak prsta"
},
"sshKeyFingerprint": {
"message": "Otisak prsta"
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Šifra uplate"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "S dopuštenjima samo za prikaz ne možeš ukloniti zbirke: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Važna napomena"
},
@@ -10110,13 +10146,13 @@
"message": "Ukloni članove"
},
"devices": {
- "message": "Devices"
+ "message": "Uređaji"
},
"deviceListDescription": {
- "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now."
+ "message": "Tvoj račun je prijavljen na svakom od ovih uređaja. Ako ne prepoznaješ uređaj, odmah ga ukloni."
},
"deviceListDescriptionTemp": {
- "message": "Your account was logged in to each of the devices below."
+ "message": "Tvoj račun je prijavljen na svakom od ovih uređaja."
},
"claimedDomains": {
"message": "Potvrđene domene"
@@ -10204,7 +10240,7 @@
"message": "Naziv organizacije ne može biti duži od 50 znakova."
},
"resellerRenewalWarningMsg": {
- "message": "Your subscription will renew soon. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $RENEWAL_DATE$.",
+ "message": "Tvoja će se pretplata uskoro obnoviti. Za neprekinutu uslugu, kontaktiraj $RESELLER$ za potvrdu obnove prije $RENEWAL_DATE$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10217,7 +10253,7 @@
}
},
"resellerOpenInvoiceWarningMgs": {
- "message": "An invoice for your subscription was issued on $ISSUED_DATE$. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $DUE_DATE$.",
+ "message": "Za tvoju je pretplatu $ISSUED_DATE$ izdana faktura. Za neprekinutu uslugu, kontaktiraj $RESELLER$ za potvrdu obnove prije $DUE_DATE$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10234,7 +10270,7 @@
}
},
"resellerPastDueWarningMsg": {
- "message": "The invoice for your subscription has not been paid. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $GRACE_PERIOD_END$.",
+ "message": "Faktura za tvoju pretplatu nije plaćena. Za neprekinutu uslugu, kontaktiraj $RESELLER$ za potvrdu obnovu prije $GRACE_PERIOD_END$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10247,18 +10283,67 @@
}
},
"restartOrganizationSubscription": {
- "message": "Organization subscription restarted"
+ "message": "Organizacijska pretplata ponovno pokrenuta"
},
"restartSubscription": {
- "message": "Restart your subscription"
+ "message": "Ponovno pokreni pretplatu"
},
"suspendedManagedOrgMessage": {
- "message": "Contact $PROVIDER$ for assistance.",
+ "message": "Kontaktiraj $PROVIDER$ za pomoć.",
"placeholders": {
"provider": {
"content": "$1",
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administratori sada imaju mogućnost obrisati članski račun koji pripada potvrđenoj domeni."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Ovo će obrisati članski račun uključujući sve stavke u trezoru. Ovo zamjenjuje prethodnu radnju „Ukloni”."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Brisanje je nova radnja!"
+ },
+ "seatsRemaining": {
+ "message": "Imaš još $REMAINING$ preostalih sjedišta od $TOTAL$ dodijeljenih ovog organizaciji. Kontaktiraj svog pružatelja usluge za upravljanje pretplatom.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Postojeća organizacija"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Odaberi organizaciju koju želiš dodati na svoj portal pružatelja usluga."
+ },
+ "noOrganizations": {
+ "message": "Nema organizaciji za prikaz"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Tvoja pretplata davatelja usluga dobit će kredit za preostalo vrijeme u organizacijskoj pretplati."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "IP Adresa",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Postojeća organizacija dodana"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Dodijeljene licence premašuju dostupne licence."
}
}
diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json
index 76587eacc32..bdc55b96d3c 100644
--- a/apps/web/src/locales/hu/messages.json
+++ b/apps/web/src/locales/hu/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Mappa szerkesztése"
},
+ "newFolder": {
+ "message": "Új mappa"
+ },
+ "folderName": {
+ "message": "Mappanév"
+ },
+ "folderHintText": {
+ "message": "Mappa beágyazása a szülőmappa nevének hozzáadásával, majd egy “/” karakterrel. Példa: Közösségi/Fórumok"
+ },
+ "deleteFolderPermanently": {
+ "message": "Biztosan véglegesen törlésre kerüljön ez a mappa?"
+ },
"baseDomain": {
"message": "Alap domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Elem neve"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Nem távolíthatók el a csak megtekintési engedéllyel bíró gyűjtemények: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "Példa:",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "A bejelentkezés elindításra került."
},
+ "logInRequestSent": {
+ "message": "A kérés elküldésre került."
+ },
"submit": {
"message": "Elküldés"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A rendszer értesítést küldött az eszközre."
},
+ "notificationSentDevicePart1": {
+ "message": "A Bitwarden zárolás feloldása az eszközön vagy: "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "A fiókhoz próbálunk hozzáférni?"
+ },
+ "accessAttemptBy": {
+ "message": "Bejelentkezési kísérlet $EMAIL$ segítségével",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Hozzáférés megerősítése"
+ },
+ "denyAccess": {
+ "message": "Hozzáférés megtagadása"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "webalkalmazás"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Jóváhagyás előtt győződjünk meg arról, hogy az ujjlenyomat kifejezés megegyezik az alábbi kifejezéssel."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Oldjuk fel a Bitwarden zárolását az eszközön. Jóváhagyás előtt győződjünk meg arról, hogy az ujjlenyomat kifejezés megegyezik az alábbi kifejezéssel."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Egy értesítés lett elküldve az eszközre."
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Ellenőrizzük, hogy a széf feloldásra került és az ujjlenyomat kifejezés egyezik a másik eszközön levővel."
- },
"versionNumber": {
"message": "Verzió: $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Félreérthető karakterek mellőzése",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Jelszó újragenerálása"
- },
"length": {
"message": "Hossz"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Veszélyes terület"
},
- "dangerZoneDesc": {
- "message": "Óvatosan! Ezeket a műveleteket nem lehet visszaállítani."
- },
- "dangerZoneDescSingular": {
- "message": "Óvatosan! Ezeket a műveleteket nem lehet visszaállítani."
- },
"deauthorizeSessions": {
"message": "Munkamenetek hitelesítésének eldobása"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "A folytatásban s felhasználó kiléptetésre kerül az aktuális munkamenetből, szükséges az ismételt bejelentkezés. Ismételten megjelenik a kétlépcsős bejelentkezés, ha az engedélyezett. Más eszközök aktív munkamenetei akár egy óráig is aktívak maradhatnak."
},
+ "newDeviceLoginProtection": {
+ "message": "Új eszköz bejelentkezés"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Az új eszköz bejelentkezési védelmének kikapcsolása"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Az új eszköz bejelentkezési védelmének bekapcsolása"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Folytassuk az alábbiakkal a Bitwarden által küldendő ellenőrző emailek kikapcsolásához, amikor új eszközről jelentkezünk be."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Folytassuk az alábbiakkal a Bitwarden által küldendő ellenőrző emailek bekapcsolásához, amikor új eszközről jelentkezünk be."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Ha az új eszköz bejelentkezési védelme ki van kapcsolva, a mesterjelszó birtokában bárki hozzáférhet fiókhoz bármilyen eszközről. Ha meg szeretnénk védeni fiókot ellenőrző emailek nélkül, állítsunk be kétlépcsős bejelentkezést."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Az új eszköz bejelentkezés védelmi módosítások mentésre kerültek."
+ },
"sessionsDeauthorized": {
"message": "Az összes munkamenet hitelesítése eldobásra került."
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Kezelés"
},
- "canManage": {
- "message": "Kezelhet"
+ "manageCollection": {
+ "message": "Gyűjtemény kezelése"
+ },
+ "viewItems": {
+ "message": "Elemek megtekintése"
+ },
+ "viewItemsHidePass": {
+ "message": "Elemek megtekintése, rejtett jelszavak"
+ },
+ "editItems": {
+ "message": "Elemek szerkesztése"
+ },
+ "editItemsHidePass": {
+ "message": "Elemek szerkesztése, rejtett jelszavak"
},
"disable": {
"message": "Letiltás"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Probléma lépett fel a biztonsági kulcs olvasásakor. Próbáljuk újra."
},
- "twoFactorWebAuthnWarning": {
- "message": "A platform korlátozások miatt nem lehetséges minden Bitwarden alkalmazásban YubiKey eszközt használni. Engedélyezzünk egy másik kétlépcsős bejelentkezés szolgáltatót, hogy hozzáférhessünk a fiókhoz akkor is, ha a YubiKey nem használható. Támogatott platformok:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web széf és böngésző kiegészítők asztali gépen / laptopon engedélyezett U2F böngészővel (Chrome, Opera, Vivaldi, vagy Firefox bekapcsolt FIDO U2F-fel)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "A platform korlátozások miatt nem lehetséges minden Bitwarden alkalmazásban a WebAuthn használata. Be kell üzemelni egy másik kétlépcsős bejelentkezés szolgáltatót, hogy hozzáférhessünk a fiókhoz akkor is, ha a WebAuthn nem használható."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwarden kétlépcsős bejelentkezés helyreállító kód"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "A minimális követelmények beállítása a jelszó generáló konfigurációhoz."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Egy vagy több szervezeti szabály érinti a generátor beállításokat."
- },
"masterPasswordPolicyInEffect": {
"message": "Egy vagy több szervezeti szabály előírja a mesterjelszóhoz a következő követelményeket:"
},
@@ -6666,15 +6717,6 @@
"message": "Generátor",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Mit szeretnénk generálni?"
- },
- "passwordType": {
- "message": "Jelszótípus"
- },
- "regenerateUsername": {
- "message": "Felhasználónév ismételt generálása"
- },
"generateUsername": {
"message": "Felhasználónév generálása"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Felhasználónév típusa"
- },
"plusAddressedEmail": {
"message": "További címzési email cím",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Használjuk a tartomány konfigurált összes befogási bejövő postaládát."
},
+ "useThisEmail": {
+ "message": "Ezen email használata"
+ },
"random": {
"message": "Véletlen",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Kiszolglónév",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API hozzáférési vezérjel"
- },
"deviceVerification": {
"message": "Eszköz ellenőrzés"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Nincs gyűjtemény."
},
- "canView": {
- "message": "Megtekintheti"
- },
- "canViewExceptPass": {
- "message": "Megtekintheti, kivéve a jelszavakat"
- },
- "canEdit": {
- "message": "Szerkesztheti"
- },
- "canEditExceptPass": {
- "message": "Szerkesztheti, kivéve a jelszavakat"
- },
"noCollectionsAdded": {
"message": "Nem lett gyűjtemény hozzáadva."
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "A gyűjtemény törlésének korlátozása tulajdonosokra és adminisztrátorokra"
},
+ "limitItemDeletionDesc": {
+ "message": "Az elemek törlésének korlátozása a Kezelheti jogosultsággal rendelkező tagokra"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Saját üzemeltetésű szerver webcím",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Áldomain"
- },
"alreadyHaveAccount": {
"message": "Van már saját fiók?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Nincs jogosultság ennek a gyűjteménynek a kezelésére."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Hiányzó gyűjtemény kezelési engedélyek"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Adjunk gyűjtemény kezelési engedélyeket, hogy lehetővé tegyük a teljes gyűjtemény kezelést, beleértve a gyűjtemény törlését is."
},
"grantCollectionAccess": {
"message": "Adjunk hozzáférést csoportoknak vagy személyeknek eennél a gyűjteménynél."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Leíró kód"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Nem távolíthatók el a csak megtekintési engedéllyel bíró gyűjtemények: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Fontos megjegyzés"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Az adminisztrátorok mostantól törölhetik az igényelt tartományhoz tartozó tagi fiókokat."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Ez a művelet törli a tagi fiókot, beleértve a tárolókban lévő összes elemet. Ez felváltja az előző Eltávolítás műveletet."
+ },
+ "deleteManagedUserWarning": {
+ "message": "A törlés új művelet!"
+ },
+ "seatsRemaining": {
+ "message": "$REMAINING$ hely maradt a szervezethez rendelt $TOTAL$ helyből. Az előfizetés kezeléséhez forduljunk a szolgáltatóhoz.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Létező szervezet"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Válasszuk ki a szolgáltatói portálhoz hozzáadni kívánt szervezetet."
+ },
+ "noOrganizations": {
+ "message": "Nincsenek listázható szervezetek."
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "A szolgáltatói előfizetés jóváírást kap a szervezet előfizetésből hátralévő időre."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Hozzáadásra kerüljön ez a szervezet $PROVIDER$ szolgáltatáshoz?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "A létező szervezet hozzáadásra került."
+ },
+ "assignedExceedsAvailable": {
+ "message": "A hozzárendelt helyek száma meghaladja a rendelkezésre álló helyek számát."
}
}
diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json
index afaa94f8b5e..565cb743eab 100644
--- a/apps/web/src/locales/id/messages.json
+++ b/apps/web/src/locales/id/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit Folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Domain dasar",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "cth.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Kirim"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versi $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Buat Ulang Sandi"
- },
"length": {
"message": "Panjang"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona Bahaya"
},
- "dangerZoneDesc": {
- "message": "Hati-hati, tindakan ini tidak bisa dibatalkan!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Batalkan Otorisasi Sesi"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Melanjutkan juga akan mengeluarkan Anda dari sesi saat ini, mengharuskan Anda untuk masuk kembali. Anda juga akan diminta untuk masuk dua langkah lagi, jika diaktifkan. Sesi aktif di perangkat lain dapat terus aktif hingga satu jam."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Semua Sesi Dicabut Izinnya"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Kelola"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Nonaktifkan"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Ada masalah saat membaca kunci keamanan. Coba lagi."
},
- "twoFactorWebAuthnWarning": {
- "message": "Karena keterbatasan platform, WebAuthn tidak dapat digunakan di semua aplikasi Bitwarden. Anda harus mengaktifkan penyedia proses masuk dua langkah lainnya sehingga Anda dapat mengakses akun Anda saat WebAUthn tidak dapat digunakan. Platform yang didukung:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Brankas web dan ekstensi browser di desktop / laptop dengan browser yang mendukung WebAuthn (Chrome, Opera, Vivaldi, atau Firefox dengan FIDO U2F diaktifkan)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Kode pemulihan masuk dua langkah Bitwarden Anda"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Tetapkan persyaratan minimum untuk konfigurasi pembuat kata sandi."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Satu atau beberapa kebijakan organisasi memengaruhi pengaturan generator Anda."
- },
"masterPasswordPolicyInEffect": {
"message": "Satu atau lebih kebijakan organisasi memerlukan kata sandi utama Anda untuk memenuhi persyaratan berikut:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Jenis kata sandi"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Jenis nama pengguna"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Acak",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Verifikasi Perangkat"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json
index 4b708de2dd6..d05dec8e603 100644
--- a/apps/web/src/locales/it/messages.json
+++ b/apps/web/src/locales/it/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Modifica cartella"
},
+ "newFolder": {
+ "message": "Nuova cartella"
+ },
+ "folderName": {
+ "message": "Nome cartella"
+ },
+ "folderHintText": {
+ "message": "Annida una cartella aggiungendo il nome della cartella superiore seguito da un “/”. Esempio: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Sei sicuro di voler eliminare definitivamente questo cartella?"
+ },
"baseDomain": {
"message": "Dominio di base",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nome elemento"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Non puoi rimuovere raccolte con i soli permessi di visualizzazione: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "es.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Login avviato"
},
+ "logInRequestSent": {
+ "message": "Richiesta inviata"
+ },
"submit": {
"message": "Invia"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Una notifica è stata inviata al tuo dispositivo."
},
+ "notificationSentDevicePart1": {
+ "message": "Sblocca Bitwarden sul tuo dispositivo o su "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Stai cercando di accedere al tuo account?"
+ },
+ "accessAttemptBy": {
+ "message": "Tentativo di accesso di $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Conferma accesso"
+ },
+ "denyAccess": {
+ "message": "Nega accesso"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "app web"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Assicurarsi che la frase di impronta digitale corrisponda a quella sottostante prima dell'approvazione."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Sblocca Bitwarden sul tuo dispositivo. Assicurati che la frase di impronta digitale corrisponda a quella sottostante prima di approvare."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versione $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Rigenera password"
- },
"length": {
"message": "Lunghezza"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona pericolosa"
},
- "dangerZoneDesc": {
- "message": "Attento, queste azioni non sono reversibili!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Annulla autorizzazione sessioni"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Inoltre, procedere ti farà uscire dalla sessione corrente, richiedendoti di accedere. Se attivata, dovrai completare la verifica in due passaggi di nuovo. Le sessioni attive su altri dispositivi potrebbero continuare a rimanere attive per un massimo di un'ora."
},
+ "newDeviceLoginProtection": {
+ "message": "Accesso nuovo dispositivo"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Disattiva la nuova protezione di accesso del dispositivo"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Attiva la nuova protezione di accesso del dispositivo"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Procedi qui sotto per disattivare le e-mail di verifica che Bitwarden invia quando accedi da un nuovo dispositivo."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Procedi qui sotto per far sì che Bitwarden invii e-mail di verifica quando accedi da un nuovo dispositivo."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Con la nuova protezione di accesso del dispositivo disattivata, chiunque con la tua parola d'accesso principale può accedere al tuo account da qualsiasi dispositivo. Per proteggere il tuo account senza e-mail di verifica, imposta l'accesso in due passaggi."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Modifiche alla protezione del nuovo dispositivo salvate"
+ },
"sessionsDeauthorized": {
"message": "Tutte le sessioni revocate"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Gestisci"
},
- "canManage": {
- "message": "Può gestire"
+ "manageCollection": {
+ "message": "Gestisci collezione"
+ },
+ "viewItems": {
+ "message": "Vedi voci"
+ },
+ "viewItemsHidePass": {
+ "message": "Vedi elementi, parole d'accesso nascoste"
+ },
+ "editItems": {
+ "message": "Modifica voci"
+ },
+ "editItemsHidePass": {
+ "message": "Modifica elementi, parole d'accesso nascoste"
},
"disable": {
"message": "Disattiva"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Si è verificato un problema durante la lettura della chiave di sicurezza. Riprova."
},
- "twoFactorWebAuthnWarning": {
- "message": "A causa di limitazioni della piattaforma, WebAuthn non può essere utilizzato su tutte le app Bitwarden. Dovresti abilitare un altro metodo di verifica in due passaggi per accedere al tuo account anche quando WebAuthn non può essere usato. Piattaforme supportate:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Cassaforte Web ed estensione per il browser desktop/laptop con un browser abilitato per WebAuthn (Chrome, Opera, Vivaldi o Firefox con FIDO U2F abilitato)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "A causa delle limitazioni della piattaforma, WebAuthn non può essere usato in tutte le applicazioni Bitwarden. È necessario impostare un altro fornitore d'accesso in due passaggi in modo da poter accedere al tuo account quando WebAuthn non può essere usato."
},
"twoFactorRecoveryYourCode": {
"message": "Il tuo codice di recupero Bitwarden per la verifica in due passaggi"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Imposta requisiti minimi di complessità per il generatore di password."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Una o più politiche dell'organizzazione stanno influenzando le impostazioni del tuo generatore."
- },
"masterPasswordPolicyInEffect": {
"message": "Una o più politiche dell'organizzazione richiedono che la tua password principale soddisfi questi requisiti:"
},
@@ -6666,15 +6717,6 @@
"message": "Generatore",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Cosa vuoi generare?"
- },
- "passwordType": {
- "message": "Tipo di password"
- },
- "regenerateUsername": {
- "message": "Rigenera nome utente"
- },
"generateUsername": {
"message": "Genera nome utente"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tipo di nome utente"
- },
"plusAddressedEmail": {
"message": "Indirizzo email alternativo",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Usa la casella di posta catch-all di dominio."
},
+ "useThisEmail": {
+ "message": "Usa questa e-mail"
+ },
"random": {
"message": "Casuale",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Nome host",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token di accesso API"
- },
"deviceVerification": {
"message": "Verifica del dispositivo"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Nessuna raccolta"
},
- "canView": {
- "message": "Può visualizzare"
- },
- "canViewExceptPass": {
- "message": "Può visualizzare, eccetto le password"
- },
- "canEdit": {
- "message": "Può modificare"
- },
- "canEditExceptPass": {
- "message": "Può modificare, eccetto le password"
- },
"noCollectionsAdded": {
"message": "Nessuna raccolta aggiunta"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limita l'eliminazione di elementi ai membri con il permesso di gestione"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Proprietari e amministratori possono gestire tutte le raccolte e gli elementi"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Dominio alias"
- },
"alreadyHaveAccount": {
"message": "Hai già un account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Non hai accesso alla gestione di questa raccolta."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Autorizzazione Può gestire mancante"
+ "grantManageCollectionWarningTitle": {
+ "message": "Permessi di gestione raccolte mancanti"
},
- "grantAddAccessCollectionWarning": {
- "message": "Concedi l'autorizzazione Può gestire per consentire la gestione completa della raccolta, inclusa l'eliminazione della raccolta."
+ "grantManageCollectionWarning": {
+ "message": "Concedi i permessi di gestione della collezione per consentire la gestione completa della raccolta, inclusa l'eliminazione della raccolta."
},
"grantCollectionAccess": {
"message": "Consenti a gruppi o membri di accedere a questa raccolta."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Non puoi rimuovere raccolte con i soli permessi di visualizzazione: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Gli amministratori ora hanno la possibilità di eliminare gli account membri che appartengono a un dominio rivendicato."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Questa azione eliminerà l'account membro includendo tutti gli elementi nella sua cassaforte. Questo sostituisce l'azione precedente Rimuovi."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Eliminare è una nuova azione!"
+ },
+ "seatsRemaining": {
+ "message": "Hai $REMAINING$ posti di $TOTAL$ posti assegnati a quest'organizzazione. Contatta il provider per gestire l'abbonamento.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Organizzazione esistente"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Seleziona un'organizzazione da aggiungere al tuo portale fornitori."
+ },
+ "noOrganizations": {
+ "message": "Non ci sono organizzazioni da elencare"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Il tuo abbonamento fornitore riceverà un credito per qualsiasi tempo rimanente nell'abbonamento dell'organizzazione."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Vuoi aggiungere questa organizzazione a $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Aggiunta organizzazione esistente"
+ },
+ "assignedExceedsAvailable": {
+ "message": "I posti assegnati superano i posti disponibili."
}
}
diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json
index 1a07ff92dac..dbe3ceb6eaf 100644
--- a/apps/web/src/locales/ja/messages.json
+++ b/apps/web/src/locales/ja/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "フォルダーを編集"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "ベースドメイン",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "アイテム名"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "表示のみの権限が与えられているコレクションを削除することはできません: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "例:",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "ログイン開始"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "送信"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "デバイスに通知を送信しました。"
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "お使いのデバイスに通知が送信されました"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "アカウントがロック解除されていることと、フィンガープリントフレーズが他の端末と一致していることを確認してください"
- },
"versionNumber": {
"message": "バージョン $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "あいまいな文字を避ける",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "パスワードの再生成"
- },
"length": {
"message": "長さ"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "危険な操作"
},
- "dangerZoneDesc": {
- "message": "これらの操作はやり直せないため注意してください!"
- },
- "dangerZoneDescSingular": {
- "message": "この操作は元に戻せないため注意してください!"
- },
"deauthorizeSessions": {
"message": "セッションの承認を取り消す"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "次に進むと現在のセッションからログアウトし二段階認証を含め再度ログインが必要になります。他のデバイスでのセッションは1時間程度維持されます。"
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "全てのセッションを無効化"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "管理"
},
- "canManage": {
- "message": "管理可能"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "無効化"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "セキュリティキーの読み取り中に問題が発生しました。もう一度やり直して下さい。"
},
- "twoFactorWebAuthnWarning": {
- "message": "プラットフォームの制限により、WebAuthnはBitwardenの全てのアプリケーションで使用できるわけではありません。WebAuthnが使用できない場合に備えて、他の二段階認証プロバイダを有効化しておくことをおすすめします。サポートされているプラットフォーム:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "WebAuthn対応ブラウザ(FIDO U2F が有効な Chrome、Opera、Vivaldi、Firefox)を搭載したデスクトップ/ノートパソコンで、WebVaultとブラウザ拡張機能を使用します。"
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "二段階認証のリカバリーコード"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "パスワード生成の最低要件を設定する。"
},
- "passwordGeneratorPolicyInEffect": {
- "message": "組織の要件がパスワード生成の設定に影響しています。"
- },
"masterPasswordPolicyInEffect": {
"message": "組織が求めるマスターパスワードの要件は:"
},
@@ -6666,15 +6717,6 @@
"message": "ジェネレーター",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "何を生成しますか?"
- },
- "passwordType": {
- "message": "パスワードの種類"
- },
- "regenerateUsername": {
- "message": "ユーザー名を再生成"
- },
"generateUsername": {
"message": "ユーザー名を生成"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "ユーザー名の種類"
- },
"plusAddressedEmail": {
"message": "プラス付きのメールアドレス",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "ドメインに設定されたキャッチオール受信トレイを使用します。"
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "ランダム",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "ホスト名",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API アクセストークン"
- },
"deviceVerification": {
"message": "デバイス認証"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "コレクションなし"
},
- "canView": {
- "message": "閲覧可能"
- },
- "canViewExceptPass": {
- "message": "パスワード以外は閲覧可能"
- },
- "canEdit": {
- "message": "編集可能"
- },
- "canEditExceptPass": {
- "message": "パスワード以外は編集可能"
- },
"noCollectionsAdded": {
"message": "コレクションが追加されていません"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "コレクションの削除を所有者と管理者のみに制限"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "所有者と管理者はすべてのコレクションとアイテムを管理できます"
},
@@ -8656,9 +8686,6 @@
"message": "自己ホスト型サーバー URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "エイリアスドメイン"
- },
"alreadyHaveAccount": {
"message": "既にアカウントをお持ちですか?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "このコレクションを管理する権限がありません。"
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "「管理可能」権限がありません"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "コレクションの削除を含む完全なコレクション管理を許可するには「管理可能」権限を許可してください。"
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "グループまたはメンバーにこのコレクションへのアクセスを許可します。"
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "表示のみの権限が与えられているコレクションを削除することはできません: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json
index 64df2c2111c..92c64db7f56 100644
--- a/apps/web/src/locales/ka/messages.json
+++ b/apps/web/src/locales/ka/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "საქაღალდის ჩასწორება"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "დომენის ბაზა",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "მაგ.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "ავტორიზაცია დაწყებულია"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "გადაცემა"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "შეტყობინება გამოიგზავნა თქვენი ტელეფონის მისამართით."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "ვერსია $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json
index 486f01ce2cb..7e6f614b9c8 100644
--- a/apps/web/src/locales/km/messages.json
+++ b/apps/web/src/locales/km/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json
index d6720ef2375..83d0f5f6b89 100644
--- a/apps/web/src/locales/kn/messages.json
+++ b/apps/web/src/locales/kn/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "ಫೋಲ್ಡರ್ ಸಂಪಾದಿಸಿ"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "ಮೂಲ ಡೊಮೇನ್",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ಉದಾಹರಣೆ.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "ಒಪ್ಪಿಸು"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "ಆವೃತ್ತಿ $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪುನರುತ್ಪಾದಿಸಿ"
- },
"length": {
"message": "ಉದ್ದ"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "ಅಪಾಯ ವಲಯ"
},
- "dangerZoneDesc": {
- "message": "ಎಚ್ಚರಿಕೆಯಿಂದ, ಈ ಕ್ರಿಯೆಗಳು ಹಿಂತಿರುಗಿಸಲಾಗುವುದಿಲ್ಲ!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "ಸೆಷನ್ಗಳನ್ನು ಅನಧಿಕೃತಗೊಳಿಸಿ"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "ಮುಂದುವರಿಯುವುದರಿಂದ ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಸೆಷನ್ನಿಂದ ನಿಮ್ಮನ್ನು ಲಾಗ್ಔಟ್ ಮಾಡುತ್ತದೆ, ನಿಮಗೆ ಮತ್ತೆ ಲಾಗ್ ಇನ್ ಆಗುವ ಅಗತ್ಯವಿರುತ್ತದೆ. ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ ಮತ್ತೆ ಎರಡು-ಹಂತದ ಲಾಗಿನ್ಗೆ ನಿಮ್ಮನ್ನು ಕೇಳಲಾಗುತ್ತದೆ. ಇತರ ಸಾಧನಗಳಲ್ಲಿ ಸಕ್ರಿಯ ಸೆಷನ್ಗಳು ಒಂದು ಗಂಟೆಯವರೆಗೆ ಸಕ್ರಿಯವಾಗಿ ಮುಂದುವರಿಯಬಹುದು."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "ಎಲ್ಲಾ ಸೆಷನ್ಗಳು ಅನಧಿಕೃತವಾಗಿವೆ"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "ವ್ಯವಸ್ಥಾಪಕ"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "ನಿಷ್ಕ್ರಿಯೆಗೊಳಿಸಿ"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "ಭದ್ರತಾ ಕೀಲಿಯನ್ನು ಓದುವಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸು."
},
- "twoFactorWebAuthnWarning": {
- "message": "ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಮಿತಿಗಳ ಕಾರಣ, ಎಲ್ಲಾ ಬಿಟ್ವಾರ್ಡೆನ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ವೆಬ್ಆಥ್ನ್ ಅನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ. ನೀವು ಇನ್ನೊಂದು ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ಒದಗಿಸುವವರನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು ಇದರಿಂದ ವೆಬ್ಆಥ್ನ್ ಅನ್ನು ಬಳಸಲಾಗದಿದ್ದಾಗ ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಪ್ರವೇಶಿಸಬಹುದು. ಬೆಂಬಲಿತ ವೇದಿಕೆಗಳು:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "ವೆಬ್ಆಥ್ನ್ ಶಕ್ತಗೊಂಡ ಬ್ರೌಸರ್ನೊಂದಿಗೆ ಡೆಸ್ಕ್ಟಾಪ್ / ಲ್ಯಾಪ್ಟಾಪ್ನಲ್ಲಿ ವೆಬ್ ವಾಲ್ಟ್ ಮತ್ತು ಬ್ರೌಸರ್ ವಿಸ್ತರಣೆಗಳು (ಕ್ರೋಮ್, ಒಪೇರಾ, ವಿವಾಲ್ಡಿ, ಅಥವಾ ಎಫ್ಐಡಿಒ ಯು 2 ಎಫ್ ಸಕ್ರಿಯಗೊಳಿಸಿದ ಫೈರ್ಫಾಕ್ಸ್)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "ನಿಮ್ಮ ಬಿಟ್ವಾರ್ಡೆನ್ ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "ಪಾಸ್ವರ್ಡ್ ಜನರೇಟರ್ ಕಾನ್ಫಿಗರೇಶನ್ಗಾಗಿ ಕನಿಷ್ಠ ಅವಶ್ಯಕತೆಗಳನ್ನು ಹೊಂದಿಸಿ."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಸಂಸ್ಥೆ ನೀತಿಗಳು ನಿಮ್ಮ ಜನರೇಟರ್ ಸೆಟ್ಟಿಂಗ್ಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತವೆ."
- },
"masterPasswordPolicyInEffect": {
"message": "ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಸಂಸ್ಥೆ ನೀತಿಗಳಿಗೆ ಈ ಕೆಳಗಿನ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಲು ನಿಮ್ಮ ಮಾಸ್ಟರ್ ಪಾಸ್ವರ್ಡ್ ಅಗತ್ಯವಿದೆ:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json
index d030fffee14..7ff621bf3c1 100644
--- a/apps/web/src/locales/ko/messages.json
+++ b/apps/web/src/locales/ko/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "폴더 편집"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "기본 도메인",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "예)",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "보내기"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "기기에 알림이 전송되었습니다."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "버전 $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "비밀번호 재생성"
- },
"length": {
"message": "길이"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "위험 구역"
},
- "dangerZoneDesc": {
- "message": "주의, 이 행동들은 되돌릴 수 없음!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "세션 해제"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "계속 진행하면, 현재 세션 또한 로그아웃 되므로 다시 로그인하여야 합니다. 2단계 로그인이 활성화 된 경우 다시 요구하는 메세지가 표시됩니다. 다른 기기의 활성화 된 세션은 최대 1시간 동안 유지 될 수 있습니다."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "모든 세션 해제 됨"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "관리"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "비활성화"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "보안 키를 읽어오는데 문제가 발생했습니다. 다시 시도해보십시오."
},
- "twoFactorWebAuthnWarning": {
- "message": "플랫폼 제한으로 인해, 모든 Bitwarden 애플리케이션에서 WebAuthn을 사용할 수 없습니다. WebAuthn을 사용할 수 없을 때 계정에 접근할 수 있도록 다른 2단계 로그인 방법을 활성화하십시오. 지원하는 플랫폼:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "WebAuthn 지원 브라우저가 있는 데스크탑/랩탑의 웹 보관함 및 브라우저 확장 (WebAuthn이 활성화된 Chrome, Opera, Vivaldi 또는 Firefox 사용)"
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwarden 2단계 로그인 복구 코드"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "비밀번호 생성기 설정에 최소 요구 사항을 설정해주세요."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "하나 이상의 단체 정책이 생성기 설정에 영항을 미치고 있습니다."
- },
"masterPasswordPolicyInEffect": {
"message": "하나 이상의 단체 정책이 마스터 비밀번호가 다음 사항을 따르도록 요구합니다:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json
index ffd166b6655..9f7ba055ed4 100644
--- a/apps/web/src/locales/lv/messages.json
+++ b/apps/web/src/locales/lv/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Labot mapi"
},
+ "newFolder": {
+ "message": "Jauna mape"
+ },
+ "folderName": {
+ "message": "Mapes nosaukums"
+ },
+ "folderHintText": {
+ "message": "Apakšmapes var izveidot, ja pievieno iekļaujošās mapes nosaukumu, aiz kura ir \"/\". Piemēram: Tīklošanās/Forumi"
+ },
+ "deleteFolderPermanently": {
+ "message": "Vai tiešām neatgriezeniski izdzēst šo mapi?"
+ },
"baseDomain": {
"message": "Pamata domēns",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Vienuma nosaukums"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Nevar noņemt krājumus ar tiesībām \"Tikai skatīt\": $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "piem.,",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Uzsākta pieteikšanās"
},
+ "logInRequestSent": {
+ "message": "Pieprasījums nosūtīts"
+ },
"submit": {
"message": "Iesniegt"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Uz ierīci ir nosūtīts paziņojums."
},
+ "notificationSentDevicePart1": {
+ "message": "Bitwarden jāatslēdz savā ierīcē vai "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Vai mēģini piekļūt savam kontam?"
+ },
+ "accessAttemptBy": {
+ "message": "$EMAIL$ piekļuves mēģinājums",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Apstiprināt piekļuvi"
+ },
+ "denyAccess": {
+ "message": "Noraidīt piekļuvi"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "tīmekļa lietotnē"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Pirms apstiprināšanas jāpārliecinās, ka pirkstu nospieduma vārdkopa atbilst zemāk esošajai."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Savā ierīcē jāatslēdz Bitwarden. Pirms apstiprināšanas jāpārliecinās, ka pirkstu nospieduma vārdkopa atbilst zemāk esošajai."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Uz ierīci tika nosūtīts paziņojums"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Lūgums pārliecināties, ka konts ir atslēgts un atpazīšanas vārdkopa ir tāda pati arī otrā ierīcē"
- },
"versionNumber": {
"message": "Laidiens $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Izvairīties no viegli sajaucamām rakstzīmēm",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Pārizveidot paroli"
- },
"length": {
"message": "Garums"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Bīstamā sadaļa"
},
- "dangerZoneDesc": {
- "message": "Piesardzību, šīs darbības nav atsaucamas!"
- },
- "dangerZoneDescSingular": {
- "message": "Uzmanīgi, šī darbība ir neatgriezeniska!"
- },
"deauthorizeSessions": {
"message": "Padarīt sesijas spēkā neesošas"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Tiks veikta atteikšanās no pašreizējās sesijas, un pēc tam būs nepieciešams atkārtoti pieteikties. Būs nepieciešama arī divpakāpju pieteikšanās, ja tā ir iespējota. Citās ierīcēs darbojošās sesijas var būt spēkā līdz vienai stundai."
},
+ "newDeviceLoginProtection": {
+ "message": "Pieteikšanās jaunā ierīcē"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Izslēgt pieteikšanās jaunā ierīcē aizsardzību"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Ieslēgt pieteikšanās jaunā ierīcē aizsardzību"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Turpināt zemāk, lai izslēgtu apliecināšanas e-pasta ziņojumus, ko Bitwarden sūta, kad notiek pieteikšanās jaunā ierīcē."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Turpināt zemāk, lai Bitwarden sūtītu apliecināšanas e-pasta ziņojumus, kad notiek pieteikšanās jaunā ierīcē."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Ar izslēgtu pieteikšanās jaunā ierīcē aizsardzību ikviens ar Tavu galveno paroli var piekļūt kontam no jebkuras ierīces. Lai aizsargātu savu kontu bez apliecināšanas e-pasta ziņojumiem, jāiestata divpakāpju pieteikšanās."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Pieteikšanās jaunā ierīcē aizsardzības izmaiņas saglabātas"
+ },
"sessionsDeauthorized": {
"message": "Visu sesiju darbība ir atsaukta"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Pārvaldīt"
},
- "canManage": {
- "message": "Var pārvaldīt"
+ "manageCollection": {
+ "message": "Pārvaldīt krājumu"
+ },
+ "viewItems": {
+ "message": "Apskatīt vienumus"
+ },
+ "viewItemsHidePass": {
+ "message": "Apskatīt vienumus, paslēptās paroles"
+ },
+ "editItems": {
+ "message": "Labot vienumus"
+ },
+ "editItemsHidePass": {
+ "message": "Labot vienumus, paslēptās paroles"
},
"disable": {
"message": "Atspējot"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Radās sarežģījumi, nolasot drošības atslēgu. Jāmēģina vēlreiz."
},
- "twoFactorWebAuthnWarning": {
- "message": "Platformas ierobežojumu dēļ WebAuth nevar izmantot visās Bitwarden lietotnēs. Ir ieteicams iespējot vēl kādu divpakāpju pieteikšanās nodrošinātāju, lai varētu piekļūt kontam, kad nav iespējams izmantot WebAuth. Atbalstītās platformas:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Tīmekļa glabātava un pārlūku paplašinājums galddatorā/klēpjdatorā ar WebAuthn iespējotu pārlūku (Chrome, Opera, Vivaldi vai Firefox ar iespējotu FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Platformas ierobežojumu dēļ WebAuth nevar izmantot visās Bitwarden lietotnēs. Ir ieteicams iespējot vēl kādu divpakāpju pieteikšanās nodrošinātāju, lai varētu piekļūt kontam, kad nav iespējams izmantot WebAuth."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwarden divpakāpju pieteikšanās atkopšanas kods"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Uzstādīt paroļu veidotāja uzstādījumu mazākās izpildāmās prasības."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Viens vai vairāki apvienības nosacījumi ietekmē veidotāja iestatījumus."
- },
"masterPasswordPolicyInEffect": {
"message": "Vienā vai vairākos apvienības nosacījumos ir norādīts, ka galvenajai parolei ir jāatbilst šādām prasībām:"
},
@@ -6666,15 +6717,6 @@
"message": "Veidotājs",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Ko ir vēlme izveidot?"
- },
- "passwordType": {
- "message": "Paroles veids"
- },
- "regenerateUsername": {
- "message": "Pārizveidot lietotājvārdu"
- },
"generateUsername": {
"message": "Izveidot lietotājvārdu"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Lietotājvārda veids"
- },
"plusAddressedEmail": {
"message": "E-pasta adrese ar plusu",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Izmantot uzstādīto domēna visu tverošo iesūtni."
},
+ "useThisEmail": {
+ "message": "Izmantot šo e-pasta adresi"
+ },
"random": {
"message": "Nejauši",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Resursdatora nosaukums",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API piekļuves pilnvara"
- },
"deviceVerification": {
"message": "Ierīces apstiprināšana"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Nav krājuma"
},
- "canView": {
- "message": "Var skatīt"
- },
- "canViewExceptPass": {
- "message": "Var skatīt, izņemot paroles"
- },
- "canEdit": {
- "message": "Var labot"
- },
- "canEditExceptPass": {
- "message": "Var labot, izņemot paroles"
- },
"noCollectionsAdded": {
"message": "Nav pievienotu krājumu"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Ļaut krājumu izdzēšanu tikai īpašniekiem un pārvaldītājiem"
},
+ "limitItemDeletionDesc": {
+ "message": "Ierobežot lietotājiem vienumu izdzēšanu ar atļauju \"Var pārvaldīt\""
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Īpašnieki un pārvaldnieki var pārvaldīt visus krājumus un vienumus"
},
@@ -8656,9 +8686,6 @@
"message": "Pašmitināta servera URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Aizstājdomēns"
- },
"alreadyHaveAccount": {
"message": "Jau ir konts?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Nav piekļuves pārvaldīt šo krājumu."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Trūkst atļaujas \"Var pārvaldīt\""
+ "grantManageCollectionWarningTitle": {
+ "message": "Trūkst krājumu pārvaldīšanas atļaujas"
},
- "grantAddAccessCollectionWarning": {
- "message": "Jānodrošina atļauja \"Var pārvaldīt\", lai ļautu pilnu krājuma pārvaldību, tajā skaitā krājuma izdzēšanu."
+ "grantManageCollectionWarning": {
+ "message": "Jānodrošina atļauja \"Pārvaldīt kŗajumu\", lai ļautu pilnu krājuma pārvaldību, tajā skaitā krājuma izdzēšanu."
},
"grantCollectionAccess": {
"message": "Piešķirt kopām vai dalībniekiem piekļuvi šim krājumam."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Apraksta kods"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Nevar noņemt krājumus ar tiesībām \"Tikai skatīt\": $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Svarīgs paziņojums"
},
@@ -10176,7 +10212,7 @@
}
},
"updatedRevokeSponsorshipConfirmationForSentSponsorship": {
- "message": "If you remove $EMAIL$, the sponsorship for this Family plan cannot be redeemed. Are you sure you want to continue?",
+ "message": "Ja tiks noņemta $EMAIL$, atbalstītājdarbība šim Ģimenes plānam nevarēs izmantot. Vai tiešām turpināt?",
"placeholders": {
"email": {
"content": "$1",
@@ -10185,7 +10221,7 @@
}
},
"updatedRevokeSponsorshipConfirmationForAcceptedSponsorship": {
- "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end and the saved payment method will be charged $40 + applicable tax on $DATE$. You will not be able to redeem a new sponsorship until $DATE$. Are you sure you want to continue?",
+ "message": "Ja tiks noņemta $EMAIL$, šī Ģimenes plāna atbalstītājdarbība beigsies, un $DATE$ ar saglabāto maksājumu veidu tiks veikta $40 apmaksa + piemērojamais nodoklis. Nebūs iespējams izmantot jaunu atbalstītājdarbību līdz $DATE$. Vai tiešām turpināt?",
"placeholders": {
"email": {
"content": "$1",
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Pārvaldītājiem tagad ir iespēja izdzēst dalībnieku kontus, kas pieder pieteiktam domēnam."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Šī darbība izdzēsīs dalībnieka kontu, tajā skaitā visus glabātavas vienumus. Tā aizstāj iepriekšējo darbību \"Noņemt\"."
+ },
+ "deleteManagedUserWarning": {
+ "message": "\"Izdzēst\" ir jaunā darbība."
+ },
+ "seatsRemaining": {
+ "message": "Ir atlikušas $REMAINING$ no apvienībai piesaistītajām $TOTAL$ vietām. Jāsazinās ar nodrošinātāju, lai pārvaldītu savu abonementu.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Esoša apvienība"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Jāatlasa apvienība, kuru pievienot savam nodrošinātāju portālam."
+ },
+ "noOrganizations": {
+ "message": "Nav apvienību, ko uzskaitīt"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Nodrošinātāja abonements saņemts kredītu par jebkuru atlikušo laiku apvienības abonementā."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Vai šo apvienību pievienot $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Pievienota esoša apvienība"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Piešķirtās vietas pārsniedz pieejamās vietas."
}
}
diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json
index 56746c8f01f..617f3b2d8ac 100644
--- a/apps/web/src/locales/ml/messages.json
+++ b/apps/web/src/locales/ml/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "ഫോൾഡർ തിരുത്തുക"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "അടിസ്ഥാന ഡൊമെയ്ൻ",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ഉദാഹരണം.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "സമർപ്പിക്കുക"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "വേർഷൻ $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "പാസ്സ്വേഡ് വീണ്ടും സൃഷ്ടിക്കുക"
- },
"length": {
"message": "ദൈര്ഘ്യം"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "അപകട മേഖല"
},
- "dangerZoneDesc": {
- "message": "ശ്രദ്ധിക്കുക, ഈ പ്രവർത്തനങ്ങൾ മാറ്റാനാവില്ല!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize Sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if enabled. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "എല്ലാ സെഷനും നിരസിച്ചു."
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "നിയന്ത്രിക്കുക"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "പ്രവര്ത്തന രഹിതമാക്കുക"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "പാസ്വേഡ് ജനറേറ്റർ കോൺഫിഗറേഷനായി മിനിമം ആവശ്യകതകൾ സജ്ജമാക്കുക."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "ഒന്നോ അതിലധികമോ സംഘടന നയങ്ങൾ നിങ്ങളുടെ പാസ്സ്വേഡ് സൃഷ്ടാവിൻ്റെ ക്രമീകരണങ്ങളെ ബാധിക്കുന്നു."
- },
"masterPasswordPolicyInEffect": {
"message": "ഒന്നോ അതിലധികമോ ഓർഗനൈസേഷൻ നയങ്ങൾക്ക് ഇനിപ്പറയുന്ന ആവശ്യകതകൾ നിറവേറ്റുന്നതിന് നിങ്ങളുടെ മാസ്റ്റർ പാസ്വേഡ് ആവശ്യമാണ്:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json
index 486f01ce2cb..7e6f614b9c8 100644
--- a/apps/web/src/locales/mr/messages.json
+++ b/apps/web/src/locales/mr/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json
index 486f01ce2cb..7e6f614b9c8 100644
--- a/apps/web/src/locales/my/messages.json
+++ b/apps/web/src/locales/my/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json
index d27d6c8fae0..a804f5dfafb 100644
--- a/apps/web/src/locales/nb/messages.json
+++ b/apps/web/src/locales/nb/messages.json
@@ -96,7 +96,7 @@
"message": "Apps marked as critical"
},
"application": {
- "message": "Application"
+ "message": "Program"
},
"atRiskPasswords": {
"message": "At-risk passwords"
@@ -208,22 +208,22 @@
"message": "Kortholderens navn"
},
"loginCredentials": {
- "message": "Login credentials"
+ "message": "Legitimasjoner for innlogging"
},
"personalDetails": {
- "message": "Personal details"
+ "message": "Personlige detaljer"
},
"identification": {
- "message": "Identification"
+ "message": "Identifikasjon"
},
"contactInfo": {
- "message": "Contact info"
+ "message": "Kontaktinfo"
},
"cardDetails": {
- "message": "Card details"
+ "message": "Kortdetaljer"
},
"cardBrandDetails": {
- "message": "$BRAND$ details",
+ "message": "$BRAND$-detaljer",
"placeholders": {
"brand": {
"content": "$1",
@@ -232,19 +232,19 @@
}
},
"itemHistory": {
- "message": "Item history"
+ "message": "Gjenstandshistorikk"
},
"authenticatorKey": {
- "message": "Authenticator key"
+ "message": "Autentiseringsnøkkel"
},
"autofillOptions": {
- "message": "Autofill options"
+ "message": "Autoutfyllings-innstillinger"
},
"websiteUri": {
- "message": "Website (URI)"
+ "message": "Nettsted (URİ)"
},
"websiteUriCount": {
- "message": "Website (URI) $COUNT$",
+ "message": "Nettsted (URİ) $COUNT$",
"description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.",
"placeholders": {
"count": {
@@ -254,16 +254,16 @@
}
},
"websiteAdded": {
- "message": "Website added"
+ "message": "Nettsted lagt til"
},
"addWebsite": {
- "message": "Add website"
+ "message": "Legg til nettsted"
},
"deleteWebsite": {
- "message": "Delete website"
+ "message": "Slett nettsted"
},
"defaultLabel": {
- "message": "Default ($VALUE$)",
+ "message": "Standard ($VALUE$)",
"description": "A label that indicates the default value for a field with the current default value in parentheses.",
"placeholders": {
"value": {
@@ -384,7 +384,7 @@
"message": "Dr․"
},
"cardExpiredTitle": {
- "message": "Expired card"
+ "message": "Utløpt kort"
},
"cardExpiredMessage": {
"message": "If you've renewed it, update the card's information"
@@ -408,7 +408,7 @@
"message": "Bitwarden can store and fill 2-step verification codes. Select the camera icon to take a screenshot of this website's authenticator QR code, or copy and paste the key into this field."
},
"learnMoreAboutAuthenticators": {
- "message": "Learn more about authenticators"
+ "message": "Lær mer om autentisering"
},
"folder": {
"message": "Mappe"
@@ -432,17 +432,17 @@
"message": "Boolsk verdi"
},
"cfTypeCheckbox": {
- "message": "Checkbox"
+ "message": "Avkryssingsboks"
},
"cfTypeLinked": {
"message": "Tilknyttet",
"description": "This describes a field that is 'linked' (related) to another field."
},
"fieldType": {
- "message": "Field type"
+ "message": "Felttype"
},
"fieldLabel": {
- "message": "Field label"
+ "message": "Feltetikett"
},
"remove": {
"message": "Fjern"
@@ -455,7 +455,7 @@
"description": "This is the folder for uncategorized items"
},
"selfOwnershipLabel": {
- "message": "You",
+ "message": "Du",
"description": "Used as a label to indicate that the user is the owner of an item."
},
"addFolder": {
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Rediger mappen"
},
+ "newFolder": {
+ "message": "Ny mappe"
+ },
+ "folderName": {
+ "message": "Mappenavn"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Grunndomene",
"description": "Domain name. Example: website.com"
@@ -508,7 +520,7 @@
"message": "Generer et passord"
},
"generatePassphrase": {
- "message": "Generate passphrase"
+ "message": "Generér passordfrase"
},
"checkPassword": {
"message": "Sjekk om passordet har blitt utsatt."
@@ -611,7 +623,7 @@
"message": "Sikkert notat"
},
"typeSshKey": {
- "message": "SSH key"
+ "message": "SSH-nøkkel"
},
"typeLoginPlural": {
"message": "Innlogginger"
@@ -644,7 +656,7 @@
"message": "Fullt navn"
},
"address": {
- "message": "Address"
+ "message": "Adresse"
},
"address1": {
"message": "Adresse 1"
@@ -689,7 +701,7 @@
"message": "Vis elementet"
},
"newItemHeader": {
- "message": "New $TYPE$",
+ "message": "Ny $TYPE$",
"placeholders": {
"type": {
"content": "$1",
@@ -698,7 +710,7 @@
}
},
"editItemHeader": {
- "message": "Edit $TYPE$",
+ "message": "Rediger $TYPE$",
"placeholders": {
"type": {
"content": "$1",
@@ -723,19 +735,10 @@
"message": "Element"
},
"itemDetails": {
- "message": "Item details"
+ "message": "Gjenstandens detaljer"
},
"itemName": {
- "message": "Item name"
- },
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
+ "message": "Gjenstandens navn"
},
"ex": {
"message": "f.eks.",
@@ -761,7 +764,7 @@
}
},
"copySuccessful": {
- "message": "Copy Successful"
+ "message": "Kopiering lyktes"
},
"copyValue": {
"message": "Kopier verdien",
@@ -776,7 +779,7 @@
"description": "Copy passphrase to clipboard"
},
"passwordCopied": {
- "message": "Password copied"
+ "message": "Passordet er kopiert"
},
"copyUsername": {
"message": "Kopier brukernavnet",
@@ -795,7 +798,7 @@
"description": "Copy URI to clipboard"
},
"copyCustomField": {
- "message": "Copy $FIELD$",
+ "message": "Kopiér $FIELD$",
"placeholders": {
"field": {
"content": "$1",
@@ -804,34 +807,34 @@
}
},
"copyWebsite": {
- "message": "Copy website"
+ "message": "Kopiér nettsted"
},
"copyNotes": {
- "message": "Copy notes"
+ "message": "Kopiér notater"
},
"copyAddress": {
- "message": "Copy address"
+ "message": "Kopiér adresse"
},
"copyPhone": {
- "message": "Copy phone"
+ "message": "Kopiér telefonnummer"
},
"copyEmail": {
"message": "Copy email"
},
"copyCompany": {
- "message": "Copy company"
+ "message": "Kopiér firma"
},
"copySSN": {
- "message": "Copy Social Security number"
+ "message": "Kopiér fødselsnummer"
},
"copyPassportNumber": {
- "message": "Copy passport number"
+ "message": "Kopiér passnummer"
},
"copyLicenseNumber": {
- "message": "Copy license number"
+ "message": "Kopiér lisensnummer"
},
"copyName": {
- "message": "Copy name"
+ "message": "Kopiér navn"
},
"me": {
"message": "Meg"
@@ -922,7 +925,7 @@
}
},
"itemsMovedToOrg": {
- "message": "Items moved to $ORGNAME$",
+ "message": "Gjenstandene ble flyttet til $ORGNAME$",
"placeholders": {
"orgname": {
"content": "$1",
@@ -931,7 +934,7 @@
}
},
"itemMovedToOrg": {
- "message": "Item moved to $ORGNAME$",
+ "message": "Gjenstanden ble flyttet til $ORGNAME$",
"placeholders": {
"orgname": {
"content": "$1",
@@ -991,22 +994,22 @@
"message": "Logget av"
},
"loggedOutDesc": {
- "message": "You have been logged out of your account."
+ "message": "Du har blitt logget ut av kontoen din."
},
"loginExpired": {
"message": "Din innloggingsøkt har utløpt."
},
"restartRegistration": {
- "message": "Restart registration"
+ "message": "Start registreringen på nytt"
},
"expiredLink": {
- "message": "Expired link"
+ "message": "Utløpt lenke"
},
"pleaseRestartRegistrationOrTryLoggingIn": {
"message": "Please restart registration or try logging in."
},
"youMayAlreadyHaveAnAccount": {
- "message": "You may already have an account"
+ "message": "Du har kanskje allerede en konto"
},
"logOutConfirmation": {
"message": "Er du sikker på at du vil logge av?"
@@ -1033,7 +1036,7 @@
"message": "Logg på med enhet må settes opp i Bitwarden-innstillingene. Trenger du et annet alternativ?"
},
"needAnotherOptionV1": {
- "message": "Need another option?"
+ "message": "Trenger du et annet alternativ?"
},
"loginWithMasterPassword": {
"message": "Logg på med hovedpassord"
@@ -1048,13 +1051,13 @@
"message": "Bruk en annen innloggingsmetode"
},
"logInWithPasskey": {
- "message": "Log in with passkey"
+ "message": "Logg inn med passnøkkel"
},
"useSingleSignOn": {
"message": "Use single sign-on"
},
"welcomeBack": {
- "message": "Welcome back"
+ "message": "Velkommen tilbake"
},
"invalidPasskeyPleaseTryAgain": {
"message": "Ugyldig Passkey. Vennligst prøv igjen."
@@ -1138,10 +1141,10 @@
"message": "Opprett en konto"
},
"newToBitwarden": {
- "message": "New to Bitwarden?"
+ "message": "Er du ny til Bitwarden?"
},
"setAStrongPassword": {
- "message": "Set a strong password"
+ "message": "Velg et sterkt passord"
},
"finishCreatingYourAccountBySettingAPassword": {
"message": "Finish creating your account by setting a password"
@@ -1156,7 +1159,7 @@
"message": "Logg på"
},
"logInToBitwarden": {
- "message": "Log in to Bitwarden"
+ "message": "Logg inn på Bitwarden"
},
"authenticationTimeout": {
"message": "Authentication timeout"
@@ -1171,7 +1174,7 @@
"message": "We don't recognize this device. Enter the code sent to your email to verify your identity."
},
"continueLoggingIn": {
- "message": "Continue logging in"
+ "message": "Fortsett innloggingen"
},
"whatIsADevice": {
"message": "What is a device?"
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Pålogging startet"
},
+ "logInRequestSent": {
+ "message": "Forespørsel sendt"
+ },
"submit": {
"message": "Send inn"
},
@@ -1235,13 +1241,13 @@
"message": "Innstillinger"
},
"accountEmail": {
- "message": "Account email"
+ "message": "Kontoens E-postadresse"
},
"requestHint": {
- "message": "Request hint"
+ "message": "Be om et hint"
},
"requestPasswordHint": {
- "message": "Request password hint"
+ "message": "Be om passordhint"
},
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
"message": "Enter your account email address and your password hint will be sent to you"
@@ -1284,10 +1290,10 @@
"message": "Din nye konto har blitt opprettet! Du kan nå logge på."
},
"newAccountCreated2": {
- "message": "Your new account has been created!"
+ "message": "Den nye kontoen din er opprettet!"
},
"youHaveBeenLoggedIn": {
- "message": "You have been logged in!"
+ "message": "Du har blitt logget inn!"
},
"trialAccountCreated": {
"message": "Kontoen ble opprettet."
@@ -1305,10 +1311,10 @@
"message": "E-postadresse"
},
"yourVaultIsLockedV2": {
- "message": "Your vault is locked"
+ "message": "Hvelvet ditt er låst"
},
"yourAccountIsLocked": {
- "message": "Your account is locked"
+ "message": "Kontoen din er låst"
},
"uuid": {
"message": "UUID"
@@ -1371,11 +1377,38 @@
"notificationSentDevice": {
"message": "Et varsel har blitt sendt til enheten din."
},
- "aNotificationWasSentToYourDevice": {
- "message": "A notification was sent to your device"
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "nett-app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "aNotificationWasSentToYourDevice": {
+ "message": "Et varsel ble sendt til enheten din"
},
"versionNumber": {
"message": "Versjon $VERSION_NUMBER$",
@@ -1480,7 +1513,7 @@
"message": "E-post"
},
"emailDescV2": {
- "message": "Enter a code sent to your email."
+ "message": "Skriv inn koden du har fått tilsendt på E-post."
},
"continue": {
"message": "Fortsett"
@@ -1661,17 +1694,14 @@
"description": "deprecated. Use avoidAmbiguous instead."
},
"avoidAmbiguous": {
- "message": "Avoid ambiguous characters",
+ "message": "Unngå forvekslingsbare tegn",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerer passord"
- },
"length": {
"message": "Lengde"
},
"passwordMinLength": {
- "message": "Minimum password length"
+ "message": "Minimum passordlengde"
},
"uppercase": {
"message": "Store bokstaver (A-Z)",
@@ -1709,10 +1739,10 @@
"message": "Passordhistorikk"
},
"generatorHistory": {
- "message": "Generator history"
+ "message": "Generatorhistorikk"
},
"clearGeneratorHistoryTitle": {
- "message": "Clear generator history"
+ "message": "Tøm generatorhistorikk"
},
"cleargGeneratorHistoryDescription": {
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
@@ -1721,13 +1751,13 @@
"message": "Det er ingen passord å liste opp."
},
"clearHistory": {
- "message": "Clear history"
+ "message": "Tøm historikk"
},
"nothingToShow": {
- "message": "Nothing to show"
+ "message": "Ingenting å vise"
},
"nothingGeneratedRecently": {
- "message": "You haven't generated anything recently"
+ "message": "Du har ikke generert noe i det siste"
},
"clear": {
"message": "Tøm",
@@ -1767,7 +1797,7 @@
"message": "Vennligst logg på igjen."
},
"currentSession": {
- "message": "Current session"
+ "message": "Gjeldende økt"
},
"requestPending": {
"message": "Request pending"
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Faresone"
},
- "dangerZoneDesc": {
- "message": "Vær forsiktig, disse handlingene kan ikke reverseres!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Fjern autorisering av økter"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Å fortsette vil også logge deg av din nåværende økt, og gjør at du vil måtte logge på igjen. Du vil også bli bedt om 2-trinnsinnlogging igjen, dersom det er aktivert. Aktive økter på andre enheter kan kanskje forbli aktive i opptil en time."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Fjernet autoriseringen fra alle økter"
},
@@ -1944,7 +1989,7 @@
"message": "Dataene har blitt vellykket importert inn i hvelvet ditt."
},
"importSuccessNumberOfItems": {
- "message": "A total of $AMOUNT$ items were imported.",
+ "message": "$AMOUNT$ gjenstander totalt ble importert.",
"placeholders": {
"amount": {
"content": "$1",
@@ -1974,16 +2019,16 @@
"message": "Feil under dekryptering av den eksporterte filen. Krypteringsnøkkelen samsvarte ikke med krypteringsnøkkelen som ble brukt eksport av data."
},
"destination": {
- "message": "Destination"
+ "message": "Destinasjon"
},
"learnAboutImportOptions": {
- "message": "Learn about your import options"
+ "message": "Lær mer om importalternativene dine"
},
"selectImportFolder": {
- "message": "Select a folder"
+ "message": "Velg en mappe"
},
"selectImportCollection": {
- "message": "Select a collection"
+ "message": "Velg en samling"
},
"importTargetHint": {
"message": "Select this option if you want the imported file contents moved to a $DESTINATION$",
@@ -1996,7 +2041,7 @@
}
},
"importUnassignedItemsError": {
- "message": "File contains unassigned items."
+ "message": "Filen inneholder utildelte elementer."
},
"selectFormat": {
"message": "Velg formatet til importfilen"
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Behandle"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Deaktiver"
@@ -2195,7 +2252,7 @@
"message": "You are leaving Bitwarden and launching an external website in a new window."
},
"twoStepContinueToBitwardenUrlTitle": {
- "message": "Continue to bitwarden.com?"
+ "message": "Vil du fortsette til bitwarden.com?"
},
"twoStepContinueToBitwardenUrlDesc": {
"message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website."
@@ -2210,7 +2267,7 @@
"message": "Nøkkel"
},
"twoStepAuthenticatorEnterCodeV2": {
- "message": "Verification code"
+ "message": "Verifiseringskode"
},
"twoStepAuthenticatorReaddDesc": {
"message": "Dersom du trenger å legge den til til en annen enhet, er QR-koden (eller -nøkkelen) som kreves av din autentiseringsapp nedenfor."
@@ -2294,7 +2351,7 @@
"message": "Client Id"
},
"twoFactorDuoClientSecret": {
- "message": "Client Secret"
+ "message": "Klienthemmelighet"
},
"twoFactorDuoApiHostname": {
"message": "API-vertsnavn"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Det oppsto et problem med å lese sikkerhetsnøkkelen. Prøv igjen."
},
- "twoFactorWebAuthnWarning": {
- "message": "På grunn av plattformbegrensninger, kan ikke WebAuthn brukes på alle Bitwarden-apper. Du bør aktivere en annen 2-trinnsinnloggingsleverandør, slik at du kan få tilgang til kontoen din når WebAuthn ikke kan brukes. Støttede plattformer:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Netthvelv og nettleserutvidelser, på en datamaskin med en WebAuthn støttende nettleser (Chrome, Opera, Vivaldi, eller Firefox med FIDO U2F aktivert)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Din 2-trinnsinnloggingsgjenopprettingskode for Bitwarden"
@@ -2938,7 +2992,7 @@
"message": "Ta kontakt med kundestøtte"
},
"contactSupportShort": {
- "message": "Contact Support"
+ "message": "Kontakt kundestøtte"
},
"updatedPaymentMethod": {
"message": "Oppdaterte betalingsmetoden."
@@ -3405,7 +3459,7 @@
"message": "Netthvelv"
},
"cli": {
- "message": "CLI"
+ "message": "Ledetekst"
},
"bitWebVault": {
"message": "Bitwarden Web vault"
@@ -3435,13 +3489,13 @@
"message": "Innloggingsforsøket mislyktes grunnet feil 2-trinnsinnlogging."
},
"incorrectPassword": {
- "message": "Incorrect password"
+ "message": "Feil passord"
},
"incorrectCode": {
- "message": "Incorrect code"
+ "message": "Feil kode"
},
"incorrectPin": {
- "message": "Incorrect PIN"
+ "message": "Feil PIN-kode"
},
"pin": {
"message": "PIN",
@@ -3493,7 +3547,7 @@
}
},
"viewAllLogInOptions": {
- "message": "View all log in options"
+ "message": "Vis alle påloggingsalternativer"
},
"viewAllLoginOptions": {
"message": "Vis alle påloggingsalternativer"
@@ -3838,16 +3892,16 @@
"message": "First login"
},
"trusted": {
- "message": "Trusted"
+ "message": "Betrodd"
},
"needsApproval": {
"message": "Needs approval"
},
"areYouTryingtoLogin": {
- "message": "Are you trying to log in?"
+ "message": "Prøver du å logge på?"
},
"logInAttemptBy": {
- "message": "Login attempt by $EMAIL$",
+ "message": "Påloggingsforsøk av $EMAIL$",
"placeholders": {
"email": {
"content": "$1",
@@ -3859,7 +3913,7 @@
"message": "Device Type"
},
"ipAddress": {
- "message": "IP Address"
+ "message": "IP-adresse"
},
"confirmLogIn": {
"message": "Confirm login"
@@ -3890,7 +3944,7 @@
"message": "Login request has already expired."
},
"justNow": {
- "message": "Just now"
+ "message": "Akkurat nå"
},
"requestedXMinutesAgo": {
"message": "Requested $MINUTES$ minutes ago",
@@ -3902,25 +3956,25 @@
}
},
"creatingAccountOn": {
- "message": "Creating account on"
+ "message": "Oppretter en konto på"
},
"checkYourEmail": {
- "message": "Check your email"
+ "message": "Sjekk E-postinnboksen din"
},
"followTheLinkInTheEmailSentTo": {
- "message": "Follow the link in the email sent to"
+ "message": "Følg lenken i E-postadressen som ble sendt til"
},
"andContinueCreatingYourAccount": {
"message": "and continue creating your account."
},
"noEmail": {
- "message": "No email?"
+ "message": "Ingen E-post?"
},
"goBack": {
- "message": "Go back"
+ "message": "Gå tilbake"
},
"toEditYourEmailAddress": {
- "message": "to edit your email address."
+ "message": "for å redigere E-postadressen din."
},
"view": {
"message": "Vis"
@@ -4004,7 +4058,7 @@
"message": "Din E-postadresse har blitt bekreftet."
},
"emailVerifiedV2": {
- "message": "Email verified"
+ "message": "E-post bekreftet"
},
"emailVerifiedFailed": {
"message": "Klarte ikke å bekrefte E-postadressen din. Prøv å sende en ny bekreftelses-E-post."
@@ -4461,10 +4515,10 @@
"message": "Unsubscribe"
},
"atAnyTime": {
- "message": "at any time."
+ "message": "når som helst."
},
"byContinuingYouAgreeToThe": {
- "message": "By continuing, you agree to the"
+ "message": "Ved å fortsette, samtykker du til"
},
"and": {
"message": "and"
@@ -4488,7 +4542,7 @@
"message": "Pause for hvelvet"
},
"vaultTimeout1": {
- "message": "Timeout"
+ "message": "Tidsavbrudd"
},
"vaultTimeoutDesc": {
"message": "Velg når hvelvet ditt skal ta pause og utføre den valgte handlingen."
@@ -4557,7 +4611,7 @@
"message": "Valgt"
},
"recommended": {
- "message": "Recommended"
+ "message": "Anbefalt"
},
"ownership": {
"message": "Eierskap"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Sett minimumskrav for konfigurasjon av passordgenerator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "En eller flere av organisasjonens vilkår påvirker generatorinnstillingene dine."
- },
"masterPasswordPolicyInEffect": {
"message": "En eller flere av organisasjonens vilkår krever hovedpassordet ditt for å oppfylle følgende krav:"
},
@@ -4873,13 +4924,13 @@
"message": "Du kan nå lukke denne fanen og fortsette i utvidelsen."
},
"youSuccessfullyLoggedIn": {
- "message": "You successfully logged in"
+ "message": "Du har vellykket logget inn"
},
"thisWindowWillCloseIn5Seconds": {
"message": "This window will automatically close in 5 seconds"
},
"youMayCloseThisWindow": {
- "message": "You may close this window"
+ "message": "Du kan lukke dette vinduet"
},
"includeAllTeamsFeatures": {
"message": "Alle Lag funksjoner, plus:"
@@ -5044,7 +5095,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"copyLink": {
- "message": "Copy link"
+ "message": "Kopier lenke"
},
"copySendLink": {
"message": "Kopier Send-lenke",
@@ -5792,7 +5843,7 @@
"message": "Feil"
},
"decryptionError": {
- "message": "Decryption error"
+ "message": "Dekrypteringsfeil"
},
"couldNotDecryptVaultItemsBelow": {
"message": "Bitwarden could not decrypt the vault item(s) listed below."
@@ -5802,7 +5853,7 @@
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"contactCSToAvoidDataLossPart2": {
- "message": "to avoid additional data loss.",
+ "message": "for å unngå ytterligere datatap.",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"accountRecoveryManageUsers": {
@@ -6469,7 +6520,7 @@
"message": "Rotasjon av faktureringssynkroniserings-token vil gjøre den forrige token ugyldig."
},
"selfHostedServer": {
- "message": "self-hosted"
+ "message": "selvbetjent"
},
"customEnvironment": {
"message": "Custom environment"
@@ -6666,23 +6717,14 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Hva vil du generere?"
- },
- "passwordType": {
- "message": "Passordtype"
- },
- "regenerateUsername": {
- "message": "Regenerer Brukernavn"
- },
"generateUsername": {
"message": "Generer brukernavn"
},
"generateEmail": {
- "message": "Generate email"
+ "message": "Generér E-post"
},
"spinboxBoundariesHint": {
- "message": "Value must be between $MIN$ and $MAX$.",
+ "message": "Verdien må være mellom $MIN$ og $MAX$.",
"description": "Explains spin box minimum and maximum values to the user",
"placeholders": {
"min": {
@@ -6696,7 +6738,7 @@
}
},
"passwordLengthRecommendationHint": {
- "message": " Use $RECOMMENDED$ characters or more to generate a strong password.",
+ "message": " Bruk minst $RECOMMENDED$ tegn for å generere et sterkt passord.",
"description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Brukernavntype"
- },
"plusAddressedEmail": {
"message": "Pluss-adressert e-post",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Bruk domenets konfigurerte catch-all innboks."
},
+ "useThisEmail": {
+ "message": "Bruk denne E-postadressen"
+ },
"random": {
"message": "Vilkårlig",
"description": "Generates domain-based username using random letters"
@@ -6739,23 +6781,23 @@
"message": "Vilkårlig ord"
},
"usernameGenerator": {
- "message": "Username generator"
+ "message": "Brukernavngenerator"
},
"useThisPassword": {
- "message": "Use this password"
+ "message": "Bruk dette passordet"
},
"useThisUsername": {
- "message": "Use this username"
+ "message": "Bruk dette brukernavnet"
},
"securePasswordGenerated": {
"message": "Secure password generated! Don't forget to also update your password on the website."
},
"useGeneratorHelpTextPartOne": {
- "message": "Use the generator",
+ "message": "Bruk denne generatoren",
"description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'"
},
"useGeneratorHelpTextPartTwo": {
- "message": "to create a strong unique password",
+ "message": "for å lage et sterkt og unikt passord",
"description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'"
},
"service": {
@@ -6821,11 +6863,11 @@
"message": "Generer et e-postalias med en ekstern videresendingstjeneste."
},
"forwarderDomainName": {
- "message": "Email domain",
+ "message": "E-postdomene",
"description": "Labels the domain name email forwarder service option"
},
"forwarderDomainNameHint": {
- "message": "Choose a domain that is supported by the selected service",
+ "message": "Velg et domene som støttes av den valgte tjenesten",
"description": "Guidance provided for email forwarding services that support multiple email domains."
},
"forwarderError": {
@@ -6843,11 +6885,11 @@
}
},
"forwarderGeneratedBy": {
- "message": "Generated by Bitwarden.",
+ "message": "Generert av Bitwarden.",
"description": "Displayed with the address on the forwarding service's configuration screen."
},
"forwarderGeneratedByWithWebsite": {
- "message": "Website: $WEBSITE$. Generated by Bitwarden.",
+ "message": "Nettsted: $WEBSITE$. Generert av Bitwarden.",
"description": "Displayed with the address on the forwarding service's configuration screen.",
"placeholders": {
"WEBSITE": {
@@ -6857,7 +6899,7 @@
}
},
"forwaderInvalidToken": {
- "message": "Invalid $SERVICENAME$ API token",
+ "message": "Ugyldig $SERVICENAME$-API-sjetong",
"description": "Displayed when the user's API token is empty or rejected by the forwarding service.",
"placeholders": {
"servicename": {
@@ -6867,7 +6909,7 @@
}
},
"forwaderInvalidTokenWithMessage": {
- "message": "Invalid $SERVICENAME$ API token: $ERRORMESSAGE$",
+ "message": "Ugyldig $SERVICENAME$-API-sjetong: $ERRORMESSAGE$",
"description": "Displayed when the user's API token is rejected by the forwarding service with an error message.",
"placeholders": {
"servicename": {
@@ -6891,7 +6933,7 @@
}
},
"forwarderNoDomain": {
- "message": "Invalid $SERVICENAME$ domain.",
+ "message": "Ugyldig $SERVICENAME$-domene.",
"description": "Displayed when the domain is empty or domain authorization failed at the forwarding service.",
"placeholders": {
"servicename": {
@@ -6911,7 +6953,7 @@
}
},
"forwarderUnknownError": {
- "message": "Unknown $SERVICENAME$ error occurred.",
+ "message": "Ukjent $SERVICENAME$-feil oppstod.",
"description": "Displayed when the forwarding service failed due to an unknown error.",
"placeholders": {
"servicename": {
@@ -6934,9 +6976,6 @@
"message": "Vertsnavn",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API tilgangstoken"
- },
"deviceVerification": {
"message": "Enhetsverifisering"
},
@@ -7053,7 +7092,7 @@
}
},
"inputMinValue": {
- "message": "Input value must be at least $MIN$.",
+ "message": "Inndataverdien må være minst $MIN$.",
"placeholders": {
"min": {
"content": "$1",
@@ -7062,7 +7101,7 @@
}
},
"inputMaxValue": {
- "message": "Input value must not exceed $MAX$.",
+ "message": "Inndataverdien kan ikke være mer enn $MAX$.",
"placeholders": {
"max": {
"content": "$1",
@@ -7092,10 +7131,10 @@
}
},
"singleFieldNeedsAttention": {
- "message": "1 field needs your attention."
+ "message": "1 felt trenger din oppmerksomhet."
},
"multipleFieldsNeedAttention": {
- "message": "$COUNT$ fields need your attention.",
+ "message": "$COUNT$ felter trenger din oppmerksomhet.",
"placeholders": {
"count": {
"content": "$1",
@@ -7113,7 +7152,7 @@
"message": "Duo two-step login is required for your account."
},
"launchDuo": {
- "message": "Launch Duo"
+ "message": "Start Duo"
},
"turnOn": {
"message": "Slå på"
@@ -7122,7 +7161,7 @@
"message": "På"
},
"off": {
- "message": "Off"
+ "message": "Av"
},
"members": {
"message": "Medlemmer"
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Ingen samling"
},
- "canView": {
- "message": "Kan vise"
- },
- "canViewExceptPass": {
- "message": "Kan vise, bortsett fra passord"
- },
- "canEdit": {
- "message": "Kan redigere"
- },
- "canEditExceptPass": {
- "message": "Kan redigere, bortsett fra passord"
- },
"noCollectionsAdded": {
"message": "Ingen samlinger lagt til"
},
@@ -7808,37 +7835,37 @@
"message": "Verification required for this action. Set a PIN to continue."
},
"setPin": {
- "message": "Set PIN"
+ "message": "Velg PIN"
},
"verifyWithBiometrics": {
- "message": "Verify with biometrics"
+ "message": "Bekreft med biometri"
},
"awaitingConfirmation": {
- "message": "Awaiting confirmation"
+ "message": "Avventer bekreftelse"
},
"couldNotCompleteBiometrics": {
- "message": "Could not complete biometrics."
+ "message": "Kunne ikke fullføre biometri."
},
"needADifferentMethod": {
- "message": "Need a different method?"
+ "message": "Trenger du en annen metode?"
},
"useMasterPassword": {
- "message": "Use master password"
+ "message": "Bruk hovedpassord"
},
"usePin": {
- "message": "Use PIN"
+ "message": "Bruk PIN-kode"
},
"useBiometrics": {
- "message": "Use biometrics"
+ "message": "Bruk biometri"
},
"enterVerificationCodeSentToEmail": {
- "message": "Enter the verification code that was sent to your email."
+ "message": "Skriv inn bekreftelseskoden som ble sendt til e-postadressen din."
},
"resendCode": {
- "message": "Resend code"
+ "message": "Send koden på nytt"
},
"memberColumnHeader": {
- "message": "Member"
+ "message": "Medlem"
},
"groupSlashMemberColumnHeader": {
"message": "Group/Member"
@@ -7952,7 +7979,7 @@
"message": "Filopplasting"
},
"upload": {
- "message": "Upload"
+ "message": "Last opp"
},
"acceptedFormats": {
"message": "Aksepterte formater:"
@@ -7964,13 +7991,13 @@
"message": "eller"
},
"unlockWithBiometrics": {
- "message": "Unlock with biometrics"
+ "message": "Lås opp med biometri"
},
"unlockWithPin": {
- "message": "Unlock with PIN"
+ "message": "Lås opp med PIN-kode"
},
"unlockWithMasterPassword": {
- "message": "Unlock with master password"
+ "message": "Lås opp med hovedpassord"
},
"licenseAndBillingManagement": {
"message": "Håndtering av lisens og fakturering"
@@ -8066,10 +8093,10 @@
"message": "This user can access Secrets Manager"
},
"important": {
- "message": "Important:"
+ "message": "Viktig:"
},
"viewAll": {
- "message": "View all"
+ "message": "Vis alle"
},
"showingPortionOfTotal": {
"message": "Showing $PORTION$ of $TOTAL$",
@@ -8085,10 +8112,10 @@
}
},
"resolveTheErrorsBelowAndTryAgain": {
- "message": "Resolve the errors below and try again."
+ "message": "Fiks feilene nedenfor og prøv igjen."
},
"description": {
- "message": "Description"
+ "message": "Beskrivelse"
},
"errorReadingImportFile": {
"message": "An error occurred when trying to read the import file"
@@ -8107,7 +8134,7 @@
"description": "Software Development Kit"
},
"createAnAccount": {
- "message": "Create an account"
+ "message": "Opprett en konto"
},
"createSecret": {
"message": "Create a secret"
@@ -8129,7 +8156,7 @@
"message": "Import secrets"
},
"getStarted": {
- "message": "Get started"
+ "message": "Kom i gang"
},
"complete": {
"message": "$COMPLETED$/$TOTAL$ Complete",
@@ -8248,7 +8275,7 @@
"message": "Update KDF settings"
},
"loginInitiated": {
- "message": "Login initiated"
+ "message": "Innlogging igangsatt"
},
"rememberThisDeviceToMakeFutureLoginsSeamless": {
"message": "Remember this device to make future logins seamless"
@@ -8257,25 +8284,25 @@
"message": "Device approval required. Select an approval option below:"
},
"deviceApprovalRequiredV2": {
- "message": "Device approval required"
+ "message": "Enhetsgodkjennelse kreves"
},
"selectAnApprovalOptionBelow": {
"message": "Select an approval option below"
},
"rememberThisDevice": {
- "message": "Remember this device"
+ "message": "Husk denne enheten"
},
"uncheckIfPublicDevice": {
"message": "Uncheck if using a public device"
},
"approveFromYourOtherDevice": {
- "message": "Approve from your other device"
+ "message": "Godkjenn fra en av dine andre enheter"
},
"requestAdminApproval": {
- "message": "Request admin approval"
+ "message": "Be om administratorgodkjennelse"
},
"approveWithMasterPassword": {
- "message": "Approve with master password"
+ "message": "Godkjenn med hovedpassord"
},
"trustedDeviceEncryption": {
"message": "Trusted device encryption"
@@ -8320,7 +8347,7 @@
"description": "Used as a card title description on the set password page to explain why the user is there"
},
"cardMetrics": {
- "message": "out of $TOTAL$",
+ "message": "av $TOTAL$",
"placeholders": {
"total": {
"content": "$1",
@@ -8338,7 +8365,7 @@
}
},
"verificationRequired": {
- "message": "Verification required",
+ "message": "Verifisering kreves",
"description": "Default title for the user verification dialog."
},
"recoverAccount": {
@@ -8375,7 +8402,7 @@
"message": "Device info"
},
"time": {
- "message": "Time"
+ "message": "Tid"
},
"denyAllRequests": {
"message": "Deny all requests"
@@ -8474,7 +8501,7 @@
}
},
"next": {
- "message": "Next"
+ "message": "Neste"
},
"ssoLoginIsRequired": {
"message": "SSO login is required"
@@ -8489,16 +8516,16 @@
"message": "Admin approval requested"
},
"adminApprovalRequestSentToAdmins": {
- "message": "Your request has been sent to your admin."
+ "message": "Forespørselen din har blitt sendt til administratoren din."
},
"youWillBeNotifiedOnceApproved": {
- "message": "You will be notified once approved."
+ "message": "Du vil bli varslet når det er godkjent."
},
"troubleLoggingIn": {
- "message": "Trouble logging in?"
+ "message": "Har du problemer med å logge inn?"
},
"loginApproved": {
- "message": "Login approved"
+ "message": "Innlogging godkjent"
},
"userEmailMissing": {
"message": "User email missing"
@@ -8507,18 +8534,18 @@
"message": "Active user email not found. Logging you out."
},
"deviceTrusted": {
- "message": "Device trusted"
+ "message": "Enheten er betrodd"
},
"sendsNoItemsTitle": {
- "message": "No active Sends",
+ "message": "Ingen aktive Send",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendsNoItemsMessage": {
- "message": "Use Send to securely share encrypted information with anyone.",
+ "message": "Bruk Send til å dele kryptert informasjon med noen.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"inviteUsers": {
- "message": "Invite Users"
+ "message": "Inviter brukere"
},
"secretsManagerForPlan": {
"message": "Secrets Manager for $PLAN$",
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8638,7 +8668,7 @@
"message": "Max potential service account cost"
},
"loggedInExclamation": {
- "message": "Logged in!"
+ "message": "Innlogget!"
},
"beta": {
"message": "Beta"
@@ -8650,32 +8680,29 @@
"message": "Edited collections"
},
"baseUrl": {
- "message": "Server URL"
+ "message": "Tjener-URL"
},
"selfHostBaseUrl": {
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
- "message": "Already have an account?"
+ "message": "Har du allerede en konto?"
},
"toggleSideNavigation": {
"message": "Toggle side navigation"
},
"skipToContent": {
- "message": "Skip to content"
+ "message": "Hopp frem til innholdet"
},
"managePermissionRequired": {
"message": "At least one member or group must have can manage permission."
},
"typePasskey": {
- "message": "Passkey"
+ "message": "Passnøkkel"
},
"passkeyNotCopied": {
- "message": "Passkey will not be copied"
+ "message": "Passkoden vil ikke bli kopiert"
},
"passkeyNotCopiedAlert": {
"message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?"
@@ -8690,7 +8717,7 @@
}
},
"seeDetailedInstructions": {
- "message": "See detailed instructions on our help site at",
+ "message": "Se detaljerte instruksjoner på hjelpesidene våre på",
"description": "This is followed a by a hyperlink to the help website."
},
"installBrowserExtension": {
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -8739,7 +8766,7 @@
"message": "Service account access updated"
},
"commonImportFormats": {
- "message": "Common formats",
+ "message": "Vanlige formater",
"description": "Label indicating the most common import formats"
},
"maintainYourSubscription": {
@@ -8816,7 +8843,7 @@
"message": "Provider Portal"
},
"success": {
- "message": "Success"
+ "message": "Suksess"
},
"restrictedGroupAccess": {
"message": "You cannot add yourself to groups."
@@ -8825,10 +8852,10 @@
"message": "You cannot add yourself to collections."
},
"assign": {
- "message": "Assign"
+ "message": "Knytt"
},
"assignToCollections": {
- "message": "Assign to collections"
+ "message": "Legg til i samlinger"
},
"assignToTheseCollections": {
"message": "Assign to these collections"
@@ -8840,7 +8867,7 @@
"message": "Only organization members with access to these collections will be able to see the items."
},
"selectCollectionsToAssign": {
- "message": "Select collections to assign"
+ "message": "Velg samlinger å tilordne"
},
"noCollectionsAssigned": {
"message": "No collections have been assigned"
@@ -8862,25 +8889,25 @@
}
},
"addField": {
- "message": "Add field"
+ "message": "Legg til felt"
},
"editField": {
- "message": "Edit field"
+ "message": "Rediger felt"
},
"items": {
- "message": "Items"
+ "message": "Gjenstander"
},
"assignedSeats": {
"message": "Assigned seats"
},
"assigned": {
- "message": "Assigned"
+ "message": "Tildelt"
},
"used": {
- "message": "Used"
+ "message": "Brukt"
},
"remaining": {
- "message": "Remaining"
+ "message": "Gjenstår"
},
"unlinkOrganization": {
"message": "Unlink organization"
@@ -8908,11 +8935,11 @@
"description": "A subscription status label."
},
"pastDue": {
- "message": "Past due",
+ "message": "Forbi måldatoen",
"description": "A subscription status label"
},
"subscriptionExpired": {
- "message": "Subscription expired",
+ "message": "Abonnement har utløpt",
"description": "The date header used when a subscription is past due."
},
"pastDueWarningForChargeAutomatically": {
@@ -9168,7 +9195,7 @@
"description": "The title for the section that deals with integrations and SDKs."
},
"integrations": {
- "message": "Integrations"
+ "message": "Integreringer"
},
"integrationsDesc": {
"message": "Automatically sync secrets from Bitwarden Secrets Manager to a third-party service."
@@ -9180,7 +9207,7 @@
"message": "Use Bitwarden Secrets Manager SDK in the following programming languages to build your own applications."
},
"ssoDescStart": {
- "message": "Configure",
+ "message": "Sett opp",
"description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure single sign-on for Bitwarden using the implementation guide for your Identity Provider."
},
"ssoDescEnd": {
@@ -9194,7 +9221,7 @@
"message": "SCIM"
},
"scimIntegrationDescStart": {
- "message": "Configure ",
+ "message": "Sett opp ",
"description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider"
},
"scimIntegrationDescEnd": {
@@ -9334,7 +9361,7 @@
"message": "Enter your Enterprise organization information"
},
"viewItemsIn": {
- "message": "View items in $NAME$",
+ "message": "Vis gjenstander i $NAME$",
"description": "Button to view the contents of a folder or collection",
"placeholders": {
"name": {
@@ -9344,7 +9371,7 @@
}
},
"backTo": {
- "message": "Back to $NAME$",
+ "message": "Tilbake til $NAME$",
"description": "Navigate back to a previous folder or collection",
"placeholders": {
"name": {
@@ -9354,11 +9381,11 @@
}
},
"back": {
- "message": "Back",
+ "message": "Tilbake",
"description": "Button text to navigate back"
},
"removeItem": {
- "message": "Remove $NAME$",
+ "message": "Fjern $NAME$",
"description": "Remove a selected option, such as a folder or collection",
"placeholders": {
"name": {
@@ -9452,7 +9479,7 @@
"message": "Unverified"
},
"verified": {
- "message": "Verified"
+ "message": "Verifisert"
},
"viewSecret": {
"message": "View secret"
@@ -9471,7 +9498,7 @@
"message": "Quickly view member access across the organization by upgrading to an Enterprise plan."
},
"date": {
- "message": "Date"
+ "message": "Dato"
},
"exportClientReport": {
"message": "Export client report"
@@ -9498,13 +9525,13 @@
"message": "On"
},
"memberAccessReportTwoFactorEnabledFalse": {
- "message": "Off"
+ "message": "Av"
},
"memberAccessReportAuthenticationEnabledTrue": {
"message": "On"
},
"memberAccessReportAuthenticationEnabledFalse": {
- "message": "Off"
+ "message": "Av"
},
"higherKDFIterations": {
"message": "Higher KDF iterations can help protect your master password from being brute forced by an attacker."
@@ -9549,7 +9576,7 @@
"message": "This action will remove your access to this secret."
},
"invoice": {
- "message": "Invoice"
+ "message": "Faktura"
},
"unassignedSeatsAvailable": {
"message": "You have $SEATS$ unassigned seats available.",
@@ -9576,7 +9603,7 @@
"message": "Client details"
},
"downloadCSV": {
- "message": "Download CSV"
+ "message": "Last ned CSV"
},
"monthlySubscriptionUserSeatsMessage": {
"message": "Adjustments to your subscription will result in prorated charges to your billing totals on your next billing period. "
@@ -9610,7 +9637,7 @@
"message": "Add to folder"
},
"selectFolder": {
- "message": "Select folder"
+ "message": "Velg mappe"
},
"personalItemTransferWarningSingular": {
"message": "1 item will be permanently transferred to the selected organization. You will no longer own this item."
@@ -9662,13 +9689,13 @@
"message": "Project IDs"
},
"projectId": {
- "message": "Project ID"
+ "message": "Prosjekt-ID"
},
"projectsAccessedByMachineAccount": {
"message": "The following projects can be accessed by this machine account."
},
"config": {
- "message": "Config"
+ "message": "Oppsett"
},
"learnMoreAboutEmergencyAccess": {
"message": "Learn more about emergency access"
@@ -9809,22 +9836,22 @@
"message": "Key algorithm"
},
"sshPrivateKey": {
- "message": "Private key"
+ "message": "Privat nøkkel"
},
"sshPublicKey": {
- "message": "Public key"
+ "message": "Offentlig nøkkel"
},
"sshFingerprint": {
- "message": "Fingerprint"
+ "message": "Fingeravtrykk"
},
"sshKeyFingerprint": {
- "message": "Fingerprint"
+ "message": "Fingeravtrykk"
},
"sshKeyPrivateKey": {
- "message": "Private key"
+ "message": "Privat nøkkel"
},
"sshKeyPublicKey": {
- "message": "Public key"
+ "message": "Offentlig nøkkel"
},
"sshKeyAlgorithmED25519": {
"message": "ED25519"
@@ -9860,7 +9887,7 @@
"message": "Passwordless SSO"
},
"accountRecovery": {
- "message": "Account recovery"
+ "message": "Kontogjenoppretting"
},
"customRoles": {
"message": "Custom roles"
@@ -9878,13 +9905,13 @@
"message": "Up to 20 machine accounts"
},
"current": {
- "message": "Current"
+ "message": "Nåværende"
},
"secretsManagerSubscriptionInfo": {
"message": "Your Secrets Manager subscription will upgrade based on the plan selected"
},
"bitwardenPasswordManager": {
- "message": "Bitwarden Password Manager"
+ "message": "Bitwarden passordbehandler"
},
"secretsManagerComplimentaryPasswordManager": {
"message": "Your complimentary one year Password Manager subscription will upgrade to the selected plan. You will not be charged until the complimentary period is over."
@@ -9893,20 +9920,20 @@
"message": "File saved to device. Manage from your device downloads."
},
"publicApi": {
- "message": "Public API",
+ "message": "Offentlig API",
"description": "The text, 'API', is an acronym and should not be translated."
},
"showCharacterCount": {
- "message": "Show character count"
+ "message": "Vis tegntelleren"
},
"hideCharacterCount": {
- "message": "Hide character count"
+ "message": "Skjul tegntelleren"
},
"editAccess": {
"message": "Edit access"
},
"textHelpText": {
- "message": "Use text fields for data like security questions"
+ "message": "Bruk tekstfelter for data som sikkerhetsspørsmål"
},
"hiddenHelpText": {
"message": "Use hidden fields for sensitive data like a password"
@@ -9921,15 +9948,15 @@
"message": "Enter the the field's html id, name, aria-label, or placeholder."
},
"uppercaseDescription": {
- "message": "Include uppercase characters",
+ "message": "Inkluder store bokstaver",
"description": "Tooltip for the password generator uppercase character checkbox"
},
"uppercaseLabel": {
- "message": "A-Z",
+ "message": "A-Å",
"description": "Label for the password generator uppercase character checkbox"
},
"lowercaseDescription": {
- "message": "Include lowercase characters",
+ "message": "Inkluder små bokstaver",
"description": "Full description for the password generator lowercase character checkbox"
},
"lowercaseLabel": {
@@ -9937,7 +9964,7 @@
"description": "Label for the password generator lowercase character checkbox"
},
"numbersDescription": {
- "message": "Include numbers",
+ "message": "Inkluder tall",
"description": "Full description for the password generator numbers checkbox"
},
"numbersLabel": {
@@ -9945,7 +9972,7 @@
"description": "Label for the password generator numbers checkbox"
},
"specialCharactersDescription": {
- "message": "Include special characters",
+ "message": "Inkluder spesialtegn",
"description": "Full description for the password generator special characters checkbox"
},
"specialCharactersLabel": {
@@ -9953,10 +9980,10 @@
"description": "Label for the password generator special characters checkbox"
},
"addAttachment": {
- "message": "Add attachment"
+ "message": "Legg til vedlegg"
},
"maxFileSizeSansPunctuation": {
- "message": "Maximum file size is 500 MB"
+ "message": "Maksimal filstørrelse er 500 MB"
},
"permanentlyDeleteAttachmentConfirmation": {
"message": "Are you sure you want to permanently delete this attachment?"
@@ -10070,11 +10097,20 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
- "message": "Important notice"
+ "message": "Viktig melding"
},
"setupTwoStepLogin": {
- "message": "Set up two-step login"
+ "message": "Sett opp 2-trinnspålogging"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
@@ -10083,7 +10119,7 @@
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
- "message": "Remind me later"
+ "message": "Minn meg på det senere"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
@@ -10101,16 +10137,16 @@
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
- "message": "Turn on two-step login"
+ "message": "Slå på 2-trinnsinnlogging"
},
"changeAcctEmail": {
- "message": "Change account email"
+ "message": "Endre kontoens E-postadresse"
},
"removeMembers": {
"message": "Remove members"
},
"devices": {
- "message": "Devices"
+ "message": "Enheter"
},
"deviceListDescription": {
"message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now."
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json
index fc8328efc95..20ceae6f33b 100644
--- a/apps/web/src/locales/ne/messages.json
+++ b/apps/web/src/locales/ne/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json
index 1f053997e34..6da0edc72c8 100644
--- a/apps/web/src/locales/nl/messages.json
+++ b/apps/web/src/locales/nl/messages.json
@@ -156,10 +156,10 @@
"message": "Totaal applicaties"
},
"unmarkAsCriticalApp": {
- "message": "Markeren als belangrijke applicatie ongedaan maken"
+ "message": "Markeren als belangrijke app ongedaan maken"
},
"criticalApplicationSuccessfullyUnmarked": {
- "message": "Markering als belangrijke applicatie ongedaan gemaakt"
+ "message": "Markeren als belangrijke app ongedaan gemaakt"
},
"whatTypeOfItem": {
"message": "Van welke categorie is dit item?"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Map bewerken"
},
+ "newFolder": {
+ "message": "Nieuwe map"
+ },
+ "folderName": {
+ "message": "Mapnaam"
+ },
+ "folderHintText": {
+ "message": "Je kunt een map onderbrengen door het toevoegen van de naam van de bovenliggende map gevolgd door een \"/\". Voorbeeld: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Weet je zeker dat je deze map definitief wilt verwijderen?"
+ },
"baseDomain": {
"message": "Basisdomein",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Itemnaam"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Je kunt verzamelingen niet verwijderen met alleen rechten voor weergeven: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "bijv.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Inloggen gestart"
},
+ "logInRequestSent": {
+ "message": "Verzoek verzonden"
+ },
"submit": {
"message": "Versturen"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Er is een bericht naar je apparaat verstuurd."
},
+ "notificationSentDevicePart1": {
+ "message": "Ontgrendel Bitwarden op je apparaat of op de "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Probeer je toegang te krijgen tot je account?"
+ },
+ "accessAttemptBy": {
+ "message": "Inlogpoging door $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Toegang bevestigen"
+ },
+ "denyAccess": {
+ "message": "Toegang weigeren"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "webapp"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Zorg ervoor dat de vingerafdrukzin overeenkomt met de onderstaande voor je deze goedkeurt."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Ontgrendel Bitwarden op je apparaat. Zorg ervoor dat de vingerafdrukzin overeenkomt met de onderstaande voor je deze goedkeurt."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Er is een melding naar je apparaat verzonden"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Zorg ervoor dat je kluis is ontgrendeld en de vingerafdrukzin hetzelfde is op het andere apparaat"
- },
"versionNumber": {
"message": "Versie $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Dubbelzinnige tekens vermijden",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Opnieuw genereren"
- },
"length": {
"message": "Lengte"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Gevarenzone"
},
- "dangerZoneDesc": {
- "message": "Waarschuwing - deze acties zijn niet terug te draaien!"
- },
- "dangerZoneDescSingular": {
- "message": "Waarschuwing - deze actie is niet terug te draaien!"
- },
"deauthorizeSessions": {
"message": "Sessie-autorisaties intrekken"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Doorgaan zal je huidige sessie uitloggen, waarna je opnieuw moet inloggen. Je moet ook je tweestapsaanmelding opnieuw doorlopen, als die is ingeschakeld. Actieve sessies op andere apparaten blijven mogelijk nog een uur actief."
},
+ "newDeviceLoginProtection": {
+ "message": "Nieuwe apparaat login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Inlogbescherming nieuwe apparaten uitschakelen"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Inlogbescherming nieuwe apparaten inschakelen"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Ga hieronder verder voor het uitschakelen van de verificatie e-mails die Bitwarden stuurt wanneer je inlogt vanaf een nieuw apparaat."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Ga hieronder verder om Bitwarden verificatie e-mails te sturen wanneer je inlogt vanaf een nieuw apparaat."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Als je inlogbescherming voor nieuwe apparaten uitschakelt, kan iedereen op ieder apparaat met je hoofdwachtwoord inloggen. Stel tweestapsaanmelding in om je account te beschermen zonder e-mailverificatieberichten."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Wijzigingen inlogbescherming nieuwe apparaten opgeslagen"
+ },
"sessionsDeauthorized": {
"message": "Autorisatie van alle sessies ingetrokken"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Beheren"
},
- "canManage": {
- "message": "Kan beheren"
+ "manageCollection": {
+ "message": "Collectie beheren"
+ },
+ "viewItems": {
+ "message": "Items bekijken"
+ },
+ "viewItemsHidePass": {
+ "message": "Items bekijken, verborgen wachtwoorden"
+ },
+ "editItems": {
+ "message": "Items bewerken"
+ },
+ "editItemsHidePass": {
+ "message": "Items bewerken, verborgen wachtwoorden"
},
"disable": {
"message": "Uitschakelen"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Er was een probleem met het lezen van de beveiligingssleutel. Probeer het nogmaals."
},
- "twoFactorWebAuthnWarning": {
- "message": "Vanwege platformbeperkingen kan WebAuthn niet in alle Bitwarden applicaties gebruikt worden. Stel een andere tweestapsaanmeldingsaanbieder in zodat je je account kunt benaderen wanneer WebAuthn niet beschikbaar is. De volgende platformen worden ondersteund:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Webkluis en browser-extensies op een desktop/laptop met een browser met ondersteuning voor WebAuthn (Chrome, Opera, Vivaldi of Firefox met FIDO U2F ingeschakeld)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Vanwege platformbeperkingen kan WebAuthn niet in alle Bitwarden-applicaties gebruikt worden. Stel een andere tweestapsaanmeldingsaanbieder in zodat je je account kunt benaderen wanneer WebAuthn niet beschikbaar is."
},
"twoFactorRecoveryYourCode": {
"message": "Je herstelcode voor Bitwarden-tweestapsaanmelding"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Stel minimale vereisten in voor de configuratie van het wachtwoord generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Een of meer organisatiebeleidseisen heeft invloed op de instellingen van je generator."
- },
"masterPasswordPolicyInEffect": {
"message": "Een of meer organisatiebeleidseisen stelt de volgende eisen aan je hoofdwachtwoord:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Wat wil je genereren?"
- },
- "passwordType": {
- "message": "Type wachtwoord"
- },
- "regenerateUsername": {
- "message": "Gebruikersnaam opnieuw genereren"
- },
"generateUsername": {
"message": "Gebruikersnaam genereren"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Type gebruikersnaam"
- },
"plusAddressedEmail": {
"message": "E-mailadres-met-plus",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Gebruik de catch-all inbox van je domein."
},
+ "useThisEmail": {
+ "message": "Dit e-mailadres gebruiken"
+ },
"random": {
"message": "Willekeurig",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostnaam",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API-toegangstoken"
- },
"deviceVerification": {
"message": "Apparaatverificatie"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Geen collectie"
},
- "canView": {
- "message": "Kan bekijken"
- },
- "canViewExceptPass": {
- "message": "Kan bekijken, behalve wachtwoorden"
- },
- "canEdit": {
- "message": "Kan bewerken"
- },
- "canEditExceptPass": {
- "message": "Kan bewerken, behalve wachtwoorden"
- },
"noCollectionsAdded": {
"message": "Geen collecties toegevoegd"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Verwijderen van collecties beperken tot eigenaren en managers"
},
+ "limitItemDeletionDesc": {
+ "message": "Beperk het verwijderen van items tot leden met het recht Kan beheren"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Eigenaren en beheerders kunnen alle collecties en items beheren"
},
@@ -8656,9 +8686,6 @@
"message": "URL zelfgehoste server",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Aliasdomein"
- },
"alreadyHaveAccount": {
"message": "Heb je al een account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Je hebt geen toegang om deze collectie te beheren."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Ontbrekende Kan beheren machtigingen"
+ "grantManageCollectionWarningTitle": {
+ "message": "Recht voor het beheren van machtigingen ontbreekt"
},
- "grantAddAccessCollectionWarning": {
- "message": "Kan beheren machtigingen verlenen voor volledig verzamelingsbeheer, inclusief het verwijderen van verzamelingen."
+ "grantManageCollectionWarning": {
+ "message": "Beheren van machtigingen toekennen voor het toestaan van het volledig verzamelingenbeheer, inclusief het verwijderen van een verzameling."
},
"grantCollectionAccess": {
"message": "Groepen of mensen toegang tot deze collectie geven."
@@ -9809,7 +9836,7 @@
"message": "Sleutelalgoritme"
},
"sshPrivateKey": {
- "message": "Privésleutel"
+ "message": "Privé sleutel"
},
"sshPublicKey": {
"message": "Publieke sleutel"
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Code bankafschrift"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Je kunt verzamelingen niet verwijderen met alleen rechten voor weergeven: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Belangrijke mededeling"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Beheerders hebben nu de mogelijkheid om leden van een geclaimd domein te verwijderen."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Deze actie verwijdert het account van het lid, inclusief alle items in hun kluis. Dit vervangt de vorige verwijderactie."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Verwijderen is een nieuwe actie!"
+ },
+ "seatsRemaining": {
+ "message": "Je hebt nog $REMAINING$ plaatsen van de $TOTAL$ plaatsen die aan deze organisatie zijn toegewezen. Neem contact op met je provider om je abonnement te beheren.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Bestaande organisatie"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Kies een organisatie om aan je providerportaal toe te voegen."
+ },
+ "noOrganizations": {
+ "message": "Er zijn geen organisaties om weer te geven"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Je providerabonnement zal een credit ontvangen voor de resterende tijd van het abonnement van de organisatie."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Wilt je deze organisatie toevoegen aan $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Bestaande organisatie toegevoegd"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Meer toegewezen dan beschikbare plaatsen."
}
}
diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json
index bb479db1a41..8b7682fa39c 100644
--- a/apps/web/src/locales/nn/messages.json
+++ b/apps/web/src/locales/nn/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Rediger mappe"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Grunndomene",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "t.d.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Slå av"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json
index 486f01ce2cb..7e6f614b9c8 100644
--- a/apps/web/src/locales/or/messages.json
+++ b/apps/web/src/locales/or/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json
index 779f29045f2..6935f334d62 100644
--- a/apps/web/src/locales/pl/messages.json
+++ b/apps/web/src/locales/pl/messages.json
@@ -3,22 +3,22 @@
"message": "Wszystkie aplikacje"
},
"criticalApplications": {
- "message": "Critical applications"
+ "message": "Krytyczne aplikacje"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Dostęp do informacji"
},
"riskInsights": {
- "message": "Risk Insights"
+ "message": "Spostrzeżenia dotyczące ryzyka"
},
"passwordRisk": {
- "message": "Password Risk"
+ "message": "Ryzyko związne z hasłem"
},
"reviewAtRiskPasswords": {
- "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
+ "message": "Przejrzyj hasła zagrożone (słabe, ujawnione lub ponownie używane) we wszystkich aplikacjach. Wybierz swoje najbardziej krytyczne aplikacje, aby nadać priorytet działaniom bezpieczeństwa swoim użytkownikom, aby zająć się hasłami zagrożonymi."
},
"dataLastUpdated": {
- "message": "Data last updated: $DATE$",
+ "message": "Data ostatniej aktualizacji: $DATE$",
"placeholders": {
"date": {
"content": "$1",
@@ -30,16 +30,16 @@
"message": "Powiadomieni członkowie"
},
"revokeMembers": {
- "message": "Revoke members"
+ "message": "Unieważnij członk"
},
"restoreMembers": {
- "message": "Restore members"
+ "message": "Przywróć członków"
},
"cannotRestoreAccessError": {
- "message": "Cannot restore organization access"
+ "message": "Nie można przywrócić dostępu organizacji"
},
"allApplicationsWithCount": {
- "message": "All applications ($COUNT$)",
+ "message": "Wszystkie aplikacje ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -48,10 +48,10 @@
}
},
"createNewLoginItem": {
- "message": "Create new login item"
+ "message": "Utwórz nowy element logowania"
},
"criticalApplicationsWithCount": {
- "message": "Critical applications ($COUNT$)",
+ "message": "Aplikacje krytyczne ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -60,7 +60,7 @@
}
},
"notifiedMembersWithCount": {
- "message": "Notified members ($COUNT$)",
+ "message": "Powiadomieni członkowie ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -69,7 +69,7 @@
}
},
"noAppsInOrgTitle": {
- "message": "No applications found in $ORG NAME$",
+ "message": "Nie znaleziono aplikacji w $ORG NAME$",
"placeholders": {
"org name": {
"content": "$1",
@@ -78,43 +78,43 @@
}
},
"noAppsInOrgDescription": {
- "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords."
+ "message": "Jako użytkownicy zapisują logowania, pojawiają się tutaj aplikacje, pokazujące wszelkie hasła zagrożone. Zaznacz kluczowe aplikacje i powiadamiaj użytkowników o potrzebie aktualizacji haseł."
},
"noCriticalAppsTitle": {
- "message": "You haven't marked any applications as a Critical"
+ "message": "Nie oznaczyłeś żadnych aplikacji jako krytycznych"
},
"noCriticalAppsDescription": {
- "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords."
+ "message": "Wybierz najbardziej krytyczne aplikacje, aby odkryć hasła zagrożone i poinformuj użytkowników, by zmienili te hasła."
},
"markCriticalApps": {
- "message": "Mark critical apps"
+ "message": "Oznacz krytyczne aplikacje"
},
"markAppAsCritical": {
- "message": "Mark app as critical"
+ "message": "Oznacz aplikację jako krytyczną"
},
"appsMarkedAsCritical": {
- "message": "Apps marked as critical"
+ "message": "Aplikacje oznaczone jako krytyczne"
},
"application": {
"message": "Aplikacja"
},
"atRiskPasswords": {
- "message": "At-risk passwords"
+ "message": "Zagrożone hasła"
},
"requestPasswordChange": {
- "message": "Request password change"
+ "message": "Poproś o zmianę hasła"
},
"totalPasswords": {
- "message": "Total passwords"
+ "message": "Wszystkie hasła"
},
"searchApps": {
- "message": "Search applications"
+ "message": "Wyszukaj aplikacje"
},
"atRiskMembers": {
- "message": "At-risk members"
+ "message": "Zagrożeni użytkownicy"
},
"atRiskMembersWithCount": {
- "message": "At-risk members ($COUNT$)",
+ "message": "Zagrożeni członkowie ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -123,7 +123,7 @@
}
},
"atRiskApplicationsWithCount": {
- "message": "At-risk applications ($COUNT$)",
+ "message": "Zagrożone aplikacje ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -132,13 +132,13 @@
}
},
"atRiskMembersDescription": {
- "message": "These members are logging into applications with weak, exposed, or reused passwords."
+ "message": "Ci członkowie logują się do aplikacji ze słabymi, ujawnionymi lub ponownie używanymi hasłami."
},
"atRiskApplicationsDescription": {
- "message": "These applications have weak, exposed, or reused passwords."
+ "message": "Te aplikacje mają słabe, ujawnione lub ponownie użyte hasła."
},
"atRiskMembersDescriptionWithApp": {
- "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.",
+ "message": "Ci użytkownicy logują się do $APPNAME$ ze słabymi, ujawnionymi lub ponownie używanymi hasłami.",
"placeholders": {
"appname": {
"content": "$1",
@@ -147,19 +147,19 @@
}
},
"totalMembers": {
- "message": "Total members"
+ "message": "Wszyscy członkowie"
},
"atRiskApplications": {
- "message": "At-risk applications"
+ "message": "Zagrożone aplikacje"
},
"totalApplications": {
- "message": "Total applications"
+ "message": "Wszystkie aplikacje"
},
"unmarkAsCriticalApp": {
- "message": "Unmark as critical app"
+ "message": "Odznacz jako krytyczną aplikację"
},
"criticalApplicationSuccessfullyUnmarked": {
- "message": "Critical application successfully unmarked"
+ "message": "Krytyczna aplikacja została pomyślnie odznaczona"
},
"whatTypeOfItem": {
"message": "Jakiego rodzaju jest to element?"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edytuj folder"
},
+ "newFolder": {
+ "message": "Nowy folder"
+ },
+ "folderName": {
+ "message": "Nazwa folderu"
+ },
+ "folderHintText": {
+ "message": "Zagnieżdżaj foldery dodając nazwę folderu nadrzędnego, a następnie “/”. Przykład: Społeczne/Fora"
+ },
+ "deleteFolderPermanently": {
+ "message": "Czy na pewno chcesz trwale usunąć ten folder?"
+ },
"baseDomain": {
"message": "Domena podstawowa",
"description": "Domain name. Example: website.com"
@@ -508,7 +520,7 @@
"message": "Wygeneruj hasło"
},
"generatePassphrase": {
- "message": "Generate passphrase"
+ "message": "Wygeneruj hasło wyrazowe"
},
"checkPassword": {
"message": "Sprawdź, czy hasło zostało ujawnione."
@@ -611,7 +623,7 @@
"message": "Bezpieczna notatka"
},
"typeSshKey": {
- "message": "SSH key"
+ "message": "Klucz SSH"
},
"typeLoginPlural": {
"message": "Dane logowania"
@@ -707,7 +719,7 @@
}
},
"viewItemType": {
- "message": "Zobacz $TYPE$",
+ "message": "Zobacz $ITEMTYPE$",
"placeholders": {
"itemtype": {
"content": "$1",
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nazwa elementu"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Nie można usunąć kolekcji z uprawnieniami tylko do przeglądania: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "np.",
"description": "Short abbreviation for 'example'."
@@ -772,11 +775,11 @@
"description": "Copy password to clipboard"
},
"copyPassphrase": {
- "message": "Copy passphrase",
+ "message": "Skopiuj hasło wyrazowe",
"description": "Copy passphrase to clipboard"
},
"passwordCopied": {
- "message": "Password copied"
+ "message": "Hasło zostało skopiowane"
},
"copyUsername": {
"message": "Kopiuj nazwę użytkownika",
@@ -1033,7 +1036,7 @@
"message": "Logowanie za pomocą urządzenia musi być włączone w ustawieniach aplikacji Bitwarden. Potrzebujesz innej opcji?"
},
"needAnotherOptionV1": {
- "message": "Need another option?"
+ "message": "Potrzebujesz innego sposobu?"
},
"loginWithMasterPassword": {
"message": "Logowanie hasłem głównym"
@@ -1048,13 +1051,13 @@
"message": "Użyj innej metody logowania"
},
"logInWithPasskey": {
- "message": "Log in with passkey"
+ "message": "Logowanie się za pomocą Passkey"
},
"useSingleSignOn": {
- "message": "Use single sign-on"
+ "message": "Użyj jednokrotnego logowania"
},
"welcomeBack": {
- "message": "Welcome back"
+ "message": "Witaj ponownie"
},
"invalidPasskeyPleaseTryAgain": {
"message": "Błędny passkey. Spróbuj ponownie."
@@ -1138,7 +1141,7 @@
"message": "Utwórz konto"
},
"newToBitwarden": {
- "message": "New to Bitwarden?"
+ "message": "Nowy na Bitwarden?"
},
"setAStrongPassword": {
"message": "Ustaw silne hasło"
@@ -1156,32 +1159,35 @@
"message": "Zaloguj się"
},
"logInToBitwarden": {
- "message": "Log in to Bitwarden"
+ "message": "Zaloguj do Bitwarden"
},
"authenticationTimeout": {
- "message": "Authentication timeout"
+ "message": "Limit czasu uwierzytelniania"
},
"authenticationSessionTimedOut": {
- "message": "The authentication session timed out. Please restart the login process."
+ "message": "Upłynął limit czasu uwierzytelniania. Uruchom ponownie proces logowania."
},
"verifyIdentity": {
"message": "Zweryfikuj swoją tożsamość"
},
"weDontRecognizeThisDevice": {
- "message": "We don't recognize this device. Enter the code sent to your email to verify your identity."
+ "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na Twój e-mail, aby zweryfikować tożsamość."
},
"continueLoggingIn": {
- "message": "Continue logging in"
+ "message": "Kontynuuj logowanie"
},
"whatIsADevice": {
- "message": "What is a device?"
+ "message": "Czym jest urządzenie?"
},
"aDeviceIs": {
- "message": "A device is a unique installation of the Bitwarden app where you have logged in. Reinstalling, clearing app data, or clearing your cookies could result in a device appearing multiple times."
+ "message": "Urządzenie to unikalna instalacja aplikacji Bitwarden, w której się zalogowano. Ponowna instalacja, wyczyszczenie danych aplikacji lub usunięcie plików cookie może spowodować, że urządzenie pojawi się wielokrotnie."
},
"logInInitiated": {
"message": "Logowanie rozpoczęte"
},
+ "logInRequestSent": {
+ "message": "Żądanie wysłane"
+ },
"submit": {
"message": "Wyślij"
},
@@ -1305,10 +1311,10 @@
"message": "Adres e-mail"
},
"yourVaultIsLockedV2": {
- "message": "Twój sejf jest zablokowany."
+ "message": "Twój sejf jest zablokowany"
},
"yourAccountIsLocked": {
- "message": "Your account is locked"
+ "message": "Twoje konto jest zablokowane"
},
"uuid": {
"message": "UUID"
@@ -1345,7 +1351,7 @@
"message": "Nie masz uprawnień do przeglądania wszystkich elementów w tej kolekcji."
},
"youDoNotHavePermissions": {
- "message": "You do not have permissions to this collection"
+ "message": "Nie masz uprawnień do tej kolekcji"
},
"noCollectionsInList": {
"message": "Brak kolekcji do wyświetlenia."
@@ -1371,11 +1377,38 @@
"notificationSentDevice": {
"message": "Powiadomienie zostało wysłane na urządzenie."
},
- "aNotificationWasSentToYourDevice": {
- "message": "A notification was sent to your device"
+ "notificationSentDevicePart1": {
+ "message": "Odblokuj Bitwarden na swoim urządzeniu lub w"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
+ "areYouTryingToAccessYourAccount": {
+ "message": "Czy próbujesz uzyskać dostęp do swojego konta?"
+ },
+ "accessAttemptBy": {
+ "message": "Próba dostępu przez $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Potwierdź dostęp"
+ },
+ "denyAccess": {
+ "message": "Odmów dostępu"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "aplikacji internetowej"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Upewnij się, że fraza odcisku palca zgadza się z tą poniżej, zanim zatwierdzisz."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Odblokuj Bitwarden na swoim urządzeniu. Przed zatwierdzeniem upewnij się, że fraza odcisku palca pasuje do tej poniżej."
+ },
+ "aNotificationWasSentToYourDevice": {
+ "message": "Powiadomienie zostało wysłane na twoje urządzenie"
},
"versionNumber": {
"message": "Wersja $VERSION_NUMBER$",
@@ -1468,7 +1501,7 @@
"message": "Klucz bezpieczeństwa FIDO U2F"
},
"webAuthnTitle": {
- "message": "FIDO2 WebAuthn"
+ "message": "Klucz dostępu"
},
"webAuthnDesc": {
"message": "Użyj dowolnego klucza bezpieczeństwa WebAuthn, aby uzyskać dostęp do swojego konta."
@@ -1661,12 +1694,9 @@
"description": "deprecated. Use avoidAmbiguous instead."
},
"avoidAmbiguous": {
- "message": "Avoid ambiguous characters",
+ "message": "Unikaj niejednoznacznych znaków",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Wygeneruj ponownie hasło"
- },
"length": {
"message": "Długość"
},
@@ -1709,25 +1739,25 @@
"message": "Historia hasła"
},
"generatorHistory": {
- "message": "Generator history"
+ "message": "Historia generatora"
},
"clearGeneratorHistoryTitle": {
- "message": "Clear generator history"
+ "message": "Wyczyść historię generatora"
},
"cleargGeneratorHistoryDescription": {
- "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?"
+ "message": "Jeśli zatwierdzisz, wszystkie wygenerowane hasła zostaną usunięte z historii generatora. Czy chcesz kontynuować mimo to?"
},
"noPasswordsInList": {
"message": "Brak haseł."
},
"clearHistory": {
- "message": "Clear history"
+ "message": "Wyczyść historię"
},
"nothingToShow": {
- "message": "Nothing to show"
+ "message": "Brak zawartości do pokazania"
},
"nothingGeneratedRecently": {
- "message": "You haven't generated anything recently"
+ "message": "Nic nie zostało wygenerowane przez ciebie w ostatnim czasie"
},
"clear": {
"message": "Wyczyść",
@@ -1767,10 +1797,10 @@
"message": "Zaloguj się ponownie."
},
"currentSession": {
- "message": "Current session"
+ "message": "Aktualna sesja"
},
"requestPending": {
- "message": "Request pending"
+ "message": "Zapytanie oczekuje"
},
"logBackInOthersToo": {
"message": "Zaloguj się ponownie. Jeśli używasz innych aplikacji Bitwarden, wyloguj się i zaloguj ponownie również w nich."
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Niebezpieczna strefa"
},
- "dangerZoneDesc": {
- "message": "Uwaga - te operacje są nieodwracalne!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Zakończ sesje"
},
@@ -1854,11 +1878,32 @@
"deauthorizeSessionsWarning": {
"message": "Ta czynność spowoduje wylogowanie z bieżącej sesji, przez co konieczne będzie ponowne zalogowanie się. Zostaniesz również poproszony o ponowne logowanie dwustopniowe, jeśli masz włączoną tę opcję. Aktywne sesje na innych urządzeniach mogą pozostać aktywne przez maksymalnie godzinę."
},
+ "newDeviceLoginProtection": {
+ "message": "Logowanie nowego urządzenia"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Wyłącz ochronę logowania na nowym urządzeniu"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Włącz ochronę logowania na nowym urządzeniu"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Przejdź poniżej, aby wyłączyć e-maile weryfikacyjne wysyłane przez Bitwarden podczas logowania z nowego urządzenia."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Przejdź poniżej, aby Bitwarden wysyłał Ci e-maile weryfikacyjne podczas logowania z nowego urządzenia."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Po wyłączeniu ochrony logowania na nowym urządzeniu, każdy, kto zna Twoje hasło główne, może uzyskać dostęp do Twojego konta z dowolnego urządzenia. Aby chronić swoje konto bez e-maili weryfikacyjnych, skonfiguruj dwuetapowe logowanie."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Zapisano nowe zmiany ochrony logowania"
+ },
"sessionsDeauthorized": {
"message": "Wszystkie sesje zostały zakończone"
},
"accountIsOwnedMessage": {
- "message": "This account is owned by $ORGANIZATIONNAME$",
+ "message": "To konto jest własnością $ORGANIZATIONNAME$",
"placeholders": {
"organizationName": {
"content": "$1",
@@ -1923,7 +1968,7 @@
"description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)"
},
"onboardingImportDataDetailsLoginLink": {
- "message": "new login",
+ "message": "Nowe dane logowania",
"description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new login instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)"
},
"onboardingImportDataDetailsPartTwoNoOrgs": {
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Zarządzaj"
},
- "canManage": {
- "message": "Może zarządzać"
+ "manageCollection": {
+ "message": "Zarządzaj kolekcją"
+ },
+ "viewItems": {
+ "message": "Zobacz elementy"
+ },
+ "viewItemsHidePass": {
+ "message": "Zobacz elementy, ukryte hasła"
+ },
+ "editItems": {
+ "message": "Edytuj elementy"
+ },
+ "editItemsHidePass": {
+ "message": "Edytuj elementy, ukryte hasła"
},
"disable": {
"message": "Wyłącz"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Wystąpił problem z odczytem klucza bezpieczeństwa. Spróbuj ponownie."
},
- "twoFactorWebAuthnWarning": {
- "message": "Z powodu ograniczeń platformy, klucze WebAuthn nie mogą być używane we wszystkich aplikacjach Bitwarden. Musisz włączyć inną metodę logowania dwustopniowego, aby zachować dostęp do konta w pozostałych sytuacjach. Wspierane platformy:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Sejf internetowy i rozszerzenia przeglądarki na komputerze/laptopie z przeglądarką obsługującą WebAuthn (Chrome, Opera, Vivaldi lub Firefox z włączoną obsługą FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Z powodu ograniczeń platformy, klucze WebAuthn nie mogą być używane we wszystkich aplikacjach Bitwarden. Musisz włączyć inną metodę logowania dwustopniowego, aby zachować dostęp do konta w pozostałych sytuacjach."
},
"twoFactorRecoveryYourCode": {
"message": "Kod odzyskiwania konta Bitwarden"
@@ -2462,7 +2516,7 @@
"message": "Sprawdź ujawnione hasła"
},
"timesExposed": {
- "message": "Times exposed"
+ "message": "Ujawniono"
},
"exposedXTimes": {
"message": "Ujawnione $COUNT$ raz(y)",
@@ -2499,7 +2553,7 @@
"message": "Brak elementów zawierających słabe hasła."
},
"weakness": {
- "message": "Weakness"
+ "message": "Słabe"
},
"reusedPasswordsReport": {
"message": "Identyczne hasła"
@@ -2527,7 +2581,7 @@
"message": "Nie znaleźliśmy identycznych haseł w sejfie."
},
"timesReused": {
- "message": "Times reused"
+ "message": "Ponownie użyto"
},
"reusedXTimes": {
"message": "Wykorzystane $COUNT$ razy",
@@ -2827,7 +2881,7 @@
"message": "Pobierz licencję"
},
"viewBillingToken": {
- "message": "View Billing Token"
+ "message": "Pokaż token płatności"
},
"updateLicense": {
"message": "Zaktualizuj licencję"
@@ -2876,10 +2930,10 @@
"message": "Faktury"
},
"noUnpaidInvoices": {
- "message": "No unpaid invoices."
+ "message": "Brak nieopłaconych faktur."
},
"noPaidInvoices": {
- "message": "No paid invoices."
+ "message": "Brak opłaconych faktur."
},
"paid": {
"message": "Zapłacono",
@@ -3324,10 +3378,10 @@
}
},
"inviteSingleEmailDesc": {
- "message": "You have 1 invite remaining."
+ "message": "Pozostało Ci 1 zaproszenie."
},
"inviteZeroEmailDesc": {
- "message": "You have 0 invites remaining."
+ "message": "Pozostało Ci 0 zaproszeń."
},
"userUsingTwoStep": {
"message": "Ten użytkownik korzysta z logowania dwustopniowego, aby chronić swoje konto."
@@ -3363,7 +3417,7 @@
"message": "Użytkownik"
},
"userDesc": {
- "message": "Standardowy użytkownik, posiadający dostęp do kolekcji w Twojej organizacji."
+ "message": "Standardowy użytkownik, posiadający dostęp do kolekcji w Twojej organizacji"
},
"all": {
"message": "Wszyscy"
@@ -3493,7 +3547,7 @@
}
},
"viewAllLogInOptions": {
- "message": "View all log in options"
+ "message": "Zobacz wszystkie sposoby logowania"
},
"viewAllLoginOptions": {
"message": "Zobacz wszystkie sposoby logowania"
@@ -3781,7 +3835,7 @@
}
},
"unlinkedSso": {
- "message": "Unlinked SSO."
+ "message": "Odłączone SSO"
},
"unlinkedSsoUser": {
"message": "Odłącz logowanie jednokrotne SSO dla użytkownika %$ID$.",
@@ -3832,22 +3886,22 @@
"message": "Urządzenie"
},
"loginStatus": {
- "message": "Login status"
+ "message": "Status zalogowania"
},
"firstLogin": {
- "message": "First login"
+ "message": "Pierwsze logowanie"
},
"trusted": {
- "message": "Trusted"
+ "message": "Zaufane"
},
"needsApproval": {
- "message": "Needs approval"
+ "message": "Wymaga zatwierdzenia"
},
"areYouTryingtoLogin": {
- "message": "Are you trying to log in?"
+ "message": "Próbujesz się zalogować?"
},
"logInAttemptBy": {
- "message": "Login attempt by $EMAIL$",
+ "message": "Próba logowania przez $EMAIL$",
"placeholders": {
"email": {
"content": "$1",
@@ -3856,22 +3910,22 @@
}
},
"deviceType": {
- "message": "Device Type"
+ "message": "Typ urządenia"
},
"ipAddress": {
- "message": "IP Address"
+ "message": "Adres IP"
},
"confirmLogIn": {
- "message": "Confirm login"
+ "message": "Potwierdź logowanie"
},
"denyLogIn": {
- "message": "Deny login"
+ "message": "Odrzuć logowanie"
},
"thisRequestIsNoLongerValid": {
- "message": "This request is no longer valid."
+ "message": "To żądanie jest już nieważne."
},
"logInConfirmedForEmailOnDevice": {
- "message": "Login confirmed for $EMAIL$ on $DEVICE$",
+ "message": "Logowanie potwierdzone dla $EMAIL$ na $DEVICE$",
"placeholders": {
"email": {
"content": "$1",
@@ -3884,16 +3938,16 @@
}
},
"youDeniedALogInAttemptFromAnotherDevice": {
- "message": "You denied a login attempt from another device. If this really was you, try to log in with the device again."
+ "message": "Odrzucono próby logowania z innego urządzenia. Jeśli to naprawdę Ty, spróbuj ponownie zalogować się za pomocą urządzenia."
},
"loginRequestHasAlreadyExpired": {
- "message": "Login request has already expired."
+ "message": "Prośba logowania wygasła."
},
"justNow": {
- "message": "Just now"
+ "message": "Teraz"
},
"requestedXMinutesAgo": {
- "message": "Requested $MINUTES$ minutes ago",
+ "message": "Poproszono $MINUTES$ minut temu",
"placeholders": {
"minutes": {
"content": "$1",
@@ -4019,13 +4073,13 @@
"message": "Aktualizuj przeglądarkę"
},
"generatingRiskInsights": {
- "message": "Generating your risk insights..."
+ "message": "Generowanie informacji o ryzyku..."
},
"updateBrowserDesc": {
"message": "Używasz nieobsługiwanej przeglądarki. Sejf internetowy może działać niewłaściwie."
},
"freeTrialEndPromptCount": {
- "message": "Your free trial ends in $COUNT$ days.",
+ "message": "Twój okres próbny kończy się za $COUNT$ dni.",
"placeholders": {
"count": {
"content": "$1",
@@ -4034,7 +4088,7 @@
}
},
"freeTrialEndPromptMultipleDays": {
- "message": "$ORGANIZATION$, your free trial ends in $COUNT$ days.",
+ "message": "$ORGANIZATION$, twoja darmowa wersja próbna kończy się za $COUNT$ dni.",
"placeholders": {
"count": {
"content": "$2",
@@ -4047,7 +4101,7 @@
}
},
"freeTrialEndPromptTomorrow": {
- "message": "$ORGANIZATION$, your free trial ends tomorrow.",
+ "message": "$ORGANIZATION$, twoja darmowa wersja próbna kończy się jutro",
"placeholders": {
"organization": {
"content": "$1",
@@ -4056,10 +4110,10 @@
}
},
"freeTrialEndPromptTomorrowNoOrgName": {
- "message": "Your free trial ends tomorrow."
+ "message": "Twój okres próbny kończy się jutro."
},
"freeTrialEndPromptToday": {
- "message": "$ORGANIZATION$, your free trial ends today.",
+ "message": "$ORGANIZATION$, twoja darmowa wersja próbna kończy się dzisiaj",
"placeholders": {
"organization": {
"content": "$1",
@@ -4068,10 +4122,10 @@
}
},
"freeTrialEndingTodayWithoutOrgName": {
- "message": "Your free trial ends today."
+ "message": "Twój okres próbny kończy się dzisiaj."
},
"clickHereToAddPaymentMethod": {
- "message": "Click here to add a payment method."
+ "message": "Kliknij tutaj, aby dodać metodę płatności."
},
"joinOrganization": {
"message": "Dołącz do organizacji"
@@ -4628,7 +4682,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."
},
"youWillBeNotifiedOnceTheRequestIsApproved": {
- "message": "You will be notified once the request is approved"
+ "message": "Zostaniesz powiadomiony po zatwierdzeniu prośby"
},
"free": {
"message": "Darmowy",
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Ustaw minimalne wymagania dla generatora hasła."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Co najmniej jedna zasada organizacji wpływa na ustawienia generatora."
- },
"masterPasswordPolicyInEffect": {
"message": "Co najmniej jedna zasada organizacji wymaga, aby hasło główne spełniało następujące wymagania:"
},
@@ -4861,10 +4912,10 @@
"message": "Zaloguj się za pomocą logowania jednokrotnego SSO swojej organizacji. Aby rozpocząć, wpisz swój identyfikator organizacji."
},
"singleSignOnEnterOrgIdentifier": {
- "message": "Enter your organization's SSO identifier to begin"
+ "message": "Wprowadź identyfikator SSO swojej organizacji, aby rozpocząć"
},
"singleSignOnEnterOrgIdentifierText": {
- "message": "To log in with your SSO provider, enter your organization's SSO identifier to begin. You may need to enter this SSO identifier when you log in from a new device."
+ "message": "Aby zalogować się za pomocą dostawcy SSO, wprowadź identyfikator SSO organizacji, aby rozpocząć. Może być konieczne wprowadzenie identyfikatora SSO podczas logowania z nowego urządzenia."
},
"enterpriseSingleSignOn": {
"message": "Logowanie jednokrotne"
@@ -4934,7 +4985,7 @@
"message": "Zablokuj użytkownikom możliwość dołączania do innych organizacji."
},
"singleOrgPolicyDesc": {
- "message": "Restrict members from joining other organizations. This policy is required for organizations that have enabled domain verification."
+ "message": "Ogranicz członków do dołączania do innych organizacji. Ta polityka jest wymagana dla organizacji, które włączyły weryfikację domeny."
},
"singleOrgBlockCreateMessage": {
"message": "Twoja obecna organizacja posiada zasady, które nie pozwalają na dołączanie do więcej niż jednej organizacji. Skontaktuj się z administratorami swojej organizacji lub zarejestruj się z innego konta Bitwarden."
@@ -4943,7 +4994,7 @@
"message": "Członkowie organizacji, którzy nie są właścicielami lub administratorami i są już członkami innej organizacji zostaną usunięci z Twojej organizacji."
},
"singleOrgPolicyMemberWarning": {
- "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met."
+ "message": "Niezgodni członkowie zostaną objęci cofniętym statusem do czasu opuszczenia przez nich wszystkich innych organizacji. Administratorzy są zwolnieni i mogą przywrócić członków po osiągnięciu zgodności."
},
"requireSso": {
"message": "Uwierzytelnianie logowaniem jednokrotnym"
@@ -5323,7 +5374,7 @@
"message": "Niestandardowe"
},
"customDesc": {
- "message": "Umożliwia zaawansowaną kontrolę uprawnień użytkownika."
+ "message": "Umożliwia zaawansowaną kontrolę uprawnień użytkownika"
},
"customDescNonEnterpriseStart": {
"message": "Role niestandardowe to ",
@@ -5669,7 +5720,7 @@
"message": "Hasło zostało zresetowane!"
},
"resetPasswordEnrollmentWarning": {
- "message": "Rejestracja zezwala administratorom organizacji na zmianę Twojego hasła głównego. Czy na pewno chcesz się zarejestrować?"
+ "message": "Rejestracja zezwala administratorom organizacji na zmianę Twojego hasła głównego"
},
"accountRecoveryPolicy": {
"message": "Administracja odzyskiwaniem konta"
@@ -5768,13 +5819,13 @@
"message": "Przywrócono dostęp do organizacji"
},
"bulkFilteredMessage": {
- "message": "Wykluczono, nie dotyczy tej akcji."
+ "message": "Wykluczono, nie dotyczy tej akcji"
},
"nonCompliantMembersTitle": {
- "message": "Non-compliant members"
+ "message": "Niezgodni członkowie"
},
"nonCompliantMembersError": {
- "message": "Members that are non-compliant with the Single organization or Two-step login policy cannot be restored until they adhere to the policy requirements"
+ "message": "Niezgodni członkowie z jedną organizacją lub dwustopniową regułą logowania nie mogą zostać przywróceni, dopóki nie będą przestrzegali wymogów polityki"
},
"fingerprint": {
"message": "Unikalny identyfikator konta"
@@ -5792,17 +5843,17 @@
"message": "Błąd"
},
"decryptionError": {
- "message": "Decryption error"
+ "message": "Błąd odszyfrowywania"
},
"couldNotDecryptVaultItemsBelow": {
- "message": "Bitwarden could not decrypt the vault item(s) listed below."
+ "message": "Bitwarden nie mógł odszyfrować elementów sejfu wymienionych poniżej."
},
"contactCSToAvoidDataLossPart1": {
- "message": "Contact customer success",
+ "message": "Skontaktuj się z działem obsługi klienta,",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"contactCSToAvoidDataLossPart2": {
- "message": "to avoid additional data loss.",
+ "message": "aby uniknąć dalszej utraty danych.",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"accountRecoveryManageUsers": {
@@ -5821,7 +5872,7 @@
"message": "Nazwa dostawcy"
},
"providerSetup": {
- "message": "Dostawca został skonfigurowany."
+ "message": "Dostawca został skonfigurowany"
},
"clients": {
"message": "Klienci"
@@ -6376,11 +6427,11 @@
"message": "Key Connector"
},
"memberDecryptionKeyConnectorDescStart": {
- "message": "Połącz logowanie za pomocą SSO z Twoim serwerem kluczy odszyfrowania. Używając tej opcji, członkowie nie będą musieli używać swoich haseł głównych, aby odszyfrować dane sejfu.",
+ "message": "Połącz logowanie za pomocą SSO z Twoim serwerem kluczy odszyfrowania. Używając tej opcji, członkowie nie będą musieli używać swoich haseł głównych, aby odszyfrować dane sejfu",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'"
},
"memberDecryptionKeyConnectorDescLink": {
- "message": "Wymaga uwierzytelniania SSO i polityki jednej organizacji",
+ "message": "wymaga uwierzytelniania SSO i polityki jednej organizacji",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'"
},
"memberDecryptionKeyConnectorDescEnd": {
@@ -6442,7 +6493,7 @@
"message": "Pokaż token synchronizacji płatności"
},
"generateBillingToken": {
- "message": "Generate billing token"
+ "message": "Wygeneruj token płatności"
},
"copyPasteBillingSync": {
"message": "Skopiuj i wklej ten token do ustawień synchronizacji rozliczeniowej swojej organizacji."
@@ -6451,7 +6502,7 @@
"message": "Twój token synchronizacji płatności może edytować ustawienia subskrypcji tej organizacji."
},
"manageBillingTokenSync": {
- "message": "Manage Billing Token"
+ "message": "Zarządzaj tokenami płatności"
},
"setUpBillingSync": {
"message": "Skonfiguruj synchronizację płatności"
@@ -6517,7 +6568,7 @@
"message": "Token synchronizacji płatności"
},
"automaticBillingSyncDesc": {
- "message": "Automatic sync unlocks Families sponsorships and allows you to sync your license without uploading a file. After making updates in the Bitwarden cloud server, select Sync License to apply changes."
+ "message": "Automatyczna synchronizacja odblokowuje sponsorowanie rodzin i pozwala na synchronizację licencji bez przesyłania pliku. Po aktualizacjach w chmurze Bitwarden, wybierz licencję synchronizacji aby zastosować zmiany."
},
"active": {
"message": "Aktywny"
@@ -6587,7 +6638,7 @@
"message": "Wymagane, jeśli identyfikatorem podmiotu nie jest adres URL."
},
"offerNoLongerValid": {
- "message": "This offer is no longer valid. Contact your organization administrators for more information."
+ "message": "Ta oferta nie jest już ważna. Aby uzyskać więcej informacji, skontaktuj się z administratorami organizacji."
},
"openIdOptionalCustomizations": {
"message": "Opcjonalne dostosowania"
@@ -6666,23 +6717,14 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Co chcesz wygenerować?"
- },
- "passwordType": {
- "message": "Rodzaj hasła"
- },
- "regenerateUsername": {
- "message": "Wygeneruj ponownie nazwę użytkownika"
- },
"generateUsername": {
"message": "Wygeneruj nazwę użytkownika"
},
"generateEmail": {
- "message": "Generate email"
+ "message": "Wygeneruj e-mail"
},
"spinboxBoundariesHint": {
- "message": "Value must be between $MIN$ and $MAX$.",
+ "message": "Wartość musi być pomiędzy $MIN$ a $MAX$.",
"description": "Explains spin box minimum and maximum values to the user",
"placeholders": {
"min": {
@@ -6696,7 +6738,7 @@
}
},
"passwordLengthRecommendationHint": {
- "message": " Use $RECOMMENDED$ characters or more to generate a strong password.",
+ "message": " Użyj $RECOMMENDED$ znaków lub więcej, aby wygenerować silne hasło.",
"description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@@ -6706,7 +6748,7 @@
}
},
"passphraseNumWordsRecommendationHint": {
- "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.",
+ "message": " Użyj $RECOMMENDED$ słów lub więcej, aby wygenerować silne hasło.",
"description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Rodzaj nazwy użytkownika"
- },
"plusAddressedEmail": {
"message": "Adres e-mail z plusem",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Użyj skonfigurowanej skrzynki catch-all w swojej domenie."
},
+ "useThisEmail": {
+ "message": "Użyj tego adresu e-mail"
+ },
"random": {
"message": "Losowa",
"description": "Generates domain-based username using random letters"
@@ -6821,11 +6863,11 @@
"message": "Wygeneruj alias adresu e-mail z zewnętrznej usługi przekierowania."
},
"forwarderDomainName": {
- "message": "Email domain",
+ "message": "Domena e-mail",
"description": "Labels the domain name email forwarder service option"
},
"forwarderDomainNameHint": {
- "message": "Choose a domain that is supported by the selected service",
+ "message": "Wybierz domenę, która jest obsługiwana przez wybraną usługę",
"description": "Guidance provided for email forwarding services that support multiple email domains."
},
"forwarderError": {
@@ -6934,9 +6976,6 @@
"message": "Nazwa hosta",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token dostępu API"
- },
"deviceVerification": {
"message": "Weryfikacja urządzenia"
},
@@ -6970,7 +7009,7 @@
"description": "the text, 'SCIM', is an acronym and should not be translated."
},
"scimIntegrationDescription": {
- "message": "Automatically provision users and groups with your preferred identity provider via SCIM provisioning. Find supported integrations",
+ "message": "Automatycznie dostarczaj użytkownikom i grupom preferowanego dostawcy tożsamości za pomocą usługi SCIM. Znajdź obsługiwane integracje",
"description": "the text, 'SCIM', is an acronym and should not be translated."
},
"scimEnabledCheckboxDesc": {
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Brak kolekcji"
},
- "canView": {
- "message": "Może wyświetlać"
- },
- "canViewExceptPass": {
- "message": "Może wyświetlać z wyjątkiem haseł"
- },
- "canEdit": {
- "message": "Można edytować"
- },
- "canEditExceptPass": {
- "message": "Może edytować z wyjątkiem haseł"
- },
"noCollectionsAdded": {
"message": "Nie dodano kolekcji"
},
@@ -7982,7 +8009,7 @@
"message": "Przesyłanie ręczne"
},
"manualBillingTokenUploadDesc": {
- "message": "If you do not want to opt into billing sync, manually upload your license here. This will not automatically unlock Families sponsorships."
+ "message": "Jeśli nie chcesz zrezygnować z synchronizacji rozliczeniowej, ręcznie prześlij swoją licencję tutaj. Nie odblokuje to automatycznie sponsorowania dla rodziny."
},
"syncLicense": {
"message": "Synchronizuj licencję"
@@ -8251,16 +8278,16 @@
"message": "Logowanie rozpoczęte"
},
"rememberThisDeviceToMakeFutureLoginsSeamless": {
- "message": "Remember this device to make future logins seamless"
+ "message": "Zapamiętaj to urządzenie, aby przyszłe logowania były bezproblemowe"
},
"deviceApprovalRequired": {
"message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:"
},
"deviceApprovalRequiredV2": {
- "message": "Device approval required"
+ "message": "Wymagane zatwierdzenie urządzenia"
},
"selectAnApprovalOptionBelow": {
- "message": "Select an approval option below"
+ "message": "Wybierz opcję zatwierdzenia poniżej"
},
"rememberThisDevice": {
"message": "Zapamiętaj to urządzenie"
@@ -8284,31 +8311,31 @@
"message": "Zaufane urządzenia"
},
"memberDecryptionOptionTdeDescPart1": {
- "message": "Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The",
+ "message": "Członkowie nie będą potrzebowali hasła głównego podczas logowania się za pomocą SSO. Hasło główne jest zastąpione kluczem szyfrowania przechowywanym na urządzeniu, co sprawia, że urządzenie jest zaufane. Pierwsze urządzenie, do którego użytkownik tworzy swoje konto i logi, będą zaufane. Nowe urządzenia będą musiały zostać zatwierdzone przez istniejące zaufane urządzenie lub przez administratora.",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink1": {
- "message": "single organization",
+ "message": "pojedyncza organizacja",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart2": {
- "message": "policy,",
+ "message": "polityka,",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink2": {
- "message": "SSO required",
+ "message": "Wymagane SSO",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart3": {
- "message": "policy, and",
+ "message": "polityka i ",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink3": {
- "message": "account recovery administration",
+ "message": "Administracja odzyskiwaniem konta",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart4": {
- "message": "policy will turn on when this option is used.",
+ "message": "polityka włączy się, gdy ta opcja zostanie wykorzystana.",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"orgPermissionsUpdatedMustSetPassword": {
@@ -8387,16 +8414,16 @@
"message": "Zatwierdź prośbę"
},
"deviceApproved": {
- "message": "Device approved"
+ "message": "Urządzenie zostało zatwierdzone"
},
"deviceRemoved": {
- "message": "Device removed"
+ "message": "Urządzenie zostało usunięte"
},
"removeDevice": {
- "message": "Remove device"
+ "message": "Usuń urządzenie"
},
"removeDeviceConfirmation": {
- "message": "Are you sure you want to remove this device?"
+ "message": "Czy na pewno chcesz usunąć to urządzenie?"
},
"noDeviceRequests": {
"message": "Brak urządzeń do zatwierdzenia"
@@ -8453,7 +8480,7 @@
"message": "Poproszono o zatwierdzenie urządzenia."
},
"tdeOffboardingPasswordSet": {
- "message": "User set a master password during TDE offboarding."
+ "message": "Użytkownik ustawił hasło główne podczas wyłączania TDE."
},
"startYour7DayFreeTrialOfBitwardenFor": {
"message": "Rozpocznij 7-dniowy darmowy okres próbny Bitwarden dla $ORG$",
@@ -8504,7 +8531,7 @@
"message": "Brak adresu e-mail użytkownika"
},
"activeUserEmailNotFoundLoggingYouOut": {
- "message": "Active user email not found. Logging you out."
+ "message": "Nie znaleziono aktywnego adresu e-mail. Trwa wylogowanie."
},
"deviceTrusted": {
"message": "Zaufano urządzeniu"
@@ -8602,10 +8629,13 @@
"message": "Zarządzaj zachowaniami kolekcji w organizacji"
},
"limitCollectionCreationDesc": {
- "message": "Limit collection creation to owners and admins"
+ "message": "Ogranicz tworzenie kolekcji do właścicieli i administratorów"
},
"limitCollectionDeletionDesc": {
- "message": "Limit collection deletion to owners and admins"
+ "message": "Ogranicz usuwanie kolekcji do właścicieli i administratorów"
+ },
+ "limitItemDeletionDesc": {
+ "message": "Ogranicz usuwanie elementów do członków z uprawnieniami do zarządzania"
},
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Właściciele i administratorzy mogą zarządzać wszystkimi zbiorami i elementami"
@@ -8653,12 +8683,9 @@
"message": "Adres URL serwera"
},
"selfHostBaseUrl": {
- "message": "Self-host server URL",
+ "message": "URL samodzielnie hostowanego serwera",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Domena aliasu"
- },
"alreadyHaveAccount": {
"message": "Masz już konto?"
},
@@ -8720,10 +8747,10 @@
"readOnlyCollectionAccess": {
"message": "Nie masz dostępu do zarządzania tą kolekcją."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Brak uprawnienia Zarządzaj Uprawnieniami"
+ "grantManageCollectionWarningTitle": {
+ "message": "Brak uprawnień do zarządzania kolekcją"
},
- "grantAddAccessCollectionWarning": {
+ "grantManageCollectionWarning": {
"message": "Przyznaj uprawnienie Zarządzaj Uprawnieniami w celu umożliwienia pełnego zarządzania kolekcją, w tym usuwania kolekcji."
},
"grantCollectionAccess": {
@@ -9180,47 +9207,47 @@
"message": "Użyj SDK Menedżera Sekretów Bitwarden w następujących językach programowania, aby zbudować własne aplikacje."
},
"ssoDescStart": {
- "message": "Configure",
+ "message": "Konfiguruj",
"description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure single sign-on for Bitwarden using the implementation guide for your Identity Provider."
},
"ssoDescEnd": {
- "message": "for Bitwarden using the implementation guide for your Identity Provider.",
+ "message": "dla Bitwarden przy użyciu instrukcji implementacyjnych dla Twojego dostawcy tożsamości.",
"description": "This represents the end of a sentence, broken up to include links. The full sentence will be 'Configure single sign-on for Bitwarden using the implementation guide for your Identity Provider."
},
"userProvisioning": {
- "message": "User provisioning"
+ "message": "Aprowizacja użytkowników"
},
"scimIntegration": {
"message": "SCIM"
},
"scimIntegrationDescStart": {
- "message": "Configure ",
+ "message": "Konfiguruj",
"description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider"
},
"scimIntegrationDescEnd": {
- "message": "(System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider.",
+ "message": "(System do zarządzania tożsamością międzydomeną) w celu automatycznej aprowizacji użytkowników i grup do Bitwarden przy użyciu instrukcji implementacji dla Twojego dostawcy tożsamości.",
"description": "This represents the end of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider"
},
"bwdc": {
"message": "Bitwarden Directory Connector"
},
"bwdcDesc": {
- "message": "Configure Bitwarden Directory Connector to automatically provision users and groups using the implementation guide for your Identity Provider."
+ "message": "Skonfiguruj Bitwarden Directory Connector do automatycznej aprowizacji użytkowników i grup za pomocą przewodnika implementacyjnego dla dostawcy tożsamości."
},
"eventManagement": {
- "message": "Event management"
+ "message": "Zarządzanie zdarzeniami"
},
"eventManagementDesc": {
- "message": "Integrate Bitwarden event logs with your SIEM (system information and event management) system by using the implementation guide for your platform."
+ "message": "Zintegruj dzienniki zdarzeń Bitwarden ze swoim systemem SIEM (Security Information and Event Management), korzystając z poradnika implementacyjnego dla Twojej platformy."
},
"deviceManagement": {
- "message": "Device management"
+ "message": "Zarządzanie urządzeniem"
},
"deviceManagementDesc": {
- "message": "Configure device management for Bitwarden using the implementation guide for your platform."
+ "message": "Skonfiguruj zarządzanie urządzeniem Bitwarden za pomocą instrukcji implementacyjnych dla Twojej platformy."
},
"integrationCardTooltip": {
- "message": "Launch $INTEGRATION$ implementation guide.",
+ "message": "Uruchom przewodnik implementacyjny $INTEGRATION$.",
"placeholders": {
"integration": {
"content": "$1",
@@ -9229,7 +9256,7 @@
}
},
"smIntegrationTooltip": {
- "message": "Set up $INTEGRATION$.",
+ "message": "Skonfiguruj $INTEGRATION$.",
"placeholders": {
"integration": {
"content": "$1",
@@ -9238,7 +9265,7 @@
}
},
"smSdkTooltip": {
- "message": "View $SDK$ repository",
+ "message": "Zobacz repozytorium $SDK$",
"placeholders": {
"sdk": {
"content": "$1",
@@ -9247,7 +9274,7 @@
}
},
"integrationCardAriaLabel": {
- "message": "open $INTEGRATION$ implementation guide in a new tab.",
+ "message": "otwórz przewodnik implementacji $INTEGRATION$ w nowej karcie.",
"placeholders": {
"integration": {
"content": "$1",
@@ -9256,7 +9283,7 @@
}
},
"smSdkAriaLabel": {
- "message": "view $SDK$ repository in a new tab.",
+ "message": "wyświetl repozytorium $SDK$ w nowej karcie.",
"placeholders": {
"sdk": {
"content": "$1",
@@ -9265,7 +9292,7 @@
}
},
"smIntegrationCardAriaLabel": {
- "message": "set up $INTEGRATION$ implementation guide in a new tab.",
+ "message": "ustaw przewodnik implementacji $INTEGRATION$ w nowej karcie.",
"placeholders": {
"integration": {
"content": "$1",
@@ -9286,7 +9313,7 @@
"message": "miesięcznie za członka"
},
"monthPerMemberBilledAnnually": {
- "message": "month per member billed annually"
+ "message": "miesięcznie na członka, rozliczanie rocznie"
},
"seats": {
"message": "Miejsca"
@@ -9325,13 +9352,13 @@
"message": "Kontynuuj konfigurację darmowego okresu próbnego Menedżera Sekretnych Bitwarden"
},
"enterTeamsOrgInfo": {
- "message": "Enter your Teams organization information"
+ "message": "Wprowadź informacje o organizacji Teams"
},
"enterFamiliesOrgInfo": {
"message": "Wprowadź informacje o swojej organizacji rodzinnej"
},
"enterEnterpriseOrgInfo": {
- "message": "Enter your Enterprise organization information"
+ "message": "Wprowadź informacje o organizacji Enterprise"
},
"viewItemsIn": {
"message": "Zobacz elementy w $NAME$",
@@ -9386,10 +9413,10 @@
"message": "Dostawca usług zarządzanych"
},
"managedServiceProvider": {
- "message": "Managed service provider"
+ "message": "Zarządzany dostawca usług"
},
"multiOrganizationEnterprise": {
- "message": "Multi-organization enterprise"
+ "message": "Przedsiębiorstwo wielu organizacji"
},
"orgSeats": {
"message": "Miejsca w organizacji"
@@ -9437,16 +9464,16 @@
"message": "Zaktualizowane informacje podatkowe"
},
"billingInvalidTaxIdError": {
- "message": "Invalid tax ID, if you believe this is an error please contact support."
+ "message": "Nieprawidłowy numer identyfikacji podatkowej, jeśli uważasz, że jest to błąd, skontaktuj się z pomocą techniczną."
},
"billingTaxIdTypeInferenceError": {
- "message": "We were unable to validate your tax ID, if you believe this is an error please contact support."
+ "message": "Nie mogliśmy zweryfikować Twojego identyfikatora podatkowego, jeśli uważasz, że jest to błąd, skontaktuj się z pomocą techniczną."
},
"billingPreviewInvalidTaxIdError": {
- "message": "Invalid tax ID, if you believe this is an error please contact support."
+ "message": "Nieprawidłowy numer identyfikacji podatkowej, jeśli uważasz, że jest to błąd, skontaktuj się z pomocą techniczną."
},
"billingPreviewInvoiceError": {
- "message": "An error occurred while previewing the invoice. Please try again later."
+ "message": "Wystąpił błąd podczas podglądu faktury. Spróbuj ponownie później."
},
"unverified": {
"message": "Niezweryfikowane"
@@ -9713,13 +9740,13 @@
"message": "Dowiedz się więcej o API Bitwarden"
},
"fileSends": {
- "message": "File Sends"
+ "message": "Wysyłki plików"
},
"textSends": {
- "message": "Text Sends"
+ "message": "Wysyłki tekstów"
},
"includesXMembers": {
- "message": "for $COUNT$ member",
+ "message": "dla $COUNT$ członków",
"placeholders": {
"count": {
"content": "$1",
@@ -9806,37 +9833,37 @@
"message": "GB dodatkowej przestrzeni"
},
"sshKeyAlgorithm": {
- "message": "Key algorithm"
+ "message": "Algorytm klucza"
},
"sshPrivateKey": {
- "message": "Private key"
+ "message": "Klucz prywatny"
},
"sshPublicKey": {
- "message": "Public key"
+ "message": "Klucz publiczny"
},
"sshFingerprint": {
- "message": "Fingerprint"
+ "message": "Odcisk palca"
},
"sshKeyFingerprint": {
- "message": "Fingerprint"
+ "message": "Odcisk palca"
},
"sshKeyPrivateKey": {
- "message": "Private key"
+ "message": "Klucz prywatny"
},
"sshKeyPublicKey": {
- "message": "Public key"
+ "message": "Klucz publiczny"
},
"sshKeyAlgorithmED25519": {
"message": "ED25519"
},
"sshKeyAlgorithmRSA2048": {
- "message": "RSA 2048-Bit"
+ "message": "RSA 2048-bitowy"
},
"sshKeyAlgorithmRSA3072": {
- "message": "RSA 3072-Bit"
+ "message": "RSA 3072-bitowy"
},
"sshKeyAlgorithmRSA4096": {
- "message": "RSA 4096-Bit"
+ "message": "RSA 4096-bitowy"
},
"premiumAccounts": {
"message": "6 kont premium"
@@ -9854,7 +9881,7 @@
"message": "Monitorowanie zdarzeń"
},
"directoryIntegration": {
- "message": "Directory integration"
+ "message": "Integracja katalogu"
},
"passwordLessSso": {
"message": "SSO bez hasła"
@@ -9906,22 +9933,22 @@
"message": "Edytuj dostęp"
},
"textHelpText": {
- "message": "Use text fields for data like security questions"
+ "message": "Użyj pól tekstowych dla danych takich jak pytania bezpieczeństwa"
},
"hiddenHelpText": {
- "message": "Use hidden fields for sensitive data like a password"
+ "message": "Użyj ukrytych pól dla danych poufnych, takich jak hasło"
},
"checkBoxHelpText": {
- "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email"
+ "message": "Użyj pól wyboru, jeśli chcesz automatycznie wypełnić pole wyboru formularza, np. jak zapamiętywanie e-mail"
},
"linkedHelpText": {
- "message": "Use a linked field when you are experiencing autofill issues for a specific website."
+ "message": "Użyj powiązanego pola, gdy masz problemy z autouzupełnianiem na konkretnej stronie internetowej."
},
"linkedLabelHelpText": {
- "message": "Enter the the field's html id, name, aria-label, or placeholder."
+ "message": "Wprowadź atrybut z: html id, name, aria-label lub placeholder."
},
"uppercaseDescription": {
- "message": "Include uppercase characters",
+ "message": "Uwzględnij wielkie litery",
"description": "Tooltip for the password generator uppercase character checkbox"
},
"uppercaseLabel": {
@@ -9962,23 +9989,23 @@
"message": "Czy na pewno chcesz trwale usunąć ten załącznik?"
},
"manageSubscriptionFromThe": {
- "message": "Manage subscription from the",
+ "message": "Zarządzaj subskrypcją z",
"description": "This represents the beginning of a sentence. The full sentence will be 'Manage subscription from the Provider Portal', but 'Provider Portal' will be a link and thus cannot be included in the translation file."
},
"toHostBitwardenOnYourOwnServer": {
- "message": "To host Bitwarden 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 automatic sync in your self-hosted organization."
+ "message": "Aby hostować Bitwarden na własnym serwerze, musisz przesłać plik licencyjny. Aby wspierać darmowe plany rodzinne i zaawansowane możliwości rozliczeniowe dla Twojej własnej organizacji, musisz skonfigurować automatyczną synchronizację w swojej własnej organizacji."
},
"selfHostingTitleProper": {
- "message": "Self-Hosting"
+ "message": "Samodzielne hostowanie"
},
"claim-domain-single-org-warning": {
- "message": "Claiming a domain will turn on the single organization policy."
+ "message": "Rejestracja domeny włączy politykę jednej organizacji."
},
"single-org-revoked-user-warning": {
- "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations."
+ "message": "Niezgodni członkowie zostaną odwołani. Administratorzy mogą przywrócić członków po opuszczeniu wszystkich innych organizacji."
},
"deleteOrganizationUser": {
- "message": "Delete $NAME$",
+ "message": "Usuń $NAME$",
"placeholders": {
"name": {
"content": "$1",
@@ -9988,7 +10015,7 @@
}
},
"deleteOrganizationUserWarningDesc": {
- "message": "This will permanently delete all items owned by $NAME$. Collection items are not impacted.",
+ "message": "Spowoduje to trwałe usunięcie wszystkich elementów należących do $NAME$. Nie ma to wpływu na elementy w kolekcji.",
"description": "Warning description for the delete organization user dialog",
"placeholders": {
"name": {
@@ -9998,11 +10025,11 @@
}
},
"deleteManyOrganizationUsersWarningDesc": {
- "message": "This will permanently delete all items owned by the following members. Collection items are not impacted.",
+ "message": "Spowoduje to trwałe usunięcie wszystkich elementów należących do następujących członków. Nie ma to wpływu na elementy w kolekcji.",
"description": "Warning description for the bulk delete organization users dialog"
},
"organizationUserDeleted": {
- "message": "Deleted $NAME$",
+ "message": "Usunięto $NAME$",
"placeholders": {
"name": {
"content": "$1",
@@ -10011,10 +10038,10 @@
}
},
"organizationUserDeletedDesc": {
- "message": "The user was removed from the organization and all associated user data has been deleted."
+ "message": "Użytkownik został usunięty z organizacji i wszystkie powiązane dane z tym użytkownikiem zostały usunięte."
},
"deletedUserId": {
- "message": "Deleted user $ID$ - an owner / admin deleted the user account",
+ "message": "Usunięto użytkownika $ID$ - właściciel / administrator usunął te konto użytkownika",
"placeholders": {
"id": {
"content": "$1",
@@ -10023,7 +10050,7 @@
}
},
"userLeftOrganization": {
- "message": "User $ID$ left organization",
+ "message": "Użytkownik $ID$ opuścił organizację",
"placeholders": {
"id": {
"content": "$1",
@@ -10032,7 +10059,7 @@
}
},
"suspendedOrganizationTitle": {
- "message": "The $ORGANIZATION$ is suspended",
+ "message": "$ORGANIZATION$ jest zawieszona",
"placeholders": {
"organization": {
"content": "$1",
@@ -10041,52 +10068,61 @@
}
},
"suspendedUserOrgMessage": {
- "message": "Contact your organization owner for assistance."
+ "message": "Skontaktuj się z właścicielem organizacji, aby uzyskać pomoc."
},
"suspendedOwnerOrgMessage": {
- "message": "To regain access to your organization, add a payment method."
+ "message": "Aby odzyskać dostęp do swojej organizacji, dodaj metodę płatności."
},
"deleteMembers": {
- "message": "Delete members"
+ "message": "Usuń członków"
},
"noSelectedMembersApplicable": {
- "message": "This action is not applicable to any of the selected members."
+ "message": "Ta akcja nie ma zastosowania do żadnego z wybranych członków."
},
"deletedSuccessfully": {
- "message": "Deleted successfully"
+ "message": "Usunięto pomyślnie"
},
"freeFamiliesSponsorship": {
- "message": "Remove Free Bitwarden Families sponsorship"
+ "message": "Usuń darmowe sponsorowanie rodzin Bitwarden"
},
"freeFamiliesSponsorshipPolicyDesc": {
- "message": "Do not allow members to redeem a Families plan through this organization."
+ "message": "Nie zezwalaj członkom na wykupienie planu rodzin za pośrednictwem tej organizacji."
},
"verifyBankAccountWithStatementDescriptorWarning": {
- "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended."
+ "message": "Płatność na rachunku bankowym jest dostępna tylko dla klientów w Stanach Zjednoczonych. Będziesz musiał zweryfikować swoje konto bankowe. Dokonamy mikrowpłaty w ciągu następnych 1-2 dni roboczych. Wprowadź kod deskryptora instrukcji z tej wpłaty na stronie rozliczeniowej organizacji, aby zweryfikować konto bankowe. Niezweryfikowanie konta bankowego spowoduje nieodebraną płatność, a subskrypcja zostanie zawieszona."
},
"verifyBankAccountWithStatementDescriptorInstructions": {
- "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended."
+ "message": "Dokonaliśmy mikrowpłaty na Twoje konto bankowe (może to zająć 1-2 dni robocze). Wprowadź sześciocyfrowy kod zaczynający się od 'SM' znaleziony w opisie depozytu. Niezweryfikowanie konta bankowego spowoduje nieodebraną płatność, a subskrypcja zostanie zawieszona."
},
"descriptorCode": {
- "message": "Descriptor code"
+ "message": "Kod deskryptora"
+ },
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Nie można usunąć kolekcji z uprawnieniami tylko do przeglądania: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
},
"importantNotice": {
- "message": "Important notice"
+ "message": "Ważna informacja"
},
"setupTwoStepLogin": {
- "message": "Set up two-step login"
+ "message": "Skonfiguruj dwustopniowe logowanie"
},
"newDeviceVerificationNoticeContentPage1": {
- "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
+ "message": "Bitwarden wyśle kod na Twój adres e-mail w celu zweryfikowania logowania z nowych urządzeń, począwszy od lutego 2025 r."
},
"newDeviceVerificationNoticeContentPage2": {
- "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
+ "message": "Możesz skonfigurować dwustopniowe logowanie jako alternatywny sposób ochrony konta lub zmienić swój adres e-mail, do którego masz dostęp."
},
"remindMeLater": {
- "message": "Remind me later"
+ "message": "Przypomnij mi później"
},
"newDeviceVerificationNoticePageOneFormContent": {
- "message": "Do you have reliable access to your email, $EMAIL$?",
+ "message": "Czy masz pewny dostęp do swojego adresu e-mail, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
@@ -10095,49 +10131,49 @@
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
- "message": "No, I do not"
+ "message": "Nie, nie mam"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
- "message": "Yes, I can reliably access my email"
+ "message": "Tak, mam pewny dostęp do mojego adresu e-mail"
},
"turnOnTwoStepLogin": {
- "message": "Turn on two-step login"
+ "message": "Włącz dwustopniowe logowanie"
},
"changeAcctEmail": {
- "message": "Change account email"
+ "message": "Zmień adres e-mail konta"
},
"removeMembers": {
- "message": "Remove members"
+ "message": "Usuń użytkowników"
},
"devices": {
- "message": "Devices"
+ "message": "Urządzenia"
},
"deviceListDescription": {
- "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now."
+ "message": "Twoje konto zostało zalogowane na każdym z poniższych urządzeń. Jeśli nie rozpoznajesz urządzenia, usuń je teraz."
},
"deviceListDescriptionTemp": {
- "message": "Your account was logged in to each of the devices below."
+ "message": "Twoje konto zostało zalogowane na każdym z poniższych urządzeń."
},
"claimedDomains": {
- "message": "Claimed domains"
+ "message": "Zarejestrowane domeny"
},
"claimDomain": {
- "message": "Claim domain"
+ "message": "Zarejestruj domenę"
},
"reclaimDomain": {
- "message": "Reclaim domain"
+ "message": "Wyrejestruj domenę"
},
"claimDomainNameInputHint": {
- "message": "Example: mydomain.com. Subdomains require separate entries to be claimed."
+ "message": "Przykład: mydomain.com. Subdomeny wymagają osobnych wpisów celem weryfikacji."
},
"automaticClaimedDomains": {
- "message": "Automatic Claimed Domains"
+ "message": "Automatycznie zarejestrowane domeny"
},
"automaticDomainClaimProcess": {
- "message": "Bitwarden will attempt to claim the domain 3 times during the first 72 hours. If the domain can’t be claimed, check the DNS record in your host and manually claim. The domain will be removed from your organization in 7 days if it is not claimed."
+ "message": "Bitwarden spróbuje zweryfikować domenę 3 razy w ciągu pierwszych 72 godzin. Jeśli nie będzie można zweryfikować domeny, sprawdź rekord DNS na swoim serwerze i wprowadź go ręcznie. Domena zostanie usunięta z Twojej organizacji w ciągu 7 dni, jeśli nie zostanie zweryfikowana"
},
"domainNotClaimed": {
- "message": "$DOMAIN$ not claimed. Check your DNS records.",
+ "message": "$DOMAIN$ nie została zweryfikowana. Sprawdź swój rekord DNS.",
"placeholders": {
"DOMAIN": {
"content": "$1",
@@ -10146,19 +10182,19 @@
}
},
"domainStatusClaimed": {
- "message": "Claimed"
+ "message": "Zweryfikowano"
},
"domainStatusUnderVerification": {
- "message": "Under verification"
+ "message": "Podczas weryfikacji"
},
"claimedDomainsDesc": {
- "message": "Claim a domain to own all member accounts whose email address matches the domain. Members will be able to skip the SSO identifier when logging in. Administrators will also be able to delete member accounts."
+ "message": "Zweryfikuj domenę do posiadania wszystkich kont użytkowników, których adres e-mail pasuje do domeny. Członkowie będą mogli pominąć identyfikator SSO podczas logowania. Administratorzy będą również mogli usuwać konta członków."
},
"invalidDomainNameClaimMessage": {
- "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be claimed."
+ "message": "Wprowadzone dane są niepoprawne. Format: mydomain.com. Subdomeny wymagają osobnych wpisów celem weryfikacji."
},
"domainClaimedEvent": {
- "message": "$DOMAIN$ claimed",
+ "message": "Zweryfikowano $DOMAIN$",
"placeholders": {
"DOMAIN": {
"content": "$1",
@@ -10167,7 +10203,7 @@
}
},
"domainNotClaimedEvent": {
- "message": "$DOMAIN$ not claimed",
+ "message": "$DOMAIN$ nie została zweryfikowana",
"placeholders": {
"DOMAIN": {
"content": "$1",
@@ -10176,7 +10212,7 @@
}
},
"updatedRevokeSponsorshipConfirmationForSentSponsorship": {
- "message": "If you remove $EMAIL$, the sponsorship for this Family plan cannot be redeemed. Are you sure you want to continue?",
+ "message": "Jeśli usuniesz $EMAIL$, sponsorowanie tego planu rodziny nie może zostać zrealizowane. Czy na pewno chcesz kontynuować?",
"placeholders": {
"email": {
"content": "$1",
@@ -10185,7 +10221,7 @@
}
},
"updatedRevokeSponsorshipConfirmationForAcceptedSponsorship": {
- "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end and the saved payment method will be charged $40 + applicable tax on $DATE$. You will not be able to redeem a new sponsorship until $DATE$. Are you sure you want to continue?",
+ "message": "Jeśli usuniesz $EMAIL$, sponsorowanie tego planu rodzinnego zakończy się, a zapisana metoda płatności zostanie naliczona 40 USD + obowiązujący podatek od $DATE$. Nie będziesz w stanie wykupić nowego sponsora do dnia $DATE$. Czy na pewno chcesz kontynuować?",
"placeholders": {
"email": {
"content": "$1",
@@ -10198,13 +10234,13 @@
}
},
"domainClaimed": {
- "message": "Domain claimed"
+ "message": "Domena zarejestrowana"
},
"organizationNameMaxLength": {
- "message": "Organization name cannot exceed 50 characters."
+ "message": "Nazwa organizacji nie może przekraczać 50 znaków."
},
"resellerRenewalWarningMsg": {
- "message": "Your subscription will renew soon. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $RENEWAL_DATE$.",
+ "message": "Twoja subskrypcja zostanie wkrótce odnowiona. Aby zapewnić nieprzerwaną usługę, skontaktuj się z $RESELLER$ , aby potwierdzić odnowienie przed $RENEWAL_DATE$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10217,7 +10253,7 @@
}
},
"resellerOpenInvoiceWarningMgs": {
- "message": "An invoice for your subscription was issued on $ISSUED_DATE$. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $DUE_DATE$.",
+ "message": "Faktura za subskrypcję została wystawiona dnia $ISSUED_DATE$. Aby zapewnić nieprzerwaną usługę, skontaktuj się z $RESELLER$ , aby potwierdzić odnowienie przed dniem $DUE_DATE$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10234,7 +10270,7 @@
}
},
"resellerPastDueWarningMsg": {
- "message": "The invoice for your subscription has not been paid. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $GRACE_PERIOD_END$.",
+ "message": "Faktura za subskrypcję nie została zapłacona. Aby zapewnić nieprzerwaną usługę, skontaktuj się z $RESELLER$ , aby potwierdzić odnowienie przed $GRACE_PERIOD_END$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10247,18 +10283,67 @@
}
},
"restartOrganizationSubscription": {
- "message": "Organization subscription restarted"
+ "message": "Subskrypcja organizacji zrestartowana"
},
"restartSubscription": {
- "message": "Restart your subscription"
+ "message": "Zrestartuj swoją subskrypcję"
},
"suspendedManagedOrgMessage": {
- "message": "Contact $PROVIDER$ for assistance.",
+ "message": "Skontaktuj się z $PROVIDER$ w celu uzyskania pomocy.",
"placeholders": {
"provider": {
"content": "$1",
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administratorzy mają teraz możliwość usunięcia kont członków, które należą do zarejestrowanej domeny."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Ta akcja usunie konto członka, w tym wszystkie elementy w ich sejfie. To zastępuje poprzednią akcję Usunięcia."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Usuń jest nową akcją!"
+ },
+ "seatsRemaining": {
+ "message": "Pozostało $REMAINING$ miejsc z $TOTAL$ miejsc przypisanych do tej organizacji. Skontaktuj się z dostawcą, aby zarządzać subskrypcją.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Istniejąca organizacja"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Wybierz organizację, aby dodać do portalu dostawcy."
+ },
+ "noOrganizations": {
+ "message": "Nie ma organizacji, którą można by wyświetlić"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Subskrypcja twojego dostawcy otrzyma kredyt za pozostały czas w subskrypcji organizacji."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Czy chcesz dodać tę organizację do $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Dodano istniejącą organizację"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Przypisane miejsca przekraczają dostępne miejsca."
}
}
diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json
index 42f3876df45..85efb0c1027 100644
--- a/apps/web/src/locales/pt_BR/messages.json
+++ b/apps/web/src/locales/pt_BR/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Editar Pasta"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Domínio de base",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nome do item"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Você não pode remover coleções com permissões de Somente leitura: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Login iniciado"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Enviar"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Uma notificação foi enviada para seu dispositivo."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Uma notificação foi enviada para seu dispositivo."
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Certifique-se que sua conta esteja desbloqueado e que a frase de impressão digital corresponda à do outro dispositivo."
- },
"versionNumber": {
"message": "Versão $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Evitar caracteres ambíguos",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Gerar Nova Senha"
- },
"length": {
"message": "Comprimento"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona de perigo"
},
- "dangerZoneDesc": {
- "message": "Cuidado, essas ações não são reversíveis!"
- },
- "dangerZoneDescSingular": {
- "message": "Cuidado, esta ação não é reversível!"
- },
"deauthorizeSessions": {
"message": "Desautorizar sessões"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "O processo também desconectará você da sua sessão atual, exigindo que você inicie a sessão novamente. Você também será solicitado a efetuar login em duas etapas novamente, se estiver ativado. Sessões ativas em outros dispositivos podem continuar ativas por até uma hora."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Todas as Sessões Desautorizadas"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Gerenciar"
},
- "canManage": {
- "message": "Pode gerenciar"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Desabilitar"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Houve um problema ao ler a chave de segurança. Tente novamente."
},
- "twoFactorWebAuthnWarning": {
- "message": "Devido às limitações da plataforma, o WebAuthn não pode ser usado em todos os aplicativos do Bitwarden. Você deve habilitar outro provedor de login em duas etapas, para que você possa acessar a sua conta quando o WebAuthn não puder ser usado. Plataformas suportadas:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Cofre web e extensões de navegador em um desktop/laptop com um navegador habilitado para WebAuthn (Chrome, Opera, Vivaldi ou Firefox com o FIDO U2F ativado)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Seu código de recuperação de login em duas etapas do Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Defina os requisitos mínimos para configuração do gerador de senhas."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Uma ou mais políticas da organização estão afetando as suas configurações do gerador."
- },
"masterPasswordPolicyInEffect": {
"message": "Uma ou mais políticas da organização exigem que a sua senha mestra cumpra aos seguintes requisitos:"
},
@@ -6666,15 +6717,6 @@
"message": "Gerador",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "O que você gostaria de gerar?"
- },
- "passwordType": {
- "message": "Tipo de Senha"
- },
- "regenerateUsername": {
- "message": "Recriar Usuário"
- },
"generateUsername": {
"message": "Gerar Usuário"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tipo de Usuário"
- },
"plusAddressedEmail": {
"message": "E-mail alternativo (com um +)",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use o catch-all configurado no seu domínio."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Aleatório",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token de acesso API"
- },
"deviceVerification": {
"message": "Verificação do dispositivo"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Sem coleções"
},
- "canView": {
- "message": "Pode ver"
- },
- "canViewExceptPass": {
- "message": "Pode ver, exceto senhas"
- },
- "canEdit": {
- "message": "Pode editar"
- },
- "canEditExceptPass": {
- "message": "Pode editar, exceto senhas"
- },
"noCollectionsAdded": {
"message": "Nenhuma coleção adicionada"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limitar exclusão de coleção a proprietários e administradores"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Proprietários e administradores podem gerenciar todas as coleções e itens"
},
@@ -8656,9 +8686,6 @@
"message": "URL do servidor auto-host",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias do domínio"
- },
"alreadyHaveAccount": {
"message": "Já tem uma conta?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Você não tem acesso para gerenciar esta coleção."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Falta conceder o Poder de Gerenciar Permissões"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Conceda o poder de gerenciar permissões para habilitar o gerenciamento completo da coleção, incluindo a exclusão da coleção."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Conceder acesso de grupos ou membros a esta coleção."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Código do descritor"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Você não pode remover coleções com permissões de Somente leitura: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json
index 9f37d8c158e..a9d5e461086 100644
--- a/apps/web/src/locales/pt_PT/messages.json
+++ b/apps/web/src/locales/pt_PT/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Editar pasta"
},
+ "newFolder": {
+ "message": "Nova pasta"
+ },
+ "folderName": {
+ "message": "Nome da pasta"
+ },
+ "folderHintText": {
+ "message": "Crie uma subpasta adicionando o nome da pasta principal seguido de um \"/\". Exemplo: Redes Sociais/Fóruns"
+ },
+ "deleteFolderPermanently": {
+ "message": "Tem a certeza de que pretende eliminar permanentemente esta pasta?"
+ },
"baseDomain": {
"message": "Domínio de base",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Nome do item"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Não é possível remover coleções com permissões de Apenas visualização: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "A preparar o início de sessão"
},
+ "logInRequestSent": {
+ "message": "Pedido enviado"
+ },
"submit": {
"message": "Submeter"
},
@@ -1219,7 +1225,7 @@
"message": "Dica da palavra-passe mestra"
},
"masterPassHintText": {
- "message": "Se se esquecer da sua palavra-passe, a dica da palavra-passe pode ser enviada para o seu e-mail. Máximo de $CURRENT$/$MAXIMUM$ caracteres.",
+ "message": "Se se esquecer da sua palavra-passe, a dica da palavra-passe pode ser enviada para o seu e-mail. Máximo de $CURRENT$/$MAXIMUM$ carateres.",
"placeholders": {
"current": {
"content": "$1",
@@ -1268,7 +1274,7 @@
"message": "É necessário reescrever a palavra-passe mestra."
},
"masterPasswordMinlength": {
- "message": "A palavra-passe mestra deve ter pelo menos $VALUE$ caracteres.",
+ "message": "A palavra-passe mestra deve ter pelo menos $VALUE$ carateres.",
"description": "The Master Password must be at least a specific number of characters long.",
"placeholders": {
"value": {
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Foi enviada uma notificação para o seu dispositivo."
},
+ "notificationSentDevicePart1": {
+ "message": "Desbloqueie o Bitwarden no seu dispositivo ou no "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Está a tentar aceder à sua conta?"
+ },
+ "accessAttemptBy": {
+ "message": "Tentativa de acesso por $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirmar acesso"
+ },
+ "denyAccess": {
+ "message": "Recusar acesso"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "aplicação web"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Certifique-se de que a frase da impressão digital corresponde à frase abaixo indicada antes de a aprovar."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Desbloqueie o Bitwarden no seu dispositivo. Certifique-se de que a frase da impressão digital corresponde à frase abaixo antes de a aprovar."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Foi enviada uma notificação para o seu dispositivo"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Certifique-se de que a sua conta está desbloqueada e que a frase de impressão digital corresponde à do outro dispositivo"
- },
"versionNumber": {
"message": "Versão $VERSION_NUMBER$",
"placeholders": {
@@ -1653,20 +1686,17 @@
"message": "Mínimo de números"
},
"minSpecial": {
- "message": "Mínimo de caracteres especiais",
+ "message": "Mínimo de carateres especiais",
"description": "Minimum special characters"
},
"ambiguous": {
- "message": "Evitar caracteres ambíguos",
+ "message": "Evitar carateres ambíguos",
"description": "deprecated. Use avoidAmbiguous instead."
},
"avoidAmbiguous": {
- "message": "Evitar caracteres ambíguos",
+ "message": "Evitar carateres ambíguos",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerar palavra-passe"
- },
"length": {
"message": "Comprimento"
},
@@ -1686,7 +1716,7 @@
"description": "deprecated. Use numbersLabel instead."
},
"specialCharacters": {
- "message": "Caracteres especiais (!@#$%^&*)"
+ "message": "Carateres especiais (!@#$%^&*)"
},
"numWords": {
"message": "Número de palavras"
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona de risco"
},
- "dangerZoneDesc": {
- "message": "Cuidado, estas ações são irreversíveis!"
- },
- "dangerZoneDescSingular": {
- "message": "Cuidado, esta ação não é reversível!"
- },
"deauthorizeSessions": {
"message": "Desautorizar sessões"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Ao prosseguir, também terminará a sua sessão atual e terá de iniciar sessão novamente. Ser-lhe-á também pedido que volte efetuar a verificação de dois passos, se estiver configurada. As sessões ativas noutros dispositivos podem continuar ativas até uma hora."
},
+ "newDeviceLoginProtection": {
+ "message": "Início de sessão de um novo dispositivo"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Desativar a proteção de início de sessão de novos dispositivos"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Ativar a proteção de início de sessão de novos dispositivos"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceda da seguinte forma para desativar os e-mails de verificação que o Bitwarden envia quando inicia sessão a partir de um novo dispositivo."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceda da seguinte forma para que o Bitwarden lhe envie e-mails de verificação quando iniciar sessão a partir de um novo dispositivo."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Com a proteção de início de sessão de novos dispositivos desativada, qualquer pessoa com a sua palavra-passe mestra pode aceder à sua conta a partir de qualquer dispositivo. Para proteger a sua conta sem e-mails de verificação, configure a verificação de dois passos."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Alterações na proteção do início de sessão do novo dispositivo guardadas"
+ },
"sessionsDeauthorized": {
"message": "Todas as sessões desautorizadas"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Gerir"
},
- "canManage": {
- "message": "Pode gerir"
+ "manageCollection": {
+ "message": "Gerir coleção"
+ },
+ "viewItems": {
+ "message": "Ver itens"
+ },
+ "viewItemsHidePass": {
+ "message": "Ver itens, palavras-passe ocultas"
+ },
+ "editItems": {
+ "message": "Editar itens"
+ },
+ "editItemsHidePass": {
+ "message": "Editar itens, palavras-passe ocultas"
},
"disable": {
"message": "Desativar"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Ocorreu um problema ao ler a chave de segurança. Tente novamente."
},
- "twoFactorWebAuthnWarning": {
- "message": "Devido a limitações da plataforma, o WebAuthn não pode ser utilizado em todas as aplicações Bitwarden. Deve configurar outro fornecedor de verificação de dois passos para que possa aceder à sua conta quando o WebAuthn não puder ser utilizado. Plataformas suportadas:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Cofre web e extensões do navegador num computador de secretária/portátil com um navegador compatível com WebAuthn (Chrome, Opera, Vivaldi ou Firefox com FIDO U2F ativado)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Devido a limitações da plataforma, o WebAuthn não pode ser utilizado em todas as aplicações Bitwarden. Deve configurar outro fornecedor de verificação de dois passos para poder aceder à sua conta quando o WebAuthn não puder ser utilizado."
},
"twoFactorRecoveryYourCode": {
"message": "O seu código Bitwarden de recuperação da verificação de dois passos"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Definir requisitos para o gerador de palavras-passe."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Uma ou mais políticas da organização estão a afetar as suas definições do gerador."
- },
"masterPasswordPolicyInEffect": {
"message": "Uma ou mais políticas da organização exigem que a sua palavra-passe mestra cumpra os seguintes requisitos:"
},
@@ -4720,16 +4771,16 @@
}
},
"policyInEffectUppercase": {
- "message": "Contém um ou mais caracteres em maiúsculas"
+ "message": "Contém um ou mais carateres em maiúsculas"
},
"policyInEffectLowercase": {
- "message": "Contém um ou mais caracteres em minúsculas"
+ "message": "Contém um ou mais carateres em minúsculas"
},
"policyInEffectNumbers": {
"message": "Contém um ou mais números"
},
"policyInEffectSpecial": {
- "message": "Contém um ou mais dos seguintes caracteres especiais $CHARS$",
+ "message": "Contém um ou mais dos seguintes carateres especiais $CHARS$",
"placeholders": {
"chars": {
"content": "$1",
@@ -6562,7 +6613,7 @@
"message": "obrigatório"
},
"charactersCurrentAndMaximum": {
- "message": "$CURRENT$/$MAX$ máximo de caracteres",
+ "message": "$CURRENT$/$MAX$ máximo de carateres",
"placeholders": {
"current": {
"content": "$1",
@@ -6575,7 +6626,7 @@
}
},
"characterMaximum": {
- "message": "Máximo de $MAX$ caracteres",
+ "message": "Máximo de $MAX$ carateres",
"placeholders": {
"max": {
"content": "$1",
@@ -6666,15 +6717,6 @@
"message": "Gerador",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "O que é que gostaria de gerar?"
- },
- "passwordType": {
- "message": "Tipo de palavra-passe"
- },
- "regenerateUsername": {
- "message": "Regenerar nome de utilizador"
- },
"generateUsername": {
"message": "Gerar nome de utilizador"
},
@@ -6696,7 +6738,7 @@
}
},
"passwordLengthRecommendationHint": {
- "message": " Utilize $RECOMMENDED$ caracteres ou mais para gerar uma palavra-passe forte.",
+ "message": " Utilize $RECOMMENDED$ carateres ou mais para gerar uma palavra-passe forte.",
"description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).",
"placeholders": {
"recommended": {
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tipo de nome de utilizador"
- },
"plusAddressedEmail": {
"message": "E-mail com subendereço",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Utilize a caixa de entrada de captura geral configurada para o seu domínio."
},
+ "useThisEmail": {
+ "message": "Utilizar este e-mail"
+ },
"random": {
"message": "Aleatório",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Nome de domínio",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token de acesso à API"
- },
"deviceVerification": {
"message": "Verificação do dispositivo"
},
@@ -7026,7 +7065,7 @@
"message": "O campo não é um endereço de e-mail."
},
"inputMinLength": {
- "message": "O campo deve ter pelo menos $COUNT$ caracteres.",
+ "message": "O campo deve ter pelo menos $COUNT$ carateres.",
"placeholders": {
"count": {
"content": "$1",
@@ -7035,7 +7074,7 @@
}
},
"inputMaxLength": {
- "message": "O campo não pode exceder os $COUNT$ caracteres de comprimento.",
+ "message": "O campo não pode exceder os $COUNT$ carateres de comprimento.",
"placeholders": {
"count": {
"content": "$1",
@@ -7044,7 +7083,7 @@
}
},
"inputForbiddenCharacters": {
- "message": "Não são permitidos os seguintes caracteres: $CHARACTERS$",
+ "message": "Não são permitidos os seguintes carateres: $CHARACTERS$",
"placeholders": {
"characters": {
"content": "$1",
@@ -7053,7 +7092,7 @@
}
},
"inputMinValue": {
- "message": "O valor do campo tem de ser, pelo menos, $MIN$ caracteres.",
+ "message": "O valor do campo tem de ser, pelo menos, $MIN$ carateres.",
"placeholders": {
"min": {
"content": "$1",
@@ -7062,7 +7101,7 @@
}
},
"inputMaxValue": {
- "message": "O valor do campo não pode exceder os $MAX$ caracteres.",
+ "message": "O valor do campo não pode exceder os $MAX$ carateres.",
"placeholders": {
"max": {
"content": "$1",
@@ -7194,11 +7233,11 @@
"message": "Limpar tudo"
},
"toggleCharacterCount": {
- "message": "Mostrar/ocultar contagem de caracteres",
+ "message": "Mostrar/ocultar contagem de carateres",
"description": "'Character count' describes a feature that displays a number next to each character of the password."
},
"passwordCharacterCount": {
- "message": "Contagem de caracteres da palavra-passe",
+ "message": "Contagem de carateres da palavra-passe",
"description": "'Character count' describes a feature that displays a number next to each character of the password."
},
"hide": {
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Sem coleções"
},
- "canView": {
- "message": "Pode ver"
- },
- "canViewExceptPass": {
- "message": "Pode ver, excepto palavras-passe"
- },
- "canEdit": {
- "message": "Pode editar"
- },
- "canEditExceptPass": {
- "message": "Pode editar, excepto palavras-passe"
- },
"noCollectionsAdded": {
"message": "Não foram adicionadas coleções"
},
@@ -8202,7 +8229,7 @@
"message": "Palavra-passe fraca identificada e encontrada numa violação de dados. Utilize uma palavra-passe forte e única para proteger a sua conta. Tem a certeza de que pretende utilizar esta palavra-passe?"
},
"characterMinimum": {
- "message": "$LENGTH$ caracteres no mínimo",
+ "message": "$LENGTH$ carateres no mínimo",
"placeholders": {
"length": {
"content": "$1",
@@ -8211,7 +8238,7 @@
}
},
"masterPasswordMinimumlength": {
- "message": "A palavra-passe mestra deve ter pelo menos $LENGTH$ caracteres.",
+ "message": "A palavra-passe mestra deve ter pelo menos $LENGTH$ carateres.",
"placeholders": {
"length": {
"content": "$1",
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limitar a eliminação de coleções aos proprietários e administradores"
},
+ "limitItemDeletionDesc": {
+ "message": "Limitar a eliminação de itens a membros com a permissão Pode gerir"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Os proprietários e administradores podem gerir todas as coleções e itens"
},
@@ -8656,9 +8686,6 @@
"message": "URL do servidor auto-hospedado",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias de domínio"
- },
"alreadyHaveAccount": {
"message": "Já tem uma conta?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Não tem acesso para gerir esta coleção."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Faltam permissões Pode gerir"
+ "grantManageCollectionWarningTitle": {
+ "message": "Permissões de gestão de coleções em falta"
},
- "grantAddAccessCollectionWarning": {
- "message": "Conceda permissões Pode gerir para permitir a gestão completa da coleção, incluindo a eliminação da coleção."
+ "grantManageCollectionWarning": {
+ "message": "Conceda permissões Gerir coleção para permitir a gestão completa da coleção, incluindo a eliminação da mesma."
},
"grantCollectionAccess": {
"message": "Conceder a grupos ou membros acesso a esta coleção."
@@ -9897,10 +9924,10 @@
"description": "The text, 'API', is an acronym and should not be translated."
},
"showCharacterCount": {
- "message": "Mostrar contagem de caracteres"
+ "message": "Mostrar contagem de carateres"
},
"hideCharacterCount": {
- "message": "Ocultar contagem de caracteres"
+ "message": "Ocultar contagem de carateres"
},
"editAccess": {
"message": "Editar acesso"
@@ -9921,7 +9948,7 @@
"message": "Introduza o ID do HTML, o nome, a aria-label ou o placeholder do campo."
},
"uppercaseDescription": {
- "message": "Incluir caracteres em maiúsculas",
+ "message": "Incluir carateres em maiúsculas",
"description": "Tooltip for the password generator uppercase character checkbox"
},
"uppercaseLabel": {
@@ -9929,7 +9956,7 @@
"description": "Label for the password generator uppercase character checkbox"
},
"lowercaseDescription": {
- "message": "Incluir caracteres em minúsculas",
+ "message": "Incluir carateres em minúsculas",
"description": "Full description for the password generator lowercase character checkbox"
},
"lowercaseLabel": {
@@ -9945,7 +9972,7 @@
"description": "Label for the password generator numbers checkbox"
},
"specialCharactersDescription": {
- "message": "Incluir caracteres especiais",
+ "message": "Incluir carateres especiais",
"description": "Full description for the password generator special characters checkbox"
},
"specialCharactersLabel": {
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Código descritor"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Não é possível remover coleções com permissões de Apenas visualização: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Aviso importante"
},
@@ -10201,7 +10237,7 @@
"message": "Domínio reivindicado"
},
"organizationNameMaxLength": {
- "message": "O nome da organização não pode exceder 50 caracteres."
+ "message": "O nome da organização não pode exceder 50 carateres."
},
"resellerRenewalWarningMsg": {
"message": "A sua subscrição será renovada em breve. Para garantir um serviço ininterrupto, contacte a $RESELLER$ para confirmar a sua renovação antes de $RENEWAL_DATE$.",
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Os administradores têm agora a capacidade de eliminar contas de membros que pertençam a um domínio reivindicado."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Esta ação elimina a conta do membro, incluindo todos os itens no seu cofre. Esta ação substitui a anterior Remover."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Eliminar é uma nova ação!"
+ },
+ "seatsRemaining": {
+ "message": "Tem $REMAINING$ lugares restantes dos $TOTAL$ lugares atribuídos a esta organização. Contacte o seu fornecedor para gerir a sua subscrição.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Organização existente"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Selecione uma organização para adicionar ao seu Portal do fornecedor."
+ },
+ "noOrganizations": {
+ "message": "Não existem organizações para listar"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "A subscrição do fornecedor receberá um crédito por qualquer tempo restante na subscrição da organização."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Pretende adicionar esta organização a $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Organização existente adicionada"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Os lugares atribuídos excedem os lugares disponíveis."
}
}
diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json
index 3c7061dbf31..4db5a16a566 100644
--- a/apps/web/src/locales/ro/messages.json
+++ b/apps/web/src/locales/ro/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Editare dosar"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Domeniu de bază",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Autentificare inițiată"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Trimitere"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "O notificare a fost trimisă pe dispozitivul dvs."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Versiunea $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerare parolă"
- },
"length": {
"message": "Lungime"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Zona de pericol"
},
- "dangerZoneDesc": {
- "message": "Atenție, aceste acțiuni nu sunt reversibile!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Revocare sesiuni"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Procedând astfel, veți fi deconectat din sesiunea curentă, fiind necesar să vă reconectați. De asemenea, vi se va solicita din nou autentificarea în două etape, dacă este configurată. Sesiunile active de pe alte dispozitive pot rămâne active timp de până la o oră."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Toate sesiunile au fost dezautorizate"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Gestionare"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Dezactivare"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "A apărut o problemă la citirea cheii de securitate. Încercați din nou."
},
- "twoFactorWebAuthnWarning": {
- "message": "Din cauza limitărilor de platformă, WebAuthn nu poate fi utilizat pe toate aplicațiile Bitwarden. Ar trebui să configurați un alt furnizor de autentificare în două etape, astfel încât să vă puteți accesa contul atunci când WebAuthn nu se poate utiliza. Platformele acceptate:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Seif web și extensii de browser pe un desktop/laptop cu un browser compatibil cu WebAuthn (Chrome, Opera, Vivaldi sau Firefox cu FIDO U2F activat)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Codul dvs. Bitwarden de recuperare a autentificării în două etape"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Setați cerințele pentru generatorul de parole."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Una sau mai multe politici organizaționale vă afectează setările generatorului."
- },
"masterPasswordPolicyInEffect": {
"message": "Una sau mai multe politici organizaționale necesită ca parola principală să îndeplinească următoarele cerințe:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Ce doriți să generați?"
- },
- "passwordType": {
- "message": "Tip de parolă"
- },
- "regenerateUsername": {
- "message": "Regenerare nume de utilizator"
- },
"generateUsername": {
"message": "Generare nume de utilizator"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Tip de nume de utilizator"
- },
"plusAddressedEmail": {
"message": "E-mail Plus adresat",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Utilizați inbox-ul catch-all configurat pentru domeniul dvs."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Aleatoriu",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Nume gazdă",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Token de acces API"
- },
"deviceVerification": {
"message": "Verificarea dispozitivului"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json
index e24312a7d09..0c8ee796b4a 100644
--- a/apps/web/src/locales/ru/messages.json
+++ b/apps/web/src/locales/ru/messages.json
@@ -156,16 +156,16 @@
"message": "Всего приложений"
},
"unmarkAsCriticalApp": {
- "message": "Unmark as critical app"
+ "message": "Снять пометку критического приложения"
},
"criticalApplicationSuccessfullyUnmarked": {
- "message": "Critical application successfully unmarked"
+ "message": "Критическое приложение успешно снято"
},
"whatTypeOfItem": {
"message": "Выберите тип элемента"
},
"name": {
- "message": "Название"
+ "message": "Имя"
},
"uri": {
"message": "URI"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Изменить папку"
},
+ "newFolder": {
+ "message": "Новая папка"
+ },
+ "folderName": {
+ "message": "Название папки"
+ },
+ "folderHintText": {
+ "message": "Создайте вложенную папку, добавив название родительской папки и символ \"/\". Пример: Сообщества/Форумы"
+ },
+ "deleteFolderPermanently": {
+ "message": "Вы действительно хотите безвозвратно удалить эту папку?"
+ },
"baseDomain": {
"message": "Основной домен",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Название элемента"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Вы не можете удалить коллекции с правами только на просмотр: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "напр.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Вход инициирован"
},
+ "logInRequestSent": {
+ "message": "Запрос отправлен"
+ },
"submit": {
"message": "Подтвердить"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "На ваше устройство отправлено уведомление."
},
+ "notificationSentDevicePart1": {
+ "message": "Разблокируйте Bitwarden на своем устройстве или "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Вы пытаетесь получить доступ к своему аккаунту?"
+ },
+ "accessAttemptBy": {
+ "message": "Попытка доступа $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Подтвердить доступ"
+ },
+ "denyAccess": {
+ "message": "Отказать в доступе"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "веб-приложении"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Перед одобрением убедитесь, что фраза отпечатка совпадает с приведенной ниже."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Разблокируйте Bitwarden на своем устройстве. Перед одобрением убедитесь, что фраза отпечатка совпадает с приведенной ниже."
+ },
"aNotificationWasSentToYourDevice": {
"message": "На ваше устройство было отправлено уведомление"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Убедитесь, что ваш аккаунт разблокирован и фраза отпечатка совпадает с фразой на другом устройстве"
- },
"versionNumber": {
"message": "Версия $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Избегать неоднозначных символов",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Создать новый пароль"
- },
"length": {
"message": "Длина"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Зона риска"
},
- "dangerZoneDesc": {
- "message": "Осторожно, эти действия необратимы!"
- },
- "dangerZoneDescSingular": {
- "message": "Будьте внимательны - это действие не обратимо!"
- },
"deauthorizeSessions": {
"message": "Деавторизовать сессии"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "В случае продолжения, ваша сессия будет завершена и вам будет предложено авторизоваться повторно. Вам также будет предложено выполнить двухэтапную аутентификацию, если она настроена. Сессии на других устройствах могут оставаться активными в течение одного часа."
},
+ "newDeviceLoginProtection": {
+ "message": "Авторизация с нового устройства"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Отключить защиту авторизации с нового устройства"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Включить защиту авторизации с нового устройства"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Продолжите, чтобы отключить письма от bitwarden отправляемые при авторизации с нового устройства."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Продолжите, чтобы включить письма от bitwarden отправляемые при авторизации с нового устройства."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Если защита авторизации с нового устройства отключена, любой с вашим мастер-паролем может получить доступ к вашему аккаунту с любого устройства. Чтобы обезопасить аккаунт при отключении писем от bitwarden настройте двухэтапную аутентификацию."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Изменения защиты авторизации сохранены"
+ },
"sessionsDeauthorized": {
"message": "Все сессии деавторизованы"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Управление"
},
- "canManage": {
- "message": "Может управлять"
+ "manageCollection": {
+ "message": "Управление коллекцией"
+ },
+ "viewItems": {
+ "message": "Просмотр элементов"
+ },
+ "viewItemsHidePass": {
+ "message": "Просмотр элементов, скрытых паролей"
+ },
+ "editItems": {
+ "message": "Изменить элементы"
+ },
+ "editItemsHidePass": {
+ "message": "Изменить элементы, скрытые пароли"
},
"disable": {
"message": "Отключить"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Не удалось прочитать ключ безопасности. Попробуйте снова."
},
- "twoFactorWebAuthnWarning": {
- "message": "Из-за ограничений платформы WebAuthn нельзя использовать во всех приложениях Bitwarden. Вы должны настроить другого провайдера двухэтапной аутентификации, чтобы иметь возможность получить доступ к своей учетной записи, когда WebAuthn не может быть использован. Поддерживаемые платформы:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Веб-хранилище и расширения браузера на компьютере/ноутбуке с браузером с поддержкой WebAuthn (Chrome, Opera, Vivaldi или Firefox с включенным FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Из-за ограничений платформы WebAuthn нельзя использовать во всех приложениях Bitwarden. Вы должны настроить другого провайдера двухэтапной аутентификации, чтобы иметь возможность получить доступ к своей учетной записи, когда WebAuthn не может быть использован."
},
"twoFactorRecoveryYourCode": {
"message": "Ваш код восстановления двухэтапной аутентификации Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Установить требования к генератору паролей."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "На настройки генератора влияют одна или несколько политик организации."
- },
"masterPasswordPolicyInEffect": {
"message": "Согласно одной или нескольким политикам организации необходимо, чтобы ваш мастер-пароль отвечал следующим требованиям:"
},
@@ -6666,15 +6717,6 @@
"message": "Генератор",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Что вы хотите сгенерировать?"
- },
- "passwordType": {
- "message": "Тип пароля"
- },
- "regenerateUsername": {
- "message": "Пересоздать имя пользователя"
- },
"generateUsername": {
"message": "Создать имя пользователя"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Тип имени пользователя"
- },
"plusAddressedEmail": {
"message": "Субадресованные email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Использовать общий email домена."
},
+ "useThisEmail": {
+ "message": "Использовать этот email"
+ },
"random": {
"message": "Случайно",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Имя хоста",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Токен доступа к API"
- },
"deviceVerification": {
"message": "Проверка устройства"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Нет коллекций"
},
- "canView": {
- "message": "Может просматривать"
- },
- "canViewExceptPass": {
- "message": "Может просматривать, кроме паролей"
- },
- "canEdit": {
- "message": "Может редактировать"
- },
- "canEditExceptPass": {
- "message": "Может редактировать, кроме паролей"
- },
"noCollectionsAdded": {
"message": "Нет добавленных коллекций"
},
@@ -8288,19 +8315,19 @@
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink1": {
- "message": "single organization",
+ "message": "одна организация",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart2": {
- "message": "policy,",
+ "message": "политика,",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink2": {
- "message": "SSO required",
+ "message": "Требуется SSO",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart3": {
- "message": "policy, and",
+ "message": "политика, и",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink3": {
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Ограничить удаление коллекций владельцам и администраторам"
},
+ "limitItemDeletionDesc": {
+ "message": "Ограничить удаление элементов для пользователей с разрешением «Может управлять»"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Владельцы и администраторы могут управлять всеми коллекциями и элементами"
},
@@ -8656,9 +8686,6 @@
"message": "URL собственного сервера",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Псевдоним домена"
- },
"alreadyHaveAccount": {
"message": "Уже зарегистрированы?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "У вас нет доступа к управлению этой коллекцией."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Недостаточно полномочий для управления"
+ "grantManageCollectionWarningTitle": {
+ "message": "Отсутствуют разрешения на управление коллекцией"
},
- "grantAddAccessCollectionWarning": {
- "message": "Предоставить возможность управлять разрешениями коллекций, включая их удаление."
+ "grantManageCollectionWarning": {
+ "message": "Представить разрешения на управление коллекцией, включая ее удаление."
},
"grantCollectionAccess": {
"message": "Предоставить группам или участникам доступ к этой коллекции."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Код дескриптора"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Вы не можете удалить коллекции с правами только на просмотр: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Важное уведомление"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Администраторы теперь могут удалять аккаунты пользователей, принадлежащие заявленному домену."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Это действие удалит аккаунт пользователя, включая все элементы в его хранилище. Это действие заменяет предыдущее действие Удалить."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Удалить - это новое действие!"
+ },
+ "seatsRemaining": {
+ "message": "У вас осталось $REMAINING$ мест из $TOTAL$, закрепленных за этой организацией. Обратитесь к своему провайдеру для управления подпиской.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Существующая организация"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Выберите организацию для добавления на ваш портал провайдеров."
+ },
+ "noOrganizations": {
+ "message": "Нет организаций для отображения"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Вы хотите добавить эту организацию в $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Добавлена существующая организация"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json
index 4e434ea80f4..058528cb18d 100644
--- a/apps/web/src/locales/si/messages.json
+++ b/apps/web/src/locales/si/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "බහාලුම සංස්කරණය"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "උදා.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json
index 791d6a65e33..bee2d072f91 100644
--- a/apps/web/src/locales/sk/messages.json
+++ b/apps/web/src/locales/sk/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Upraviť priečinok"
},
+ "newFolder": {
+ "message": "Nový priečinok"
+ },
+ "folderName": {
+ "message": "Názov priečinka"
+ },
+ "folderHintText": {
+ "message": "Vnorte priečinok pridaním názvu nadradeného priečinka a znaku \"/\". Príklad: Sociálne siete/Fóra"
+ },
+ "deleteFolderPermanently": {
+ "message": "Naozaj chcete natrvalo odstrániť tento priečinok?"
+ },
"baseDomain": {
"message": "Základná doména",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Názov položky"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Zbierky, ktoré môžete len zobraziť nemôžete odstrániť: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "napr.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Iniciované prihlásenie"
},
+ "logInRequestSent": {
+ "message": "Požiadavka bola odoslaná"
+ },
"submit": {
"message": "Potvrdiť"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Do vášho zariadenia bolo odoslané upozornenie."
},
+ "notificationSentDevicePart1": {
+ "message": "Odomknúť Bitwarden vo svojom zariadení alebo vo "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Snažíte sa získať prístup k svojmu účtu?"
+ },
+ "accessAttemptBy": {
+ "message": "Pokus o prístup z $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Potvrďte prístup"
+ },
+ "denyAccess": {
+ "message": "Zamietnuť prístup"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "webovej aplikácii"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Pred schválením sa uistite, že sa odtlačok prístupovej frázy zhoduje s tou uvedenou nižšie."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Odomknite Bitwarden na vašom zariadení. Pred schválením sa uistite, že sa odtlačok prístupovej frázy zhoduje s tým uvedeným nižšie."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Do vášho zariadenia bolo odoslané upozornenie"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Uistite sa, že je váš účet odomknutý a fráza odtlačku prsta sa zhoduje s frázou na druhom zariadení"
- },
"versionNumber": {
"message": "Verzia $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Vyhnúť sa zameniteľným znakom",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Vygenerovať nové heslo"
- },
"length": {
"message": "Dĺžka"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Riziková zóna"
},
- "dangerZoneDesc": {
- "message": "Opatrne, tieto zmeny nemožno vrátiť späť!"
- },
- "dangerZoneDescSingular": {
- "message": "Opatrne, túto zmenu nemožno vrátiť späť!"
- },
"deauthorizeSessions": {
"message": "Odhlásiť sedenia"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Ak budete pokračovať, budete tiež odhlásený z vášho súčasného sedenia a budete sa musieť opäť prihlásiť. Tiež budete opäť požiadaný o dvojstupňové prihlásenie ak ho máte zapnuté. Aktívne sedenia na iných zariadeniach môžu ostať aktívne až po dobu jednej hodiny."
},
+ "newDeviceLoginProtection": {
+ "message": "Prihlásenie z nového zariadenia"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Vypnúť ochranu pri prihlásení z nového zariadenia"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Zapnúť ochranu pri prihlásení z nového zariadenia"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Ak chcete vypnúť overovacie emaily, ktoré Bitwarden posiela keď sa prihlasujete z nového zariadenia, pokračujte nižšie."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Ak chcete aby Bitwarden posielal overovacie emaily keď sa prihlasujete z nového zariadenia, pokračujte nižšie."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "S vypnutou ochranou pri prihlásení z nového zariadenia môže ktokoľvek, kto pozná vaše hlavne heslo, pristupovať k vášmu účtu z ľubovoľného zariadenia. Ak chcete ochrániť váš účet bez overovacích emailov, nastavte si dvojstupňové overovanie pri prihlasovaní."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Zmeny v nastavení ochrany prihlasovania z nového zariadenia boli uložené"
+ },
"sessionsDeauthorized": {
"message": "Všetky sedenia odhlásené"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Spravovať"
},
- "canManage": {
- "message": "Môže spravovať"
+ "manageCollection": {
+ "message": "Spravovať zbierku"
+ },
+ "viewItems": {
+ "message": "Zobraziť položky"
+ },
+ "viewItemsHidePass": {
+ "message": "Zobraziť položky, skryté heslá"
+ },
+ "editItems": {
+ "message": "Upraviť položky"
+ },
+ "editItemsHidePass": {
+ "message": "Upraviť položky, skryté heslá"
},
"disable": {
"message": "Vypnúť"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Problém pri čítaní bezpečnostného kľúča. Skúste to znova."
},
- "twoFactorWebAuthnWarning": {
- "message": "Vzhľadom na obmedzenia platform, WebAuthn nemôže byť použitý vo všetkých Bitwarden aplikáciách. Mali by ste povoliť inú formu dvojitého overenia, aby ste sa mohli prihlásiť k svojmu účtu ak nie je možné použiť WebAuthn. Podporované platformy:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Webový trezor a rozšírenia prehliadača na pracovnej stanici s prehliadačom podporujúcim WebAuthn (Chrome, Opera, Vivaldi, alebo Firefox so zapnutou podporou FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Vzhľadom na obmedzenia platforiem, WebAuthn nemôže byť použitý vo všetkých Bitwarden aplikáciách. Mali by ste nastaviť inú formu dvojitého overenia, aby ste sa mohli prihlásiť k svojmu účtu ak nie je možné použiť WebAuthn."
},
"twoFactorRecoveryYourCode": {
"message": "Váš Bitwarden záchranný kód pre dvojstupňové overovanie"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Zvoľte minimálne požiadavky pre nastavenie generátora hesiel."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Jedno alebo viac nastavení organizácie ovplyvňujú vaše nastavenia generátora."
- },
"masterPasswordPolicyInEffect": {
"message": "Jedno alebo viac pravidiel organizácie požadujú aby vaše hlavné heslo spĺňalo nasledujúce požiadavky:"
},
@@ -6666,15 +6717,6 @@
"message": "Generátor",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Čo by ste chceli vygenerovať?"
- },
- "passwordType": {
- "message": "Typ hesla"
- },
- "regenerateUsername": {
- "message": "Vygenerovať nové používateľské meno"
- },
"generateUsername": {
"message": "Vygenerovať používateľské meno"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Typ používateľského mena"
- },
"plusAddressedEmail": {
"message": "E-mail s plusovým aliasom",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Použiť doručenú poštu typu catch-all nastavenú na doméne."
},
+ "useThisEmail": {
+ "message": "Použiť tento e-mail"
+ },
"random": {
"message": "Náhodné",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Názov hostiteľa",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Prístupový token API"
- },
"deviceVerification": {
"message": "Overenie zariadenia"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Žiadna zbierka"
},
- "canView": {
- "message": "Môže zobraziť"
- },
- "canViewExceptPass": {
- "message": "Môže zobraziť okrem hesiel"
- },
- "canEdit": {
- "message": "Môže upraviť"
- },
- "canEditExceptPass": {
- "message": "Môže upravovať okrem hesiel"
- },
"noCollectionsAdded": {
"message": "Nebolí pridané žiadne zbierky"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Obmedziť vymazávanie zbierky len pre vlastníkov a administrátorov"
},
+ "limitItemDeletionDesc": {
+ "message": "Obmedziť vymazávanie položiek na členov s oprávnením \"Môže spravovať\""
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Vlastníci a správcovia môžu spravovať všetky zbierky a položky"
},
@@ -8656,9 +8686,6 @@
"message": "Adresa URL vlastného hostingu",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias doména"
- },
"alreadyHaveAccount": {
"message": "Už máte účet?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Nemáte prístup k spravovaniu tejto zbierky."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Chýbajúce oprávnenia pre správu zbierky"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Pre povolenie kompletnej správy zbierky vrátane jej vymazania, udeľte oprávnenia na správu zbierky."
},
"grantCollectionAccess": {
"message": "Povoľte skupinám, alebo jednotlivcom prístup k tejto zbierke."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Kód výpisu"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Zbierky, ktoré môžete len zobraziť nemôžete odstrániť: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Dôležité upozornenie"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Odteraz majú správcovia právomoc vymazať konta členov, ktorí prináležia do privlastnenej domény."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "Táto akcia vymaže člena vrátane všetkých ich položiek v trezore. Tato akcia nahrádza predchádzajúcu akciu Odstrániť."
+ },
+ "deleteManagedUserWarning": {
+ "message": "\"Vymazať\" je nová akcia!"
+ },
+ "seatsRemaining": {
+ "message": "Z celkovo $TOTAL$ sedení pridelených tejto organizácii vám zostava $REMAINING$ sedení. Pre správu predplatného kontaktujte vášho poskytovateľa.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existujúca organizácia"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Vyberte organizáciu ktorú chcete pridať do portálu poskytovateľa."
+ },
+ "noOrganizations": {
+ "message": "Neexistujú žiadne organizácie na zobrazenie"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Váš poskytovateľ predplatného obdrží kredit za zostávajúci čas predplatného vašej organizácie."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Chcete pridať tuto organizáciu k $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Existujúca organizácia pridaná"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Počet pridelených sedení presahuje počet dostupných sedení."
}
}
diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json
index 1a7cb1dda29..c440f0cfcf1 100644
--- a/apps/web/src/locales/sl/messages.json
+++ b/apps/web/src/locales/sl/messages.json
@@ -1,18 +1,18 @@
{
"allApplications": {
- "message": "All applications"
+ "message": "Vse aplikacije"
},
"criticalApplications": {
- "message": "Critical applications"
+ "message": "Kritične aplikacije"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Analiza dostopa"
},
"riskInsights": {
- "message": "Risk Insights"
+ "message": "Vpogled v tveganja"
},
"passwordRisk": {
- "message": "Password Risk"
+ "message": "Varnostno tveganje gesla"
},
"reviewAtRiskPasswords": {
"message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Uredi mapo"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Bazna domena",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "npr.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Prijava se je začela"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Potrdi"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Na vašo napravo smo poslali obvestilo."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Različica $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Ponovno generiraj geslo"
- },
"length": {
"message": "Dolžina"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Območje nevarnosti"
},
- "dangerZoneDesc": {
- "message": "Previdno, ta dejanja so nepovratna!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Prekini seje"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Vse seje prekinjene"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Upravljaj"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Onemogočeno"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Kaj želite generirati?"
- },
- "passwordType": {
- "message": "Vrsta gesla"
- },
- "regenerateUsername": {
- "message": "Ponovno generiraj uporabniško ime"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Vrsta uporabniškega imena"
- },
"plusAddressedEmail": {
"message": "E-naslov s plusom",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Uporabite naslov za vse (\"catch-all\"), ki ste ga nastavili za svojo domeno."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Dostopni žeto (\"access token\") za API"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json
index fd3aeab1042..809fa21d852 100644
--- a/apps/web/src/locales/sr/messages.json
+++ b/apps/web/src/locales/sr/messages.json
@@ -15,7 +15,7 @@
"message": "Ризик од лозинке"
},
"reviewAtRiskPasswords": {
- "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
+ "message": "Прегледај ризичне лозинке (слабе, изложене или поново коришћене) у апликацијама. Изабери своје најкритичније апликације да би дао приоритет безбедносним радњама како би твоји корисници адресирали ризичне лозинке."
},
"dataLastUpdated": {
"message": "Подаци су последњи пут ажурирани: $DATE$",
@@ -132,13 +132,13 @@
}
},
"atRiskMembersDescription": {
- "message": "These members are logging into applications with weak, exposed, or reused passwords."
+ "message": "Ови чланови се пријављују у апликације са слабим, откривеним или поново коришћеним лозинкама."
},
"atRiskApplicationsDescription": {
"message": "Ове апликације имају слабу, проваљену или често коришћену лозинку."
},
"atRiskMembersDescriptionWithApp": {
- "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.",
+ "message": "Ови чланови се пријављују у $APPNAME$ са слабим, откривеним или поново коришћеним лозинкама.",
"placeholders": {
"appname": {
"content": "$1",
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Уреди фасциклу"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Главни домен",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Име ставке"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Не можете уклонити колекције са дозволама само за приказ: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "нпр.",
"description": "Short abbreviation for 'example'."
@@ -816,7 +819,7 @@
"message": "Копирати телефон"
},
"copyEmail": {
- "message": "Копирати имејл"
+ "message": "Копирај Е-пошту"
},
"copyCompany": {
"message": "Копирати фирму"
@@ -1168,7 +1171,7 @@
"message": "Потврдите идентитет"
},
"weDontRecognizeThisDevice": {
- "message": "We don't recognize this device. Enter the code sent to your email to verify your identity."
+ "message": "Не препознајемо овај уређај. Унесите код послат на адресу ваше електронске поште да би сте потврдили ваш идентитет."
},
"continueLoggingIn": {
"message": "Настави са пријављивањем"
@@ -1177,16 +1180,19 @@
"message": "Шта је уређај?"
},
"aDeviceIs": {
- "message": "A device is a unique installation of the Bitwarden app where you have logged in. Reinstalling, clearing app data, or clearing your cookies could result in a device appearing multiple times."
+ "message": "Уређај је јединствена инсталација Bitwarden апликације на коју сте се пријавили. Поновно инсталирање, брисање података апликације или брисање колачића може довести до тога да се уређај појави више пута."
},
"logInInitiated": {
"message": "Пријава је покренута"
},
+ "logInRequestSent": {
+ "message": "Захтев је послат"
+ },
"submit": {
"message": "Пошаљи"
},
"emailAddressDesc": {
- "message": "Користите ваш имејл за пријављивање."
+ "message": "Користи твоју Е-пошту за пријављивање."
},
"yourName": {
"message": "Ваше име"
@@ -1219,7 +1225,7 @@
"message": "Савет Главне Лозинке"
},
"masterPassHintText": {
- "message": "Ако заборавите лозинку, наговештај за лозинку се може послати на ваш имејл. $CURRENT$/$MAXIMUM$ карактера максимум.",
+ "message": "Ако заборавиш лозинку, наговештај за лозинку се може послати на твоју Е-пошту. $CURRENT$/$MAXIMUM$ карактера максимум.",
"placeholders": {
"current": {
"content": "$1",
@@ -1235,7 +1241,7 @@
"message": "Подешавања"
},
"accountEmail": {
- "message": "Имејл налога"
+ "message": "Е-пошта налога"
},
"requestHint": {
"message": "Захтевај савет"
@@ -1244,22 +1250,22 @@
"message": "Затражити савет лозинке"
},
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
- "message": "Унесите имејл свог налога и биће вам послат савет за лозинку"
+ "message": "Унеси адресу Е-поште свог налога и биће ти послат савет за лозинку"
},
"passwordHint": {
"message": "Помоћ за лозинку"
},
"enterEmailToGetHint": {
- "message": "Унесите Ваш имејл да би добили савет за Вашу Главну Лозинку."
+ "message": "Унеси твоју Е-пошту да би добио савет за твоју Главну Лозинку."
},
"getMasterPasswordHint": {
"message": "Добити савет за Главну Лозинку"
},
"emailRequired": {
- "message": "Имејл је неопходан."
+ "message": "Адреса Е-поште је неопходна."
},
"invalidEmail": {
- "message": "Неисправан имејл."
+ "message": "Нетачна адреса Е-поште."
},
"masterPasswordRequired": {
"message": "Главна Лозинка је неопходна."
@@ -1302,7 +1308,7 @@
"message": "Изаберите датум истека који је у будућности."
},
"emailAddress": {
- "message": "Имејл"
+ "message": "Адреса Е-поште"
},
"yourVaultIsLockedV2": {
"message": "Ваш сеф је блокиран"
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Обавештење је послато на ваш уређај."
},
+ "notificationSentDevicePart1": {
+ "message": "Откључај Bitwarden на твом уређају или на "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Да ли покушавате да приступите вашем налогу?"
+ },
+ "accessAttemptBy": {
+ "message": "Покушај приступа са $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Потврди приступ"
+ },
+ "denyAccess": {
+ "message": "Одбиј приступ"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Потврдите да се фраза отиска прста поклапа са овом испод пре одобравања."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Октључај Bitwarden на твом уређају. Потврдите да се фраза отиска прста поклапа са овом испод пре одобравања."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Обавештење је послато на ваш уређај"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Уверите се да је ваш налог откључан и да се фраза отиска подудара на другом уређају"
- },
"versionNumber": {
"message": "Верзија $VERSION_NUMBER$",
"placeholders": {
@@ -1399,7 +1432,7 @@
}
},
"verificationCodeEmailSent": {
- "message": "Провера имејла послата на $EMAIL$.",
+ "message": "Е-пошта за верификацију је послата на $EMAIL$.",
"placeholders": {
"email": {
"content": "$1",
@@ -1411,7 +1444,7 @@
"message": "Запамти ме"
},
"sendVerificationCodeEmailAgain": {
- "message": "Поново послати верификациони код на имејл"
+ "message": "Поново послати верификациони код на Е-пошту"
},
"useAnotherTwoStepMethod": {
"message": "Користите другу методу пријављивања у два корака"
@@ -1664,9 +1697,6 @@
"message": "Избегавај двосмислене карактере",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Поново генериши лозинку"
- },
"length": {
"message": "Дужина"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Опасна зона"
},
- "dangerZoneDesc": {
- "message": "Пажљиво, ове акције су крајне!"
- },
- "dangerZoneDescSingular": {
- "message": "Пажљиво, ова акција није реверзибилна!"
- },
"deauthorizeSessions": {
"message": "Одузели овлашћење сесије"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Наставак ће вас такође одјавити из тренутне сесије, што захтева поновно пријављивање. Од вас ће такође бити затражено да се поново пријавите у два корака, ако је омогућено. Активне сесије на другим уређајима могу да остану активне још један сат."
},
+ "newDeviceLoginProtection": {
+ "message": "Пријава на новом уређају"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Искључи заштиту пријаве на новом уређају"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Укључи заштиту пријаве на новом уређају"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Одузето овлашћење свих сесија"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Управљати"
},
- "canManage": {
- "message": "Може управљати"
+ "manageCollection": {
+ "message": "Управљај колекцијом"
+ },
+ "viewItems": {
+ "message": "Прикажи ставке"
+ },
+ "viewItemsHidePass": {
+ "message": "Прикажи ставке, сакривене лозинке"
+ },
+ "editItems": {
+ "message": "Уреди ставке"
+ },
+ "editItemsHidePass": {
+ "message": "Уреди ставке, сакривене лозинке"
},
"disable": {
"message": "Онемогући"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Догодила се грешка приликом читања безбедносног кључа. Покушајте поново."
},
- "twoFactorWebAuthnWarning": {
- "message": "Због ограничења платформе, WebAuthn се не могу користити на свим Bitwarden апликацијама. Требали бисте омогућити другог добављача услуге пријављивања у два корака како бисте могли да приступите свом налогу када WebAuthn не могу да се користе. Подржане платформе:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Веб сеф и додатке прегледача на рачунару са WebAuthn омогућен прегледач (Chrome, Opera, Vivaldi, или Firefox са FIDO U2F омогућено)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Ваш Bitwarden код за опоравак пријаве у два корака"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Поставите минималне захтеве за конфигурацију генератора лозинки."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Једна или више смерница организације утичу на поставке вашег генератора."
- },
"masterPasswordPolicyInEffect": {
"message": "Једна или више смерница организације захтевају да ваша главна лозинка да би испуњавали следеће захтеве:"
},
@@ -5795,14 +5846,14 @@
"message": "Грешка при декрипцији"
},
"couldNotDecryptVaultItemsBelow": {
- "message": "Bitwarden could not decrypt the vault item(s) listed below."
+ "message": "Bitwarden није могао да декриптује ставке из трезора наведене испод."
},
"contactCSToAvoidDataLossPart1": {
- "message": "Contact customer success",
+ "message": "Обратите се корисничкој подршци",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"contactCSToAvoidDataLossPart2": {
- "message": "to avoid additional data loss.",
+ "message": "да бисте избегли додатни губитак података.",
"description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'"
},
"accountRecoveryManageUsers": {
@@ -6666,15 +6717,6 @@
"message": "Генератор",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Шта желите да генеришете?"
- },
- "passwordType": {
- "message": "Тип лозинке"
- },
- "regenerateUsername": {
- "message": "Поново генериши име"
- },
"generateUsername": {
"message": "Генериши име"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Тип имена"
- },
"plusAddressedEmail": {
"message": "Плус имејл адресе",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Случајно",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Име домаћина",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Приступни АПИ токен"
- },
"deviceVerification": {
"message": "Провера уређаја"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Нема колекције"
},
- "canView": {
- "message": "Може прегледати"
- },
- "canViewExceptPass": {
- "message": "Може видетим осим лозинке"
- },
- "canEdit": {
- "message": "Може уређивати"
- },
- "canEditExceptPass": {
- "message": "Ноже уређивати осим лозинке"
- },
"noCollectionsAdded": {
"message": "Ниједна колекција додата"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Ограничите брисање збирке на власнике и администраторе"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Власници и администратори могу да управљају свим колекцијама и ставкама"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Домен алијаса"
- },
"alreadyHaveAccount": {
"message": "Већ имате налог?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "Немате приступ за управљање овом колекцијом."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Фале дозволе „Може да управља“"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Додатје дозволе „Може да управља“ да би се омогућило потпуно управљање наплатом укључујући брисање колекције."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Одобрите групама или члановима приступ овој колекцији."
@@ -9208,19 +9235,19 @@
"message": "Configure Bitwarden Directory Connector to automatically provision users and groups using the implementation guide for your Identity Provider."
},
"eventManagement": {
- "message": "Event management"
+ "message": "Управљање догађајима"
},
"eventManagementDesc": {
"message": "Integrate Bitwarden event logs with your SIEM (system information and event management) system by using the implementation guide for your platform."
},
"deviceManagement": {
- "message": "Device management"
+ "message": "Управљање уређајима"
},
"deviceManagementDesc": {
- "message": "Configure device management for Bitwarden using the implementation guide for your platform."
+ "message": "Конфигуришите управљање уређајима за Bitwarden помоћу водича за имплементацију за своју платформу."
},
"integrationCardTooltip": {
- "message": "Launch $INTEGRATION$ implementation guide.",
+ "message": "Покренути $INTEGRATION$ водич за имплементацију.",
"placeholders": {
"integration": {
"content": "$1",
@@ -9229,7 +9256,7 @@
}
},
"smIntegrationTooltip": {
- "message": "Set up $INTEGRATION$.",
+ "message": "Подесити $INTEGRATION$.",
"placeholders": {
"integration": {
"content": "$1",
@@ -9238,7 +9265,7 @@
}
},
"smSdkTooltip": {
- "message": "View $SDK$ repository",
+ "message": "Преглед $SDK$ спремишта",
"placeholders": {
"sdk": {
"content": "$1",
@@ -9809,13 +9836,13 @@
"message": "Алгоритам кључа"
},
"sshPrivateKey": {
- "message": "Private key"
+ "message": "Приватни кључ"
},
"sshPublicKey": {
- "message": "Public key"
+ "message": "Јавни кључ"
},
"sshFingerprint": {
- "message": "Fingerprint"
+ "message": "Отисак"
},
"sshKeyFingerprint": {
"message": "Отисак прста"
@@ -9890,7 +9917,7 @@
"message": "Ваша комплементарна једногодишња претплата на Менаџер Лозинки ће надоградити на изабрани план. Неће вам бити наплаћено док се бесплатни период не заврши."
},
"fileSavedToDevice": {
- "message": "File saved to device. Manage from your device downloads."
+ "message": "Датотека је сачувана на уређају. Управљајте преузимањима са свог уређаја."
},
"publicApi": {
"message": "Јавни API",
@@ -10068,7 +10095,16 @@
"message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended."
},
"descriptorCode": {
- "message": "Descriptor code"
+ "message": "Кôд дескриптора"
+ },
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Не можете уклонити колекције са дозволама само за приказ: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
},
"importantNotice": {
"message": "Важно обавештење"
@@ -10110,13 +10146,13 @@
"message": "Уклони чланове"
},
"devices": {
- "message": "Devices"
+ "message": "Уређаји"
},
"deviceListDescription": {
- "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now."
+ "message": "Ваш рачун је пријављен на сваку од доле наведених уређаја. Ако не препознајете уређај, извадите га сада."
},
"deviceListDescriptionTemp": {
- "message": "Your account was logged in to each of the devices below."
+ "message": "Ваш рачун је пријављен на сваку од доле наведених уређаја."
},
"claimedDomains": {
"message": "Claimed domains"
@@ -10250,15 +10286,64 @@
"message": "Organization subscription restarted"
},
"restartSubscription": {
- "message": "Restart your subscription"
+ "message": "Поново покрените претплату"
},
"suspendedManagedOrgMessage": {
- "message": "Contact $PROVIDER$ for assistance.",
+ "message": "Контактирајте $PROVIDER$ за помоћ.",
"placeholders": {
"provider": {
"content": "$1",
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json
index d79275d62fb..ac79efe57e0 100644
--- a/apps/web/src/locales/sr_CS/messages.json
+++ b/apps/web/src/locales/sr_CS/messages.json
@@ -1,24 +1,24 @@
{
"allApplications": {
- "message": "All applications"
+ "message": "Sve aplikacije"
},
"criticalApplications": {
- "message": "Critical applications"
+ "message": "Kritične aplikacije"
},
"accessIntelligence": {
- "message": "Access Intelligence"
+ "message": "Pristupi inteligenciji"
},
"riskInsights": {
- "message": "Risk Insights"
+ "message": "Uvid u rizik"
},
"passwordRisk": {
- "message": "Password Risk"
+ "message": "Rizik od lozinke"
},
"reviewAtRiskPasswords": {
- "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords."
+ "message": "Pregledaj rizične lozinke (slabe, izložene ili ponovo korišćene) u aplikacijama. Izaberi svoje najkritičnije aplikacije da bi dao prioritet bezbednosnim radnjama kako bi tvoji korisnici adresirali rizične lozinke."
},
"dataLastUpdated": {
- "message": "Data last updated: $DATE$",
+ "message": "Podaci su poslednji put ažurirani: $DATE$",
"placeholders": {
"date": {
"content": "$1",
@@ -27,19 +27,19 @@
}
},
"notifiedMembers": {
- "message": "Notified members"
+ "message": "Obavešteni članovi"
},
"revokeMembers": {
- "message": "Revoke members"
+ "message": "Ukloni članove"
},
"restoreMembers": {
- "message": "Restore members"
+ "message": "Vrati članove"
},
"cannotRestoreAccessError": {
- "message": "Cannot restore organization access"
+ "message": "Nije moguće povratiti pristup organizaciji"
},
"allApplicationsWithCount": {
- "message": "All applications ($COUNT$)",
+ "message": "Sve aplikacije ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -48,10 +48,10 @@
}
},
"createNewLoginItem": {
- "message": "Create new login item"
+ "message": "Kreirajte novu stavku za prijavu"
},
"criticalApplicationsWithCount": {
- "message": "Critical applications ($COUNT$)",
+ "message": "Kritične aplikacije ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -60,7 +60,7 @@
}
},
"notifiedMembersWithCount": {
- "message": "Notified members ($COUNT$)",
+ "message": "Obavešteni članovi ($COUNT$)",
"placeholders": {
"count": {
"content": "$1",
@@ -69,7 +69,7 @@
}
},
"noAppsInOrgTitle": {
- "message": "No applications found in $ORG NAME$",
+ "message": "Nije pronađena nijedna aplikacija u $ORG NAME$",
"placeholders": {
"org name": {
"content": "$1",
@@ -78,7 +78,7 @@
}
},
"noAppsInOrgDescription": {
- "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords."
+ "message": "Dok korisnici čuvaju prijave, aplikacije se pojavljuju ovde, prikazujući sve rizične lozinke. Označite kritične aplikacije i obavestite korisnike da ažuriraju lozinke."
},
"noCriticalAppsTitle": {
"message": "You haven't marked any applications as a Critical"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Urеdi fasciklu"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Osnovni domen",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "npr.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Pošalji"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regeneriši lozinku"
- },
"length": {
"message": "Dužina"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Opasna zona"
},
- "dangerZoneDesc": {
- "message": "Pažljivo, ove odluke se ne mogu poništiti!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Upravljaj"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json
index d413356e689..b7762e4c4dc 100644
--- a/apps/web/src/locales/sv/messages.json
+++ b/apps/web/src/locales/sv/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Redigera mapp"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Basdomän",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Objektnamn"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "t.ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Inloggning påbörjad"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Skicka"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "En avisering har skickats till din enhet."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Undvik tvetydiga tecken",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Återskapa lösenord"
- },
"length": {
"message": "Längd"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Farozon"
},
- "dangerZoneDesc": {
- "message": "Var försiktig, dessa åtgärder går inte att ångra!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Avauktorisera sessioner"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Om du fortsätter kommer du loggas ut från sin nuvarande session vilket kräver att du loggar in igen. Du kommer även behöva verifiera med tvåstegsverifiering om det är aktiverat. Aktiva sessioner på andra enheter kan fortsätta vara aktiva i upp till en timme."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Alla sessioner avauktoriserades"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Hantera"
},
- "canManage": {
- "message": "Kan hantera"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Stäng av"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Det gick inte att läsa säkerhetsnyckeln. Försök igen."
},
- "twoFactorWebAuthnWarning": {
- "message": "På grund av plattformsbegränsningar kan WebAuthn inte användas i alla Bitwarden-applikationer. Du bör aktivera en annan metod för tvåstegsverifiering så att du kan komma åt ditt konto när WebAuthn inte kan användas. Plattformar som stöds:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Webbvalvet och webbläsartillägg på en stationär eller bärbar dator med en WebAuthn-aktiverad webbläsare (Chrome, Opera, Vivaldi eller Firefox med FIDO U2F aktiverat)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Din återställningskod för tvåstegsverifiering"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Ange minimikrav för lösenordsgeneratorn."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "En eller flera organisationspolicyer påverkar dina generatorinställningar."
- },
"masterPasswordPolicyInEffect": {
"message": "En eller flera organisationspolicyer kräver att ditt huvudlösenord uppfyller följande krav:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Vad skulle du vilja generera?"
- },
- "passwordType": {
- "message": "Lösenordstyp"
- },
- "regenerateUsername": {
- "message": "Återskapa användarnamn"
- },
"generateUsername": {
"message": "Generera användarnamn"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Användarnamnstyp"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Slumpmässigt",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Värdnamn",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API-åtkomsttoken"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Ingen samling"
},
- "canView": {
- "message": "Kan visa"
- },
- "canViewExceptPass": {
- "message": "Kan visa, utom lösenord"
- },
- "canEdit": {
- "message": "Kan redigera"
- },
- "canEditExceptPass": {
- "message": "Kan redigera, utom lösenord"
- },
"noCollectionsAdded": {
"message": "Ingen samlingar lades till"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Ägare och administratörer kan hantera alla samlingar och objekt"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Aliasdomän"
- },
"alreadyHaveAccount": {
"message": "Har du redan ett konto?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Ge grupper eller medlemmar tillgång till denna samling."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json
index 486f01ce2cb..7e6f614b9c8 100644
--- a/apps/web/src/locales/te/messages.json
+++ b/apps/web/src/locales/te/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Edit folder"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Base domain",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "ex.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Submit"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json
index ed3f668fa49..e906b3abfd1 100644
--- a/apps/web/src/locales/th/messages.json
+++ b/apps/web/src/locales/th/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "แก้ไขโฟลเดอร์"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "โดเมนพื้นฐาน",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Item name"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "เช่น",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "ส่ง"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "A notification has been sent to your device."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Version $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Regenerate password"
- },
"length": {
"message": "Length"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Danger zone"
},
- "dangerZoneDesc": {
- "message": "Careful, these actions are not reversible!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Deauthorize sessions"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if set up. Active sessions on other devices may continue to remain active for up to one hour."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "All sessions deauthorized"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Manage"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Turn off"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "One or more organization policies are affecting your generator settings."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Generator",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Owners and admins can manage all collections and items"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias domain"
- },
"alreadyHaveAccount": {
"message": "Already have an account?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json
index 3ceb891631a..b9db895499f 100644
--- a/apps/web/src/locales/tr/messages.json
+++ b/apps/web/src/locales/tr/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Klasörü düzenle"
},
+ "newFolder": {
+ "message": "Yeni klasör"
+ },
+ "folderName": {
+ "message": "Klasör adı"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Bu klasörü kalıcı olarak silmek istediğinizden emin misiniz?"
+ },
"baseDomain": {
"message": "Ana alan adı",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Kayıt adı"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "örn.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Giriş başlatıldı"
},
+ "logInRequestSent": {
+ "message": "İstek gönderildi"
+ },
"submit": {
"message": "Gönder"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Cihazınıza bir bildirim gönderildi."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Hesabınıza erişmeye mi çalışıyorsunuz?"
+ },
+ "accessAttemptBy": {
+ "message": "$EMAIL$ erişim denemesi",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Erişimi onayla"
+ },
+ "denyAccess": {
+ "message": "Erişimi reddet"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Cihazınıza bir bildirim gönderildi"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Lütfen hesabınızın kilidinin açık olduğundan ve parmak izi ifadesinin diğer cihazla eşleştiğinden emin olun"
- },
"versionNumber": {
"message": "Sürüm $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Okurken karışabilecek karakterleri kullanma",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Yeni parola oluştur"
- },
"length": {
"message": "Uzunluk"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Tehlikeli bölge"
},
- "dangerZoneDesc": {
- "message": "Dikkatli olun, bu işlemleri geri alamazsınız!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Oturumları kapat"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Devam ederseniz geçerli oturumunuz da sonlanacak ve yeniden oturum açmanız gerekecek. İki aşamalı girişi etkinleştirdiyseniz onu da tamamlamanız gerekecek. Diğer cihazlardaki aktif oturumlar bir saate kadar aktif kalabilir."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Tüm oturumlar kapatıldı"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Yönet"
},
- "canManage": {
- "message": "Yönetebilir"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Devre dışı bırak"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Güvenlik anahtarını okurken bir sorun oluştu. Tekrar deneyin."
},
- "twoFactorWebAuthnWarning": {
- "message": "Platform sınırlamaları nedeniyle WebAuthn tüm Bitwarden uygulamalarında kullanılamaz. WebAuthn kullanılamadığında hesabınıza erişebilmek için başka bir iki aşamalı doğrulama yöntemi ayarlamanız gerekir. Desteklenen platformlar:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "WebAuthn uyumlu bir tarayıcıya (FIDO U2F uyumlu Chrome, Opera, Vivaldi veya Firefox) sahip bir bilgisayardaki tarayıcı uzantıları."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Platform sınırlamaları nedeniyle WebAuthn tüm Bitwarden uygulamalarında kullanılamaz. WebAuthn kullanılamadığında hesabınıza erişebilmek için başka bir iki aşamalı doğrulama yöntemi ayarlamanız gerekir."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwarden iki aşamalı giriş kurtarma kodunuz"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Parola üreticisi gereksinimleri ayarlayın."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Bir ya da daha fazla kuruluş ilkesi, oluşturucu ayarlarınızı etkiliyor."
- },
"masterPasswordPolicyInEffect": {
"message": "Bir veya daha fazla kuruluş ilkesi gereğince ana parolanız aşağıdaki gereksinimleri karşılamalıdır:"
},
@@ -6666,15 +6717,6 @@
"message": "Oluşturucu",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Ne oluşturmak istersiniz?"
- },
- "passwordType": {
- "message": "Parola türü"
- },
- "regenerateUsername": {
- "message": "Kullanıcı adını yeniden oluştur"
- },
"generateUsername": {
"message": "Kullanıcı adı oluştur"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Kullanıcı adı türü"
- },
"plusAddressedEmail": {
"message": "Artı adresli e-posta",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Alan adınızın tüm iletileri yakalamaya ayarlanmış adresini kullanın."
},
+ "useThisEmail": {
+ "message": "Bu e-postayı kullan"
+ },
"random": {
"message": "Rastgele",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Sunucu",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API erişim token'ı"
- },
"deviceVerification": {
"message": "Cihaz doğrulama"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Koleksiyon yok"
},
- "canView": {
- "message": "Görüntüleyebilir"
- },
- "canViewExceptPass": {
- "message": "Parolalar hariç görüntüleyebilir"
- },
- "canEdit": {
- "message": "Düzenleyebilir"
- },
- "canEditExceptPass": {
- "message": "Parolalar hariç düzenleyebilir"
- },
"noCollectionsAdded": {
"message": "Hiç koleksiyon eklenmedi"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Koleksiyon silmeyi sahipler ve yöneticilerle sınırlandırın"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Sahipler ve yöneticiler tüm koleksiyonları ve öğeleri yönetebilir"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Alias alan adı"
- },
"alreadyHaveAccount": {
"message": "Zaten hesabınız var mı?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Gruplara veya üyelere bu koleksiyona erişim izni verin."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Önemli uyarı"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json
index 1c00d760d00..4b9b33182b7 100644
--- a/apps/web/src/locales/uk/messages.json
+++ b/apps/web/src/locales/uk/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Редагування"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Основний домен",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Назва запису"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "Ви не можете вилучати збірки, маючи дозвіл лише на перегляд: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "зразок",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Ініційовано вхід"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Відправити"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Сповіщення було надіслано на ваш пристрій."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "Сповіщення надіслано на ваш пристрій"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Переконайтеся, що ваш обліковий запис розблоковано і фраза відбитка на іншому пристрої збігається"
- },
"versionNumber": {
"message": "Версія $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Уникати неоднозначних символів",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Генерувати новий"
- },
"length": {
"message": "Довжина"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Небезпечна зона"
},
- "dangerZoneDesc": {
- "message": "Обережно, ці дії неможливо скасувати!"
- },
- "dangerZoneDescSingular": {
- "message": "Обережно, цю дію неможливо скасувати!"
- },
"deauthorizeSessions": {
"message": "Завершити сеанси"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Продовжуючи, ви також вийдете з поточного сеансу і необхідно буде виконати вхід знову. Ви також отримаєте повторний запит двоетапної перевірки, якщо вона увімкнена. Активні сеанси на інших пристроях можуть залишатися активними протягом години."
},
+ "newDeviceLoginProtection": {
+ "message": "Вхід з нового пристрою"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Вимкнути захист входу з нового пристрою"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Увімкнути захист входу з нового пристрою"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Виконайте наведені нижче дії, щоб вимкнути надсилання підтверджень під час входу з нового пристрою."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Виконайте наведені нижче дії, щоб увімкнути надсилання підтверджень під час входу з нового пристрою."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "Якщо захист входу з нового пристрою вимкнено, будь-хто може отримати доступ до вашого облікового запису з будь-якого пристрою, знаючи головний пароль. Щоб захистити свій обліковий запис і не вмикати надсилання підтверджень, налаштуйте двоетапну перевірку."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "Зміни захисту входу з нового пристрою збережено"
+ },
"sessionsDeauthorized": {
"message": "Усі сеанси завершено"
},
@@ -2045,7 +2090,7 @@
"message": "Показувати піктограми вебсайтів"
},
"faviconDesc": {
- "message": "Показувати впізнаване зображення біля кожного запису."
+ "message": "Показувати зображення біля кожного запису."
},
"default": {
"message": "Типово"
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Керувати"
},
- "canManage": {
- "message": "Може керувати"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Вимкнути"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "Сталася проблема при читанні ключа безпеки. Спробуйте знову."
},
- "twoFactorWebAuthnWarning": {
- "message": "У зв'язку з обмеженнями платформи, WebAuthn не можна використовувати в усіх програмах Bitwarden. Вам слід активувати іншого провайдера двоетапної перевірки, щоб мати змогу отримати доступ до свого облікового запису, коли неможливо скористатися WebAuthn. Підтримувані платформи:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Вебсховище і розширення браузера на комп'ютерах і ноутбуках з браузерами, що мають підтримку WebAuthn (Chrome, Opera, Vivaldi, або Firefox з увімкненим FIDO U2F)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Ваш код відновлення двоетапної перевірки Bitwarden"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Встановити вимоги для генерування пароля."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "На параметри генератора впливають одна чи декілька політик організації."
- },
"masterPasswordPolicyInEffect": {
"message": "Політика однієї або декількох організацій зобов'язує дотримання таких вимог для головного пароля:"
},
@@ -6666,15 +6717,6 @@
"message": "Генератор",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "Що ви бажаєте згенерувати?"
- },
- "passwordType": {
- "message": "Тип пароля"
- },
- "regenerateUsername": {
- "message": "Повторно генерувати ім'я користувача"
- },
"generateUsername": {
"message": "Генерувати ім'я користувача"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Тип імені користувача"
- },
"plusAddressedEmail": {
"message": "Адреса е-пошти з плюсом",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Використовуйте свою скриньку вхідних Catch-All власного домену."
},
+ "useThisEmail": {
+ "message": "Використати цю е-пошту"
+ },
"random": {
"message": "Випадково",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Ім'я вузла",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "Токен доступу до API"
- },
"deviceVerification": {
"message": "Перевірка пристрою"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "Немає збірки"
},
- "canView": {
- "message": "Може переглядати"
- },
- "canViewExceptPass": {
- "message": "Може переглядати, крім паролів"
- },
- "canEdit": {
- "message": "Може редагувати"
- },
- "canEditExceptPass": {
- "message": "Може редагувати, крім паролів"
- },
"noCollectionsAdded": {
"message": "Не додано жодної збірки"
},
@@ -8284,31 +8311,31 @@
"message": "Довірені пристрої"
},
"memberDecryptionOptionTdeDescPart1": {
- "message": "Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The",
+ "message": "Учасникам не потрібен головний пароль під час входу з використанням SSO. Натомість використовується ключ шифрування, що зберігається на пристрої, роблячи цей пристрій довіреним. Перший пристрій, на якому учасник реєструється і входить до системи, буде довіреним. Нові пристрої необхідно схвалити за допомогою наявного довіреного пристрою або адміністратором.",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink1": {
- "message": "single organization",
+ "message": "Політику єдиної",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart2": {
- "message": "policy,",
+ "message": "організації,",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink2": {
- "message": "SSO required",
+ "message": "політику обов'язкового",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart3": {
- "message": "policy, and",
+ "message": "SSO та",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescLink3": {
- "message": "account recovery administration",
+ "message": "політику адміністрування облікового",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"memberDecryptionOptionTdeDescPart4": {
- "message": "policy will turn on when this option is used.",
+ "message": "запису буде ввімкнено, якщо використовується цей параметр.",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'"
},
"orgPermissionsUpdatedMustSetPassword": {
@@ -8387,16 +8414,16 @@
"message": "Схвалити запит"
},
"deviceApproved": {
- "message": "Device approved"
+ "message": "Пристрій схвалено"
},
"deviceRemoved": {
- "message": "Device removed"
+ "message": "Пристрій вилучено"
},
"removeDevice": {
- "message": "Remove device"
+ "message": "Вилучити пристрій"
},
"removeDeviceConfirmation": {
- "message": "Are you sure you want to remove this device?"
+ "message": "Ви дійсно хочете вилучити цей пристрій?"
},
"noDeviceRequests": {
"message": "Немає запитів з пристрою"
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Дозволити видалення збірок лише власникам та адміністраторам"
},
+ "limitItemDeletionDesc": {
+ "message": "Обмежити видалення записів для учасників, які мають дозвіл \"Може керувати\""
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Власники та адміністратори можуть керувати всіма збірками та записами"
},
@@ -8656,9 +8686,6 @@
"message": "URL-адреса власного сервера",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Псевдонім домену"
- },
"alreadyHaveAccount": {
"message": "Вже маєте обліковий запис?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "У вас немає доступу до керування цією збіркою."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Немає дозволу \"Може керувати\""
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Надайте дозвіл \"Може керувати\" для можливості повноцінного керування збірками, включно з видаленням."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Надайте групам або учасникам доступ до цієї збірки."
@@ -9286,7 +9313,7 @@
"message": "на місяць за учасника"
},
"monthPerMemberBilledAnnually": {
- "message": "month per member billed annually"
+ "message": "місяць за учасника сплачується щороку"
},
"seats": {
"message": "Місця"
@@ -9809,13 +9836,13 @@
"message": "Алгоритм ключа"
},
"sshPrivateKey": {
- "message": "Private key"
+ "message": "Закритий ключ"
},
"sshPublicKey": {
- "message": "Public key"
+ "message": "Відкритий ключ"
},
"sshFingerprint": {
- "message": "Fingerprint"
+ "message": "Цифровий відбиток"
},
"sshKeyFingerprint": {
"message": "Цифровий відбиток"
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Код дескриптора"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "Ви не можете вилучати збірки, маючи дозвіл лише на перегляд: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Важлива інформація"
},
@@ -10110,13 +10146,13 @@
"message": "Вилучити учасників"
},
"devices": {
- "message": "Devices"
+ "message": "Пристрої"
},
"deviceListDescription": {
- "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now."
+ "message": "Вхід у ваш обліковий запис виконано на пристроях, зазначених нижче. Якщо ви не розпізнаєте пристрій, вилучіть його."
},
"deviceListDescriptionTemp": {
- "message": "Your account was logged in to each of the devices below."
+ "message": "Вхід у ваш обліковий запис виконано на пристроях, зазначених нижче."
},
"claimedDomains": {
"message": "Заявлені домени"
@@ -10204,7 +10240,7 @@
"message": "Назва організації не може перевищувати 50 символів."
},
"resellerRenewalWarningMsg": {
- "message": "Your subscription will renew soon. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $RENEWAL_DATE$.",
+ "message": "Ваша передплата невдовзі поновиться. Щоб забезпечити безперебійну роботу, зверніться до $RESELLER$ для підтвердження поновлення до $RENEWAL_DATE$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10217,7 +10253,7 @@
}
},
"resellerOpenInvoiceWarningMgs": {
- "message": "An invoice for your subscription was issued on $ISSUED_DATE$. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $DUE_DATE$.",
+ "message": "Рахунок за вашу передплату випущено $ISSUED_DATE$. Щоб забезпечити безперебійну роботу, зверніться до $RESELLER$ для підтвердження поновлення до $DUE_DATE$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10234,7 +10270,7 @@
}
},
"resellerPastDueWarningMsg": {
- "message": "The invoice for your subscription has not been paid. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $GRACE_PERIOD_END$.",
+ "message": "Рахунок за вашу передплату ще не сплачено. Щоб забезпечити безперебійну роботу, зверніться до $RESELLER$ для підтвердження поновлення до $GRACE_PERIOD_END$.",
"placeholders": {
"reseller": {
"content": "$1",
@@ -10247,18 +10283,67 @@
}
},
"restartOrganizationSubscription": {
- "message": "Organization subscription restarted"
+ "message": "Передплату організації розпочато повторно"
},
"restartSubscription": {
- "message": "Restart your subscription"
+ "message": "Розпочніть повторно свою передплату"
},
"suspendedManagedOrgMessage": {
- "message": "Contact $PROVIDER$ for assistance.",
+ "message": "Звернутися до $PROVIDER$ по допомогу.",
"placeholders": {
"provider": {
"content": "$1",
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json
index 36f6385875f..4b7ce90344a 100644
--- a/apps/web/src/locales/vi/messages.json
+++ b/apps/web/src/locales/vi/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "Chỉnh sửa thư mục"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "Tên miền cơ sở",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "Tên mục"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "vd.",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "Log in initiated"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "Gửi"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "Một thông báo đã được gửi đến thiết bị của bạn."
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "Phiên bản $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "Tạo lại mật khẩu"
- },
"length": {
"message": "Độ dài"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "Vùng nguy hiểm"
},
- "dangerZoneDesc": {
- "message": "Cẩn thận, thao tác này không thể khôi phục!"
- },
- "dangerZoneDescSingular": {
- "message": "Careful, this action is not reversible!"
- },
"deauthorizeSessions": {
"message": "Gỡ phiên"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "Sẽ đăng xuất bạn ra khỏi phiên hiện tại, sau đó cần đăng nhập lại. Bạn cũng sẽ phải đăng nhập hai bước lại nếu bạn có đăng nhập hai bước. Những phiên đăng nhập trên các thiết bị khác sẽ tiếp tục có hiệu lực lên đến 1 tiếng."
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "Tất cả phiên đăng nhập đã bị gỡ"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "Quản lý"
},
- "canManage": {
- "message": "Can manage"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "Vô hiệu hoá"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
- "twoFactorWebAuthnWarning": {
- "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn supported browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F turned on)."
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "Set requirements for password generator."
},
- "passwordGeneratorPolicyInEffect": {
- "message": "Các chính sách của tổ chức đang ảnh hưởng đến cài đặt tạo mật khẩu của bạn."
- },
"masterPasswordPolicyInEffect": {
"message": "One or more organization policies require your master password to meet the following requirements:"
},
@@ -6666,15 +6717,6 @@
"message": "Trình tạo",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "What would you like to generate?"
- },
- "passwordType": {
- "message": "Password type"
- },
- "regenerateUsername": {
- "message": "Regenerate username"
- },
"generateUsername": {
"message": "Generate username"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "Username type"
- },
"plusAddressedEmail": {
"message": "Địa chỉ email có hậu tố",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "Use your domain's configured catch-all inbox."
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "Random",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "Hostname",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API access token"
- },
"deviceVerification": {
"message": "Device verification"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "No collection"
},
- "canView": {
- "message": "Can view"
- },
- "canViewExceptPass": {
- "message": "Can view, except passwords"
- },
- "canEdit": {
- "message": "Can edit"
- },
- "canEditExceptPass": {
- "message": "Can edit, except passwords"
- },
"noCollectionsAdded": {
"message": "No collections added"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "Chủ sở hữu và quản trị viên có thể quản lý tất cả các bộ sưu tập và mục"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "Tên miền thay thế"
- },
"alreadyHaveAccount": {
"message": "Bạn đã có tài khoản?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json
index c17a3ae7b2d..72b3b470031 100644
--- a/apps/web/src/locales/zh_CN/messages.json
+++ b/apps/web/src/locales/zh_CN/messages.json
@@ -199,7 +199,7 @@
"message": "备注"
},
"note": {
- "message": "备注"
+ "message": "笔记"
},
"customFields": {
"message": "自定义字段"
@@ -254,7 +254,7 @@
}
},
"websiteAdded": {
- "message": "网址已添加"
+ "message": "网站已添加"
},
"addWebsite": {
"message": "添加网站"
@@ -464,6 +464,18 @@
"editFolder": {
"message": "编辑文件夹"
},
+ "newFolder": {
+ "message": "新增文件夹"
+ },
+ "folderName": {
+ "message": "文件夹名称"
+ },
+ "folderHintText": {
+ "message": "通过在父文件夹名后面添加「/」来嵌套文件夹。示例:Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "您确定要永久删除这个文件夹吗?"
+ },
"baseDomain": {
"message": "基础域",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "项目名称"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "您无法删除仅具有「查看」权限的集合:$COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "例如",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "登录已发起"
},
+ "logInRequestSent": {
+ "message": "请求已发送"
+ },
"submit": {
"message": "提交"
},
@@ -1198,7 +1204,7 @@
"message": "主密码"
},
"masterPassDesc": {
- "message": "主密码是您访问密码库的密码。它非常重要,请您不要忘记。一旦忘记,无任何办法恢复此密码。"
+ "message": "主密码是用于访问您的密码库的密码。不要忘记您的主密码,这一点非常重要。一旦忘记,无任何办法恢复此密码。"
},
"masterPassImportant": {
"message": "主密码忘记后,将无法恢复!"
@@ -1213,7 +1219,7 @@
"message": "主密码提示(可选)"
},
"newMasterPassHint": {
- "message": "新的主密码提示(可选)"
+ "message": "新主密码提示(可选)"
},
"masterPassHintLabel": {
"message": "主密码提示"
@@ -1363,7 +1369,7 @@
"message": "没有可列出的事件。"
},
"newOrganization": {
- "message": "新建组织"
+ "message": "新增组织"
},
"noOrganizationsList": {
"message": "您没有加入任何组织。同一组织的用户可以安全地与其他用户共享项目。"
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "通知已发送到您的设备。"
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "您正在尝试访问您的账户吗?"
+ },
+ "accessAttemptBy": {
+ "message": "$EMAIL$ 的访问尝试",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "确认访问"
+ },
+ "denyAccess": {
+ "message": "拒绝访问"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "网页 App"
+ },
+ "notificationSentDevicePart2": {
+ "message": "在批准前,请确保指纹短语与下面的相匹配。"
+ },
+ "notificationSentDeviceComplete": {
+ "message": "在您的设备上解锁 Bitwarden。在批准前,请确保指纹短语与下面的相匹配。"
+ },
"aNotificationWasSentToYourDevice": {
"message": "通知已发送到您的设备"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "确保您的账户已解锁,并且指纹短语与其他设备上的相匹配。"
- },
"versionNumber": {
"message": "版本: $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "避免易混淆的字符",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "重新生成密码"
- },
"length": {
"message": "长度"
},
@@ -1743,7 +1773,7 @@
"message": "继续操作将更改您的账户电子邮箱地址。这不会更改用于双重身份验证的电子邮箱地址。您可以在两步登录设置中更改它。"
},
"newEmail": {
- "message": "新的电子邮箱"
+ "message": "新电子邮箱"
},
"code": {
"message": "代码"
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "危险操作区"
},
- "dangerZoneDesc": {
- "message": "当心,这些操作无法撤销!"
- },
- "dangerZoneDescSingular": {
- "message": "当心,此操作无法撤销!"
- },
"deauthorizeSessions": {
"message": "取消会话授权"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "继续操作还将使您退出当前会话,并要求您重新登录。如果有设置两步登录,也需要重新验证。其他设备上的活动会话可能会继续保持活动状态长达一小时。"
},
+ "newDeviceLoginProtection": {
+ "message": "新设备登录"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "关闭新设备登录保护"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "开启新设备登录保护"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "按照以下步骤关闭 Bitwarden 在您从新设备登录时发送验证电子邮件的功能。"
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "按照以下步骤开启 Bitwarden 在您从新设备登录时发送验证电子邮件的功能。"
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "关闭新设备登录保护后,任何拥有您的主密码的人都可以从任何设备访问您的账户。要在没有验证电子邮件的情况下保护您的账户,请设置两步登录。"
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "新设备登录保护更改已保存"
+ },
"sessionsDeauthorized": {
"message": "已取消所有会话授权"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "管理"
},
- "canManage": {
- "message": "可以管理"
+ "manageCollection": {
+ "message": "管理集合"
+ },
+ "viewItems": {
+ "message": "查看项目"
+ },
+ "viewItemsHidePass": {
+ "message": "查看项目,隐藏密码"
+ },
+ "editItems": {
+ "message": "编辑项目"
+ },
+ "editItemsHidePass": {
+ "message": "编辑项目,隐藏密码"
},
"disable": {
"message": "停用"
@@ -2264,7 +2321,7 @@
}
},
"webAuthnkeyX": {
- "message": "WebAuthn 密钥 $INDEX$",
+ "message": "WebAuthn 钥匙 $INDEX$",
"placeholders": {
"index": {
"content": "$1",
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "读取安全钥匙时出现问题,请重试。"
},
- "twoFactorWebAuthnWarning": {
- "message": "由于平台限制,WebAuthn 不能在所有 Bitwarden 应用程序上使用。您应该启用另一个两步登录提供程序,以便在 WebAuthn 无法使用时可以访问您的账户。支持的平台有:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "桌面/笔记本电脑上支持 WebAuthn 的浏览器(启用了 FIDO U2F 的 Chrome、Opera、Vivaldi 或 Firefox)中的网页密码库和浏览器扩展。"
+ "twoFactorWebAuthnWarning1": {
+ "message": "由于平台限制,WebAuthn 不能在所有 Bitwarden 应用程序上使用。您应该启用另一个两步登录提供程序,以便在无法使用 WebAuthn 时可以访问您的账户。"
},
"twoFactorRecoveryYourCode": {
"message": "您的 Bitwarden 两步登录恢复代码"
@@ -2443,7 +2497,7 @@
"message": "发现暴露的密码"
},
"exposedPasswordsFoundReportDesc": {
- "message": "我们在您的 $VAULT$ 中发现了 $COUNT$ 个在已知的数据泄露事件中暴露了密码的项目。您应更改它们以使用新的密码。",
+ "message": "我们在您的 $VAULT$ 中发现了 $COUNT$ 个在已知的数据泄露中暴露了密码的项目。您应更改它们以使用新的密码。",
"placeholders": {
"count": {
"content": "$1",
@@ -2456,7 +2510,7 @@
}
},
"noExposedPasswords": {
- "message": "您的密码库中没有在已知数据泄露事件中被暴露密码的项目。"
+ "message": "您的密码库中没有在已知数据泄露中暴露了密码的项目。"
},
"checkExposedPasswords": {
"message": "检查暴露的密码"
@@ -2629,7 +2683,7 @@
"message": "请确保您的账户有足够的信用额度来用于此购买。如果您的账户信用额度不足,您的默认付款方式将用于补足差额。您可以从「计费」页面向您的账户添加信用额度。"
},
"creditAppliedDesc": {
- "message": "您账户的信用额度可用于进行消费。任何可用的信用额度将用于自动支付此账户的账单。"
+ "message": "您账户的信用额度可用于进行消费。任何可用的信用额度将用于自动抵扣此账户的账单。"
},
"goPremium": {
"message": "升级高级会员",
@@ -2764,7 +2818,7 @@
"message": "任何未付费订阅都将通过您的付款方式收取费用。"
},
"paymentChargedWithTrial": {
- "message": "您的计划包含了 7 天的免费试用期。在试用期结束前,不会从您的付款方式中扣款。您可以随时取消。"
+ "message": "您的计划包含了 7 天的免费试用。在试用期结束前,不会从您的付款方式中扣款。您可以随时取消。"
},
"paymentInformation": {
"message": "支付信息"
@@ -2905,7 +2959,7 @@
"description": "Noun. A refunded payment that was charged."
},
"chargesStatement": {
- "message": "任何费用将在您的对账单上以 $STATEMENT_NAME$ 显示。",
+ "message": "任何费用将以 $STATEMENT_NAME$ 出现在您的对账单上。",
"placeholders": {
"statement_name": {
"content": "$1",
@@ -2923,7 +2977,7 @@
"message": "添加存储空间将会调整计费总金额,并立即通过您的付款方式进行扣款。第一笔费用将按当前计费周期的剩余时间按比例分配。"
},
"storageRemoveNote": {
- "message": "移除存储空间将会调整计费总金额,这笔费用将按比例返回下一笔账单费用中。"
+ "message": "移除存储空间将会调整计费总金额,这笔调整费用将按比例作为信用额度抵扣您的下一笔账单费用。"
},
"adjustedStorage": {
"message": "已调整 $AMOUNT$ GB 的存储空间。",
@@ -3420,7 +3474,7 @@
"message": "更改了帐户密码"
},
"enabledUpdated2fa": {
- "message": "保存了两步登录"
+ "message": "两步登录已保存"
},
"disabled2fa": {
"message": "停用了两步登录"
@@ -3781,7 +3835,7 @@
}
},
"unlinkedSso": {
- "message": "未链接 SSO。"
+ "message": "取消链接 SSO。"
},
"unlinkedSsoUser": {
"message": "为用户 $ID$ 取消链接 SSO。",
@@ -4395,7 +4449,7 @@
"message": "添加用户席位将会调整计费总金额,并立即通过您的付款方式进行扣款。第一笔费用将按当前计费周期的剩余时间按比例分配。"
},
"seatsRemoveNote": {
- "message": "移除用户席位将会调整计费总金额,这笔费用将按比例返回下一笔账单费用中。"
+ "message": "移除用户席位将会调整计费总金额,这笔调整费用将按比例作为信用额度抵扣您的下一笔账单费用。"
},
"adjustedSeats": {
"message": "调整了 $AMOUNT$ 个用户席位。",
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "设置密码生成器要求。"
},
- "passwordGeneratorPolicyInEffect": {
- "message": "一个或多个组织策略正在影响您的生成器设置。"
- },
"masterPasswordPolicyInEffect": {
"message": "一个或多个组织策略要求您的主密码满足以下要求:"
},
@@ -5060,7 +5111,7 @@
"message": "确定移除此密码?"
},
"hideEmail": {
- "message": "对收件人隐藏我的电子邮箱地址。"
+ "message": "对接收者隐藏我的电子邮箱地址。"
},
"disableThisSend": {
"message": "停用此 Send 确保无人能访问它。",
@@ -5074,7 +5125,7 @@
"description": "This text will be displayed after a Send has been accessed the maximum amount of times."
},
"pendingDeletion": {
- "message": "等待删除"
+ "message": "待删除"
},
"expired": {
"message": "已过期"
@@ -5088,7 +5139,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendProtectedPasswordDontKnow": {
- "message": "不知道密码?请向提供此 Send 的发件人索要密码。",
+ "message": "不知道密码吗?请向发送者索取访问此 Send 所需的密码。",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendHiddenByDefault": {
@@ -5129,7 +5180,7 @@
"message": "添加紧急联系人"
},
"designatedEmergencyContacts": {
- "message": "已指定为紧急联系人"
+ "message": "指定为紧急联系人"
},
"noGrantedAccess": {
"message": "您尚未被任何人指定为紧急联系人。"
@@ -5294,14 +5345,14 @@
"message": "可以管理组织策略的组织成员豁免此策略。"
},
"disableHideEmail": {
- "message": "在创建或编辑 Send 时,始终向收件人显示成员的电子邮箱地址。",
+ "message": "创建或编辑 Send 时,始终向接收者显示成员的电子邮箱地址。",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendOptionsPolicyInEffect": {
"message": "以下组织策略目前正起作用:"
},
"sendDisableHideEmailInEffect": {
- "message": "创建或编辑 Send 时,不允许用户对收件人隐藏他们的电子邮箱地址。",
+ "message": "创建或编辑 Send 时,不允许用户对接收者隐藏他们的电子邮箱地址。",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"modifiedPolicyId": {
@@ -5489,7 +5540,7 @@
"message": "发送请求"
},
"addANote": {
- "message": "添加备注"
+ "message": "添加笔记"
},
"bitwardenSecretsManager": {
"message": "Bitwarden 机密管理器"
@@ -5864,7 +5915,7 @@
"message": "提供商"
},
"newClientOrganization": {
- "message": "新建客户组织"
+ "message": "新增客户组织"
},
"newClientOrganizationDesc": {
"message": "创建一个新的客户组织,该组织将作为提供商与你关联。您将可以访问和管理这个组织。"
@@ -6148,7 +6199,7 @@
"message": "最小入站签名算法"
},
"spWantAssertionsSigned": {
- "message": "要求使用签名的断言"
+ "message": "期望已签名的断言"
},
"spValidateCertificates": {
"message": "验证证书"
@@ -6184,7 +6235,7 @@
"message": "允许出站注销请求"
},
"idpSignAuthenticationRequests": {
- "message": "签名身份验证请求"
+ "message": "签署身份验证请求"
},
"ssoSettingsSaved": {
"message": "单点登录配置已保存"
@@ -6211,7 +6262,7 @@
"message": "链接已失效。请让赞助方重新发送邀请。"
},
"reclaimedFreePlan": {
- "message": "重新认领免费计划"
+ "message": "重新申领免费计划"
},
"redeem": {
"message": "兑换"
@@ -6283,7 +6334,7 @@
"message": "立即兑换"
},
"recipient": {
- "message": "收件人"
+ "message": "接收者"
},
"removeSponsorship": {
"message": "移除赞助"
@@ -6666,15 +6717,6 @@
"message": "生成器",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "您想要生成什么?"
- },
- "passwordType": {
- "message": "密码类型"
- },
- "regenerateUsername": {
- "message": "重新生成用户名"
- },
"generateUsername": {
"message": "生成用户名"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "用户名类型"
- },
"plusAddressedEmail": {
"message": "附加地址电子邮箱",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "使用您的域名配置的 Catch-all 收件箱。"
},
+ "useThisEmail": {
+ "message": "使用此电子邮箱"
+ },
"random": {
"message": "随机",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "主机名",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API 访问令牌"
- },
"deviceVerification": {
"message": "设备验证"
},
@@ -7326,7 +7365,7 @@
"description": "Message to encourage the user to start creating service accounts."
},
"serviceAccountsNoItemsTitle": {
- "message": "还没有要显示的内容",
+ "message": "还没有可显示的内容",
"description": "Title to indicate that there are no service accounts to display."
},
"searchSecrets": {
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "没有集合"
},
- "canView": {
- "message": "可以查看"
- },
- "canViewExceptPass": {
- "message": "除密码外,可以查看"
- },
- "canEdit": {
- "message": "可以编辑"
- },
- "canEditExceptPass": {
- "message": "除密码外,可以编辑"
- },
"noCollectionsAdded": {
"message": "未添加任何集合"
},
@@ -8320,7 +8347,7 @@
"description": "Used as a card title description on the set password page to explain why the user is there"
},
"cardMetrics": {
- "message": "$TOTAL$ 不足",
+ "message": "总计 $TOTAL$",
"placeholders": {
"total": {
"content": "$1",
@@ -8602,10 +8629,13 @@
"message": "管理组织的集合行为"
},
"limitCollectionCreationDesc": {
- "message": "限制为仅所有者和管理员可以创建集合"
+ "message": "限制为所有者和管理员可以创建集合"
},
"limitCollectionDeletionDesc": {
- "message": "限制为仅所有者和管理员可以删除集合"
+ "message": "限制为所有者和管理员可以删除集合"
+ },
+ "limitItemDeletionDesc": {
+ "message": "限制为拥有「可以管理」权限的成员可以删除项目"
},
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "所有者和管理员可以管理所有集合和项目"
@@ -8656,9 +8686,6 @@
"message": "自托管服务器 URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "别名域"
- },
"alreadyHaveAccount": {
"message": "已经拥有账户了吗?"
},
@@ -8669,7 +8696,7 @@
"message": "跳转到内容"
},
"managePermissionRequired": {
- "message": "必须至少有一个成员或群组拥有「可以管理」的权限。"
+ "message": "必须至少有一个成员或群组拥有「可以管理」权限。"
},
"typePasskey": {
"message": "通行密钥"
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "您没有管理此集合的权限。"
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "缺少「可以管理」权限"
+ "grantManageCollectionWarningTitle": {
+ "message": "缺少「管理集合」权限"
},
- "grantAddAccessCollectionWarning": {
- "message": "授予「可以管理」权限以允许完整的集合管理,包括删除集合。"
+ "grantManageCollectionWarning": {
+ "message": "授予「管理集合」权限以允许完整的集合管理,包括删除集合。"
},
"grantCollectionAccess": {
"message": "授予群组或成员对此集合的访问权限。"
@@ -8975,7 +9002,7 @@
"description": "Message to encourage the user to start creating machine accounts."
},
"machineAccountsNoItemsTitle": {
- "message": "暂无要显示的内容",
+ "message": "还没有可显示的内容",
"description": "Title to indicate that there are no machine accounts to display."
},
"deleteMachineAccounts": {
@@ -9283,10 +9310,10 @@
"message": "35% 折扣"
},
"monthPerMember": {
- "message": " /成员 /月"
+ "message": "月 /成员"
},
"monthPerMemberBilledAnnually": {
- "message": " /成员 /月(按年计费)"
+ "message": "月 /成员(按年计费)"
},
"seats": {
"message": "席位"
@@ -10062,14 +10089,23 @@
"message": "不允许成员通过此组织兑换家庭计划。"
},
"verifyBankAccountWithStatementDescriptorWarning": {
- "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在组织的计费页面输入该转账的语句描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将失效。"
+ "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在组织的计费页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将失效。"
},
"verifyBankAccountWithStatementDescriptorInstructions": {
- "message": "我们已向您的银行账户存入了一笔小额转账(可能需要 1-2 个工作日到账)。请输入转账说明中以 \"SM\" 开头的六位数代码。验证银行账户失败将会错过支付,您的订阅将失效。"
+ "message": "我们已向您的银行账户存入了一笔小额转账(可能需要 1-2 个工作日到账)。请输入转账描述中以「SM」开头的六位数代码。验证银行账户失败将会错过支付,您的订阅将失效。"
},
"descriptorCode": {
"message": "描述符代码"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "您无法删除仅具有「查看」权限的集合:$COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "重要通知"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "管理员现在可以删除已声明域名下的成员账户。"
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "此操作将删除成员账户及其密码库中的所有项目。其取代了之前的「移除」操作。"
+ },
+ "deleteManagedUserWarning": {
+ "message": "「删除」是一个新的操作!"
+ },
+ "seatsRemaining": {
+ "message": "该组织已分配 $TOTAL$ 个席位,您还剩余 $REMAINING$ 个席位。请联系提供商管理您的订阅。",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "现有组织"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "选择一个要添加到您的提供商门户的组织。"
+ },
+ "noOrganizations": {
+ "message": "没有可列出的组织"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "您的提供商订阅将获得此组织订阅剩余时间内的信用额度。"
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "您想将该组织添加到 $PROVIDER$ 吗?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "添加了现有组织"
+ },
+ "assignedExceedsAvailable": {
+ "message": "分配的席位超过可用席位。"
}
}
diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json
index 06e4e5ad6c8..fc1bf0b63f1 100644
--- a/apps/web/src/locales/zh_TW/messages.json
+++ b/apps/web/src/locales/zh_TW/messages.json
@@ -464,6 +464,18 @@
"editFolder": {
"message": "編輯資料夾"
},
+ "newFolder": {
+ "message": "New folder"
+ },
+ "folderName": {
+ "message": "Folder name"
+ },
+ "folderHintText": {
+ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums"
+ },
+ "deleteFolderPermanently": {
+ "message": "Are you sure you want to permanently delete this folder?"
+ },
"baseDomain": {
"message": "基底網域",
"description": "Domain name. Example: website.com"
@@ -728,15 +740,6 @@
"itemName": {
"message": "項目名"
},
- "cannotRemoveViewOnlyCollections": {
- "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
- "placeholders": {
- "collections": {
- "content": "$1",
- "example": "Work, Personal"
- }
- }
- },
"ex": {
"message": "例如",
"description": "Short abbreviation for 'example'."
@@ -1182,6 +1185,9 @@
"logInInitiated": {
"message": "登入已發起"
},
+ "logInRequestSent": {
+ "message": "Request sent"
+ },
"submit": {
"message": "送出"
},
@@ -1371,12 +1377,39 @@
"notificationSentDevice": {
"message": "通知已傳送至您的裝置。"
},
+ "notificationSentDevicePart1": {
+ "message": "Unlock Bitwarden on your device or on the "
+ },
+ "areYouTryingToAccessYourAccount": {
+ "message": "Are you trying to access your account?"
+ },
+ "accessAttemptBy": {
+ "message": "Access attempt by $EMAIL$",
+ "placeholders": {
+ "email": {
+ "content": "$1",
+ "example": "name@example.com"
+ }
+ }
+ },
+ "confirmAccess": {
+ "message": "Confirm access"
+ },
+ "denyAccess": {
+ "message": "Deny access"
+ },
+ "notificationSentDeviceAnchor": {
+ "message": "web app"
+ },
+ "notificationSentDevicePart2": {
+ "message": "Make sure the Fingerprint phrase matches the one below before approving."
+ },
+ "notificationSentDeviceComplete": {
+ "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving."
+ },
"aNotificationWasSentToYourDevice": {
"message": "已傳送通知至您的裝置"
},
- "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
- "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device"
- },
"versionNumber": {
"message": "版本 $VERSION_NUMBER$",
"placeholders": {
@@ -1664,9 +1697,6 @@
"message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox."
},
- "regeneratePassword": {
- "message": "重新產生密碼"
- },
"length": {
"message": "長度"
},
@@ -1839,12 +1869,6 @@
"dangerZone": {
"message": "危險區域"
},
- "dangerZoneDesc": {
- "message": "小心,這些動作無法復原!"
- },
- "dangerZoneDescSingular": {
- "message": "小心,此操作無法復原!"
- },
"deauthorizeSessions": {
"message": "取消工作階段授權"
},
@@ -1854,6 +1878,27 @@
"deauthorizeSessionsWarning": {
"message": "接下來會登出目前的工作階段,並要求您重新登入。若您有設定兩步驟登入,也需重新驗證。其他裝置上的活動工作階段最多會保持一個小時。"
},
+ "newDeviceLoginProtection": {
+ "message": "New device login"
+ },
+ "turnOffNewDeviceLoginProtection": {
+ "message": "Turn off new device login protection"
+ },
+ "turnOnNewDeviceLoginProtection": {
+ "message": "Turn on new device login protection"
+ },
+ "turnOffNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device."
+ },
+ "turnOnNewDeviceLoginProtectionModalDesc": {
+ "message": "Proceed below to have bitwarden send you verification emails when you login from a new device."
+ },
+ "turnOffNewDeviceLoginProtectionWarning": {
+ "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login."
+ },
+ "accountNewDeviceLoginProtectionSaved": {
+ "message": "New device login protection changes saved"
+ },
"sessionsDeauthorized": {
"message": "已取消所有工作階段授權"
},
@@ -2155,8 +2200,20 @@
"manage": {
"message": "管理"
},
- "canManage": {
- "message": "可以管理"
+ "manageCollection": {
+ "message": "Manage collection"
+ },
+ "viewItems": {
+ "message": "View items"
+ },
+ "viewItemsHidePass": {
+ "message": "View items, hidden passwords"
+ },
+ "editItems": {
+ "message": "Edit items"
+ },
+ "editItemsHidePass": {
+ "message": "Edit items, hidden passwords"
},
"disable": {
"message": "停用"
@@ -2353,11 +2410,8 @@
"twoFactorU2fProblemReadingTryAgain": {
"message": "讀取安全鑰匙時發生問題。請再試一次。"
},
- "twoFactorWebAuthnWarning": {
- "message": "由於平台限制,無法於所有 Bitwarden 應用程式中使用 WebAuthn。請設定另一套兩步驟登入方式,以確保在 WebAuthn 無法使用時還能存取您的帳戶。支援的平台有:"
- },
- "twoFactorWebAuthnSupportWeb": {
- "message": "桌上型電腦/筆記型電腦上支援 WebAuthn 功能的瀏覽器(啟用了 FIDO U2F 的 Chrome、Opera、Vivaldi 或 Firefox)上的網頁版密碼庫和瀏覽器擴充套件。"
+ "twoFactorWebAuthnWarning1": {
+ "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used."
},
"twoFactorRecoveryYourCode": {
"message": "您的 Bitwarden 兩步驟登入復原碼"
@@ -4695,9 +4749,6 @@
"passwordGeneratorPolicyDesc": {
"message": "設定密碼產生器要求。"
},
- "passwordGeneratorPolicyInEffect": {
- "message": "一個或多個組織原則正影響密碼產生器設定。"
- },
"masterPasswordPolicyInEffect": {
"message": "一個或多個組織原則要求您的主密碼須符合下列條件:"
},
@@ -6666,15 +6717,6 @@
"message": "產生器",
"description": "Short for 'credential generator'."
},
- "whatWouldYouLikeToGenerate": {
- "message": "您想要產生什麼?"
- },
- "passwordType": {
- "message": "密碼類型"
- },
- "regenerateUsername": {
- "message": "重新產生使用者名稱"
- },
"generateUsername": {
"message": "產生使用者名稱"
},
@@ -6715,9 +6757,6 @@
}
}
},
- "usernameType": {
- "message": "使用者名稱類型"
- },
"plusAddressedEmail": {
"message": "加號地址電子郵件",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@@ -6731,6 +6770,9 @@
"catchallEmailDesc": {
"message": "使用您的網域設定的 Catch-all 收件匣。"
},
+ "useThisEmail": {
+ "message": "Use this email"
+ },
"random": {
"message": "隨機",
"description": "Generates domain-based username using random letters"
@@ -6934,9 +6976,6 @@
"message": "主機名稱",
"description": "Part of a URL."
},
- "apiAccessToken": {
- "message": "API 存取權杖"
- },
"deviceVerification": {
"message": "裝置驗證"
},
@@ -7648,18 +7687,6 @@
"noCollection": {
"message": "沒有分類"
},
- "canView": {
- "message": "可以檢視"
- },
- "canViewExceptPass": {
- "message": "可以檢視(除了密碼)"
- },
- "canEdit": {
- "message": "可以編輯"
- },
- "canEditExceptPass": {
- "message": "可以編輯(除了密碼)"
- },
"noCollectionsAdded": {
"message": "未新增任何分類"
},
@@ -8607,6 +8634,9 @@
"limitCollectionDeletionDesc": {
"message": "Limit collection deletion to owners and admins"
},
+ "limitItemDeletionDesc": {
+ "message": "Limit item deletion to members with the Can manage permission"
+ },
"allowAdminAccessToAllCollectionItemsDesc": {
"message": "擁有人與管理員可以管理所有分類與項目"
},
@@ -8656,9 +8686,6 @@
"message": "Self-host server URL",
"description": "Label for field requesting a self-hosted integration service URL"
},
- "aliasDomain": {
- "message": "別名網域"
- },
"alreadyHaveAccount": {
"message": "已經有一個帳戶了嗎?"
},
@@ -8720,11 +8747,11 @@
"readOnlyCollectionAccess": {
"message": "You do not have access to manage this collection."
},
- "grantAddAccessCollectionWarningTitle": {
- "message": "Missing Can Manage Permissions"
+ "grantManageCollectionWarningTitle": {
+ "message": "Missing Manage Collection Permissions"
},
- "grantAddAccessCollectionWarning": {
- "message": "Grant Can manage permissions to allow full collection management including deletion of collection."
+ "grantManageCollectionWarning": {
+ "message": "Grant Manage collection permissions to allow full collection management including deletion of collection."
},
"grantCollectionAccess": {
"message": "Grant groups or members access to this collection."
@@ -10070,6 +10097,15 @@
"descriptorCode": {
"message": "Descriptor code"
},
+ "cannotRemoveViewOnlyCollections": {
+ "message": "You cannot remove collections with View only permissions: $COLLECTIONS$",
+ "placeholders": {
+ "collections": {
+ "content": "$1",
+ "example": "Work, Personal"
+ }
+ }
+ },
"importantNotice": {
"message": "Important notice"
},
@@ -10260,5 +10296,54 @@
"example": "Acme c"
}
}
+ },
+ "accountDeprovisioningNotification": {
+ "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain."
+ },
+ "deleteManagedUserWarningDesc": {
+ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action."
+ },
+ "deleteManagedUserWarning": {
+ "message": "Delete is a new action!"
+ },
+ "seatsRemaining": {
+ "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.",
+ "placeholders": {
+ "remaining": {
+ "content": "$1",
+ "example": "5"
+ },
+ "total": {
+ "content": "$2",
+ "example": "10"
+ }
+ }
+ },
+ "existingOrganization": {
+ "message": "Existing organization"
+ },
+ "selectOrganizationProviderPortal": {
+ "message": "Select an organization to add to your Provider Portal."
+ },
+ "noOrganizations": {
+ "message": "There are no organizations to list"
+ },
+ "yourProviderSubscriptionCredit": {
+ "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription."
+ },
+ "doYouWantToAddThisOrg": {
+ "message": "Do you want to add this organization to $PROVIDER$?",
+ "placeholders": {
+ "provider": {
+ "content": "$1",
+ "example": "Cool MSP"
+ }
+ }
+ },
+ "addedExistingOrganization": {
+ "message": "Added existing organization"
+ },
+ "assignedExceedsAvailable": {
+ "message": "Assigned seats exceed available seats."
}
}
diff --git a/apps/web/src/scss/pages.scss b/apps/web/src/scss/pages.scss
index 684d45a1a66..1e5c233e326 100644
--- a/apps/web/src/scss/pages.scss
+++ b/apps/web/src/scss/pages.scss
@@ -1,37 +1,3 @@
-app-generator {
- #lengthRange {
- width: 100%;
- }
-
- .card-generated {
- .card-body {
- @include themify($themes) {
- background: themed("foregroundColor");
- }
- align-items: center;
- display: flex;
- flex-wrap: wrap;
- font-family: $font-family-monospace;
- font-size: $font-size-lg;
- justify-content: center;
- text-align: center;
- }
- }
-}
-
-app-password-generator-history {
- .list-group-item {
- line-height: 1;
- @include themify($themes) {
- background: themed("backgroundColor");
- }
-
- .password {
- font-family: $font-family-monospace;
- }
- }
-}
-
tools-import {
textarea {
height: 150px;
diff --git a/apps/web/tsconfig.build.json b/apps/web/tsconfig.build.json
index b10c4f9d899..39ab37efbb8 100644
--- a/apps/web/tsconfig.build.json
+++ b/apps/web/tsconfig.build.json
@@ -1,5 +1,8 @@
{
"extends": "./tsconfig.json",
"files": ["src/polyfills.ts", "src/main.ts", "src/theme.ts"],
- "include": ["src/connectors/*.ts", "../../libs/common/src/platform/services/**/*.worker.ts"]
+ "include": [
+ "src/connectors/*.ts",
+ "../../libs/common/src/key-management/crypto/services/encrypt.worker.ts"
+ ]
}
diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json
index c88b41d6f0e..68ac8c80085 100644
--- a/apps/web/tsconfig.json
+++ b/apps/web/tsconfig.json
@@ -18,8 +18,8 @@
"@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"],
"@bitwarden/generator-legacy": ["../../libs/tools/generator/extensions/legacy/src"],
"@bitwarden/generator-navigation": ["../../libs/tools/generator/extensions/navigation/src"],
- "@bitwarden/importer/core": ["../../libs/importer/src"],
- "@bitwarden/importer/ui": ["../../libs/importer/src/components"],
+ "@bitwarden/importer-core": ["../../libs/importer/src"],
+ "@bitwarden/importer-ui": ["../../libs/importer/src/components"],
"@bitwarden/key-management": ["../../libs/key-management/src"],
"@bitwarden/key-management-ui": ["../../libs/key-management-ui/src"],
"@bitwarden/platform": ["../../libs/platform/src"],
@@ -43,6 +43,6 @@
"src/connectors/*.ts",
"src/**/*.stories.ts",
"src/**/*.spec.ts",
- "../../libs/common/src/platform/services/**/*.worker.ts"
+ "../../libs/common/src/key-management/crypto/services/encrypt.worker.ts"
]
}
diff --git a/bitwarden_license/bit-cli/tsconfig.json b/bitwarden_license/bit-cli/tsconfig.json
index e3d6cc5c7b7..4a972b540a7 100644
--- a/bitwarden_license/bit-cli/tsconfig.json
+++ b/bitwarden_license/bit-cli/tsconfig.json
@@ -18,7 +18,7 @@
"@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"],
"@bitwarden/common/*": ["../../libs/common/src/*"],
- "@bitwarden/importer/core": ["../../libs/importer/src"],
+ "@bitwarden/importer-core": ["../../libs/importer/src"],
"@bitwarden/generator-core": ["../../libs/tools/generator/core/src"],
"@bitwarden/generator-legacy": ["../../libs/tools/generator/extensions/legacy/src"],
"@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"],
diff --git a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts
index e893b2dfe8c..448399a8bb0 100644
--- a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts
+++ b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts
@@ -4,8 +4,8 @@ import {
OrganizationUserApiService,
OrganizationUserResetPasswordDetailsResponse,
} from "@bitwarden/admin-console/common";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts
index 4c4507e5cb8..025b021f83d 100644
--- a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts
+++ b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts
@@ -4,7 +4,7 @@ import {
OrganizationUserApiService,
OrganizationUserResetPasswordDetailsResponse,
} from "@bitwarden/admin-console/common";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/models/password-health.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/models/password-health.ts
index 2260f9257ad..723d737d5bd 100644
--- a/bitwarden_license/bit-common/src/tools/reports/risk-insights/models/password-health.ts
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/models/password-health.ts
@@ -85,6 +85,7 @@ export type WeakPasswordScore = {
* How many times a password has been exposed
*/
export type ExposedPasswordDetail = {
+ cipherId: string;
exposedXTimes: number;
} | null;
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.spec.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.spec.ts
index 5b89a2abb1e..64f55ccf99f 100644
--- a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.spec.ts
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.spec.ts
@@ -4,7 +4,7 @@ import { fakeAsync, flush } from "@angular/core/testing";
import { mock } from "jest-mock-extended";
import { of } from "rxjs";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { CsprngArray } from "@bitwarden/common/types/csprng";
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.ts
index 00b4dc78dae..7db34757b96 100644
--- a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.ts
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/critical-apps.service.ts
@@ -13,7 +13,7 @@ import {
zip,
} from "rxjs";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { OrganizationId } from "@bitwarden/common/types/guid";
import { OrgKey } from "@bitwarden/common/types/key";
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-data.service.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-data.service.ts
index 668fb187251..386c6fd6865 100644
--- a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-data.service.ts
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-data.service.ts
@@ -28,6 +28,7 @@ export class RiskInsightsDataService {
dataLastUpdated$ = this.dataLastUpdatedSubject.asObservable();
openDrawer = false;
+ drawerInvokerId: string = "";
activeDrawerType: DrawerType = DrawerType.None;
atRiskMemberDetails: AtRiskMemberDetail[] = [];
appAtRiskMembers: AppAtRiskMembersDialogParams | null = null;
@@ -73,25 +74,35 @@ export class RiskInsightsDataService {
return this.activeDrawerType === drawerType;
};
- setDrawerForOrgAtRiskMembers = (atRiskMemberDetails: AtRiskMemberDetail[]): void => {
+ setDrawerForOrgAtRiskMembers = (
+ atRiskMemberDetails: AtRiskMemberDetail[],
+ invokerId: string = "",
+ ): void => {
this.resetDrawer(DrawerType.OrgAtRiskMembers);
this.activeDrawerType = DrawerType.OrgAtRiskMembers;
+ this.drawerInvokerId = invokerId;
this.atRiskMemberDetails = atRiskMemberDetails;
this.openDrawer = !this.openDrawer;
};
setDrawerForAppAtRiskMembers = (
atRiskMembersDialogParams: AppAtRiskMembersDialogParams,
+ invokerId: string = "",
): void => {
this.resetDrawer(DrawerType.None);
this.activeDrawerType = DrawerType.AppAtRiskMembers;
+ this.drawerInvokerId = invokerId;
this.appAtRiskMembers = atRiskMembersDialogParams;
this.openDrawer = !this.openDrawer;
};
- setDrawerForOrgAtRiskApps = (atRiskApps: AtRiskApplicationDetail[]): void => {
+ setDrawerForOrgAtRiskApps = (
+ atRiskApps: AtRiskApplicationDetail[],
+ invokerId: string = "",
+ ): void => {
this.resetDrawer(DrawerType.OrgAtRiskApps);
this.activeDrawerType = DrawerType.OrgAtRiskApps;
+ this.drawerInvokerId = invokerId;
this.atRiskAppDetails = atRiskApps;
this.openDrawer = !this.openDrawer;
};
@@ -109,5 +120,6 @@ export class RiskInsightsDataService {
this.atRiskMemberDetails = [];
this.appAtRiskMembers = null;
this.atRiskAppDetails = null;
+ this.drawerInvokerId = "";
};
}
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-report.service.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-report.service.ts
index c3bcc59eca5..027760f678c 100644
--- a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-report.service.ts
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/risk-insights-report.service.ts
@@ -175,6 +175,7 @@ export class RiskInsightsReportService {
): Promise {
const cipherHealthReports: CipherHealthReportDetail[] = [];
const passwordUseMap = new Map();
+ const exposedDetails = await this.findExposedPasswords(ciphers);
for (const cipher of ciphers) {
if (this.validateCipher(cipher)) {
const weakPassword = this.findWeakPassword(cipher);
@@ -189,7 +190,7 @@ export class RiskInsightsReportService {
passwordUseMap.set(cipher.login.password, 1);
}
- const exposedPassword = await this.findExposedPassword(cipher);
+ const exposedPassword = exposedDetails.find((x) => x.cipherId === cipher.id);
// Get the cipher members
const cipherMembers = memberDetails.filter((x) => x.cipherId === cipher.id);
@@ -255,13 +256,29 @@ export class RiskInsightsReportService {
return appReports;
}
- private async findExposedPassword(cipher: CipherView): Promise {
- const exposedCount = await this.auditService.passwordLeaked(cipher.login.password);
- if (exposedCount > 0) {
- const exposedDetail = { exposedXTimes: exposedCount } as ExposedPasswordDetail;
- return exposedDetail;
- }
- return null;
+ private async findExposedPasswords(ciphers: CipherView[]): Promise {
+ const exposedDetails: ExposedPasswordDetail[] = [];
+ const promises: Promise[] = [];
+
+ ciphers.forEach((ciph) => {
+ if (this.validateCipher(ciph)) {
+ const promise = this.auditService
+ .passwordLeaked(ciph.login.password)
+ .then((exposedCount) => {
+ if (exposedCount > 0) {
+ const detail = {
+ exposedXTimes: exposedCount,
+ cipherId: ciph.id,
+ } as ExposedPasswordDetail;
+ exposedDetails.push(detail);
+ }
+ });
+ promises.push(promise);
+ }
+ });
+ await Promise.all(promises);
+
+ return exposedDetails;
}
private findWeakPassword(cipher: CipherView): WeakPasswordDetail {
diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts
index ac8ad3112b9..744cf2c4674 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts
@@ -10,8 +10,8 @@ import { OrganizationAuthRequestApiService } from "@bitwarden/bit-common/admin-c
import { OrganizationAuthRequestService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request.service";
import { PendingAuthRequestView } from "@bitwarden/bit-common/admin-console/auth-requests/pending-auth-request.view";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/bulk-confirm-dialog.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/bulk-confirm-dialog.component.ts
index 6ab07cc0794..c5b949512d7 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/bulk-confirm-dialog.component.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/dialogs/bulk-confirm-dialog.component.ts
@@ -13,8 +13,8 @@ import { ProviderUserBulkConfirmRequest } from "@bitwarden/common/admin-console/
import { ProviderUserBulkRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-bulk.request";
import { ProviderUserBulkPublicKeyResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk-public-key.response";
import { ProviderUserBulkResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk.response";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { DialogService } from "@bitwarden/components";
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/members.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/members.component.ts
index 16f794bd6d2..03e47569a55 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/members.component.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/members.component.ts
@@ -15,8 +15,8 @@ import { ProviderUserStatusType, ProviderUserType } from "@bitwarden/common/admi
import { ProviderUserBulkRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-bulk.request";
import { ProviderUserConfirmRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-confirm.request";
import { ProviderUserUserDetailsResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user.response";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service";
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.html b/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.html
index a20dd1379e2..bf82fbd160b 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.html
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.html
@@ -37,25 +37,5 @@
>
-
- {{ "providerClientVaultPrivacyNotification" | i18n }}
-
- {{ "contactBitwardenSupport" | i18n }} .
-
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.ts
index 3f1a7ff3989..7e47da95e2b 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/providers-layout.component.ts
@@ -10,27 +10,15 @@ import { JslibModule } from "@bitwarden/angular/jslib.module";
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
import { ProviderStatusType } from "@bitwarden/common/admin-console/enums";
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
-import { BannerModule, IconModule, LinkModule } from "@bitwarden/components";
+import { IconModule } from "@bitwarden/components";
import { ProviderPortalLogo } from "@bitwarden/web-vault/app/admin-console/icons/provider-portal-logo";
import { WebLayoutModule } from "@bitwarden/web-vault/app/layouts/web-layout.module";
-import { ProviderClientVaultPrivacyBannerService } from "./services/provider-client-vault-privacy-banner.service";
-
@Component({
selector: "providers-layout",
templateUrl: "providers-layout.component.html",
standalone: true,
- imports: [
- CommonModule,
- RouterModule,
- JslibModule,
- WebLayoutModule,
- IconModule,
- LinkModule,
- BannerModule,
- ],
+ imports: [CommonModule, RouterModule, JslibModule, WebLayoutModule, IconModule],
})
export class ProvidersLayoutComponent implements OnInit, OnDestroy {
protected readonly logo = ProviderPortalLogo;
@@ -41,15 +29,9 @@ export class ProvidersLayoutComponent implements OnInit, OnDestroy {
protected isBillable: Observable;
protected canAccessBilling$: Observable;
- protected showProviderClientVaultPrivacyWarningBanner$ = this.configService.getFeatureFlag$(
- FeatureFlag.ProviderClientVaultPrivacyBanner,
- );
-
constructor(
private route: ActivatedRoute,
private providerService: ProviderService,
- private configService: ConfigService,
- protected providerClientVaultPrivacyBannerService: ProviderClientVaultPrivacyBannerService,
) {}
ngOnInit() {
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts
index 37cb9618b60..c720a94d5ec 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/providers.module.ts
@@ -6,7 +6,7 @@ import { FormsModule } from "@angular/forms";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { SearchModule } from "@bitwarden/components";
import { DangerZoneComponent } from "@bitwarden/web-vault/app/auth/settings/account/danger-zone.component";
-import { OrganizationPlansComponent, TaxInfoComponent } from "@bitwarden/web-vault/app/billing";
+import { OrganizationPlansComponent } from "@bitwarden/web-vault/app/billing";
import { OssModule } from "@bitwarden/web-vault/app/oss.module";
import {
@@ -17,6 +17,7 @@ import {
ProviderSubscriptionComponent,
ProviderSubscriptionStatusComponent,
} from "../../billing/providers";
+import { AddExistingOrganizationDialogComponent } from "../../billing/providers/clients/add-existing-organization-dialog.component";
import { AddOrganizationComponent } from "./clients/add-organization.component";
import { CreateOrganizationComponent } from "./clients/create-organization.component";
@@ -46,7 +47,6 @@ import { VerifyRecoverDeleteProviderComponent } from "./verify-recover-delete-pr
OrganizationPlansComponent,
SearchModule,
ProvidersLayoutComponent,
- TaxInfoComponent,
DangerZoneComponent,
ScrollingModule,
],
@@ -63,6 +63,7 @@ import { VerifyRecoverDeleteProviderComponent } from "./verify-recover-delete-pr
SetupProviderComponent,
UserAddEditComponent,
AddEditMemberDialogComponent,
+ AddExistingOrganizationDialogComponent,
CreateClientDialogComponent,
ManageClientNameDialogComponent,
ManageClientSubscriptionDialogComponent,
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/services/provider-client-vault-privacy-banner.service.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/services/provider-client-vault-privacy-banner.service.ts
deleted file mode 100644
index c347f5c2aae..00000000000
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/services/provider-client-vault-privacy-banner.service.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Injectable } from "@angular/core";
-
-import {
- StateProvider,
- AC_BANNERS_DISMISSED_DISK,
- UserKeyDefinition,
-} from "@bitwarden/common/platform/state";
-
-export const SHOW_BANNER_KEY = new UserKeyDefinition(
- AC_BANNERS_DISMISSED_DISK,
- "showProviderClientVaultPrivacyBanner",
- {
- deserializer: (b) => b,
- clearOn: [],
- },
-);
-
-/** Displays a banner warning provider users that client organization vaults
- * will soon become inaccessible directly. */
-@Injectable({ providedIn: "root" })
-export class ProviderClientVaultPrivacyBannerService {
- private _showBanner = this.stateProvider.getActive(SHOW_BANNER_KEY);
-
- showBanner$ = this._showBanner.state$;
-
- constructor(private stateProvider: StateProvider) {}
-
- async hideBanner() {
- await this._showBanner.update(() => false);
- }
-}
diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts
index 264b43aee9d..d3482ea67a5 100644
--- a/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts
+++ b/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts
@@ -1,15 +1,20 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Injectable } from "@angular/core";
+import { firstValueFrom, map } from "rxjs";
+import { switchMap } from "rxjs/operators";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { ProviderApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/provider/provider-api.service.abstraction";
import { OrganizationKeysRequest } from "@bitwarden/common/admin-console/models/request/organization-keys.request";
import { ProviderAddOrganizationRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-add-organization.request";
import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billing-api.service.abstraction";
import { PlanType } from "@bitwarden/common/billing/enums";
import { CreateClientOrganizationRequest } from "@bitwarden/common/billing/models/request/create-client-organization.request";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
+import { StateProvider } from "@bitwarden/common/platform/state";
+import { OrganizationId } from "@bitwarden/common/types/guid";
import { OrgKey } from "@bitwarden/common/types/key";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { KeyService } from "@bitwarden/key-management";
@@ -23,6 +28,8 @@ export class WebProviderService {
private i18nService: I18nService,
private encryptService: EncryptService,
private billingApiService: BillingApiServiceAbstraction,
+ private stateProvider: StateProvider,
+ private providerApiService: ProviderApiServiceAbstraction,
) {}
async addOrganizationToProvider(providerId: string, organizationId: string) {
@@ -40,6 +47,22 @@ export class WebProviderService {
return response;
}
+ async addOrganizationToProviderVNext(providerId: string, organizationId: string): Promise {
+ const orgKey = await firstValueFrom(
+ this.stateProvider.activeUserId$.pipe(
+ switchMap((userId) => this.keyService.orgKeys$(userId)),
+ map((organizationKeysById) => organizationKeysById[organizationId as OrganizationId]),
+ ),
+ );
+ const providerKey = await this.keyService.getProviderKey(providerId);
+ const encryptedOrgKey = await this.encryptService.encrypt(orgKey.key, providerKey);
+ await this.providerApiService.addOrganizationToProvider(providerId, {
+ key: encryptedOrgKey.encryptedString,
+ organizationId,
+ });
+ await this.syncService.fullSync(true);
+ }
+
async createClientOrganization(
providerId: string,
name: string,
diff --git a/bitwarden_license/bit-web/src/app/app.component.ts b/bitwarden_license/bit-web/src/app/app.component.ts
index 1e0f60e2cd2..dd814f5c0d2 100644
--- a/bitwarden_license/bit-web/src/app/app.component.ts
+++ b/bitwarden_license/bit-web/src/app/app.component.ts
@@ -20,17 +20,10 @@ export class AppComponent extends BaseAppComponent implements OnInit {
this.policyListService.addPolicies([
new MaximumVaultTimeoutPolicy(),
new DisablePersonalVaultExportPolicy(),
+ new FreeFamiliesSponsorshipPolicy(),
+ new ActivateAutofillPolicy(),
]);
- this.configService
- .getFeatureFlag(FeatureFlag.DisableFreeFamiliesSponsorship)
- .then((isFreeFamilyEnabled) => {
- if (isFreeFamilyEnabled) {
- this.policyListService.addPolicies([new FreeFamiliesSponsorshipPolicy()]);
- }
- this.policyListService.addPolicies([new ActivateAutofillPolicy()]);
- });
-
this.configService.getFeatureFlag(FeatureFlag.IdpAutoSubmitLogin).then((enabled) => {
if (
enabled &&
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.html b/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.html
new file mode 100644
index 00000000000..a22484ed92d
--- /dev/null
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.html
@@ -0,0 +1,73 @@
+
+
+ {{ "addExistingOrganization" | i18n }}
+
+
+
+ {{ "selectOrganizationProviderPortal" | i18n }}
+
+
+
+ | {{ "name" | i18n }} |
+ {{ "assigned" | i18n }} |
+
+
+
+
+ |
+
+ |
+
+ {{ addable.name }}
+
+ {{ "assignedExceedsAvailable" | i18n }}
+
+ |
+ {{ addable.seats }} |
+
+
+ {{ "next" | i18n }}
+
+ |
+
+
+
+
+ {{ "noOrganizations" | i18n }}
+
+
+
+ {{ "yourProviderSubscriptionCredit" | i18n }}
+ {{ "doYouWantToAddThisOrg" | i18n: dialogParams.provider.name }}
+
+ {{ "organization" | i18n }}: {{ selectedOrganization.name }}
+ {{ "billingPlan" | i18n }}: {{ selectedOrganization.plan }}
+ {{ "assignedSeats" | i18n }}: {{ selectedOrganization.seats }}
+
+
+
+
+
+ {{ "addOrganization" | i18n }}
+
+
+ {{ "close" | i18n }}
+
+
+
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts
new file mode 100644
index 00000000000..3df0693d091
--- /dev/null
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/add-existing-organization-dialog.component.ts
@@ -0,0 +1,82 @@
+import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog";
+import { Component, Inject, OnInit } from "@angular/core";
+
+import { ProviderApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/provider/provider-api.service.abstraction";
+import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
+import { AddableOrganizationResponse } from "@bitwarden/common/admin-console/models/response/addable-organization.response";
+import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
+import { DialogService, ToastService } from "@bitwarden/components";
+
+import { WebProviderService } from "../../../admin-console/providers/services/web-provider.service";
+
+export type AddExistingOrganizationDialogParams = {
+ provider: Provider;
+};
+
+export enum AddExistingOrganizationDialogResultType {
+ Closed = "closed",
+ Submitted = "submitted",
+}
+
+@Component({
+ templateUrl: "./add-existing-organization-dialog.component.html",
+})
+export class AddExistingOrganizationDialogComponent implements OnInit {
+ protected loading: boolean = true;
+
+ addableOrganizations: AddableOrganizationResponse[] = [];
+ selectedOrganization?: AddableOrganizationResponse;
+
+ protected readonly ResultType = AddExistingOrganizationDialogResultType;
+
+ constructor(
+ @Inject(DIALOG_DATA) protected dialogParams: AddExistingOrganizationDialogParams,
+ private dialogRef: DialogRef,
+ private i18nService: I18nService,
+ private providerApiService: ProviderApiServiceAbstraction,
+ private toastService: ToastService,
+ private webProviderService: WebProviderService,
+ ) {}
+
+ async ngOnInit() {
+ this.addableOrganizations = await this.providerApiService.getProviderAddableOrganizations(
+ this.dialogParams.provider.id,
+ );
+ this.loading = false;
+ }
+
+ addExistingOrganization = async (): Promise => {
+ if (this.selectedOrganization) {
+ await this.webProviderService.addOrganizationToProviderVNext(
+ this.dialogParams.provider.id,
+ this.selectedOrganization.id,
+ );
+
+ this.toastService.showToast({
+ variant: "success",
+ title: "",
+ message: this.i18nService.t("addedExistingOrganization"),
+ });
+
+ this.dialogRef.close(this.ResultType.Submitted);
+ }
+ };
+
+ selectOrganization(organizationId: string) {
+ this.selectedOrganization = this.addableOrganizations.find(
+ (organization) => organization.id === organizationId,
+ );
+ }
+
+ static open = (
+ dialogService: DialogService,
+ dialogConfig: DialogConfig<
+ AddExistingOrganizationDialogParams,
+ DialogRef
+ >,
+ ) =>
+ dialogService.open<
+ AddExistingOrganizationDialogResultType,
+ AddExistingOrganizationDialogParams
+ >(AddExistingOrganizationDialogComponent, dialogConfig);
+}
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.html b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.html
index 7c560e49579..077aeb6c124 100644
--- a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.html
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.html
@@ -1,9 +1,39 @@
-
-
- {{ "addNewOrganization" | i18n }}
-
+
+
+
+ {{ "add" | i18n }}
+
+
+
+
+ {{ "newClient" | i18n }}
+
+
+
+ {{ "existingOrganization" | i18n }}
+
+
+
+
+
+
+ {{ "addNewOrganization" | i18n }}
+
+
diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.ts
index ee2c541e72f..07434369122 100644
--- a/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.ts
+++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/manage-clients.component.ts
@@ -11,6 +11,8 @@ import { Provider } from "@bitwarden/common/admin-console/models/domain/provider
import { ProviderOrganizationOrganizationDetailsResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-organization.response";
import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions";
import { PlanResponse } from "@bitwarden/common/billing/models/response/plan.response";
+import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
+import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service";
import {
@@ -25,6 +27,10 @@ import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.mod
import { WebProviderService } from "../../../admin-console/providers/services/web-provider.service";
+import {
+ AddExistingOrganizationDialogComponent,
+ AddExistingOrganizationDialogResultType,
+} from "./add-existing-organization-dialog.component";
import {
CreateClientDialogResultType,
openCreateClientDialog,
@@ -62,6 +68,9 @@ export class ManageClientsComponent {
protected searchControl = new FormControl("", { nonNullable: true });
protected plans: PlanResponse[] = [];
+ protected addExistingOrgsFromProviderPortal$ = this.configService.getFeatureFlag$(
+ FeatureFlag.PM15179_AddExistingOrgsFromProviderPortal,
+ );
constructor(
private billingApiService: BillingApiServiceAbstraction,
@@ -73,6 +82,7 @@ export class ManageClientsComponent {
private toastService: ToastService,
private validationService: ValidationService,
private webProviderService: WebProviderService,
+ private configService: ConfigService,
) {
this.activatedRoute.queryParams.pipe(first(), takeUntilDestroyed()).subscribe((queryParams) => {
this.searchControl.setValue(queryParams.search);
@@ -111,19 +121,30 @@ export class ManageClientsComponent {
async load() {
this.provider = await firstValueFrom(this.providerService.get$(this.providerId));
-
this.isProviderAdmin = this.provider?.type === ProviderUserType.ProviderAdmin;
-
- const clients = (await this.billingApiService.getProviderClientOrganizations(this.providerId))
- .data;
-
- this.dataSource.data = clients;
-
+ this.dataSource.data = (
+ await this.billingApiService.getProviderClientOrganizations(this.providerId)
+ ).data;
this.plans = (await this.billingApiService.getPlans()).data;
-
this.loading = false;
}
+ addExistingOrganization = async () => {
+ if (this.provider) {
+ const reference = AddExistingOrganizationDialogComponent.open(this.dialogService, {
+ data: {
+ provider: this.provider,
+ },
+ });
+
+ const result = await lastValueFrom(reference.closed);
+
+ if (result === AddExistingOrganizationDialogResultType.Submitted) {
+ await this.load();
+ }
+ }
+ };
+
createClient = async () => {
const reference = openCreateClientDialog(this.dialogService, {
data: {
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/projects/project.service.ts b/bitwarden_license/bit-web/src/app/secrets-manager/projects/project.service.ts
index ee2395b3f83..8c9f894f8f6 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/projects/project.service.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/projects/project.service.ts
@@ -4,8 +4,8 @@ import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.spec.ts b/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.spec.ts
index a3d46d2ef2e..c761d73d4a1 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.spec.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.spec.ts
@@ -1,7 +1,7 @@
import { mock } from "jest-mock-extended";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.ts b/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.ts
index 950d3c42ccb..51c49d79f2d 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/secrets/secret.service.ts
@@ -4,7 +4,7 @@ import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access.service.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access.service.ts
index 8eb4a5120a2..773cb83e70a 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access.service.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access.service.ts
@@ -4,8 +4,8 @@ import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { KeyGenerationService } from "@bitwarden/common/platform/abstractions/key-generation.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.service.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.service.ts
index a85f5c5e09a..a56111bc655 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.service.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/service-account.service.ts
@@ -4,8 +4,8 @@ import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.spec.ts b/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.spec.ts
index fb0ab467a02..6b527d56502 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.spec.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.spec.ts
@@ -1,7 +1,7 @@
import { mock } from "jest-mock-extended";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.ts b/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.ts
index c5934067fd7..c9d63e61400 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/settings/services/sm-porting-api.service.ts
@@ -4,8 +4,8 @@ import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.spec.ts b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.spec.ts
index 4ae80d4decc..d6bc807686a 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.spec.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.spec.ts
@@ -3,7 +3,7 @@
import { mock } from "jest-mock-extended";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { CsprngArray } from "@bitwarden/common/types/csprng";
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.ts b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.ts
index 920e12ef0cf..5223135c17a 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/access-policies/access-policy.service.ts
@@ -4,8 +4,8 @@ import { Injectable } from "@angular/core";
import { Subject } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ListResponse } from "@bitwarden/common/models/response/list.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence.module.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence.module.ts
index 5f461ff6c49..8b78a7e8975 100644
--- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence.module.ts
+++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/access-intelligence.module.ts
@@ -10,7 +10,7 @@ import {
} from "@bitwarden/bit-common/tools/reports/risk-insights/services";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { AuditService } from "@bitwarden/common/abstractions/audit.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength/password-strength.service.abstraction";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { KeyService } from "@bitwarden/key-management";
diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html
index bcc15fbc8fc..c0eb8080070 100644
--- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html
+++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/all-applications.component.html
@@ -27,19 +27,25 @@
{{ "allApplications" | i18n }}
@@ -75,7 +81,11 @@
-
+
|
{
+ showOrgAtRiskMembers = async (invokerId: string) => {
const dialogData = this.reportService.generateAtRiskMemberList(this.dataSource.data);
- this.dataService.setDrawerForOrgAtRiskMembers(dialogData);
+ this.dataService.setDrawerForOrgAtRiskMembers(dialogData, invokerId);
};
- showOrgAtRiskApps = async () => {
+ showOrgAtRiskApps = async (invokerId: string) => {
const data = this.reportService.generateAtRiskApplicationList(this.dataSource.data);
- this.dataService.setDrawerForOrgAtRiskApps(data);
+ this.dataService.setDrawerForOrgAtRiskApps(data, invokerId);
};
onCheckboxChange(applicationName: string, event: Event) {
diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html
index 72e60c470b0..4dc4b7ffb1a 100644
--- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html
+++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.html
@@ -35,19 +35,27 @@
@@ -70,7 +78,11 @@
|
-
+
|
|
diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts
index 4d820a3cc66..f1fa38dd28f 100644
--- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts
+++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/critical-applications.component.ts
@@ -131,17 +131,17 @@ export class CriticalApplicationsComponent implements OnInit {
?.atRiskMemberDetails ?? [],
applicationName,
};
- this.dataService.setDrawerForAppAtRiskMembers(data);
+ this.dataService.setDrawerForAppAtRiskMembers(data, applicationName);
};
- showOrgAtRiskMembers = async () => {
+ showOrgAtRiskMembers = async (invokerId: string) => {
const data = this.reportService.generateAtRiskMemberList(this.dataSource.data);
- this.dataService.setDrawerForOrgAtRiskMembers(data);
+ this.dataService.setDrawerForOrgAtRiskMembers(data, invokerId);
};
- showOrgAtRiskApps = async () => {
+ showOrgAtRiskApps = async (invokerId: string) => {
const data = this.reportService.generateAtRiskApplicationList(this.dataSource.data);
- this.dataService.setDrawerForOrgAtRiskApps(data);
+ this.dataService.setDrawerForOrgAtRiskApps(data, invokerId);
};
trackByFunction(_: number, item: ApplicationHealthReportDetailWithCriticalFlag) {
diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html
index a368f5c0c18..12082e888b0 100644
--- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html
+++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.html
@@ -56,7 +56,11 @@
-
+
;
+
+export abstract class AdminTaskService {
+ /**
+ * Retrieves all tasks for a given organization.
+ * @param organizationId - The ID of the organization to retrieve tasks for.
+ * @param status - Optional. The status of the tasks to retrieve.
+ */
+ abstract getAllTasks(
+ organizationId: OrganizationId,
+ status?: SecurityTaskStatus | undefined,
+ ): Promise;
+
+ /**
+ * Creates multiple tasks for a given organization and sends out notifications to applicable users.
+ * @param organizationId - The ID of the organization to create tasks for.
+ * @param tasks - The tasks to create.
+ */
+ abstract bulkCreateTasks(
+ organizationId: OrganizationId,
+ tasks: CreateTasksRequest[],
+ ): Promise;
+}
diff --git a/bitwarden_license/bit-web/src/app/vault/services/default-admin-task.service.spec.ts b/bitwarden_license/bit-web/src/app/vault/services/default-admin-task.service.spec.ts
new file mode 100644
index 00000000000..49a4c16e159
--- /dev/null
+++ b/bitwarden_license/bit-web/src/app/vault/services/default-admin-task.service.spec.ts
@@ -0,0 +1,65 @@
+import { MockProxy, mock } from "jest-mock-extended";
+
+import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { CipherId, OrganizationId } from "@bitwarden/common/types/guid";
+import { SecurityTaskStatus, SecurityTaskType } from "@bitwarden/vault";
+
+import { CreateTasksRequest } from "./abstractions/admin-task.abstraction";
+import { DefaultAdminTaskService } from "./default-admin-task.service";
+
+describe("DefaultAdminTaskService", () => {
+ let defaultAdminTaskService: DefaultAdminTaskService;
+ let apiService: MockProxy;
+
+ beforeEach(() => {
+ apiService = mock();
+ defaultAdminTaskService = new DefaultAdminTaskService(apiService);
+ });
+
+ describe("getAllTasks", () => {
+ it("should call the api service with the correct parameters with status", async () => {
+ const organizationId = "orgId" as OrganizationId;
+ const status = SecurityTaskStatus.Pending;
+ const expectedUrl = `/tasks/organization?organizationId=${organizationId}&status=0`;
+
+ await defaultAdminTaskService.getAllTasks(organizationId, status);
+
+ expect(apiService.send).toHaveBeenCalledWith("GET", expectedUrl, null, true, true);
+ });
+
+ it("should call the api service with the correct parameters without status", async () => {
+ const organizationId = "orgId" as OrganizationId;
+ const expectedUrl = `/tasks/organization?organizationId=${organizationId}`;
+
+ await defaultAdminTaskService.getAllTasks(organizationId);
+
+ expect(apiService.send).toHaveBeenCalledWith("GET", expectedUrl, null, true, true);
+ });
+ });
+
+ describe("bulkCreateTasks", () => {
+ it("should call the api service with the correct parameters", async () => {
+ const organizationId = "orgId" as OrganizationId;
+ const tasks: CreateTasksRequest[] = [
+ {
+ cipherId: "cipherId-1" as CipherId,
+ type: SecurityTaskType.UpdateAtRiskCredential,
+ },
+ {
+ cipherId: "cipherId-2" as CipherId,
+ type: SecurityTaskType.UpdateAtRiskCredential,
+ },
+ ];
+
+ await defaultAdminTaskService.bulkCreateTasks(organizationId, tasks);
+
+ expect(apiService.send).toHaveBeenCalledWith(
+ "POST",
+ `/tasks/${organizationId}/bulk-create`,
+ { tasks },
+ true,
+ true,
+ );
+ });
+ });
+});
diff --git a/bitwarden_license/bit-web/src/app/vault/services/default-admin-task.service.ts b/bitwarden_license/bit-web/src/app/vault/services/default-admin-task.service.ts
new file mode 100644
index 00000000000..520fb744486
--- /dev/null
+++ b/bitwarden_license/bit-web/src/app/vault/services/default-admin-task.service.ts
@@ -0,0 +1,54 @@
+import { Injectable } from "@angular/core";
+
+import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { ListResponse } from "@bitwarden/common/models/response/list.response";
+import { OrganizationId } from "@bitwarden/common/types/guid";
+import {
+ SecurityTask,
+ SecurityTaskData,
+ SecurityTaskResponse,
+ SecurityTaskStatus,
+} from "@bitwarden/vault";
+
+import { AdminTaskService, CreateTasksRequest } from "./abstractions/admin-task.abstraction";
+
+@Injectable()
+export class DefaultAdminTaskService implements AdminTaskService {
+ constructor(private apiService: ApiService) {}
+
+ async getAllTasks(
+ organizationId: OrganizationId,
+ status?: SecurityTaskStatus | undefined,
+ ): Promise {
+ const queryParams = new URLSearchParams();
+
+ queryParams.append("organizationId", organizationId);
+ if (status !== undefined) {
+ queryParams.append("status", status.toString());
+ }
+
+ const r = await this.apiService.send(
+ "GET",
+ `/tasks/organization?${queryParams.toString()}`,
+ null,
+ true,
+ true,
+ );
+ const response = new ListResponse(r, SecurityTaskResponse);
+
+ return response.data.map((d) => new SecurityTask(new SecurityTaskData(d)));
+ }
+
+ async bulkCreateTasks(
+ organizationId: OrganizationId,
+ tasks: CreateTasksRequest[],
+ ): Promise {
+ await this.apiService.send(
+ "POST",
+ `/tasks/${organizationId}/bulk-create`,
+ { tasks },
+ true,
+ true,
+ );
+ }
+}
diff --git a/bitwarden_license/bit-web/tsconfig.build.json b/bitwarden_license/bit-web/tsconfig.build.json
index 9bebbeb5061..6313ce27863 100644
--- a/bitwarden_license/bit-web/tsconfig.build.json
+++ b/bitwarden_license/bit-web/tsconfig.build.json
@@ -9,6 +9,6 @@
],
"include": [
"../../apps/web/src/connectors/*.ts",
- "../../libs/common/src/platform/services/**/*.worker.ts"
+ "../../libs/common/src/key-management/crypto/services/encrypt.worker.ts"
]
}
diff --git a/bitwarden_license/bit-web/tsconfig.json b/bitwarden_license/bit-web/tsconfig.json
index a2f9c4608c1..82e0b7f57fa 100644
--- a/bitwarden_license/bit-web/tsconfig.json
+++ b/bitwarden_license/bit-web/tsconfig.json
@@ -21,8 +21,8 @@
"../../libs/tools/export/vault-export/vault-export-core/src"
],
"@bitwarden/vault-export-ui": ["../../libs/tools/export/vault-export/vault-export-ui/src"],
- "@bitwarden/importer/core": ["../../libs/importer/src"],
- "@bitwarden/importer/ui": ["../../libs/importer/src/components"],
+ "@bitwarden/importer-core": ["../../libs/importer/src"],
+ "@bitwarden/importer-ui": ["../../libs/importer/src/components"],
"@bitwarden/key-management": ["../../libs/key-management/src"],
"@bitwarden/key-management-ui": ["../../libs/key-management-ui/src"],
"@bitwarden/platform": ["../../libs/platform/src"],
@@ -46,7 +46,7 @@
"../../apps/web/src/connectors/*.ts",
"../../apps/web/src/**/*.stories.ts",
"../../apps/web/src/**/*.spec.ts",
- "../../libs/common/src/platform/services/**/*.worker.ts",
+ "../../libs/common/src/key-management/crypto/services/encrypt.worker.ts",
"src/**/*.stories.ts",
"src/**/*.spec.ts"
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 514d1ccf0be..2d7c91521f9 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -11,6 +11,8 @@ import rxjs from "eslint-plugin-rxjs";
import angularRxjs from "eslint-plugin-rxjs-angular";
import storybook from "eslint-plugin-storybook";
+import platformPlugins from "./libs/eslint/platform/index.mjs";
+
export default tseslint.config(
...storybook.configs["flat/recommended"],
{
@@ -28,6 +30,7 @@ export default tseslint.config(
plugins: {
rxjs: rxjs,
"rxjs-angular": angularRxjs,
+ "@bitwarden/platform": platformPlugins,
},
languageOptions: {
parserOptions: {
@@ -66,7 +69,7 @@ export default tseslint.config(
"@angular-eslint/no-outputs-metadata-property": 0,
"@angular-eslint/use-lifecycle-interface": "error",
"@angular-eslint/use-pipe-transform-interface": 0,
-
+ "@bitwarden/platform/required-using": "error",
"@typescript-eslint/explicit-member-accessibility": ["error", { accessibility: "no-public" }],
"@typescript-eslint/no-explicit-any": "off", // TODO: This should be re-enabled
"@typescript-eslint/no-floating-promises": "error",
diff --git a/jest.config.js b/jest.config.js
index ccde758dbc9..e8815f92ffb 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -30,6 +30,7 @@ module.exports = {
"/libs/billing/jest.config.js",
"/libs/common/jest.config.js",
"/libs/components/jest.config.js",
+ "/libs/eslint/jest.config.js",
"/libs/tools/export/vault-export/vault-export-core/jest.config.js",
"/libs/tools/generator/core/jest.config.js",
"/libs/tools/generator/components/jest.config.js",
diff --git a/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts b/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts
index 6aafbaf4678..890353d9039 100644
--- a/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts
+++ b/libs/admin-console/src/common/collections/services/default-collection-admin.service.ts
@@ -2,7 +2,7 @@
// @ts-strict-ignore
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { SelectionReadOnlyRequest } from "@bitwarden/common/admin-console/models/request/selection-read-only.request";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { KeyService } from "@bitwarden/key-management";
diff --git a/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts b/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts
index a230a20b2e3..7fe81ade4d2 100644
--- a/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts
+++ b/libs/admin-console/src/common/collections/services/default-collection.service.spec.ts
@@ -1,7 +1,7 @@
import { mock } from "jest-mock-extended";
import { firstValueFrom, of } from "rxjs";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
diff --git a/libs/admin-console/src/common/collections/services/default-collection.service.ts b/libs/admin-console/src/common/collections/services/default-collection.service.ts
index 4070c92f27c..da50a25886e 100644
--- a/libs/admin-console/src/common/collections/services/default-collection.service.ts
+++ b/libs/admin-console/src/common/collections/services/default-collection.service.ts
@@ -3,7 +3,7 @@
import { combineLatest, firstValueFrom, map, Observable, of, switchMap } from "rxjs";
import { Jsonify } from "type-fest";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import {
diff --git a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts
index 048a4733948..9700fcb695a 100644
--- a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts
+++ b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.spec.ts
@@ -1,7 +1,7 @@
import { mock, MockProxy } from "jest-mock-extended";
import { first, firstValueFrom, of, ReplaySubject, takeWhile } from "rxjs";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
diff --git a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts
index 2d5a083592b..0ef8ae99ab3 100644
--- a/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts
+++ b/libs/admin-console/src/common/collections/services/default-vnext-collection.service.ts
@@ -2,7 +2,7 @@
// @ts-strict-ignore
import { combineLatest, filter, firstValueFrom, map } from "rxjs";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { StateProvider, DerivedState } from "@bitwarden/common/platform/state";
diff --git a/libs/angular/src/admin-console/components/collections.component.ts b/libs/angular/src/admin-console/components/collections.component.ts
index 52a22ac2946..5f39966468f 100644
--- a/libs/angular/src/admin-console/components/collections.component.ts
+++ b/libs/angular/src/admin-console/components/collections.component.ts
@@ -7,9 +7,11 @@ import { CollectionService, CollectionView } from "@bitwarden/admin-console/comm
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
+import { UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { Cipher } from "@bitwarden/common/vault/models/domain/cipher";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
@@ -45,11 +47,9 @@ export class CollectionsComponent implements OnInit {
}
async load() {
- this.cipherDomain = await this.loadCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ this.cipherDomain = await this.loadCipher(activeUserId);
this.collectionIds = this.loadCipherCollections();
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
this.cipher = await this.cipherDomain.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(this.cipherDomain, activeUserId),
);
@@ -95,7 +95,8 @@ export class CollectionsComponent implements OnInit {
}
this.cipherDomain.collectionIds = selectedCollectionIds;
try {
- this.formPromise = this.saveCollections();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ this.formPromise = this.saveCollections(activeUserId);
await this.formPromise;
this.onSavedCollections.emit();
this.toastService.showToast({
@@ -114,8 +115,8 @@ export class CollectionsComponent implements OnInit {
}
}
- protected loadCipher() {
- return this.cipherService.get(this.cipherId);
+ protected loadCipher(userId: UserId) {
+ return this.cipherService.get(this.cipherId, userId);
}
protected loadCipherCollections() {
@@ -129,7 +130,7 @@ export class CollectionsComponent implements OnInit {
);
}
- protected saveCollections() {
- return this.cipherService.saveCollectionsWithServer(this.cipherDomain);
+ protected saveCollections(userId: UserId) {
+ return this.cipherService.saveCollectionsWithServer(this.cipherDomain, userId);
}
}
diff --git a/libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts b/libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts
index ca3906cead3..32396c878d9 100644
--- a/libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts
+++ b/libs/angular/src/auth/components/base-login-decryption-options-v1.component.ts
@@ -195,7 +195,7 @@ export class BaseLoginDecryptionOptionsComponentV1 implements OnInit, OnDestroy
async loadNewUserData() {
const autoEnrollStatus$ = defer(() =>
- this.ssoLoginService.getActiveUserOrganizationSsoIdentifier(),
+ this.ssoLoginService.getActiveUserOrganizationSsoIdentifier(this.activeAccountId),
).pipe(
switchMap((organizationIdentifier) => {
if (organizationIdentifier == undefined) {
diff --git a/libs/angular/src/auth/components/environment-selector.component.html b/libs/angular/src/auth/components/environment-selector.component.html
index 786afe40371..19f49f73dd2 100644
--- a/libs/angular/src/auth/components/environment-selector.component.html
+++ b/libs/angular/src/auth/components/environment-selector.component.html
@@ -3,7 +3,7 @@
selectedRegion: selectedRegion$ | async,
} as data"
>
-
+
{{ "accessing" | i18n }}:
-
+
{{ data.selectedRegion.domain }}
@@ -35,9 +35,9 @@
(backdropClick)="isOpen = false"
(detach)="close()"
>
-
+
{
+ this.webVaultUrl = env.getWebVaultUrl();
+ this.deviceManagementUrl = `${this.webVaultUrl}/#/settings/security/device-management`;
+ });
+
// Gets signalR push notification
// Only fires on approval to prevent enumeration
this.authRequestService.authRequestPushNotification$
diff --git a/libs/angular/src/auth/components/register.component.ts b/libs/angular/src/auth/components/register.component.ts
deleted file mode 100644
index e4787aa8c01..00000000000
--- a/libs/angular/src/auth/components/register.component.ts
+++ /dev/null
@@ -1,342 +0,0 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
-import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core";
-import { AbstractControl, UntypedFormBuilder, ValidatorFn, Validators } from "@angular/forms";
-import { Router } from "@angular/router";
-
-import { LoginStrategyServiceAbstraction, PasswordLoginCredentials } from "@bitwarden/auth/common";
-import { ApiService } from "@bitwarden/common/abstractions/api.service";
-import { AuditService } from "@bitwarden/common/abstractions/audit.service";
-import { RegisterResponse } from "@bitwarden/common/auth/models/response/register.response";
-import { KeysRequest } from "@bitwarden/common/models/request/keys.request";
-import { ReferenceEventRequest } from "@bitwarden/common/models/request/reference-event.request";
-import { RegisterRequest } from "@bitwarden/common/models/request/register.request";
-import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
-import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
-import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
-import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
-import { Utils } from "@bitwarden/common/platform/misc/utils";
-import { DialogService, ToastService } from "@bitwarden/components";
-import { DEFAULT_KDF_CONFIG, KeyService } from "@bitwarden/key-management";
-
-import {
- AllValidationErrors,
- FormValidationErrorsService,
-} from "../../platform/abstractions/form-validation-errors.service";
-import { PasswordColorText } from "../../tools/password-strength/password-strength.component";
-import { InputsFieldMatch } from "../validators/inputs-field-match.validator";
-
-import { CaptchaProtectedComponent } from "./captcha-protected.component";
-
-@Directive()
-export class RegisterComponent extends CaptchaProtectedComponent implements OnInit {
- @Input() isInTrialFlow = false;
- @Output() createdAccount = new EventEmitter();
-
- showPassword = false;
- formPromise: Promise;
- referenceData: ReferenceEventRequest;
- showTerms = true;
- showErrorSummary = false;
- passwordStrengthResult: any;
- characterMinimumMessage: string;
- minimumLength = Utils.minimumPasswordLength;
- color: string;
- text: string;
-
- formGroup = this.formBuilder.group(
- {
- email: ["", [Validators.required, Validators.email]],
- name: [""],
- masterPassword: ["", [Validators.required, Validators.minLength(this.minimumLength)]],
- confirmMasterPassword: ["", [Validators.required, Validators.minLength(this.minimumLength)]],
- hint: [
- null,
- [
- InputsFieldMatch.validateInputsDoesntMatch(
- "masterPassword",
- this.i18nService.t("hintEqualsPassword"),
- ),
- ],
- ],
- checkForBreaches: [true],
- acceptPolicies: [false, [this.acceptPoliciesValidation()]],
- },
- {
- validator: InputsFieldMatch.validateFormInputsMatch(
- "masterPassword",
- "confirmMasterPassword",
- this.i18nService.t("masterPassDoesntMatch"),
- ),
- },
- );
-
- protected successRoute = "login";
-
- protected accountCreated = false;
-
- protected captchaBypassToken: string = null;
-
- // allows for extending classes to modify the register request before sending
- // currently used by web to add organization invitation details
- protected modifyRegisterRequest: (request: RegisterRequest) => Promise;
-
- constructor(
- protected formValidationErrorService: FormValidationErrorsService,
- protected formBuilder: UntypedFormBuilder,
- protected loginStrategyService: LoginStrategyServiceAbstraction,
- protected router: Router,
- i18nService: I18nService,
- protected keyService: KeyService,
- protected apiService: ApiService,
- platformUtilsService: PlatformUtilsService,
- environmentService: EnvironmentService,
- protected logService: LogService,
- protected auditService: AuditService,
- protected dialogService: DialogService,
- protected toastService: ToastService,
- ) {
- super(environmentService, i18nService, platformUtilsService, toastService);
- this.showTerms = !platformUtilsService.isSelfHost();
- this.characterMinimumMessage = this.i18nService.t("characterMinimum", this.minimumLength);
- }
-
- async ngOnInit() {
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.setupCaptcha();
- }
-
- async submit(showToast = true) {
- let email = this.formGroup.value.email;
- email = email.trim().toLowerCase();
- let name = this.formGroup.value.name;
- name = name === "" ? null : name; // Why do we do this?
- const masterPassword = this.formGroup.value.masterPassword;
- try {
- if (!this.accountCreated) {
- const registerResponse = await this.registerAccount(
- await this.buildRegisterRequest(email, masterPassword, name),
- showToast,
- );
- if (!registerResponse.successful) {
- return;
- }
- this.captchaBypassToken = registerResponse.captchaBypassToken;
- this.accountCreated = true;
- }
- if (this.isInTrialFlow) {
- if (!this.accountCreated) {
- this.toastService.showToast({
- variant: "success",
- title: null,
- message: this.i18nService.t("trialAccountCreated"),
- });
- }
- const loginResponse = await this.logIn(email, masterPassword, this.captchaBypassToken);
- if (loginResponse.captchaRequired) {
- return;
- }
- this.createdAccount.emit(this.formGroup.value.email);
- } else {
- this.toastService.showToast({
- variant: "success",
- title: null,
- message: this.i18nService.t("newAccountCreated"),
- });
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.router.navigate([this.successRoute], { queryParams: { email: email } });
- }
- } catch (e) {
- this.logService.error(e);
- }
- }
-
- togglePassword() {
- this.showPassword = !this.showPassword;
- }
-
- getStrengthResult(result: any) {
- this.passwordStrengthResult = result;
- }
-
- getPasswordScoreText(event: PasswordColorText) {
- this.color = event.color;
- this.text = event.text;
- }
-
- private getErrorToastMessage() {
- const error: AllValidationErrors = this.formValidationErrorService
- .getFormValidationErrors(this.formGroup.controls)
- .shift();
-
- if (error) {
- switch (error.errorName) {
- case "email":
- return this.i18nService.t("invalidEmail");
- case "inputsDoesntMatchError":
- return this.i18nService.t("masterPassDoesntMatch");
- case "inputsMatchError":
- return this.i18nService.t("hintEqualsPassword");
- case "minlength":
- return this.i18nService.t("masterPasswordMinlength", Utils.minimumPasswordLength);
- default:
- return this.i18nService.t(this.errorTag(error));
- }
- }
-
- return;
- }
-
- private errorTag(error: AllValidationErrors): string {
- const name = error.errorName.charAt(0).toUpperCase() + error.errorName.slice(1);
- return `${error.controlName}${name}`;
- }
-
- //validation would be ignored on selfhosted
- private acceptPoliciesValidation(): ValidatorFn {
- return (control: AbstractControl) => {
- const ctrlValue = control.value;
-
- return !ctrlValue && this.showTerms ? { required: true } : null;
- };
- }
-
- private async validateRegistration(showToast: boolean): Promise<{ isValid: boolean }> {
- this.formGroup.markAllAsTouched();
- this.showErrorSummary = true;
-
- if (this.formGroup.get("acceptPolicies").hasError("required")) {
- this.toastService.showToast({
- variant: "error",
- title: this.i18nService.t("errorOccurred"),
- message: this.i18nService.t("acceptPoliciesRequired"),
- });
- return { isValid: false };
- }
-
- //web
- if (this.formGroup.invalid && !showToast) {
- return { isValid: false };
- }
-
- //desktop, browser
- if (this.formGroup.invalid && showToast) {
- const errorText = this.getErrorToastMessage();
- this.toastService.showToast({
- variant: "error",
- title: this.i18nService.t("errorOccurred"),
- message: errorText,
- });
- return { isValid: false };
- }
-
- const passwordWeak =
- this.passwordStrengthResult != null && this.passwordStrengthResult.score < 3;
- const passwordLeak =
- this.formGroup.controls.checkForBreaches.value &&
- (await this.auditService.passwordLeaked(this.formGroup.controls.masterPassword.value)) > 0;
-
- if (passwordWeak && passwordLeak) {
- const result = await this.dialogService.openSimpleDialog({
- title: { key: "weakAndExposedMasterPassword" },
- content: { key: "weakAndBreachedMasterPasswordDesc" },
- type: "warning",
- });
-
- if (!result) {
- return { isValid: false };
- }
- } else if (passwordWeak) {
- const result = await this.dialogService.openSimpleDialog({
- title: { key: "weakMasterPassword" },
- content: { key: "weakMasterPasswordDesc" },
- type: "warning",
- });
-
- if (!result) {
- return { isValid: false };
- }
- } else if (passwordLeak) {
- const result = await this.dialogService.openSimpleDialog({
- title: { key: "exposedMasterPassword" },
- content: { key: "exposedMasterPasswordDesc" },
- type: "warning",
- });
-
- if (!result) {
- return { isValid: false };
- }
- }
-
- return { isValid: true };
- }
-
- private async buildRegisterRequest(
- email: string,
- masterPassword: string,
- name: string,
- ): Promise {
- const hint = this.formGroup.value.hint;
- const kdfConfig = DEFAULT_KDF_CONFIG;
- const key = await this.keyService.makeMasterKey(masterPassword, email, kdfConfig);
- const newUserKey = await this.keyService.makeUserKey(key);
- const masterKeyHash = await this.keyService.hashMasterKey(masterPassword, key);
- const keys = await this.keyService.makeKeyPair(newUserKey[0]);
- const request = new RegisterRequest(
- email,
- name,
- masterKeyHash,
- hint,
- newUserKey[1].encryptedString,
- this.referenceData,
- this.captchaToken,
- kdfConfig.kdfType,
- kdfConfig.iterations,
- );
- request.keys = new KeysRequest(keys[0], keys[1].encryptedString);
- if (this.modifyRegisterRequest) {
- await this.modifyRegisterRequest(request);
- }
- return request;
- }
-
- private async registerAccount(
- request: RegisterRequest,
- showToast: boolean,
- ): Promise<{ successful: boolean; captchaBypassToken?: string }> {
- if (!(await this.validateRegistration(showToast)).isValid) {
- return { successful: false };
- }
- this.formPromise = this.apiService.postRegister(request);
- try {
- const response = await this.formPromise;
- return { successful: true, captchaBypassToken: response.captchaBypassToken };
- } catch (e) {
- if (this.handleCaptchaRequired(e)) {
- return { successful: false };
- } else {
- throw e;
- }
- }
- }
-
- private async logIn(
- email: string,
- masterPassword: string,
- captchaBypassToken: string,
- ): Promise<{ captchaRequired: boolean }> {
- const credentials = new PasswordLoginCredentials(
- email,
- masterPassword,
- captchaBypassToken,
- null,
- );
- const loginResponse = await this.loginStrategyService.logIn(credentials);
- if (this.handleCaptchaRequired(loginResponse)) {
- return { captchaRequired: true };
- }
- return { captchaRequired: false };
- }
-}
diff --git a/libs/angular/src/auth/components/set-password.component.ts b/libs/angular/src/auth/components/set-password.component.ts
index 13d1a4f4131..de079a7ebca 100644
--- a/libs/angular/src/auth/components/set-password.component.ts
+++ b/libs/angular/src/auth/components/set-password.component.ts
@@ -21,8 +21,8 @@ import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth
import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/sso-login.service.abstraction";
import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason";
import { SetPasswordRequest } from "@bitwarden/common/auth/models/request/set-password.request";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { KeysRequest } from "@bitwarden/common/models/request/keys.request";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -47,7 +47,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
resetPasswordAutoEnroll = false;
onSuccessfulChangePassword: () => Promise;
successRoute = "vault";
- userId: UserId;
+ activeUserId: UserId;
forceSetPasswordReason: ForceSetPasswordReason = ForceSetPasswordReason.None;
ForceSetPasswordReason = ForceSetPasswordReason;
@@ -96,10 +96,10 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
await this.syncService.fullSync(true);
this.syncLoading = false;
- this.userId = (await firstValueFrom(this.accountService.activeAccount$))?.id;
+ this.activeUserId = (await firstValueFrom(this.accountService.activeAccount$))?.id;
this.forceSetPasswordReason = await firstValueFrom(
- this.masterPasswordService.forceSetPasswordReason$(this.userId),
+ this.masterPasswordService.forceSetPasswordReason$(this.activeUserId),
);
this.route.queryParams
@@ -111,7 +111,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
} else {
// Try to get orgSsoId from state as fallback
// Note: this is primarily for the TDE user w/out MP obtains admin MP reset permission scenario.
- return this.ssoLoginService.getActiveUserOrganizationSsoIdentifier();
+ return this.ssoLoginService.getActiveUserOrganizationSsoIdentifier(this.activeUserId);
}
}),
filter((orgSsoId) => orgSsoId != null),
@@ -167,10 +167,10 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
// in case we have a local private key, and are not sure whether it has been posted to the server, we post the local private key instead of generating a new one
const existingUserPrivateKey = (await firstValueFrom(
- this.keyService.userPrivateKey$(this.userId),
+ this.keyService.userPrivateKey$(this.activeUserId),
)) as Uint8Array;
const existingUserPublicKey = await firstValueFrom(
- this.keyService.userPublicKey$(this.userId),
+ this.keyService.userPublicKey$(this.activeUserId),
);
if (existingUserPrivateKey != null && existingUserPublicKey != null) {
const existingUserPublicKeyB64 = Utils.fromBufferToB64(existingUserPublicKey);
@@ -217,7 +217,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
return this.organizationUserApiService.putOrganizationUserResetPasswordEnrollment(
this.orgId,
- this.userId,
+ this.activeUserId,
resetRequest,
);
});
@@ -260,7 +260,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
// Clear force set password reason to allow navigation back to vault.
await this.masterPasswordService.setForceSetPasswordReason(
ForceSetPasswordReason.None,
- this.userId,
+ this.activeUserId,
);
// User now has a password so update account decryption options in state
@@ -269,9 +269,9 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
);
userDecryptionOpts.hasMasterPassword = true;
await this.userDecryptionOptionsService.setUserDecryptionOptions(userDecryptionOpts);
- await this.kdfConfigService.setKdfConfig(this.userId, this.kdfConfig);
- await this.masterPasswordService.setMasterKey(masterKey, this.userId);
- await this.keyService.setUserKey(userKey[0], this.userId);
+ await this.kdfConfigService.setKdfConfig(this.activeUserId, this.kdfConfig);
+ await this.masterPasswordService.setMasterKey(masterKey, this.activeUserId);
+ await this.keyService.setUserKey(userKey[0], this.activeUserId);
// Set private key only for new JIT provisioned users in MP encryption orgs
// Existing TDE users will have private key set on sync or on login
@@ -280,7 +280,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
this.forceSetPasswordReason !=
ForceSetPasswordReason.TdeUserWithoutPasswordHasPasswordResetPermission
) {
- await this.keyService.setPrivateKey(keyPair[1].encryptedString, this.userId);
+ await this.keyService.setPrivateKey(keyPair[1].encryptedString, this.activeUserId);
}
const localMasterKeyHash = await this.keyService.hashMasterKey(
@@ -288,6 +288,6 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
masterKey,
HashPurpose.LocalAuthorization,
);
- await this.masterPasswordService.setMasterKeyHash(localMasterKeyHash, this.userId);
+ await this.masterPasswordService.setMasterKeyHash(localMasterKeyHash, this.activeUserId);
}
}
diff --git a/libs/angular/src/auth/components/sso.component.ts b/libs/angular/src/auth/components/sso.component.ts
index 6c13809566a..5f5e53d8efe 100644
--- a/libs/angular/src/auth/components/sso.component.ts
+++ b/libs/angular/src/auth/components/sso.component.ts
@@ -226,7 +226,8 @@ export class SsoComponent implements OnInit {
// - TDE login decryption options component
// - Browser SSO on extension open
// Note: you cannot set this in state before 2FA b/c there won't be an account in state.
- await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(orgSsoIdentifier);
+ const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id;
+ await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(orgSsoIdentifier, userId);
// Users enrolled in admin acct recovery can be forced to set a new password after
// having the admin set a temp password for them (affects TDE & standard users)
diff --git a/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.html b/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.html
index 8462a18ac2e..087ecd2764e 100644
--- a/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.html
+++ b/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.html
@@ -69,7 +69,7 @@
diff --git a/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.ts b/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.ts
index 6aca189a79e..3e59e4a29b9 100644
--- a/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.ts
+++ b/libs/angular/src/auth/components/two-factor-auth/two-factor-auth.component.ts
@@ -214,7 +214,7 @@ export class TwoFactorAuthComponent extends CaptchaProtectedComponent implements
}
}
- async selectOtherTwofactorMethod() {
+ async selectOtherTwoFactorMethod() {
const dialogRef = TwoFactorOptionsComponent.open(this.dialogService);
const response: TwoFactorOptionsDialogResultType = await lastValueFrom(dialogRef.closed);
if (response.result === TwoFactorOptionsDialogResult.Provider) {
@@ -262,7 +262,8 @@ export class TwoFactorAuthComponent extends CaptchaProtectedComponent implements
// Save off the OrgSsoIdentifier for use in the TDE flows
// - TDE login decryption options component
// - Browser SSO on extension open
- await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(this.orgIdentifier);
+ const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id;
+ await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(this.orgIdentifier, userId);
this.loginEmailService.clearValues();
// note: this flow affects both TDE & standard users
diff --git a/libs/angular/src/auth/components/two-factor.component.ts b/libs/angular/src/auth/components/two-factor.component.ts
index fd5cae506ec..0a3c3cc4a2e 100644
--- a/libs/angular/src/auth/components/two-factor.component.ts
+++ b/libs/angular/src/auth/components/two-factor.component.ts
@@ -102,6 +102,7 @@ export class TwoFactorComponent extends CaptchaProtectedComponent implements OnI
protected toastService: ToastService,
) {
super(environmentService, i18nService, platformUtilsService, toastService);
+
this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);
// Add subscription to authenticationSessionTimeout$ and navigate to twoFactorTimeoutRoute if expired
@@ -287,7 +288,8 @@ export class TwoFactorComponent extends CaptchaProtectedComponent implements OnI
// Save off the OrgSsoIdentifier for use in the TDE flows
// - TDE login decryption options component
// - Browser SSO on extension open
- await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(this.orgIdentifier);
+ const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id;
+ await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(this.orgIdentifier, userId);
this.loginEmailService.clearValues();
// note: this flow affects both TDE & standard users
diff --git a/libs/angular/src/components/share.component.ts b/libs/angular/src/components/share.component.ts
index 534a1337eda..e785441b8e4 100644
--- a/libs/angular/src/components/share.component.ts
+++ b/libs/angular/src/components/share.component.ts
@@ -8,6 +8,7 @@ import { OrganizationService } from "@bitwarden/common/admin-console/abstraction
import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -73,10 +74,8 @@ export class ShareComponent implements OnInit, OnDestroy {
}
});
- const cipherDomain = await this.cipherService.get(this.cipherId);
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ const cipherDomain = await this.cipherService.get(this.cipherId, activeUserId);
this.cipher = await cipherDomain.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(cipherDomain, activeUserId),
);
@@ -104,10 +103,8 @@ export class ShareComponent implements OnInit, OnDestroy {
return;
}
- const cipherDomain = await this.cipherService.get(this.cipherId);
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ const cipherDomain = await this.cipherService.get(this.cipherId, activeUserId);
const cipherView = await cipherDomain.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(cipherDomain, activeUserId),
);
diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts
index f3dbdacce4b..d6db49c109d 100644
--- a/libs/angular/src/services/jslib-services.module.ts
+++ b/libs/angular/src/services/jslib-services.module.ts
@@ -147,13 +147,15 @@ import { BillingApiService } from "@bitwarden/common/billing/services/billing-ap
import { OrganizationBillingApiService } from "@bitwarden/common/billing/services/organization/organization-billing-api.service";
import { OrganizationBillingService } from "@bitwarden/common/billing/services/organization-billing.service";
import { TaxService } from "@bitwarden/common/billing/services/tax.service";
+import { BulkEncryptService } from "@bitwarden/common/key-management/crypto/abstractions/bulk-encrypt.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
+import { BulkEncryptServiceImplementation } from "@bitwarden/common/key-management/crypto/services/bulk-encrypt.service.implementation";
+import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/key-management/crypto/services/multithread-encrypt.service.implementation";
import { AppIdService as AppIdServiceAbstraction } from "@bitwarden/common/platform/abstractions/app-id.service";
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
-import { BulkEncryptService } from "@bitwarden/common/platform/abstractions/bulk-encrypt.service";
import { ConfigApiServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config-api.service.abstraction";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@bitwarden/common/platform/abstractions/crypto-function.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import {
EnvironmentService,
RegionConfig,
@@ -194,8 +196,6 @@ import { AppIdService } from "@bitwarden/common/platform/services/app-id.service
import { ConfigApiService } from "@bitwarden/common/platform/services/config/config-api.service";
import { DefaultConfigService } from "@bitwarden/common/platform/services/config/default-config.service";
import { ConsoleLogService } from "@bitwarden/common/platform/services/console-log.service";
-import { BulkEncryptServiceImplementation } from "@bitwarden/common/platform/services/cryptography/bulk-encrypt.service.implementation";
-import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/platform/services/cryptography/multithread-encrypt.service.implementation";
import { DefaultBroadcasterService } from "@bitwarden/common/platform/services/default-broadcaster.service";
import { DefaultEnvironmentService } from "@bitwarden/common/platform/services/default-environment.service";
import { DefaultServerSettingsService } from "@bitwarden/common/platform/services/default-server-settings.service";
@@ -282,12 +282,6 @@ import {
PasswordGenerationServiceAbstraction,
UsernameGenerationServiceAbstraction,
} from "@bitwarden/generator-legacy";
-import {
- ImportApiService,
- ImportApiServiceAbstraction,
- ImportService,
- ImportServiceAbstraction,
-} from "@bitwarden/importer/core";
import {
KeyService,
DefaultKeyService,
@@ -302,7 +296,12 @@ import {
DefaultUserAsymmetricKeysRegenerationApiService,
} from "@bitwarden/key-management";
import { SafeInjectionToken } from "@bitwarden/ui-common";
-import { PasswordRepromptService } from "@bitwarden/vault";
+import {
+ DefaultTaskService,
+ NewDeviceVerificationNoticeService,
+ PasswordRepromptService,
+ TaskService,
+} from "@bitwarden/vault";
import {
VaultExportService,
VaultExportServiceAbstraction,
@@ -312,9 +311,6 @@ import {
IndividualVaultExportServiceAbstraction,
} from "@bitwarden/vault-export-core";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { NewDeviceVerificationNoticeService } from "../../../vault/src/services/new-device-verification-notice.service";
import { FormValidationErrorsService as FormValidationErrorsServiceAbstraction } from "../platform/abstractions/form-validation-errors.service";
import { ViewCacheService } from "../platform/abstractions/view-cache.service";
import { FormValidationErrorsService } from "../platform/services/form-validation-errors.service";
@@ -805,7 +801,7 @@ const safeProviders: SafeProvider[] = [
safeProvider({
provide: SsoLoginServiceAbstraction,
useClass: SsoLoginService,
- deps: [StateProvider],
+ deps: [StateProvider, LogService],
}),
safeProvider({
provide: STATE_FACTORY,
@@ -826,26 +822,6 @@ const safeProviders: SafeProvider[] = [
MigrationRunner,
],
}),
- safeProvider({
- provide: ImportApiServiceAbstraction,
- useClass: ImportApiService,
- deps: [ApiServiceAbstraction],
- }),
- safeProvider({
- provide: ImportServiceAbstraction,
- useClass: ImportService,
- deps: [
- CipherServiceAbstraction,
- FolderServiceAbstraction,
- ImportApiServiceAbstraction,
- I18nServiceAbstraction,
- CollectionService,
- KeyService,
- EncryptService,
- PinServiceAbstraction,
- AccountServiceAbstraction,
- ],
- }),
safeProvider({
provide: IndividualVaultExportServiceAbstraction,
useClass: IndividualVaultExportService,
@@ -1492,6 +1468,11 @@ const safeProviders: SafeProvider[] = [
useClass: PasswordLoginStrategyData,
deps: [],
}),
+ safeProvider({
+ provide: TaskService,
+ useClass: DefaultTaskService,
+ deps: [StateProvider, ApiServiceAbstraction, OrganizationServiceAbstraction, ConfigService],
+ }),
];
@NgModule({
diff --git a/libs/angular/src/tools/generator/components/generator.component.ts b/libs/angular/src/tools/generator/components/generator.component.ts
deleted file mode 100644
index 1f3c635e499..00000000000
--- a/libs/angular/src/tools/generator/components/generator.component.ts
+++ /dev/null
@@ -1,389 +0,0 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
-import { Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from "@angular/core";
-import { ActivatedRoute } from "@angular/router";
-import { BehaviorSubject, combineLatest, firstValueFrom, Subject } from "rxjs";
-import { debounceTime, first, map, skipWhile, takeUntil } from "rxjs/operators";
-
-import { PasswordGeneratorPolicyOptions } from "@bitwarden/common/admin-console/models/domain/password-generator-policy-options";
-import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
-import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
-import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
-import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
-import { ToastService } from "@bitwarden/components";
-import {
- GeneratorType,
- DefaultPasswordBoundaries as DefaultBoundaries,
-} from "@bitwarden/generator-core";
-import {
- PasswordGenerationServiceAbstraction,
- UsernameGenerationServiceAbstraction,
- UsernameGeneratorOptions,
- PasswordGeneratorOptions,
-} from "@bitwarden/generator-legacy";
-
-export class EmailForwarderOptions {
- name: string;
- value: string;
- validForSelfHosted: boolean;
-}
-
-@Directive()
-export class GeneratorComponent implements OnInit, OnDestroy {
- @Input() comingFromAddEdit = false;
- @Input() type: GeneratorType | "";
- @Output() onSelected = new EventEmitter ();
-
- usernameGeneratingPromise: Promise;
- typeOptions: any[];
- usernameTypeOptions: any[];
- subaddressOptions: any[];
- catchallOptions: any[];
- forwardOptions: EmailForwarderOptions[];
- usernameOptions: UsernameGeneratorOptions = { website: null };
- passwordOptions: PasswordGeneratorOptions = {};
- username = "-";
- password = "-";
- showOptions = false;
- avoidAmbiguous = false;
- enforcedPasswordPolicyOptions: PasswordGeneratorPolicyOptions;
- usernameWebsite: string = null;
-
- get passTypeOptions() {
- return this._passTypeOptions.filter((o) => !o.disabled);
- }
- private _passTypeOptions: { name: string; value: GeneratorType; disabled: boolean }[];
-
- private destroy$ = new Subject();
- private isInitialized$ = new BehaviorSubject(false);
-
- // update screen reader minimum password length with 500ms debounce
- // so that the user isn't flooded with status updates
- private _passwordOptionsMinLengthForReader = new BehaviorSubject(
- DefaultBoundaries.length.min,
- );
- protected passwordOptionsMinLengthForReader$ = this._passwordOptionsMinLengthForReader.pipe(
- map((val) => val || DefaultBoundaries.length.min),
- debounceTime(500),
- );
-
- private _password = new BehaviorSubject("-");
-
- constructor(
- protected passwordGenerationService: PasswordGenerationServiceAbstraction,
- protected usernameGenerationService: UsernameGenerationServiceAbstraction,
- protected platformUtilsService: PlatformUtilsService,
- protected accountService: AccountService,
- protected i18nService: I18nService,
- protected logService: LogService,
- protected route: ActivatedRoute,
- protected ngZone: NgZone,
- private win: Window,
- protected toastService: ToastService,
- ) {
- this.typeOptions = [
- { name: i18nService.t("password"), value: "password" },
- { name: i18nService.t("username"), value: "username" },
- ];
- this._passTypeOptions = [
- { name: i18nService.t("password"), value: "password", disabled: false },
- { name: i18nService.t("passphrase"), value: "passphrase", disabled: false },
- ];
- this.usernameTypeOptions = [
- {
- name: i18nService.t("plusAddressedEmail"),
- value: "subaddress",
- desc: i18nService.t("plusAddressedEmailDesc"),
- },
- {
- name: i18nService.t("catchallEmail"),
- value: "catchall",
- desc: i18nService.t("catchallEmailDesc"),
- },
- {
- name: i18nService.t("forwardedEmail"),
- value: "forwarded",
- desc: i18nService.t("forwardedEmailDesc"),
- },
- { name: i18nService.t("randomWord"), value: "word" },
- ];
- this.subaddressOptions = [{ name: i18nService.t("random"), value: "random" }];
- this.catchallOptions = [{ name: i18nService.t("random"), value: "random" }];
-
- this.forwardOptions = [
- { name: "", value: "", validForSelfHosted: false },
- { name: "addy.io", value: "anonaddy", validForSelfHosted: true },
- { name: "DuckDuckGo", value: "duckduckgo", validForSelfHosted: false },
- { name: "Fastmail", value: "fastmail", validForSelfHosted: true },
- { name: "Firefox Relay", value: "firefoxrelay", validForSelfHosted: false },
- { name: "SimpleLogin", value: "simplelogin", validForSelfHosted: true },
- { name: "Forward Email", value: "forwardemail", validForSelfHosted: true },
- ].sort((a, b) => a.name.localeCompare(b.name));
-
- this._password.pipe(debounceTime(250)).subscribe((password) => {
- ngZone.run(() => {
- this.password = password;
- });
- this.passwordGenerationService.addHistory(this.password).catch((e) => {
- this.logService.error(e);
- });
- });
- }
-
- cascadeOptions(navigationType: GeneratorType = undefined, accountEmail: string) {
- this.avoidAmbiguous = !this.passwordOptions.ambiguous;
-
- if (!this.type) {
- if (navigationType) {
- this.type = navigationType;
- } else {
- this.type = this.passwordOptions.type === "username" ? "username" : "password";
- }
- }
-
- this.passwordOptions.type =
- this.passwordOptions.type === "passphrase" ? "passphrase" : "password";
-
- const overrideType = this.enforcedPasswordPolicyOptions.overridePasswordType ?? "";
- const isDisabled = overrideType.length
- ? (value: string, policyValue: string) => value !== policyValue
- : (_value: string, _policyValue: string) => false;
- for (const option of this._passTypeOptions) {
- option.disabled = isDisabled(option.value, overrideType);
- }
-
- if (this.usernameOptions.type == null) {
- this.usernameOptions.type = "word";
- }
- if (
- this.usernameOptions.subaddressEmail == null ||
- this.usernameOptions.subaddressEmail === ""
- ) {
- this.usernameOptions.subaddressEmail = accountEmail;
- }
- if (this.usernameWebsite == null) {
- this.usernameOptions.subaddressType = this.usernameOptions.catchallType = "random";
- } else {
- this.usernameOptions.website = this.usernameWebsite;
- }
- }
-
- async ngOnInit() {
- combineLatest([
- this.route.queryParams.pipe(first()),
- this.accountService.activeAccount$.pipe(first()),
- this.passwordGenerationService.getOptions$(),
- this.usernameGenerationService.getOptions$(),
- ])
- .pipe(
- map(([qParams, account, [passwordOptions, passwordPolicy], usernameOptions]) => ({
- navigationType: qParams.type as GeneratorType,
- accountEmail: account.email,
- passwordOptions,
- passwordPolicy,
- usernameOptions,
- })),
- takeUntil(this.destroy$),
- )
- .subscribe((options) => {
- this.passwordOptions = options.passwordOptions;
- this.enforcedPasswordPolicyOptions = options.passwordPolicy;
- this.usernameOptions = options.usernameOptions;
-
- this.cascadeOptions(options.navigationType, options.accountEmail);
- this._passwordOptionsMinLengthForReader.next(this.passwordOptions.minLength);
-
- if (this.regenerateWithoutButtonPress()) {
- this.regenerate().catch((e) => {
- this.logService.error(e);
- });
- }
-
- this.isInitialized$.next(true);
- });
-
- // once initialization is complete, `ngOnInit` should return.
- //
- // FIXME(#6944): if a sync is in progress, wait to complete until after
- // the sync completes.
- await firstValueFrom(
- this.isInitialized$.pipe(
- skipWhile((initialized) => !initialized),
- takeUntil(this.destroy$),
- ),
- );
-
- if (this.usernameWebsite !== null) {
- const websiteOption = { name: this.i18nService.t("websiteName"), value: "website-name" };
- this.subaddressOptions.push(websiteOption);
- this.catchallOptions.push(websiteOption);
- }
- }
-
- ngOnDestroy() {
- this.destroy$.next();
- this.destroy$.complete();
- this.isInitialized$.complete();
- this._passwordOptionsMinLengthForReader.complete();
- }
-
- async typeChanged() {
- await this.savePasswordOptions();
- }
-
- async regenerate() {
- if (this.type === "password") {
- await this.regeneratePassword();
- } else if (this.type === "username") {
- await this.regenerateUsername();
- }
- }
-
- async sliderChanged() {
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.savePasswordOptions();
- await this.passwordGenerationService.addHistory(this.password);
- }
-
- async onPasswordOptionsMinNumberInput($event: Event) {
- // `savePasswordOptions()` replaces the null
- this.passwordOptions.number = null;
-
- await this.savePasswordOptions();
-
- // fixes UI desync that occurs when minNumber has a fixed value
- // that is reset through normalization
- ($event.target as HTMLInputElement).value = `${this.passwordOptions.minNumber}`;
- }
-
- async setPasswordOptionsNumber($event: boolean) {
- this.passwordOptions.number = $event;
- // `savePasswordOptions()` replaces the null
- this.passwordOptions.minNumber = null;
-
- await this.savePasswordOptions();
- }
-
- async onPasswordOptionsMinSpecialInput($event: Event) {
- // `savePasswordOptions()` replaces the null
- this.passwordOptions.special = null;
-
- await this.savePasswordOptions();
-
- // fixes UI desync that occurs when minSpecial has a fixed value
- // that is reset through normalization
- ($event.target as HTMLInputElement).value = `${this.passwordOptions.minSpecial}`;
- }
-
- async setPasswordOptionsSpecial($event: boolean) {
- this.passwordOptions.special = $event;
- // `savePasswordOptions()` replaces the null
- this.passwordOptions.minSpecial = null;
-
- await this.savePasswordOptions();
- }
-
- async sliderInput() {
- await this.normalizePasswordOptions();
- }
-
- async savePasswordOptions() {
- // map navigation state into generator type
- const restoreType = this.passwordOptions.type;
- if (this.type === "username") {
- this.passwordOptions.type = this.type;
- }
-
- // save options
- await this.normalizePasswordOptions();
- await this.passwordGenerationService.saveOptions(this.passwordOptions);
-
- // restore the original format
- this.passwordOptions.type = restoreType;
- }
-
- async saveUsernameOptions() {
- await this.usernameGenerationService.saveOptions(this.usernameOptions);
- if (this.usernameOptions.type === "forwarded") {
- this.username = "-";
- }
- }
-
- async regeneratePassword() {
- this._password.next(
- await this.passwordGenerationService.generatePassword(this.passwordOptions),
- );
- }
-
- regenerateUsername() {
- return this.generateUsername();
- }
-
- async generateUsername() {
- try {
- this.usernameGeneratingPromise = this.usernameGenerationService.generateUsername(
- this.usernameOptions,
- );
- this.username = await this.usernameGeneratingPromise;
- if (this.username === "" || this.username === null) {
- this.username = "-";
- }
- } catch (e) {
- this.logService.error(e);
- }
- }
-
- copy() {
- const password = this.type === "password";
- const copyOptions = this.win != null ? { window: this.win } : null;
- this.platformUtilsService.copyToClipboard(
- password ? this.password : this.username,
- copyOptions,
- );
- this.toastService.showToast({
- variant: "info",
- title: null,
- message: this.i18nService.t(
- "valueCopied",
- this.i18nService.t(password ? "password" : "username"),
- ),
- });
- }
-
- select() {
- this.onSelected.emit(this.type === "password" ? this.password : this.username);
- }
-
- toggleOptions() {
- this.showOptions = !this.showOptions;
- }
-
- regenerateWithoutButtonPress() {
- return this.type !== "username" || this.usernameOptions.type !== "forwarded";
- }
-
- private async normalizePasswordOptions() {
- // Application level normalize options dependent on class variables
- this.passwordOptions.ambiguous = !this.avoidAmbiguous;
-
- if (
- !this.passwordOptions.uppercase &&
- !this.passwordOptions.lowercase &&
- !this.passwordOptions.number &&
- !this.passwordOptions.special
- ) {
- this.passwordOptions.lowercase = true;
- if (this.win != null) {
- const lowercase = this.win.document.querySelector("#lowercase") as HTMLInputElement;
- if (lowercase) {
- lowercase.checked = true;
- }
- }
- }
-
- await this.passwordGenerationService.enforcePasswordGeneratorPoliciesOnOptions(
- this.passwordOptions,
- );
- }
-}
diff --git a/libs/angular/src/tools/generator/components/password-generator-history.component.ts b/libs/angular/src/tools/generator/components/password-generator-history.component.ts
deleted file mode 100644
index 2933163fce2..00000000000
--- a/libs/angular/src/tools/generator/components/password-generator-history.component.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
-import { Directive, OnInit } from "@angular/core";
-
-import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
-import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
-import { ToastService } from "@bitwarden/components";
-import { GeneratedPasswordHistory } from "@bitwarden/generator-history";
-import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy";
-
-@Directive()
-export class PasswordGeneratorHistoryComponent implements OnInit {
- history: GeneratedPasswordHistory[] = [];
-
- constructor(
- protected passwordGenerationService: PasswordGenerationServiceAbstraction,
- protected platformUtilsService: PlatformUtilsService,
- protected i18nService: I18nService,
- private win: Window,
- protected toastService: ToastService,
- ) {}
-
- async ngOnInit() {
- this.history = await this.passwordGenerationService.getHistory();
- }
-
- clear = async () => {
- this.history = await this.passwordGenerationService.clear();
- };
-
- copy(password: string) {
- const copyOptions = this.win != null ? { window: this.win } : null;
- this.platformUtilsService.copyToClipboard(password, copyOptions);
- this.toastService.showToast({
- variant: "info",
- title: null,
- message: this.i18nService.t("valueCopied", this.i18nService.t("password")),
- });
- }
-}
diff --git a/libs/angular/src/tools/generator/generator-swap.ts b/libs/angular/src/tools/generator/generator-swap.ts
deleted file mode 100644
index 16fafc67116..00000000000
--- a/libs/angular/src/tools/generator/generator-swap.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { Type, inject } from "@angular/core";
-import { Route, Routes } from "@angular/router";
-
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
-
-import { componentRouteSwap } from "../../utils/component-route-swap";
-
-/**
- * Helper function to swap between two components based on the GeneratorToolsModernization feature flag.
- * @param defaultComponent - The current non-refreshed component to render.
- * @param refreshedComponent - The new refreshed component to render.
- * @param options - The shared route options to apply to the default component, and to the alt component if altOptions is not provided.
- * @param altOptions - The alt route options to apply to the alt component.
- */
-export function generatorSwap(
- defaultComponent: Type,
- refreshedComponent: Type,
- options: Route,
- altOptions?: Route,
-): Routes {
- return componentRouteSwap(
- defaultComponent,
- refreshedComponent,
- async () => {
- const configService = inject(ConfigService);
- return configService.getFeatureFlag(FeatureFlag.GeneratorToolsModernization);
- },
- options,
- altOptions,
- );
-}
diff --git a/libs/angular/src/utils/extension-refresh-redirect.spec.ts b/libs/angular/src/utils/extension-refresh-redirect.spec.ts
deleted file mode 100644
index 3291a4496ff..00000000000
--- a/libs/angular/src/utils/extension-refresh-redirect.spec.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { TestBed } from "@angular/core/testing";
-import { Navigation, Router, UrlTree } from "@angular/router";
-import { mock, MockProxy } from "jest-mock-extended";
-
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
-
-import { extensionRefreshRedirect } from "./extension-refresh-redirect";
-
-describe("extensionRefreshRedirect", () => {
- let configService: MockProxy;
- let router: MockProxy;
-
- beforeEach(() => {
- configService = mock();
- router = mock();
-
- TestBed.configureTestingModule({
- providers: [
- { provide: ConfigService, useValue: configService },
- { provide: Router, useValue: router },
- ],
- });
- });
-
- it("returns true when ExtensionRefresh flag is disabled", async () => {
- configService.getFeatureFlag.mockResolvedValue(false);
-
- const result = await TestBed.runInInjectionContext(() =>
- extensionRefreshRedirect("/redirect")(),
- );
-
- expect(result).toBe(true);
- expect(configService.getFeatureFlag).toHaveBeenCalledWith(FeatureFlag.ExtensionRefresh);
- expect(router.parseUrl).not.toHaveBeenCalled();
- });
-
- it("returns UrlTree when ExtensionRefresh flag is enabled and preserves query params", async () => {
- configService.getFeatureFlag.mockResolvedValue(true);
-
- const urlTree = new UrlTree();
- urlTree.queryParams = { test: "test" };
-
- const navigation: Navigation = {
- extras: {},
- id: 0,
- initialUrl: new UrlTree(),
- extractedUrl: urlTree,
- trigger: "imperative",
- previousNavigation: undefined,
- };
-
- router.getCurrentNavigation.mockReturnValue(navigation);
-
- await TestBed.runInInjectionContext(() => extensionRefreshRedirect("/redirect")());
-
- expect(configService.getFeatureFlag).toHaveBeenCalledWith(FeatureFlag.ExtensionRefresh);
- expect(router.createUrlTree).toHaveBeenCalledWith(["/redirect"], {
- queryParams: urlTree.queryParams,
- });
- });
-});
diff --git a/libs/angular/src/utils/extension-refresh-redirect.ts b/libs/angular/src/utils/extension-refresh-redirect.ts
deleted file mode 100644
index 2baa3a3ec89..00000000000
--- a/libs/angular/src/utils/extension-refresh-redirect.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { inject } from "@angular/core";
-import { UrlTree, Router } from "@angular/router";
-
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
-
-/**
- * Helper function to redirect to a new URL based on the ExtensionRefresh feature flag.
- * @param redirectUrl - The URL to redirect to if the ExtensionRefresh flag is enabled.
- */
-export function extensionRefreshRedirect(redirectUrl: string): () => Promise {
- return async () => {
- const configService = inject(ConfigService);
- const router = inject(Router);
-
- const shouldRedirect = await configService.getFeatureFlag(FeatureFlag.ExtensionRefresh);
- if (shouldRedirect) {
- const currentNavigation = router.getCurrentNavigation();
- const queryParams = currentNavigation?.extractedUrl?.queryParams || {};
-
- // Preserve query params when redirecting as it is likely that the refreshed component
- // will be consuming the same query params.
- return router.createUrlTree([redirectUrl], { queryParams });
- } else {
- return true;
- }
- };
-}
diff --git a/libs/angular/src/utils/extension-refresh-swap.ts b/libs/angular/src/utils/extension-refresh-swap.ts
deleted file mode 100644
index 6512be032d2..00000000000
--- a/libs/angular/src/utils/extension-refresh-swap.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { Type, inject } from "@angular/core";
-import { Route, Routes } from "@angular/router";
-
-import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
-import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
-
-import { componentRouteSwap } from "./component-route-swap";
-
-/**
- * Helper function to swap between two components based on the ExtensionRefresh feature flag.
- * @param defaultComponent - The current non-refreshed component to render.
- * @param refreshedComponent - The new refreshed component to render.
- * @param options - The shared route options to apply to the default component, and to the alt component if altOptions is not provided.
- * @param altOptions - The alt route options to apply to the alt component.
- */
-export function extensionRefreshSwap(
- defaultComponent: Type,
- refreshedComponent: Type,
- options: Route,
- altOptions?: Route,
-): Routes {
- return componentRouteSwap(
- defaultComponent,
- refreshedComponent,
- async () => {
- const configService = inject(ConfigService);
- return configService.getFeatureFlag(FeatureFlag.ExtensionRefresh);
- },
- options,
- altOptions,
- );
-}
diff --git a/libs/angular/src/vault/components/add-edit.component.ts b/libs/angular/src/vault/components/add-edit.component.ts
index 26f645d89ef..923f667e680 100644
--- a/libs/angular/src/vault/components/add-edit.component.ts
+++ b/libs/angular/src/vault/components/add-edit.component.ts
@@ -12,6 +12,7 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli
import { OrganizationUserStatusType, PolicyType } from "@bitwarden/common/admin-console/enums";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { normalizeExpiryYearFormat } from "@bitwarden/common/autofill/utils";
import { EventType } from "@bitwarden/common/enums";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
@@ -101,8 +102,6 @@ export class AddEditComponent implements OnInit, OnDestroy {
private personalOwnershipPolicyAppliesToActiveUser: boolean;
private previousCipherId: string;
- private activeUserId$ = this.accountService.activeAccount$.pipe(map((a) => a?.id));
-
get fido2CredentialCreationDateValue(): string {
const dateCreated = this.i18nService.t("dateCreated");
const creationDate = this.datePipe.transform(
@@ -125,7 +124,7 @@ export class AddEditComponent implements OnInit, OnDestroy {
protected policyService: PolicyService,
protected logService: LogService,
protected passwordRepromptService: PasswordRepromptService,
- protected organizationService: OrganizationService,
+ private organizationService: OrganizationService,
protected dialogService: DialogService,
protected win: Window,
protected datePipe: DatePipe,
@@ -263,12 +262,13 @@ export class AddEditComponent implements OnInit, OnDestroy {
this.title = this.i18nService.t("addItem");
}
- const loadedAddEditCipherInfo = await this.loadAddEditCipherInfo();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+
+ const loadedAddEditCipherInfo = await this.loadAddEditCipherInfo(activeUserId);
- const activeUserId = await firstValueFrom(this.activeUserId$);
if (this.cipher == null) {
if (this.editMode) {
- const cipher = await this.loadCipher();
+ const cipher = await this.loadCipher(activeUserId);
this.cipher = await cipher.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(cipher, activeUserId),
);
@@ -420,9 +420,7 @@ export class AddEditComponent implements OnInit, OnDestroy {
this.cipher.id = null;
}
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
const cipher = await this.encryptCipher(activeUserId);
try {
this.formPromise = this.saveCipher(cipher);
@@ -516,7 +514,8 @@ export class AddEditComponent implements OnInit, OnDestroy {
}
try {
- this.deletePromise = this.deleteCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ this.deletePromise = this.deleteCipher(activeUserId);
await this.deletePromise;
this.toastService.showToast({
variant: "success",
@@ -542,7 +541,8 @@ export class AddEditComponent implements OnInit, OnDestroy {
}
try {
- this.restorePromise = this.restoreCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ this.restorePromise = this.restoreCipher(activeUserId);
await this.restorePromise;
this.toastService.showToast({
variant: "success",
@@ -725,8 +725,8 @@ export class AddEditComponent implements OnInit, OnDestroy {
return allCollections.filter((c) => !c.readOnly);
}
- protected loadCipher() {
- return this.cipherService.get(this.cipherId);
+ protected loadCipher(userId: UserId) {
+ return this.cipherService.get(this.cipherId, userId);
}
protected encryptCipher(userId: UserId) {
@@ -746,14 +746,14 @@ export class AddEditComponent implements OnInit, OnDestroy {
: this.cipherService.updateWithServer(cipher, orgAdmin);
}
- protected deleteCipher() {
+ protected deleteCipher(userId: UserId) {
return this.cipher.isDeleted
- ? this.cipherService.deleteWithServer(this.cipher.id, this.asAdmin)
- : this.cipherService.softDeleteWithServer(this.cipher.id, this.asAdmin);
+ ? this.cipherService.deleteWithServer(this.cipher.id, userId, this.asAdmin)
+ : this.cipherService.softDeleteWithServer(this.cipher.id, userId, this.asAdmin);
}
- protected restoreCipher() {
- return this.cipherService.restoreWithServer(this.cipher.id, this.asAdmin);
+ protected restoreCipher(userId: UserId) {
+ return this.cipherService.restoreWithServer(this.cipher.id, userId, this.asAdmin);
}
/**
@@ -773,8 +773,10 @@ export class AddEditComponent implements OnInit, OnDestroy {
return this.ownershipOptions[0].value;
}
- async loadAddEditCipherInfo(): Promise {
- const addEditCipherInfo: any = await firstValueFrom(this.cipherService.addEditCipherInfo$);
+ async loadAddEditCipherInfo(userId: UserId): Promise {
+ const addEditCipherInfo: any = await firstValueFrom(
+ this.cipherService.addEditCipherInfo$(userId),
+ );
const loadedSavedInfo = addEditCipherInfo != null;
if (loadedSavedInfo) {
@@ -787,7 +789,7 @@ export class AddEditComponent implements OnInit, OnDestroy {
}
}
- await this.cipherService.setAddEditCipherInfo(null);
+ await this.cipherService.setAddEditCipherInfo(null, userId);
return loadedSavedInfo;
}
diff --git a/libs/angular/src/vault/components/attachments.component.ts b/libs/angular/src/vault/components/attachments.component.ts
index ec3dc43b447..b1bfcde852a 100644
--- a/libs/angular/src/vault/components/attachments.component.ts
+++ b/libs/angular/src/vault/components/attachments.component.ts
@@ -1,13 +1,14 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core";
-import { firstValueFrom, map } from "rxjs";
+import { firstValueFrom } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
@@ -84,9 +85,7 @@ export class AttachmentsComponent implements OnInit {
}
try {
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
this.formPromise = this.saveCipherAttachment(files[0], activeUserId);
this.cipherDomain = await this.formPromise;
this.cipher = await this.cipherDomain.decrypt(
@@ -125,12 +124,11 @@ export class AttachmentsComponent implements OnInit {
}
try {
- this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);
+ const activeUserId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
+
+ this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id, activeUserId);
const updatedCipher = await this.deletePromises[attachment.id];
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
const cipher = new Cipher(updatedCipher);
this.cipher = await cipher.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(cipher, activeUserId),
@@ -228,10 +226,8 @@ export class AttachmentsComponent implements OnInit {
}
protected async init() {
- this.cipherDomain = await this.loadCipher();
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ this.cipherDomain = await this.loadCipher(activeUserId);
this.cipher = await this.cipherDomain.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(this.cipherDomain, activeUserId),
);
@@ -287,7 +283,7 @@ export class AttachmentsComponent implements OnInit {
: await this.keyService.getOrgKey(this.cipher.organizationId);
const decBuf = await this.encryptService.decryptToBytes(encBuf, key);
const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
+ this.accountService.activeAccount$.pipe(getUserId),
);
this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(
this.cipherDomain,
@@ -301,7 +297,10 @@ export class AttachmentsComponent implements OnInit {
);
// 3. Delete old
- this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);
+ this.deletePromises[attachment.id] = this.deleteCipherAttachment(
+ attachment.id,
+ activeUserId,
+ );
await this.deletePromises[attachment.id];
const foundAttachment = this.cipher.attachments.filter((a2) => a2.id === attachment.id);
if (foundAttachment.length > 0) {
@@ -335,16 +334,16 @@ export class AttachmentsComponent implements OnInit {
}
}
- protected loadCipher() {
- return this.cipherService.get(this.cipherId);
+ protected loadCipher(userId: UserId) {
+ return this.cipherService.get(this.cipherId, userId);
}
protected saveCipherAttachment(file: File, userId: UserId) {
return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file, userId);
}
- protected deleteCipherAttachment(attachmentId: string) {
- return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);
+ protected deleteCipherAttachment(attachmentId: string, userId: UserId) {
+ return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId, userId);
}
protected async reupload(attachment: AttachmentView) {
diff --git a/libs/angular/src/vault/components/password-history.component.ts b/libs/angular/src/vault/components/password-history.component.ts
index 0b385688d0b..4df9f4bd24d 100644
--- a/libs/angular/src/vault/components/password-history.component.ts
+++ b/libs/angular/src/vault/components/password-history.component.ts
@@ -1,9 +1,10 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { Directive, OnInit } from "@angular/core";
-import { firstValueFrom, map } from "rxjs";
+import { firstValueFrom } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
@@ -39,10 +40,8 @@ export class PasswordHistoryComponent implements OnInit {
}
protected async init() {
- const cipher = await this.cipherService.get(this.cipherId);
- const activeUserId = await firstValueFrom(
- this.accountService.activeAccount$.pipe(map((a) => a?.id)),
- );
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ const cipher = await this.cipherService.get(this.cipherId, activeUserId);
const decCipher = await cipher.decrypt(
await this.cipherService.getKeyForCipherKeyDecryption(cipher, activeUserId),
);
diff --git a/libs/angular/src/vault/components/vault-items.component.ts b/libs/angular/src/vault/components/vault-items.component.ts
index f093aeb1330..fb76ff500eb 100644
--- a/libs/angular/src/vault/components/vault-items.component.ts
+++ b/libs/angular/src/vault/components/vault-items.component.ts
@@ -2,10 +2,13 @@
// @ts-strict-ignore
import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from "@angular/core";
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
-import { BehaviorSubject, Subject, firstValueFrom, from, switchMap, takeUntil } from "rxjs";
+import { BehaviorSubject, Subject, firstValueFrom, from, map, switchMap, takeUntil } from "rxjs";
import { SearchService } from "@bitwarden/common/abstractions/search.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
+import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
+import { UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
@@ -41,11 +44,20 @@ export class VaultItemsComponent implements OnInit, OnDestroy {
constructor(
protected searchService: SearchService,
protected cipherService: CipherService,
+ protected accountService: AccountService,
) {
- this.cipherService.cipherViews$.pipe(takeUntilDestroyed()).subscribe((ciphers) => {
- void this.doSearch(ciphers);
- this.loaded = true;
- });
+ this.accountService.activeAccount$
+ .pipe(
+ getUserId,
+ switchMap((userId) =>
+ this.cipherService.cipherViews$(userId).pipe(map((ciphers) => ({ userId, ciphers }))),
+ ),
+ takeUntilDestroyed(),
+ )
+ .subscribe(({ userId, ciphers }) => {
+ void this.doSearch(ciphers, userId);
+ this.loaded = true;
+ });
}
ngOnInit(): void {
@@ -122,10 +134,16 @@ export class VaultItemsComponent implements OnInit, OnDestroy {
protected deletedFilter: (cipher: CipherView) => boolean = (c) => c.isDeleted === this.deleted;
- protected async doSearch(indexedCiphers?: CipherView[]) {
- indexedCiphers = indexedCiphers ?? (await firstValueFrom(this.cipherService.cipherViews$));
+ protected async doSearch(indexedCiphers?: CipherView[], userId?: UserId) {
+ // Get userId from activeAccount if not provided from parent stream
+ if (!userId) {
+ userId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
+ }
- const failedCiphers = await firstValueFrom(this.cipherService.failedToDecryptCiphers$);
+ indexedCiphers =
+ indexedCiphers ?? (await firstValueFrom(this.cipherService.cipherViews$(userId)));
+
+ const failedCiphers = await firstValueFrom(this.cipherService.failedToDecryptCiphers$(userId));
if (failedCiphers != null && failedCiphers.length > 0) {
indexedCiphers = [...failedCiphers, ...indexedCiphers];
}
diff --git a/libs/angular/src/vault/components/view.component.ts b/libs/angular/src/vault/components/view.component.ts
index abbedf13078..637596256b0 100644
--- a/libs/angular/src/vault/components/view.component.ts
+++ b/libs/angular/src/vault/components/view.component.ts
@@ -11,29 +11,30 @@ import {
OnInit,
Output,
} from "@angular/core";
-import { filter, firstValueFrom, map, Observable } from "rxjs";
+import { filter, firstValueFrom, map, Observable, Subject, takeUntil } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { AuditService } from "@bitwarden/common/abstractions/audit.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { TokenService } from "@bitwarden/common/auth/abstractions/token.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { EventType } from "@bitwarden/common/enums";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { EncArrayBuffer } from "@bitwarden/common/platform/models/domain/enc-array-buffer";
-import { CollectionId } from "@bitwarden/common/types/guid";
+import { CollectionId, UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
-import { FieldType, CipherType } from "@bitwarden/common/vault/enums";
+import { CipherType, FieldType } from "@bitwarden/common/vault/enums";
import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type";
import { Launchable } from "@bitwarden/common/vault/interfaces/launchable";
import { AttachmentView } from "@bitwarden/common/vault/models/view/attachment.view";
@@ -65,7 +66,6 @@ export class ViewComponent implements OnDestroy, OnInit {
showPrivateKey: boolean;
canAccessPremium: boolean;
showPremiumRequiredTotp: boolean;
- showUpgradeRequiredTotp: boolean;
totpCode: string;
totpCodeFormatted: string;
totpDash: number;
@@ -80,7 +80,7 @@ export class ViewComponent implements OnDestroy, OnInit {
private previousCipherId: string;
private passwordReprompted = false;
- private activeUserId$ = this.accountService.activeAccount$.pipe(map((a) => a?.id));
+ private destroyed$ = new Subject();
get fido2CredentialCreationDateValue(): string {
const dateCreated = this.i18nService.t("dateCreated");
@@ -144,38 +144,39 @@ export class ViewComponent implements OnDestroy, OnInit {
async load() {
this.cleanUp();
- const activeUserId = await firstValueFrom(this.activeUserId$);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
// Grab individual cipher from `cipherViews$` for the most up-to-date information
- this.cipher = await firstValueFrom(
- this.cipherService.cipherViews$.pipe(
- map((ciphers) => ciphers.find((c) => c.id === this.cipherId)),
+ this.cipherService
+ .cipherViews$(activeUserId)
+ .pipe(
+ map((ciphers) => ciphers?.find((c) => c.id === this.cipherId)),
filter((cipher) => !!cipher),
- ),
- );
+ takeUntil(this.destroyed$),
+ )
+ .subscribe((cipher) => {
+ this.cipher = cipher;
+ });
this.canAccessPremium = await firstValueFrom(
this.billingAccountProfileStateService.hasPremiumFromAnySource$(activeUserId),
);
this.showPremiumRequiredTotp =
- this.cipher.login.totp && !this.canAccessPremium && !this.cipher.organizationId;
+ this.cipher.login.totp && !this.canAccessPremium && !this.cipher.organizationUseTotp;
this.canDeleteCipher$ = this.cipherAuthorizationService.canDeleteCipher$(this.cipher, [
this.collectionId as CollectionId,
]);
- this.showUpgradeRequiredTotp =
- this.cipher.login.totp && this.cipher.organizationId && !this.cipher.organizationUseTotp;
-
if (this.cipher.folderId) {
this.folder = await (
await firstValueFrom(this.folderService.folderViews$(activeUserId))
).find((f) => f.id == this.cipher.folderId);
}
- const canGenerateTotp = this.cipher.organizationId
- ? this.cipher.organizationUseTotp
- : this.canAccessPremium;
-
- if (this.cipher.type === CipherType.Login && this.cipher.login.totp && canGenerateTotp) {
+ if (
+ this.cipher.type === CipherType.Login &&
+ this.cipher.login.totp &&
+ (this.cipher.organizationUseTotp || this.canAccessPremium)
+ ) {
await this.totpUpdateCode();
const interval = this.totpService.getTimeInterval(this.cipher.login.totp);
await this.totpTick(interval);
@@ -250,7 +251,8 @@ export class ViewComponent implements OnDestroy, OnInit {
}
try {
- await this.deleteCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.deleteCipher(activeUserId);
this.toastService.showToast({
variant: "success",
title: null,
@@ -272,7 +274,8 @@ export class ViewComponent implements OnDestroy, OnInit {
}
try {
- await this.restoreCipher();
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.restoreCipher(activeUserId);
this.toastService.showToast({
variant: "success",
title: null,
@@ -380,7 +383,8 @@ export class ViewComponent implements OnDestroy, OnInit {
}
if (cipherId) {
- await this.cipherService.updateLastLaunchedDate(cipherId);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ await this.cipherService.updateLastLaunchedDate(cipherId, activeUserId);
}
this.platformUtilsService.launchUri(uri.launchUri);
@@ -498,14 +502,14 @@ export class ViewComponent implements OnDestroy, OnInit {
a.downloading = false;
}
- protected deleteCipher() {
+ protected deleteCipher(userId: UserId) {
return this.cipher.isDeleted
- ? this.cipherService.deleteWithServer(this.cipher.id)
- : this.cipherService.softDeleteWithServer(this.cipher.id);
+ ? this.cipherService.deleteWithServer(this.cipher.id, userId)
+ : this.cipherService.softDeleteWithServer(this.cipher.id, userId);
}
- protected restoreCipher() {
- return this.cipherService.restoreWithServer(this.cipher.id);
+ protected restoreCipher(userId: UserId) {
+ return this.cipherService.restoreWithServer(this.cipher.id, userId);
}
protected async promptPassword() {
@@ -524,6 +528,7 @@ export class ViewComponent implements OnDestroy, OnInit {
this.showCardNumber = false;
this.showCardCode = false;
this.passwordReprompted = false;
+ this.destroyed$.next();
if (this.totpInterval) {
clearInterval(this.totpInterval);
}
diff --git a/libs/angular/src/vault/guards/new-device-verification-notice.guard.spec.ts b/libs/angular/src/vault/guards/new-device-verification-notice.guard.spec.ts
index ba19cf808ee..938d5b32527 100644
--- a/libs/angular/src/vault/guards/new-device-verification-notice.guard.spec.ts
+++ b/libs/angular/src/vault/guards/new-device-verification-notice.guard.spec.ts
@@ -2,16 +2,13 @@ import { TestBed } from "@angular/core/testing";
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from "@angular/router";
import { BehaviorSubject } from "rxjs";
-import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
-import { PolicyType } from "@bitwarden/common/admin-console/enums";
import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
+import { NewDeviceVerificationNoticeService } from "@bitwarden/vault";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { NewDeviceVerificationNoticeService } from "../../../../vault/src/services/new-device-verification-notice.service";
import { VaultProfileService } from "../services/vault-profile.service";
import { NewDeviceVerificationNoticeGuard } from "./new-device-verification-notice.guard";
@@ -36,19 +33,23 @@ describe("NewDeviceVerificationNoticeGuard", () => {
return Promise.resolve(false);
});
- const isSelfHost = jest.fn().mockResolvedValue(false);
+ const isSelfHost = jest.fn().mockReturnValue(false);
const getProfileTwoFactorEnabled = jest.fn().mockResolvedValue(false);
- const policyAppliesToActiveUser$ = jest.fn().mockReturnValue(new BehaviorSubject(false));
const noticeState$ = jest.fn().mockReturnValue(new BehaviorSubject(null));
const getProfileCreationDate = jest.fn().mockResolvedValue(eightDaysAgo);
+ const hasMasterPasswordAndMasterKeyHash = jest.fn().mockResolvedValue(true);
+ const getUserSSOBound = jest.fn().mockResolvedValue(false);
+ const getUserSSOBoundAdminOwner = jest.fn().mockResolvedValue(false);
beforeEach(() => {
getFeatureFlag.mockClear();
isSelfHost.mockClear();
getProfileCreationDate.mockClear();
getProfileTwoFactorEnabled.mockClear();
- policyAppliesToActiveUser$.mockClear();
createUrlTree.mockClear();
+ hasMasterPasswordAndMasterKeyHash.mockClear();
+ getUserSSOBound.mockClear();
+ getUserSSOBoundAdminOwner.mockClear();
TestBed.configureTestingModule({
providers: [
@@ -57,10 +58,15 @@ describe("NewDeviceVerificationNoticeGuard", () => {
{ provide: NewDeviceVerificationNoticeService, useValue: { noticeState$ } },
{ provide: AccountService, useValue: { activeAccount$ } },
{ provide: PlatformUtilsService, useValue: { isSelfHost } },
- { provide: PolicyService, useValue: { policyAppliesToActiveUser$ } },
+ { provide: UserVerificationService, useValue: { hasMasterPasswordAndMasterKeyHash } },
{
provide: VaultProfileService,
- useValue: { getProfileCreationDate, getProfileTwoFactorEnabled },
+ useValue: {
+ getProfileCreationDate,
+ getProfileTwoFactorEnabled,
+ getUserSSOBound,
+ getUserSSOBoundAdminOwner,
+ },
},
],
});
@@ -92,7 +98,7 @@ describe("NewDeviceVerificationNoticeGuard", () => {
expect(isSelfHost).not.toHaveBeenCalled();
expect(getProfileTwoFactorEnabled).not.toHaveBeenCalled();
expect(getProfileCreationDate).not.toHaveBeenCalled();
- expect(policyAppliesToActiveUser$).not.toHaveBeenCalled();
+ expect(hasMasterPasswordAndMasterKeyHash).not.toHaveBeenCalled();
});
});
@@ -123,13 +129,6 @@ describe("NewDeviceVerificationNoticeGuard", () => {
expect(await newDeviceGuard()).toBe(true);
});
- it("returns `true` SSO is required", async () => {
- policyAppliesToActiveUser$.mockReturnValueOnce(new BehaviorSubject(true));
-
- expect(await newDeviceGuard()).toBe(true);
- expect(policyAppliesToActiveUser$).toHaveBeenCalledWith(PolicyType.RequireSso);
- });
-
it("returns `true` when the profile was created less than a week ago", async () => {
const sixDaysAgo = new Date();
sixDaysAgo.setDate(sixDaysAgo.getDate() - 6);
@@ -139,6 +138,63 @@ describe("NewDeviceVerificationNoticeGuard", () => {
expect(await newDeviceGuard()).toBe(true);
});
+ it("returns `true` when the profile service throws an error", async () => {
+ getProfileCreationDate.mockRejectedValueOnce(new Error("test"));
+
+ expect(await newDeviceGuard()).toBe(true);
+ });
+
+ describe("SSO bound", () => {
+ beforeEach(() => {
+ getFeatureFlag.mockImplementation((key) => {
+ if (key === FeatureFlag.NewDeviceVerificationPermanentDismiss) {
+ return Promise.resolve(true);
+ }
+
+ return Promise.resolve(false);
+ });
+ });
+
+ afterAll(() => {
+ getFeatureFlag.mockReturnValue(false);
+ });
+
+ it('returns "true" when the user is SSO bound and not an admin or owner', async () => {
+ getUserSSOBound.mockResolvedValueOnce(true);
+ getUserSSOBoundAdminOwner.mockResolvedValueOnce(false);
+
+ expect(await newDeviceGuard()).toBe(true);
+ });
+
+ it('returns "true" when the user is an admin or owner of an SSO bound organization and has not logged in with their master password', async () => {
+ getUserSSOBound.mockResolvedValueOnce(true);
+ getUserSSOBoundAdminOwner.mockResolvedValueOnce(true);
+ hasMasterPasswordAndMasterKeyHash.mockResolvedValueOnce(false);
+
+ expect(await newDeviceGuard()).toBe(true);
+ });
+
+ it("shows notice when the user is an admin or owner of an SSO bound organization and logged in with their master password", async () => {
+ getUserSSOBound.mockResolvedValueOnce(true);
+ getUserSSOBoundAdminOwner.mockResolvedValueOnce(true);
+ hasMasterPasswordAndMasterKeyHash.mockResolvedValueOnce(true);
+
+ await newDeviceGuard();
+
+ expect(createUrlTree).toHaveBeenCalledWith(["/new-device-notice"]);
+ });
+
+ it("shows notice when the user that is not in an SSO bound organization", async () => {
+ getUserSSOBound.mockResolvedValueOnce(false);
+ getUserSSOBoundAdminOwner.mockResolvedValueOnce(false);
+ hasMasterPasswordAndMasterKeyHash.mockResolvedValueOnce(true);
+
+ await newDeviceGuard();
+
+ expect(createUrlTree).toHaveBeenCalledWith(["/new-device-notice"]);
+ });
+ });
+
describe("temp flag", () => {
beforeEach(() => {
getFeatureFlag.mockImplementation((key) => {
diff --git a/libs/angular/src/vault/guards/new-device-verification-notice.guard.ts b/libs/angular/src/vault/guards/new-device-verification-notice.guard.ts
index 8b406877a12..8d4a7742bc5 100644
--- a/libs/angular/src/vault/guards/new-device-verification-notice.guard.ts
+++ b/libs/angular/src/vault/guards/new-device-verification-notice.guard.ts
@@ -1,17 +1,14 @@
import { inject } from "@angular/core";
import { ActivatedRouteSnapshot, CanActivateFn, Router } from "@angular/router";
-import { Observable, firstValueFrom } from "rxjs";
+import { firstValueFrom, Observable } from "rxjs";
-import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
-import { PolicyType } from "@bitwarden/common/admin-console/enums";
import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
+import { NewDeviceVerificationNoticeService } from "@bitwarden/vault";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { NewDeviceVerificationNoticeService } from "../../../../vault/src/services/new-device-verification-notice.service";
import { VaultProfileService } from "../services/vault-profile.service";
export const NewDeviceVerificationNoticeGuard: CanActivateFn = async (
@@ -22,8 +19,8 @@ export const NewDeviceVerificationNoticeGuard: CanActivateFn = async (
const newDeviceVerificationNoticeService = inject(NewDeviceVerificationNoticeService);
const accountService = inject(AccountService);
const platformUtilsService = inject(PlatformUtilsService);
- const policyService = inject(PolicyService);
const vaultProfileService = inject(VaultProfileService);
+ const userVerificationService = inject(UserVerificationService);
if (route.queryParams["fromNewDeviceVerification"]) {
return true;
@@ -47,17 +44,28 @@ export const NewDeviceVerificationNoticeGuard: CanActivateFn = async (
return router.createUrlTree(["/login"]);
}
- const has2FAEnabled = await hasATwoFactorProviderEnabled(vaultProfileService, currentAcct.id);
- const isSelfHosted = await platformUtilsService.isSelfHost();
- const requiresSSO = await isSSORequired(policyService);
- const isProfileLessThanWeekOld = await profileIsLessThanWeekOld(
- vaultProfileService,
- currentAcct.id,
- );
+ try {
+ const isSelfHosted = platformUtilsService.isSelfHost();
+ const userIsSSOUser = await ssoAppliesToUser(
+ userVerificationService,
+ vaultProfileService,
+ currentAcct.id,
+ );
+ const has2FAEnabled = await hasATwoFactorProviderEnabled(vaultProfileService, currentAcct.id);
+ const isProfileLessThanWeekOld = await profileIsLessThanWeekOld(
+ vaultProfileService,
+ currentAcct.id,
+ );
- // When any of the following are true, the device verification notice is
- // not applicable for the user.
- if (has2FAEnabled || isSelfHosted || requiresSSO || isProfileLessThanWeekOld) {
+ // When any of the following are true, the device verification notice is
+ // not applicable for the user. When the user has *not* logged in with their
+ // master password, assume they logged in with SSO.
+ if (has2FAEnabled || isSelfHosted || userIsSSOUser || isProfileLessThanWeekOld) {
+ return true;
+ }
+ } catch {
+ // Skip showing the notice if there was a problem determining applicability
+ // The most likely problem to occur is the user not having a network connection
return true;
}
@@ -101,9 +109,39 @@ async function profileIsLessThanWeekOld(
return !isMoreThan7DaysAgo(creationDate);
}
-/** Returns true when the user is required to login via SSO */
-async function isSSORequired(policyService: PolicyService) {
- return firstValueFrom(policyService.policyAppliesToActiveUser$(PolicyType.RequireSso));
+/**
+ * Returns true when either:
+ * - The user is SSO bound to an organization and is not an Admin or Owner
+ * - The user is an Admin or Owner of an organization with SSO bound and has not logged in with their master password
+ *
+ * NOTE: There are edge cases where this does not satisfy the original requirement of showing the notice to
+ * users who are subject to the SSO required policy. When Owners and Admins log in with their MP they will see the notice
+ * when they log in with SSO they will not. This is a concession made because the original logic references policies would not work for TDE users.
+ * When this guard is run for those users a sync hasn't occurred and thus the policies are not available.
+ */
+async function ssoAppliesToUser(
+ userVerificationService: UserVerificationService,
+ vaultProfileService: VaultProfileService,
+ userId: string,
+) {
+ const userSSOBound = await vaultProfileService.getUserSSOBound(userId);
+ const userSSOBoundAdminOwner = await vaultProfileService.getUserSSOBoundAdminOwner(userId);
+ const userLoggedInWithMP = await userLoggedInWithMasterPassword(userVerificationService, userId);
+
+ const nonOwnerAdminSsoUser = userSSOBound && !userSSOBoundAdminOwner;
+ const ssoAdminOwnerLoggedInWithMP = userSSOBoundAdminOwner && !userLoggedInWithMP;
+
+ return nonOwnerAdminSsoUser || ssoAdminOwnerLoggedInWithMP;
+}
+
+/**
+ * Returns true when the user logged in with their master password.
+ */
+async function userLoggedInWithMasterPassword(
+ userVerificationService: UserVerificationService,
+ userId: string,
+) {
+ return userVerificationService.hasMasterPasswordAndMasterKeyHash(userId);
}
/** Returns the true when the date given is older than 7 days */
diff --git a/libs/angular/src/vault/services/vault-profile.service.spec.ts b/libs/angular/src/vault/services/vault-profile.service.spec.ts
index 7761503253a..ade34da39a6 100644
--- a/libs/angular/src/vault/services/vault-profile.service.spec.ts
+++ b/libs/angular/src/vault/services/vault-profile.service.spec.ts
@@ -1,6 +1,7 @@
import { TestBed } from "@angular/core/testing";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { OrganizationUserType } from "@bitwarden/common/admin-console/enums";
import { VaultProfileService } from "./vault-profile.service";
@@ -13,6 +14,12 @@ describe("VaultProfileService", () => {
creationDate: hardcodedDateString,
twoFactorEnabled: true,
id: "new-user-id",
+ organizations: [
+ {
+ ssoBound: true,
+ type: OrganizationUserType.Admin,
+ },
+ ],
});
beforeEach(() => {
@@ -91,4 +98,64 @@ describe("VaultProfileService", () => {
expect(getProfile).not.toHaveBeenCalled();
});
});
+
+ describe("getUserSSOBound", () => {
+ it("calls `getProfile` when stored ssoBound property is not stored", async () => {
+ expect(service["userIsSsoBound"]).toBeNull();
+
+ const userIsSsoBound = await service.getUserSSOBound(userId);
+
+ expect(userIsSsoBound).toBe(true);
+ expect(getProfile).toHaveBeenCalled();
+ });
+
+ it("calls `getProfile` when stored profile id does not match", async () => {
+ service["userIsSsoBound"] = false;
+ service["userId"] = "old-user-id";
+
+ const userIsSsoBound = await service.getUserSSOBound(userId);
+
+ expect(userIsSsoBound).toBe(true);
+ expect(getProfile).toHaveBeenCalled();
+ });
+
+ it("does not call `getProfile` when ssoBound property is already stored", async () => {
+ service["userIsSsoBound"] = false;
+
+ const userIsSsoBound = await service.getUserSSOBound(userId);
+
+ expect(userIsSsoBound).toBe(false);
+ expect(getProfile).not.toHaveBeenCalled();
+ });
+ });
+
+ describe("getUserSSOBoundAdminOwner", () => {
+ it("calls `getProfile` when stored userIsSsoBoundAdminOwner property is not stored", async () => {
+ expect(service["userIsSsoBoundAdminOwner"]).toBeNull();
+
+ const userIsSsoBoundAdminOwner = await service.getUserSSOBoundAdminOwner(userId);
+
+ expect(userIsSsoBoundAdminOwner).toBe(true);
+ expect(getProfile).toHaveBeenCalled();
+ });
+
+ it("calls `getProfile` when stored profile id does not match", async () => {
+ service["userIsSsoBoundAdminOwner"] = false;
+ service["userId"] = "old-user-id";
+
+ const userIsSsoBoundAdminOwner = await service.getUserSSOBoundAdminOwner(userId);
+
+ expect(userIsSsoBoundAdminOwner).toBe(true);
+ expect(getProfile).toHaveBeenCalled();
+ });
+
+ it("does not call `getProfile` when userIsSsoBoundAdminOwner property is already stored", async () => {
+ service["userIsSsoBoundAdminOwner"] = false;
+
+ const userIsSsoBoundAdminOwner = await service.getUserSSOBoundAdminOwner(userId);
+
+ expect(userIsSsoBoundAdminOwner).toBe(false);
+ expect(getProfile).not.toHaveBeenCalled();
+ });
+ });
});
diff --git a/libs/angular/src/vault/services/vault-profile.service.ts b/libs/angular/src/vault/services/vault-profile.service.ts
index b368a973781..21f4ecc2285 100644
--- a/libs/angular/src/vault/services/vault-profile.service.ts
+++ b/libs/angular/src/vault/services/vault-profile.service.ts
@@ -1,6 +1,7 @@
import { Injectable, inject } from "@angular/core";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
+import { OrganizationUserType } from "@bitwarden/common/admin-console/enums";
import { ProfileResponse } from "@bitwarden/common/models/response/profile.response";
@Injectable({
@@ -24,6 +25,12 @@ export class VaultProfileService {
/** True when 2FA is enabled on the profile. */
private profile2FAEnabled: boolean | null = null;
+ /** True when ssoBound is true for any of the users organizations */
+ private userIsSsoBound: boolean | null = null;
+
+ /** True when the user is an admin or owner of the ssoBound organization */
+ private userIsSsoBoundAdminOwner: boolean | null = null;
+
/**
* Returns the creation date of the profile.
* Note: `Date`s are mutable in JS, creating a new
@@ -52,12 +59,43 @@ export class VaultProfileService {
return profile.twoFactorEnabled;
}
+ /**
+ * Returns whether the user logs in with SSO for any organization.
+ */
+ async getUserSSOBound(userId: string): Promise {
+ if (this.userIsSsoBound !== null && userId === this.userId) {
+ return Promise.resolve(this.userIsSsoBound);
+ }
+
+ await this.fetchAndCacheProfile();
+
+ return !!this.userIsSsoBound;
+ }
+
+ /**
+ * Returns true when the user is an Admin or Owner of an organization with `ssoBound` true.
+ */
+ async getUserSSOBoundAdminOwner(userId: string): Promise {
+ if (this.userIsSsoBoundAdminOwner !== null && userId === this.userId) {
+ return Promise.resolve(this.userIsSsoBoundAdminOwner);
+ }
+
+ await this.fetchAndCacheProfile();
+
+ return !!this.userIsSsoBoundAdminOwner;
+ }
+
private async fetchAndCacheProfile(): Promise {
const profile = await this.apiService.getProfile();
this.userId = profile.id;
this.profileCreatedDate = profile.creationDate;
this.profile2FAEnabled = profile.twoFactorEnabled;
+ const ssoBoundOrg = profile.organizations.find((org) => org.ssoBound);
+ this.userIsSsoBound = !!ssoBoundOrg;
+ this.userIsSsoBoundAdminOwner =
+ ssoBoundOrg?.type === OrganizationUserType.Admin ||
+ ssoBoundOrg?.type === OrganizationUserType.Owner;
return profile;
}
diff --git a/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts b/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts
index 96fb74ba96b..d175942c475 100644
--- a/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts
+++ b/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts
@@ -11,19 +11,17 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { ActiveUserState, StateProvider } from "@bitwarden/common/platform/state";
+import { UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node";
import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import { ServiceUtils } from "@bitwarden/common/vault/service-utils";
+import { COLLAPSED_GROUPINGS } from "@bitwarden/common/vault/services/key-state/collapsed-groupings.state";
import { DeprecatedVaultFilterService as DeprecatedVaultFilterServiceAbstraction } from "../../abstractions/deprecated-vault-filter.service";
import { DynamicTreeNode } from "../models/dynamic-tree-node.model";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { COLLAPSED_GROUPINGS } from "./../../../../../common/src/vault/services/key-state/collapsed-groupings.state";
-
const NestingDelimiter = "/";
@Injectable()
@@ -33,8 +31,6 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti
private readonly collapsedGroupings$: Observable> =
this.collapsedGroupingsState.state$.pipe(map((c) => new Set(c)));
- private activeUserId$ = this.accountService.activeAccount$.pipe(map((a) => a?.id));
-
constructor(
protected organizationService: OrganizationService,
protected folderService: FolderService,
@@ -66,7 +62,7 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti
}
buildNestedFolders(organizationId?: string): Observable> {
- const transformation = async (storedFolders: FolderView[]) => {
+ const transformation = async (storedFolders: FolderView[], userId: UserId) => {
let folders: FolderView[];
// If no org or "My Vault" is selected, show all folders
@@ -74,7 +70,7 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti
folders = storedFolders;
} else {
// Otherwise, show only folders that have ciphers from the selected org and the "no folder" folder
- const ciphers = await this.cipherService.getAllDecrypted();
+ const ciphers = await this.cipherService.getAllDecrypted(userId);
const orgCiphers = ciphers.filter((c) => c.organizationId == organizationId);
folders = storedFolders.filter(
(f) => orgCiphers.some((oc) => oc.folderId == f.id) || f.id == null,
@@ -88,9 +84,13 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti
});
};
- return this.activeUserId$.pipe(
- switchMap((userId) => this.folderService.folderViews$(userId)),
- mergeMap((folders) => from(transformation(folders))),
+ return this.accountService.activeAccount$.pipe(
+ getUserId,
+ switchMap((userId) =>
+ this.folderService
+ .folderViews$(userId)
+ .pipe(mergeMap((folders) => from(transformation(folders, userId)))),
+ ),
);
}
@@ -134,7 +134,7 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti
}
async getFolderNested(id: string): Promise> {
- const activeUserId = await firstValueFrom(this.activeUserId$);
+ const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
const folders = await this.getAllFoldersNested(
await firstValueFrom(this.folderService.folderViews$(activeUserId)),
);
diff --git a/libs/angular/tsconfig.json b/libs/angular/tsconfig.json
index b638410a6a8..c603e5cf170 100644
--- a/libs/angular/tsconfig.json
+++ b/libs/angular/tsconfig.json
@@ -13,7 +13,6 @@
"@bitwarden/generator-history": ["../tools/generator/extensions/history/src"],
"@bitwarden/generator-legacy": ["../tools/generator/extensions/legacy/src"],
"@bitwarden/generator-navigation": ["../tools/generator/extensions/navigation/src"],
- "@bitwarden/importer/core": ["../importer/src"],
"@bitwarden/key-management": ["../key-management/src"],
"@bitwarden/platform": ["../platform/src"],
"@bitwarden/ui-common": ["../ui/common/src"],
diff --git a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx
index a218eaa1492..8fe332b8caf 100644
--- a/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx
+++ b/libs/auth/src/angular/anon-layout/anon-layout-wrapper.mdx
@@ -6,10 +6,6 @@ import * as stories from "./anon-layout-wrapper.stories";
# Anon Layout Wrapper
-NOTE: These stories will treat "Light & Dark" mode as "Light" mode. This is done to avoid a bug with
-the way that we render the same component twice in the same iframe and how that interacts with the
-`router-outlet`.
-
## Anon Layout Wrapper Component
The auth owned `AnonLayoutWrapperComponent` orchestrates routing configuration data and feeds it
diff --git a/libs/auth/src/angular/login-approval/login-approval.component.html b/libs/auth/src/angular/login-approval/login-approval.component.html
index c0cb9b9caf4..2115bdbff11 100644
--- a/libs/auth/src/angular/login-approval/login-approval.component.html
+++ b/libs/auth/src/angular/login-approval/login-approval.component.html
@@ -1,5 +1,5 @@
- {{ "areYouTryingtoLogin" | i18n }}
+ {{ "areYouTryingToAccessYourAccount" | i18n }}
@@ -8,7 +8,7 @@
- {{ "logInAttemptBy" | i18n: email }}
+ {{ "accessAttemptBy" | i18n: email }}
{{ "fingerprintPhraseHeader" | i18n }}
{{ fingerprintPhrase }}
@@ -35,7 +35,7 @@
[bitAction]="approveLogin"
[disabled]="loading"
>
- {{ "confirmLogIn" | i18n }}
+ {{ "confirmAccess" | i18n }}
- {{ "denyLogIn" | i18n }}
+ {{ "denyAccess" | i18n }}
diff --git a/libs/auth/src/angular/login-approval/login-approval.component.ts b/libs/auth/src/angular/login-approval/login-approval.component.ts
index 3b44f545abb..54d90306e5c 100644
--- a/libs/auth/src/angular/login-approval/login-approval.component.ts
+++ b/libs/auth/src/angular/login-approval/login-approval.component.ts
@@ -85,7 +85,7 @@ export class LoginApprovalComponent implements OnInit, OnDestroy {
}
const publicKey = Utils.fromB64ToArray(this.authRequestResponse.publicKey);
- this.email = await await firstValueFrom(
+ this.email = await firstValueFrom(
this.accountService.activeAccount$.pipe(map((a) => a?.email)),
);
this.fingerprintPhrase = await this.authRequestService.getFingerprintPhrase(
diff --git a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html
index b3d218389bf..bf37380dc39 100644
--- a/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html
+++ b/libs/auth/src/angular/login-decryption-options/login-decryption-options.component.html
@@ -1,5 +1,5 @@
-
+
- this.ssoLoginService.getActiveUserOrganizationSsoIdentifier(),
+ this.ssoLoginService.getActiveUserOrganizationSsoIdentifier(this.activeAccountId),
).pipe(
switchMap((organizationIdentifier) => {
if (organizationIdentifier == undefined) {
diff --git a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html
index a1d0f200c15..ba26ba77cb0 100644
--- a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html
+++ b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html
@@ -1,6 +1,20 @@
- {{ "makeSureYourAccountIsUnlockedAndTheFingerprintEtc" | i18n }}
+
+ {{ "notificationSentDevicePart1" | i18n }}
+ {{ "notificationSentDeviceAnchor" | i18n }}. {{ "notificationSentDevicePart2" | i18n }}
+
+
+ {{ "notificationSentDeviceComplete" | i18n }}
+
{{ "fingerprintPhraseHeader" | i18n }}
{{ fingerprintPhrase }}
diff --git a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts
index b9a5ee4fe73..00e2d621c47 100644
--- a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts
+++ b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts
@@ -29,6 +29,7 @@ import { ClientType, HttpStatusCode } from "@bitwarden/common/enums";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service";
+import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -71,6 +72,8 @@ export class LoginViaAuthRequestComponent implements OnInit, OnDestroy {
protected showResendNotification = false;
protected Flow = Flow;
protected flow = Flow.StandardAuthRequest;
+ protected webVaultUrl: string;
+ protected deviceManagementUrl: string;
constructor(
private accountService: AccountService,
@@ -81,6 +84,7 @@ export class LoginViaAuthRequestComponent implements OnInit, OnDestroy {
private authService: AuthService,
private cryptoFunctionService: CryptoFunctionService,
private deviceTrustService: DeviceTrustServiceAbstraction,
+ private environmentService: EnvironmentService,
private i18nService: I18nService,
private logService: LogService,
private loginEmailService: LoginEmailServiceAbstraction,
@@ -109,6 +113,12 @@ export class LoginViaAuthRequestComponent implements OnInit, OnDestroy {
this.logService.error("Failed to use approved auth request: " + e.message);
});
});
+
+ // Get the web vault URL from the environment service
+ this.environmentService.environment$.pipe(takeUntilDestroyed()).subscribe((env) => {
+ this.webVaultUrl = env.getWebVaultUrl();
+ this.deviceManagementUrl = `${this.webVaultUrl}/#/settings/security/device-management`;
+ });
}
async ngOnInit(): Promise {
diff --git a/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.spec.ts b/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.spec.ts
index 7a2b334eb42..726110663fc 100644
--- a/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.spec.ts
+++ b/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.spec.ts
@@ -11,8 +11,8 @@ import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-conso
import { OrganizationKeysResponse } from "@bitwarden/common/admin-console/models/response/organization-keys.response";
import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction";
import { SetPasswordRequest } from "@bitwarden/common/auth/models/request/set-password.request";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { KeysRequest } from "@bitwarden/common/models/request/keys.request";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
diff --git a/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.ts b/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.ts
index 84c580662be..6c9ce8f9267 100644
--- a/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.ts
+++ b/libs/auth/src/angular/set-password-jit/default-set-password-jit.service.ts
@@ -12,8 +12,8 @@ import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-conso
import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction";
import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason";
import { SetPasswordRequest } from "@bitwarden/common/auth/models/request/set-password.request";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { KeysRequest } from "@bitwarden/common/models/request/keys.request";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
diff --git a/libs/auth/src/angular/sso/sso.component.ts b/libs/auth/src/angular/sso/sso.component.ts
index 4583332cb88..b3f0d7d6a66 100644
--- a/libs/auth/src/angular/sso/sso.component.ts
+++ b/libs/auth/src/angular/sso/sso.component.ts
@@ -367,7 +367,7 @@ export class SsoComponent implements OnInit {
codeVerifier,
redirectUri,
orgSsoIdentifier,
- email,
+ email ?? undefined,
);
this.formPromise = this.loginStrategyService.logIn(credentials);
const authResult = await this.formPromise;
@@ -384,7 +384,10 @@ export class SsoComponent implements OnInit {
// - TDE login decryption options component
// - Browser SSO on extension open
// Note: you cannot set this in state before 2FA b/c there won't be an account in state.
- await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(orgSsoIdentifier);
+
+ // Grabbing the active user id right before making the state set to ensure it exists.
+ const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id;
+ await this.ssoLoginService.setActiveUserOrganizationSsoIdentifier(orgSsoIdentifier, userId);
// Users enrolled in admin acct recovery can be forced to set a new password after
// having the admin set a temp password for them (affects TDE & standard users)
diff --git a/libs/auth/src/angular/user-verification/user-verification-form-input.component.html b/libs/auth/src/angular/user-verification/user-verification-form-input.component.html
index f532a3b23fd..56bce040d2f 100644
--- a/libs/auth/src/angular/user-verification/user-verification-form-input.component.html
+++ b/libs/auth/src/angular/user-verification/user-verification-form-input.component.html
@@ -120,7 +120,7 @@
{{ "enterVerificationCodeSentToEmail" | i18n }}
-
+
{{ "resendCode" | i18n }}
diff --git a/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts
index cec4481cd8d..7c56e2a58c8 100644
--- a/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts
+++ b/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts
@@ -9,8 +9,8 @@ import { IdentityTokenResponse } from "@bitwarden/common/auth/models/response/id
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
diff --git a/libs/auth/src/common/login-strategies/login.strategy.spec.ts b/libs/auth/src/common/login-strategies/login.strategy.spec.ts
index a8208a1e0ad..fbd6b79f19d 100644
--- a/libs/auth/src/common/login-strategies/login.strategy.spec.ts
+++ b/libs/auth/src/common/login-strategies/login.strategy.spec.ts
@@ -21,8 +21,8 @@ import { IUserDecryptionOptionsServerResponse } from "@bitwarden/common/auth/mod
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
diff --git a/libs/auth/src/common/login-strategies/login.strategy.ts b/libs/auth/src/common/login-strategies/login.strategy.ts
index 6b1dcfb155c..b4eef1a0276 100644
--- a/libs/auth/src/common/login-strategies/login.strategy.ts
+++ b/libs/auth/src/common/login-strategies/login.strategy.ts
@@ -22,9 +22,9 @@ import { IdentityTwoFactorResponse } from "@bitwarden/common/auth/models/respons
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { ClientType } from "@bitwarden/common/enums";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { KeysRequest } from "@bitwarden/common/models/request/keys.request";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
diff --git a/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts
index d572710a2fd..1b0613d4da3 100644
--- a/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts
+++ b/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts
@@ -13,8 +13,8 @@ import { MasterPasswordPolicyResponse } from "@bitwarden/common/auth/models/resp
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
diff --git a/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts
index ec3ec43134f..96b08e98e37 100644
--- a/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts
+++ b/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts
@@ -13,9 +13,9 @@ import { IUserDecryptionOptionsServerResponse } from "@bitwarden/common/auth/mod
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
diff --git a/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts
index 2bb41faa0e1..dd3e7f0134d 100644
--- a/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts
+++ b/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts
@@ -8,8 +8,8 @@ import { TwoFactorService } from "@bitwarden/common/auth/abstractions/two-factor
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import {
Environment,
EnvironmentService,
diff --git a/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts
index 9dacce2cf00..fd8817a8c21 100644
--- a/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts
+++ b/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts
@@ -11,8 +11,8 @@ import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/maste
import { WebAuthnLoginAssertionResponseRequest } from "@bitwarden/common/auth/services/webauthn-login/request/webauthn-login-assertion-response.request";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
diff --git a/libs/auth/src/common/services/auth-request/auth-request.service.spec.ts b/libs/auth/src/common/services/auth-request/auth-request.service.spec.ts
index 86b2a1dd3b6..2ea6d427641 100644
--- a/libs/auth/src/common/services/auth-request/auth-request.service.spec.ts
+++ b/libs/auth/src/common/services/auth-request/auth-request.service.spec.ts
@@ -3,9 +3,9 @@ import { mock } from "jest-mock-extended";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { AuthRequestResponse } from "@bitwarden/common/auth/models/response/auth-request.response";
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AuthRequestPushNotification } from "@bitwarden/common/models/response/notification.response";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
diff --git a/libs/auth/src/common/services/auth-request/auth-request.service.ts b/libs/auth/src/common/services/auth-request/auth-request.service.ts
index 4bc0397b43a..5bc200ae1e8 100644
--- a/libs/auth/src/common/services/auth-request/auth-request.service.ts
+++ b/libs/auth/src/common/services/auth-request/auth-request.service.ts
@@ -9,9 +9,9 @@ import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth
import { AdminAuthRequestStorable } from "@bitwarden/common/auth/models/domain/admin-auth-req-storable";
import { PasswordlessAuthRequest } from "@bitwarden/common/auth/models/request/passwordless-auth.request";
import { AuthRequestResponse } from "@bitwarden/common/auth/models/response/auth-request.response";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AuthRequestPushNotification } from "@bitwarden/common/models/response/notification.response";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
diff --git a/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts b/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts
index 3b03e8754bc..117e5c1f864 100644
--- a/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts
+++ b/libs/auth/src/common/services/login-strategies/login-strategy.service.spec.ts
@@ -17,8 +17,8 @@ import { PreloginResponse } from "@bitwarden/common/auth/models/response/prelogi
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
diff --git a/libs/auth/src/common/services/login-strategies/login-strategy.service.ts b/libs/auth/src/common/services/login-strategies/login-strategy.service.ts
index e3a20fcfe72..849b8e5eba1 100644
--- a/libs/auth/src/common/services/login-strategies/login-strategy.service.ts
+++ b/libs/auth/src/common/services/login-strategies/login-strategy.service.ts
@@ -22,10 +22,10 @@ import { AuthenticationType } from "@bitwarden/common/auth/enums/authentication-
import { AuthResult } from "@bitwarden/common/auth/models/domain/auth-result";
import { TokenTwoFactorRequest } from "@bitwarden/common/auth/models/request/identity-token/token-two-factor.request";
import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { PreloginRequest } from "@bitwarden/common/models/request/prelogin.request";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
diff --git a/libs/auth/src/common/services/pin/pin.service.implementation.ts b/libs/auth/src/common/services/pin/pin.service.implementation.ts
index 01fc77e4a03..9b86440b364 100644
--- a/libs/auth/src/common/services/pin/pin.service.implementation.ts
+++ b/libs/auth/src/common/services/pin/pin.service.implementation.ts
@@ -4,8 +4,8 @@ import { firstValueFrom, map } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { MasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { KeyGenerationService } from "@bitwarden/common/platform/abstractions/key-generation.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
diff --git a/libs/auth/src/common/services/pin/pin.service.spec.ts b/libs/auth/src/common/services/pin/pin.service.spec.ts
index d254be4e875..1d6443535bc 100644
--- a/libs/auth/src/common/services/pin/pin.service.spec.ts
+++ b/libs/auth/src/common/services/pin/pin.service.spec.ts
@@ -1,8 +1,8 @@
import { mock } from "jest-mock-extended";
import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service";
+import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service";
-import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
import { KeyGenerationService } from "@bitwarden/common/platform/abstractions/key-generation.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
diff --git a/libs/common/spec/fake-account-service.ts b/libs/common/spec/fake-account-service.ts
index d45448ce698..ba48181faa2 100644
--- a/libs/common/spec/fake-account-service.ts
+++ b/libs/common/spec/fake-account-service.ts
@@ -1,7 +1,7 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { mock } from "jest-mock-extended";
-import { ReplaySubject, combineLatest, map } from "rxjs";
+import { ReplaySubject, combineLatest, map, Observable } from "rxjs";
import { Account, AccountInfo, AccountService } from "../src/auth/abstractions/account.service";
import { UserId } from "../src/types/guid";
@@ -55,7 +55,7 @@ export class FakeAccountService implements AccountService {
}),
);
}
- get nextUpAccount$() {
+ get nextUpAccount$(): Observable {
return combineLatest([this.accounts$, this.activeAccount$, this.sortedUserIds$]).pipe(
map(([accounts, activeAccount, sortedUserIds]) => {
const nextId = sortedUserIds.find((id) => id !== activeAccount?.id && accounts[id] != null);
diff --git a/libs/common/spec/fake-state-provider.ts b/libs/common/spec/fake-state-provider.ts
index b5105bb24ba..9f72ccada55 100644
--- a/libs/common/spec/fake-state-provider.ts
+++ b/libs/common/spec/fake-state-provider.ts
@@ -225,9 +225,9 @@ export class FakeStateProvider implements StateProvider {
async setUserState(
userKeyDefinition: UserKeyDefinition,
- value: T,
+ value: T | null,
userId?: UserId,
- ): Promise<[UserId, T]> {
+ ): Promise<[UserId, T | null]> {
await this.mock.setUserState(userKeyDefinition, value, userId);
if (userId) {
return [userId, await this.getUser(userId, userKeyDefinition).update(() => value)];
diff --git a/libs/common/spec/fake-state.ts b/libs/common/spec/fake-state.ts
index e4b42e357b6..00b12de2eb1 100644
--- a/libs/common/spec/fake-state.ts
+++ b/libs/common/spec/fake-state.ts
@@ -131,9 +131,9 @@ export class FakeSingleUserState implements SingleUserState {
}
async update(
- configureState: (state: T, dependency: TCombine) => T,
+ configureState: (state: T | null, dependency: TCombine) => T | null,
options?: StateUpdateOptions,
- ): Promise {
+ ): Promise {
options = populateOptionsWithDefault(options);
const current = await firstValueFrom(this.state$.pipe(timeout(options.msTimeout)));
const combinedDependencies =
@@ -206,9 +206,9 @@ export class FakeActiveUserState implements ActiveUserState {
}
async update(
- configureState: (state: T, dependency: TCombine) => T,
+ configureState: (state: T | null, dependency: TCombine) => T | null,
options?: StateUpdateOptions,
- ): Promise<[UserId, T]> {
+ ): Promise<[UserId, T | null]> {
options = populateOptionsWithDefault(options);
const current = await firstValueFrom(this.state$.pipe(timeout(options.msTimeout)));
const combinedDependencies =
diff --git a/libs/common/src/admin-console/abstractions/provider/provider-api.service.abstraction.ts b/libs/common/src/admin-console/abstractions/provider/provider-api.service.abstraction.ts
index f348e7487de..ffe79f0ad3b 100644
--- a/libs/common/src/admin-console/abstractions/provider/provider-api.service.abstraction.ts
+++ b/libs/common/src/admin-console/abstractions/provider/provider-api.service.abstraction.ts
@@ -1,5 +1,7 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
+import { AddableOrganizationResponse } from "@bitwarden/common/admin-console/models/response/addable-organization.response";
+
import { ProviderSetupRequest } from "../../models/request/provider/provider-setup.request";
import { ProviderUpdateRequest } from "../../models/request/provider/provider-update.request";
import { ProviderVerifyRecoverDeleteRequest } from "../../models/request/provider/provider-verify-recover-delete.request";
@@ -14,4 +16,12 @@ export class ProviderApiServiceAbstraction {
request: ProviderVerifyRecoverDeleteRequest,
) => Promise;
deleteProvider: (id: string) => Promise;
+ getProviderAddableOrganizations: (providerId: string) => Promise;
+ addOrganizationToProvider: (
+ providerId: string,
+ request: {
+ key: string;
+ organizationId: string;
+ },
+ ) => Promise;
}
diff --git a/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts b/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts
index 1f8c4e8c42d..5f8fe3349b6 100644
--- a/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts
+++ b/libs/common/src/admin-console/models/domain/encrypted-organization-key.ts
@@ -1,4 +1,4 @@
-import { EncryptService } from "../../../platform/abstractions/encrypt.service";
+import { EncryptService } from "../../../key-management/crypto/abstractions/encrypt.service";
import { EncString } from "../../../platform/models/domain/enc-string";
import { SymmetricCryptoKey } from "../../../platform/models/domain/symmetric-crypto-key";
import { OrgKey, UserPrivateKey } from "../../../types/key";
diff --git a/libs/common/src/admin-console/models/response/addable-organization.response.ts b/libs/common/src/admin-console/models/response/addable-organization.response.ts
new file mode 100644
index 00000000000..74ae5f45690
--- /dev/null
+++ b/libs/common/src/admin-console/models/response/addable-organization.response.ts
@@ -0,0 +1,18 @@
+import { BaseResponse } from "@bitwarden/common/models/response/base.response";
+
+export class AddableOrganizationResponse extends BaseResponse {
+ id: string;
+ plan: string;
+ name: string;
+ seats: number;
+ disabled: boolean;
+
+ constructor(response: any) {
+ super(response);
+ this.id = this.getResponseProperty("id");
+ this.plan = this.getResponseProperty("plan");
+ this.name = this.getResponseProperty("name");
+ this.seats = this.getResponseProperty("seats");
+ this.disabled = this.getResponseProperty("disabled");
+ }
+}
diff --git a/libs/common/src/admin-console/services/provider/provider-api.service.ts b/libs/common/src/admin-console/services/provider/provider-api.service.ts
index 2ee921393ff..dc82ec011f4 100644
--- a/libs/common/src/admin-console/services/provider/provider-api.service.ts
+++ b/libs/common/src/admin-console/services/provider/provider-api.service.ts
@@ -1,3 +1,5 @@
+import { AddableOrganizationResponse } from "@bitwarden/common/admin-console/models/response/addable-organization.response";
+
import { ApiService } from "../../../abstractions/api.service";
import { ProviderApiServiceAbstraction } from "../../abstractions/provider/provider-api.service.abstraction";
import { ProviderSetupRequest } from "../../models/request/provider/provider-setup.request";
@@ -44,4 +46,34 @@ export class ProviderApiService implements ProviderApiServiceAbstraction {
async deleteProvider(id: string): Promise {
await this.apiService.send("DELETE", "/providers/" + id, null, true, false);
}
+
+ async getProviderAddableOrganizations(
+ providerId: string,
+ ): Promise {
+ const response = await this.apiService.send(
+ "GET",
+ "/providers/" + providerId + "/clients/addable",
+ null,
+ true,
+ true,
+ );
+
+ return response.map((data: any) => new AddableOrganizationResponse(data));
+ }
+
+ addOrganizationToProvider(
+ providerId: string,
+ request: {
+ key: string;
+ organizationId: string;
+ },
+ ): Promise {
+ return this.apiService.send(
+ "POST",
+ "/providers/" + providerId + "/clients/existing",
+ request,
+ true,
+ false,
+ );
+ }
}
diff --git a/libs/common/src/auth/abstractions/sso-login.service.abstraction.ts b/libs/common/src/auth/abstractions/sso-login.service.abstraction.ts
index 3f3731e0e1b..b30739d94a8 100644
--- a/libs/common/src/auth/abstractions/sso-login.service.abstraction.ts
+++ b/libs/common/src/auth/abstractions/sso-login.service.abstraction.ts
@@ -1,5 +1,5 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
+import { UserId } from "@bitwarden/common/types/guid";
+
export abstract class SsoLoginServiceAbstraction {
/**
* Gets the code verifier used for SSO.
@@ -11,7 +11,7 @@ export abstract class SsoLoginServiceAbstraction {
* @see https://datatracker.ietf.org/doc/html/rfc7636
* @returns The code verifier used for SSO.
*/
- getCodeVerifier: () => Promise;
+ abstract getCodeVerifier: () => Promise;
/**
* Sets the code verifier used for SSO.
*
@@ -21,7 +21,7 @@ export abstract class SsoLoginServiceAbstraction {
* and verify it matches the one sent in the request for the `authorization_code`.
* @see https://datatracker.ietf.org/doc/html/rfc7636
*/
- setCodeVerifier: (codeVerifier: string) => Promise;
+ abstract setCodeVerifier: (codeVerifier: string) => Promise;
/**
* Gets the value of the SSO state.
*
@@ -31,7 +31,7 @@ export abstract class SsoLoginServiceAbstraction {
* @see https://datatracker.ietf.org/doc/html/rfc6749#section-4.1
* @returns The SSO state.
*/
- getSsoState: () => Promise;
+ abstract getSsoState: () => Promise;
/**
* Sets the value of the SSO state.
*
@@ -40,7 +40,7 @@ export abstract class SsoLoginServiceAbstraction {
* returns the `state` in the callback and the client verifies that the value returned matches the value sent.
* @see https://datatracker.ietf.org/doc/html/rfc6749#section-4.1
*/
- setSsoState: (ssoState: string) => Promise;
+ abstract setSsoState: (ssoState: string) => Promise;
/**
* Gets the value of the user's organization sso identifier.
*
@@ -48,20 +48,20 @@ export abstract class SsoLoginServiceAbstraction {
* Do not use this value outside of the SSO login flow.
* @returns The user's organization identifier.
*/
- getOrganizationSsoIdentifier: () => Promise;
+ abstract getOrganizationSsoIdentifier: () => Promise;
/**
* Sets the value of the user's organization sso identifier.
*
* This should only be used during the SSO flow to identify the organization that the user is attempting to log in to.
* Do not use this value outside of the SSO login flow.
*/
- setOrganizationSsoIdentifier: (organizationIdentifier: string) => Promise;
+ abstract setOrganizationSsoIdentifier: (organizationIdentifier: string) => Promise;
/**
* Gets the user's email.
* Note: This should only be used during the SSO flow to identify the user that is attempting to log in.
* @returns The user's email.
*/
- getSsoEmail: () => Promise;
+ abstract getSsoEmail: () => Promise;
/**
* Sets the user's email.
* Note: This should only be used during the SSO flow to identify the user that is attempting to log in.
@@ -69,17 +69,21 @@ export abstract class SsoLoginServiceAbstraction {
* @returns A promise that resolves when the email has been set.
*
*/
- setSsoEmail: (email: string) => Promise;
+ abstract setSsoEmail: (email: string) => Promise;
/**
* Gets the value of the active user's organization sso identifier.
*
* This should only be used post successful SSO login once the user is initialized.
+ * @param userId The user id for retrieving the org identifier state.
*/
- getActiveUserOrganizationSsoIdentifier: () => Promise;
+ abstract getActiveUserOrganizationSsoIdentifier: (userId: UserId) => Promise;
/**
* Sets the value of the active user's organization sso identifier.
*
* This should only be used post successful SSO login once the user is initialized.
*/
- setActiveUserOrganizationSsoIdentifier: (organizationIdentifier: string) => Promise;
+ abstract setActiveUserOrganizationSsoIdentifier: (
+ organizationIdentifier: string,
+ userId: UserId | undefined,
+ ) => Promise;
}
diff --git a/libs/common/src/auth/services/auth.service.spec.ts b/libs/common/src/auth/services/auth.service.spec.ts
index 4b7b8a2b262..fc236c91a21 100644
--- a/libs/common/src/auth/services/auth.service.spec.ts
+++ b/libs/common/src/auth/services/auth.service.spec.ts
@@ -1,9 +1,8 @@
import { MockProxy, mock } from "jest-mock-extended";
import { firstValueFrom, of } from "rxjs";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
+import { KeyService } from "@bitwarden/key-management";
+
import {
FakeAccountService,
makeStaticByteArray,
diff --git a/libs/common/src/auth/services/auth.service.ts b/libs/common/src/auth/services/auth.service.ts
index d855a1be34f..da70baf3999 100644
--- a/libs/common/src/auth/services/auth.service.ts
+++ b/libs/common/src/auth/services/auth.service.ts
@@ -11,9 +11,8 @@ import {
switchMap,
} from "rxjs";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
+import { KeyService } from "@bitwarden/key-management";
+
import { ApiService } from "../../abstractions/api.service";
import { StateService } from "../../platform/abstractions/state.service";
import { MessageSender } from "../../platform/messaging";
diff --git a/libs/common/src/auth/services/device-trust.service.implementation.ts b/libs/common/src/auth/services/device-trust.service.implementation.ts
index 15c12b7a39a..fe43df53c48 100644
--- a/libs/common/src/auth/services/device-trust.service.implementation.ts
+++ b/libs/common/src/auth/services/device-trust.service.implementation.ts
@@ -3,14 +3,12 @@
import { firstValueFrom, map, Observable } from "rxjs";
import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
+import { KeyService } from "@bitwarden/key-management";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
+import { EncryptService } from "../../key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "../../platform/abstractions/app-id.service";
import { ConfigService } from "../../platform/abstractions/config/config.service";
import { CryptoFunctionService } from "../../platform/abstractions/crypto-function.service";
-import { EncryptService } from "../../platform/abstractions/encrypt.service";
import { I18nService } from "../../platform/abstractions/i18n.service";
import { KeyGenerationService } from "../../platform/abstractions/key-generation.service";
import { LogService } from "../../platform/abstractions/log.service";
diff --git a/libs/common/src/auth/services/device-trust.service.spec.ts b/libs/common/src/auth/services/device-trust.service.spec.ts
index 9f344e203c9..e689c93395d 100644
--- a/libs/common/src/auth/services/device-trust.service.spec.ts
+++ b/libs/common/src/auth/services/device-trust.service.spec.ts
@@ -4,21 +4,19 @@ import { matches, mock } from "jest-mock-extended";
import { BehaviorSubject, firstValueFrom, of } from "rxjs";
import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
+import { KeyService } from "@bitwarden/key-management";
// FIXME: remove `src` and fix import
// eslint-disable-next-line no-restricted-imports
import { UserDecryptionOptions } from "../../../../auth/src/common/models/domain/user-decryption-options";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
import { FakeAccountService, mockAccountServiceWith } from "../../../spec/fake-account-service";
import { FakeActiveUserState } from "../../../spec/fake-state";
import { FakeStateProvider } from "../../../spec/fake-state-provider";
import { DeviceType } from "../../enums";
+import { EncryptService } from "../../key-management/crypto/abstractions/encrypt.service";
import { AppIdService } from "../../platform/abstractions/app-id.service";
import { ConfigService } from "../../platform/abstractions/config/config.service";
import { CryptoFunctionService } from "../../platform/abstractions/crypto-function.service";
-import { EncryptService } from "../../platform/abstractions/encrypt.service";
import { I18nService } from "../../platform/abstractions/i18n.service";
import { KeyGenerationService } from "../../platform/abstractions/key-generation.service";
import { LogService } from "../../platform/abstractions/log.service";
diff --git a/libs/common/src/auth/services/key-connector.service.spec.ts b/libs/common/src/auth/services/key-connector.service.spec.ts
index 165dcee1ea8..ec03c7ece55 100644
--- a/libs/common/src/auth/services/key-connector.service.spec.ts
+++ b/libs/common/src/auth/services/key-connector.service.spec.ts
@@ -2,10 +2,8 @@ import { mock } from "jest-mock-extended";
import { of } from "rxjs";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
+import { KeyService } from "@bitwarden/key-management";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
import { FakeAccountService, FakeStateProvider, mockAccountServiceWith } from "../../../spec";
import { ApiService } from "../../abstractions/api.service";
import { OrganizationData } from "../../admin-console/models/data/organization.data";
diff --git a/libs/common/src/auth/services/master-password/master-password.service.ts b/libs/common/src/auth/services/master-password/master-password.service.ts
index 14e7522a836..9b5ce588bd3 100644
--- a/libs/common/src/auth/services/master-password/master-password.service.ts
+++ b/libs/common/src/auth/services/master-password/master-password.service.ts
@@ -2,7 +2,7 @@
// @ts-strict-ignore
import { firstValueFrom, map, Observable } from "rxjs";
-import { EncryptService } from "../../../platform/abstractions/encrypt.service";
+import { EncryptService } from "../../../key-management/crypto/abstractions/encrypt.service";
import { KeyGenerationService } from "../../../platform/abstractions/key-generation.service";
import { LogService } from "../../../platform/abstractions/log.service";
import { StateService } from "../../../platform/abstractions/state.service";
diff --git a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts
index ddd24ae7907..8516400fe09 100644
--- a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts
+++ b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts
@@ -2,13 +2,11 @@ import { mock, MockProxy } from "jest-mock-extended";
import { BehaviorSubject } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
+import { KeyService } from "@bitwarden/key-management";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationAutoEnrollStatusResponse } from "../../admin-console/models/response/organization-auto-enroll-status.response";
-import { EncryptService } from "../../platform/abstractions/encrypt.service";
+import { EncryptService } from "../../key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "../../platform/abstractions/i18n.service";
import { UserId } from "../../types/guid";
import { Account, AccountInfo, AccountService } from "../abstractions/account.service";
diff --git a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts
index 22d5384e6ac..824521d8a2e 100644
--- a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts
+++ b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts
@@ -6,12 +6,10 @@ import {
OrganizationUserApiService,
OrganizationUserResetPasswordEnrollmentRequest,
} from "@bitwarden/admin-console/common";
+import { KeyService } from "@bitwarden/key-management";
-// FIXME: remove `src` and fix import
-// eslint-disable-next-line no-restricted-imports
-import { KeyService } from "../../../../key-management/src/abstractions/key.service";
import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction";
-import { EncryptService } from "../../platform/abstractions/encrypt.service";
+import { EncryptService } from "../../key-management/crypto/abstractions/encrypt.service";
import { I18nService } from "../../platform/abstractions/i18n.service";
import { Utils } from "../../platform/misc/utils";
import { UserKey } from "../../types/key";
diff --git a/libs/common/src/auth/services/sso-login.service.spec.ts b/libs/common/src/auth/services/sso-login.service.spec.ts
new file mode 100644
index 00000000000..6764755e6ca
--- /dev/null
+++ b/libs/common/src/auth/services/sso-login.service.spec.ts
@@ -0,0 +1,94 @@
+import { mock, MockProxy } from "jest-mock-extended";
+
+import {
+ CODE_VERIFIER,
+ GLOBAL_ORGANIZATION_SSO_IDENTIFIER,
+ SSO_EMAIL,
+ SSO_STATE,
+ SsoLoginService,
+ USER_ORGANIZATION_SSO_IDENTIFIER,
+} from "@bitwarden/common/auth/services/sso-login.service";
+import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
+import { Utils } from "@bitwarden/common/platform/misc/utils";
+import { UserId } from "@bitwarden/common/types/guid";
+
+import { FakeAccountService, FakeStateProvider, mockAccountServiceWith } from "../../../spec";
+
+describe("SSOLoginService ", () => {
+ let sut: SsoLoginService;
+
+ let accountService: FakeAccountService;
+ let mockSingleUserStateProvider: FakeStateProvider;
+ let mockLogService: MockProxy;
+ let userId: UserId;
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+
+ userId = Utils.newGuid() as UserId;
+ accountService = mockAccountServiceWith(userId);
+ mockSingleUserStateProvider = new FakeStateProvider(accountService);
+ mockLogService = mock();
+
+ sut = new SsoLoginService(mockSingleUserStateProvider, mockLogService);
+ });
+
+ it("instantiates", () => {
+ expect(sut).not.toBeFalsy();
+ });
+
+ it("gets and sets code verifier", async () => {
+ const codeVerifier = "test-code-verifier";
+ await sut.setCodeVerifier(codeVerifier);
+ mockSingleUserStateProvider.getGlobal(CODE_VERIFIER);
+
+ const result = await sut.getCodeVerifier();
+ expect(result).toBe(codeVerifier);
+ });
+
+ it("gets and sets SSO state", async () => {
+ const ssoState = "test-sso-state";
+ await sut.setSsoState(ssoState);
+ mockSingleUserStateProvider.getGlobal(SSO_STATE);
+
+ const result = await sut.getSsoState();
+ expect(result).toBe(ssoState);
+ });
+
+ it("gets and sets organization SSO identifier", async () => {
+ const orgIdentifier = "test-org-identifier";
+ await sut.setOrganizationSsoIdentifier(orgIdentifier);
+ mockSingleUserStateProvider.getGlobal(GLOBAL_ORGANIZATION_SSO_IDENTIFIER);
+
+ const result = await sut.getOrganizationSsoIdentifier();
+ expect(result).toBe(orgIdentifier);
+ });
+
+ it("gets and sets SSO email", async () => {
+ const email = "test@example.com";
+ await sut.setSsoEmail(email);
+ mockSingleUserStateProvider.getGlobal(SSO_EMAIL);
+
+ const result = await sut.getSsoEmail();
+ expect(result).toBe(email);
+ });
+
+ it("gets and sets active user organization SSO identifier", async () => {
+ const userId = Utils.newGuid() as UserId;
+ const orgIdentifier = "test-active-org-identifier";
+ await sut.setActiveUserOrganizationSsoIdentifier(orgIdentifier, userId);
+ mockSingleUserStateProvider.getUser(userId, USER_ORGANIZATION_SSO_IDENTIFIER);
+
+ const result = await sut.getActiveUserOrganizationSsoIdentifier(userId);
+ expect(result).toBe(orgIdentifier);
+ });
+
+ it("logs error when setting active user organization SSO identifier with undefined userId", async () => {
+ const orgIdentifier = "test-active-org-identifier";
+ await sut.setActiveUserOrganizationSsoIdentifier(orgIdentifier, undefined);
+
+ expect(mockLogService.error).toHaveBeenCalledWith(
+ "Tried to set a user organization sso identifier with an undefined user id.",
+ );
+ });
+});
diff --git a/libs/common/src/auth/services/sso-login.service.ts b/libs/common/src/auth/services/sso-login.service.ts
index 32019e8d568..9b4b8656782 100644
--- a/libs/common/src/auth/services/sso-login.service.ts
+++ b/libs/common/src/auth/services/sso-login.service.ts
@@ -1,11 +1,12 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
import { firstValueFrom } from "rxjs";
+import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
+import { UserId } from "@bitwarden/common/types/guid";
+
import {
- ActiveUserState,
GlobalState,
KeyDefinition,
+ SingleUserState,
SSO_DISK,
StateProvider,
UserKeyDefinition,
@@ -15,21 +16,21 @@ import { SsoLoginServiceAbstraction } from "../abstractions/sso-login.service.ab
/**
* Uses disk storage so that the code verifier can be persisted across sso redirects.
*/
-const CODE_VERIFIER = new KeyDefinition(SSO_DISK, "ssoCodeVerifier", {
+export const CODE_VERIFIER = new KeyDefinition(SSO_DISK, "ssoCodeVerifier", {
deserializer: (codeVerifier) => codeVerifier,
});
/**
* Uses disk storage so that the sso state can be persisted across sso redirects.
*/
-const SSO_STATE = new KeyDefinition(SSO_DISK, "ssoState", {
+export const SSO_STATE = new KeyDefinition(SSO_DISK, "ssoState", {
deserializer: (state) => state,
});
/**
* Uses disk storage so that the organization sso identifier can be persisted across sso redirects.
*/
-const USER_ORGANIZATION_SSO_IDENTIFIER = new UserKeyDefinition(
+export const USER_ORGANIZATION_SSO_IDENTIFIER = new UserKeyDefinition(
SSO_DISK,
"organizationSsoIdentifier",
{
@@ -41,7 +42,7 @@ const USER_ORGANIZATION_SSO_IDENTIFIER = new UserKeyDefinition(
/**
* Uses disk storage so that the organization sso identifier can be persisted across sso redirects.
*/
-const GLOBAL_ORGANIZATION_SSO_IDENTIFIER = new KeyDefinition(
+export const GLOBAL_ORGANIZATION_SSO_IDENTIFIER = new KeyDefinition(
SSO_DISK,
"organizationSsoIdentifier",
{
@@ -52,7 +53,7 @@ const GLOBAL_ORGANIZATION_SSO_IDENTIFIER = new KeyDefinition(
/**
* Uses disk storage so that the user's email can be persisted across sso redirects.
*/
-const SSO_EMAIL = new KeyDefinition(SSO_DISK, "ssoEmail", {
+export const SSO_EMAIL = new KeyDefinition(SSO_DISK, "ssoEmail", {
deserializer: (state) => state,
});
@@ -61,19 +62,18 @@ export class SsoLoginService implements SsoLoginServiceAbstraction {
private ssoState: GlobalState;
private orgSsoIdentifierState: GlobalState;
private ssoEmailState: GlobalState;
- private activeUserOrgSsoIdentifierState: ActiveUserState;
- constructor(private stateProvider: StateProvider) {
+ constructor(
+ private stateProvider: StateProvider,
+ private logService: LogService,
+ ) {
this.codeVerifierState = this.stateProvider.getGlobal(CODE_VERIFIER);
this.ssoState = this.stateProvider.getGlobal(SSO_STATE);
this.orgSsoIdentifierState = this.stateProvider.getGlobal(GLOBAL_ORGANIZATION_SSO_IDENTIFIER);
this.ssoEmailState = this.stateProvider.getGlobal(SSO_EMAIL);
- this.activeUserOrgSsoIdentifierState = this.stateProvider.getActive(
- USER_ORGANIZATION_SSO_IDENTIFIER,
- );
}
- getCodeVerifier(): Promise {
+ getCodeVerifier(): Promise {
return firstValueFrom(this.codeVerifierState.state$);
}
@@ -81,7 +81,7 @@ export class SsoLoginService implements SsoLoginServiceAbstraction {
await this.codeVerifierState.update((_) => codeVerifier);
}
- getSsoState(): Promise {
+ getSsoState(): Promise {
return firstValueFrom(this.ssoState.state$);
}
@@ -89,7 +89,7 @@ export class SsoLoginService implements SsoLoginServiceAbstraction {
await this.ssoState.update((_) => ssoState);
}
- getOrganizationSsoIdentifier(): Promise {
+ getOrganizationSsoIdentifier(): Promise {
return firstValueFrom(this.orgSsoIdentifierState.state$);
}
@@ -97,7 +97,7 @@ export class SsoLoginService implements SsoLoginServiceAbstraction {
await this.orgSsoIdentifierState.update((_) => organizationIdentifier);
}
- getSsoEmail(): Promise {
+ getSsoEmail(): Promise {
return firstValueFrom(this.ssoEmailState.state$);
}
@@ -105,11 +105,24 @@ export class SsoLoginService implements SsoLoginServiceAbstraction {
await this.ssoEmailState.update((_) => email);
}
- getActiveUserOrganizationSsoIdentifier(): Promise {
- return firstValueFrom(this.activeUserOrgSsoIdentifierState.state$);
+ getActiveUserOrganizationSsoIdentifier(userId: UserId): Promise {
+ return firstValueFrom(this.userOrgSsoIdentifierState(userId).state$);
}
- async setActiveUserOrganizationSsoIdentifier(organizationIdentifier: string): Promise {
- await this.activeUserOrgSsoIdentifierState.update((_) => organizationIdentifier);
+ async setActiveUserOrganizationSsoIdentifier(
+ organizationIdentifier: string,
+ userId: UserId | undefined,
+ ): Promise |