From 30af3d7035c2c2183c0e591bbf520750f95af658 Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Tue, 9 Sep 2025 13:39:24 -0700 Subject: [PATCH 001/249] [PM-24985][PM-24986][PM-25211][PM-24987] - [Vault] Migrate components to use Premium badge component (#16227) * migrate all components to use PremiumBadgeComponent * move badge component to vault * move premium badge to vault * move premium badge to billing * fix import * use premium badge in tools new send dropdown * remove badge module import * remove module --- .../settings/organization-settings.module.ts | 2 +- .../emergency-access-add-edit.component.ts | 2 +- .../emergency-access.component.ts | 2 +- .../two-factor/two-factor-setup.component.ts | 2 +- .../shared/report-card/report-card.stories.ts | 2 +- .../shared/report-list/report-list.stories.ts | 2 +- .../new-send/new-send-dropdown.component.html | 14 ++++---------- .../new-send/new-send-dropdown.component.ts | 13 ++++++------- .../vault-item-dialog.component.html | 13 +++---------- .../vault-item-dialog.component.ts | 2 ++ .../billing/components/premium-badge/index.ts | 1 + .../premium-badge}/premium-badge.component.ts | 3 ++- .../premium-badge}/premium-badge.stories.ts | 2 +- .../new-send-dropdown.component.html | 10 +++++----- .../new-send-dropdown.component.ts | 8 ++++---- .../login-credentials-view.component.html | 17 +++++------------ .../login-credentials-view.component.ts | 2 ++ 17 files changed, 41 insertions(+), 56 deletions(-) create mode 100644 libs/angular/src/billing/components/premium-badge/index.ts rename {apps/web/src/app/vault/components => libs/angular/src/billing/components/premium-badge}/premium-badge.component.ts (91%) rename {apps/web/src/app/vault/components => libs/angular/src/billing/components/premium-badge}/premium-badge.stories.ts (98%) diff --git a/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts b/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts index 9b0c3035e98..7065e8e799c 100644 --- a/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts +++ b/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts @@ -1,12 +1,12 @@ import { NgModule } from "@angular/core"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { ItemModule } from "@bitwarden/components"; import { DangerZoneComponent } from "../../../auth/settings/account/danger-zone.component"; import { HeaderModule } from "../../../layouts/header/header.module"; import { SharedModule } from "../../../shared"; import { AccountFingerprintComponent } from "../../../shared/components/account-fingerprint/account-fingerprint.component"; -import { PremiumBadgeComponent } from "../../../vault/components/premium-badge.component"; import { PoliciesModule } from "../../organizations/policies"; import { AccountComponent } from "./account.component"; diff --git a/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts b/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts index baa0f396fc5..04b549e7f05 100644 --- a/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/emergency-access-add-edit.component.ts @@ -3,6 +3,7 @@ import { Component, Inject, OnInit } from "@angular/core"; import { FormBuilder, Validators } from "@angular/forms"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; 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"; @@ -15,7 +16,6 @@ import { } from "@bitwarden/components"; import { SharedModule } from "../../../shared/shared.module"; -import { PremiumBadgeComponent } from "../../../vault/components/premium-badge.component"; import { EmergencyAccessService } from "../../emergency-access"; import { EmergencyAccessType } from "../../emergency-access/enums/emergency-access-type"; diff --git a/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts b/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts index 6de647dc5ce..de30205e6fe 100644 --- a/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts @@ -3,6 +3,7 @@ import { Component, OnInit } from "@angular/core"; import { lastValueFrom, Observable, firstValueFrom, switchMap } from "rxjs"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; @@ -20,7 +21,6 @@ import { DialogService, ToastService } from "@bitwarden/components"; import { HeaderModule } from "../../../layouts/header/header.module"; import { SharedModule } from "../../../shared/shared.module"; -import { PremiumBadgeComponent } from "../../../vault/components/premium-badge.component"; import { EmergencyAccessService } from "../../emergency-access"; import { EmergencyAccessStatusType } from "../../emergency-access/enums/emergency-access-status-type"; import { EmergencyAccessType } from "../../emergency-access/enums/emergency-access-type"; diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts index e538e72a77e..043c27998cd 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts @@ -12,6 +12,7 @@ import { switchMap, } from "rxjs"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; 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"; @@ -35,7 +36,6 @@ import { DialogRef, DialogService, ItemModule } from "@bitwarden/components"; import { HeaderModule } from "../../../layouts/header/header.module"; import { SharedModule } from "../../../shared/shared.module"; -import { PremiumBadgeComponent } from "../../../vault/components/premium-badge.component"; import { TwoFactorRecoveryComponent } from "./two-factor-recovery.component"; import { TwoFactorSetupAuthenticatorComponent } from "./two-factor-setup-authenticator.component"; diff --git a/apps/web/src/app/dirt/reports/shared/report-card/report-card.stories.ts b/apps/web/src/app/dirt/reports/shared/report-card/report-card.stories.ts index d6a330b55d7..76951bf9451 100644 --- a/apps/web/src/app/dirt/reports/shared/report-card/report-card.stories.ts +++ b/apps/web/src/app/dirt/reports/shared/report-card/report-card.stories.ts @@ -2,11 +2,11 @@ import { importProvidersFrom } from "@angular/core"; import { RouterTestingModule } from "@angular/router/testing"; import { Meta, StoryObj, applicationConfig, moduleMetadata } from "@storybook/angular"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { BadgeModule, IconModule } from "@bitwarden/components"; import { PreloadedEnglishI18nModule } from "../../../../core/tests"; -import { PremiumBadgeComponent } from "../../../../vault/components/premium-badge.component"; import { ReportVariant } from "../models/report-variant"; import { ReportCardComponent } from "./report-card.component"; diff --git a/apps/web/src/app/dirt/reports/shared/report-list/report-list.stories.ts b/apps/web/src/app/dirt/reports/shared/report-list/report-list.stories.ts index 13523174913..22c7e851bed 100644 --- a/apps/web/src/app/dirt/reports/shared/report-list/report-list.stories.ts +++ b/apps/web/src/app/dirt/reports/shared/report-list/report-list.stories.ts @@ -2,11 +2,11 @@ import { importProvidersFrom } from "@angular/core"; import { RouterTestingModule } from "@angular/router/testing"; import { Meta, StoryObj, applicationConfig, moduleMetadata } from "@storybook/angular"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { BadgeModule, IconModule } from "@bitwarden/components"; import { PreloadedEnglishI18nModule } from "../../../../core/tests"; -import { PremiumBadgeComponent } from "../../../../vault/components/premium-badge.component"; import { reports } from "../../reports"; import { ReportVariant } from "../models/report-variant"; import { ReportCardComponent } from "../report-card/report-card.component"; diff --git a/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html index 35e03f370ef..fdfe8eb55ff 100644 --- a/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html +++ b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html @@ -9,15 +9,9 @@ - {{ "sendTypeFile" | i18n }} - +
+ {{ "sendTypeFile" | i18n }} + +
diff --git a/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts index 64ada8f75d0..bb72ff75a39 100644 --- a/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts +++ b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts @@ -1,19 +1,19 @@ import { CommonModule } from "@angular/common"; import { Component, Input } from "@angular/core"; -import { Router } from "@angular/router"; import { firstValueFrom, Observable, of, switchMap } from "rxjs"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions"; import { SendType } from "@bitwarden/common/tools/send/enums/send-type"; -import { BadgeModule, ButtonModule, DialogService, MenuModule } from "@bitwarden/components"; +import { ButtonModule, DialogService, MenuModule } from "@bitwarden/components"; import { DefaultSendFormConfigService, SendAddEditDialogComponent } from "@bitwarden/send-ui"; @Component({ selector: "tools-new-send-dropdown", templateUrl: "new-send-dropdown.component.html", - imports: [JslibModule, CommonModule, ButtonModule, MenuModule, BadgeModule], + imports: [JslibModule, CommonModule, ButtonModule, MenuModule, PremiumBadgeComponent], providers: [DefaultSendFormConfigService], }) /** @@ -30,7 +30,6 @@ export class NewSendDropdownComponent { protected canAccessPremium$: Observable; constructor( - private router: Router, private billingAccountProfileStateService: BillingAccountProfileStateService, private accountService: AccountService, private dialogService: DialogService, @@ -47,16 +46,16 @@ export class NewSendDropdownComponent { /** * Opens the SendAddEditComponent for a new Send with the provided type. - * If has user does not have premium access and the type is File, the user will be redirected to the premium settings page. + * If has user does not have premium access and the type is File do nothing the PremiumBadgeComponent will handle the flow. * @param type The type of Send to create. */ async createSend(type: SendType) { if (!(await firstValueFrom(this.canAccessPremium$)) && type === SendType.File) { - return await this.router.navigate(["settings/subscription/premium"]); + return; } const formConfig = await this.addEditFormConfigService.buildConfig("add", undefined, type); - await SendAddEditDialogComponent.open(this.dialogService, { formConfig }); + SendAddEditDialogComponent.open(this.dialogService, { formConfig }); } } diff --git a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.html b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.html index b2a57ffb875..6eb9b89b05b 100644 --- a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.html +++ b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.html @@ -25,17 +25,10 @@ type="button" (click)="openAttachmentsDialog()" > -

+

{{ "attachments" | i18n }} - - {{ "premium" | 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 871ee900e38..8462e801de0 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 @@ -7,6 +7,7 @@ import { firstValueFrom, Subject, switchMap } from "rxjs"; import { map } from "rxjs/operators"; import { CollectionView } from "@bitwarden/admin-console/common"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { VaultViewPasswordHistoryService } from "@bitwarden/angular/services/view-password-history.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; @@ -131,6 +132,7 @@ export type VaultItemDialogResult = UnionOfValues; CipherFormModule, AsyncActionsModule, ItemModule, + PremiumBadgeComponent, ], providers: [ { provide: PremiumUpgradePromptService, useClass: WebVaultPremiumUpgradePromptService }, diff --git a/libs/angular/src/billing/components/premium-badge/index.ts b/libs/angular/src/billing/components/premium-badge/index.ts new file mode 100644 index 00000000000..aba6ecc961b --- /dev/null +++ b/libs/angular/src/billing/components/premium-badge/index.ts @@ -0,0 +1 @@ +export * from "./premium-badge.component"; diff --git a/apps/web/src/app/vault/components/premium-badge.component.ts b/libs/angular/src/billing/components/premium-badge/premium-badge.component.ts similarity index 91% rename from apps/web/src/app/vault/components/premium-badge.component.ts rename to libs/angular/src/billing/components/premium-badge/premium-badge.component.ts index 4f1d1142f91..9aa5769d7e6 100644 --- a/apps/web/src/app/vault/components/premium-badge.component.ts +++ b/libs/angular/src/billing/components/premium-badge/premium-badge.component.ts @@ -6,12 +6,13 @@ import { BadgeModule } from "@bitwarden/components"; @Component({ selector: "app-premium-badge", + standalone: true, template: ` `, - imports: [JslibModule, BadgeModule], + imports: [BadgeModule, JslibModule], }) export class PremiumBadgeComponent { constructor(private messagingService: MessagingService) {} diff --git a/apps/web/src/app/vault/components/premium-badge.stories.ts b/libs/angular/src/billing/components/premium-badge/premium-badge.stories.ts similarity index 98% rename from apps/web/src/app/vault/components/premium-badge.stories.ts rename to libs/angular/src/billing/components/premium-badge/premium-badge.stories.ts index 331f72fd0ac..79efa6f772c 100644 --- a/apps/web/src/app/vault/components/premium-badge.stories.ts +++ b/libs/angular/src/billing/components/premium-badge/premium-badge.stories.ts @@ -17,7 +17,7 @@ class MockMessagingService implements MessageSender { } export default { - title: "Web/Premium Badge", + title: "Billing/Premium Badge", component: PremiumBadgeComponent, decorators: [ moduleMetadata({ diff --git a/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.html b/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.html index 4e57869425c..1d5629cfd48 100644 --- a/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.html +++ b/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.html @@ -16,10 +16,10 @@ [routerLink]="buildRouterLink(sendType.File)" [queryParams]="buildQueryParams(sendType.File)" > - - {{ "sendTypeFile" | i18n }} - +
+ + {{ "sendTypeFile" | i18n }} + +
diff --git a/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.ts b/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.ts index ba5176e5db5..b553a343cdd 100644 --- a/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.ts +++ b/libs/tools/send/send-ui/src/new-send-dropdown/new-send-dropdown.component.ts @@ -1,18 +1,19 @@ import { CommonModule } from "@angular/common"; import { Component, Input, OnInit } from "@angular/core"; -import { Router, RouterLink } from "@angular/router"; +import { RouterLink } from "@angular/router"; import { firstValueFrom } from "rxjs"; +import { PremiumBadgeComponent } from "@bitwarden/angular/billing/components/premium-badge"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions"; import { SendType } from "@bitwarden/common/tools/send/enums/send-type"; -import { BadgeModule, ButtonModule, ButtonType, MenuModule } from "@bitwarden/components"; +import { ButtonModule, ButtonType, MenuModule } from "@bitwarden/components"; @Component({ selector: "tools-new-send-dropdown", templateUrl: "new-send-dropdown.component.html", - imports: [JslibModule, CommonModule, ButtonModule, RouterLink, MenuModule, BadgeModule], + imports: [JslibModule, CommonModule, ButtonModule, RouterLink, MenuModule, PremiumBadgeComponent], }) export class NewSendDropdownComponent implements OnInit { @Input() hideIcon: boolean = false; @@ -23,7 +24,6 @@ export class NewSendDropdownComponent implements OnInit { hasNoPremium = false; constructor( - private router: Router, private billingAccountProfileStateService: BillingAccountProfileStateService, private accountService: AccountService, ) {} diff --git a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html index 53fcab70506..bc10c6f7014 100644 --- a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html +++ b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html @@ -121,18 +121,11 @@ /> - {{ "verificationCodeTotp" | i18n }} - - {{ "premium" | i18n }} - + +
+ {{ "verificationCodeTotp" | i18n }} + +
Date: Tue, 9 Sep 2025 16:22:02 -0700 Subject: [PATCH 002/249] [deps] Vault: Update multer to v2 (#15503) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: jaasen-livefront --- apps/cli/package.json | 2 +- package-lock.json | 47 +++++++++++++++++++++++++++---------------- package.json | 2 +- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index e5dbd66ab12..a023920c0bd 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -80,7 +80,7 @@ "koa-json": "2.0.2", "lowdb": "1.0.0", "lunr": "2.3.9", - "multer": "1.4.5-lts.2", + "multer": "2.0.2", "node-fetch": "2.6.12", "node-forge": "1.3.1", "open": "10.1.2", diff --git a/package-lock.json b/package-lock.json index 1b4fe5f40e3..340cf297da7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "lit": "3.3.0", "lowdb": "1.0.0", "lunr": "2.3.9", - "multer": "1.4.5-lts.2", + "multer": "2.0.2", "ngx-toastr": "19.0.0", "node-fetch": "2.6.12", "node-forge": "1.3.1", @@ -215,7 +215,7 @@ "koa-json": "2.0.2", "lowdb": "1.0.0", "lunr": "2.3.9", - "multer": "1.4.5-lts.2", + "multer": "2.0.2", "node-fetch": "2.6.12", "node-forge": "1.3.1", "open": "10.1.2", @@ -18473,20 +18473,34 @@ "license": "MIT" }, "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "engines": [ - "node >= 0.8" + "node >= 6.0" ], "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", - "readable-stream": "^2.2.2", + "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/concurrently": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.0.tgz", @@ -30081,22 +30095,21 @@ } }, "node_modules/multer": { - "version": "1.4.5-lts.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.2.tgz", - "integrity": "sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==", - "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", "license": "MIT", "dependencies": { "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "type-is": "^1.6.18", + "xtend": "^4.0.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 10.16.0" } }, "node_modules/multer/node_modules/media-typer": { diff --git a/package.json b/package.json index 62ae69a2175..0c32497bc8c 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "lit": "3.3.0", "lowdb": "1.0.0", "lunr": "2.3.9", - "multer": "1.4.5-lts.2", + "multer": "2.0.2", "ngx-toastr": "19.0.0", "node-fetch": "2.6.12", "node-forge": "1.3.1", From 8aa9f986f551f8efa362b678d83aea53c42c7a3f Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:23:27 -0700 Subject: [PATCH 003/249] [PM-24935] - [Desktop] Fix loading state in cipher form save button (#16368) * use bitButton for handling loading state * remove unecessary code --- .../src/vault/app/vault/item-footer.component.html | 10 +++------- .../src/vault/app/vault/item-footer.component.ts | 1 - .../src/vault/app/vault/vault-v2.component.html | 2 -- apps/desktop/src/vault/app/vault/vault-v2.component.ts | 7 ------- 4 files changed, 3 insertions(+), 17 deletions(-) diff --git a/apps/desktop/src/vault/app/vault/item-footer.component.html b/apps/desktop/src/vault/app/vault/item-footer.component.html index c41bf254c80..162335d03bb 100644 --- a/apps/desktop/src/vault/app/vault/item-footer.component.html +++ b/apps/desktop/src/vault/app/vault/item-footer.component.html @@ -4,16 +4,12 @@ #submitBtn form="cipherForm" type="submit" - *ngIf="action !== 'view'" + [hidden]="action === 'view'" + bitButton class="primary" appA11yTitle="{{ 'save' | i18n }}" > - {{ "save" | i18n }} - + {{ "save" | i18n }} + + + @if (isExpanded()) { +
+ +
+
+

{{ "Password Manager" | i18n }}

+
+ + +
+
+
+ {{ passwordManager.quantity }} {{ passwordManager.name | i18n }} x + {{ passwordManager.cost | currency: "USD" : "symbol" }} + / + {{ passwordManager.cadence | i18n }} +
+
+
+ {{ passwordManagerTotal() | currency: "USD" : "symbol" }} +
+
+ + + @if (additionalStorage) { +
+
+
+ {{ additionalStorage.quantity }} {{ additionalStorage.name | i18n }} x + {{ additionalStorage.cost | currency: "USD" : "symbol" }} / + {{ additionalStorage.cadence | i18n }} +
+
+
+ {{ additionalStorageTotal() | currency: "USD" : "symbol" }} +
+
+ } +
+ + + @if (secretsManager) { +
+
+

{{ "Secrets Manager" | i18n }}

+
+ + +
+
+ {{ secretsManager.seats.quantity }} {{ secretsManager.seats.name | i18n }} x + {{ secretsManager.seats.cost | currency: "USD" : "symbol" }} + / {{ secretsManager.seats.cadence | i18n }} +
+
+ {{ secretsManagerSeatsTotal() | currency: "USD" : "symbol" }} +
+
+ + + @if (additionalServiceAccounts) { +
+
+ {{ additionalServiceAccounts.quantity }} + {{ additionalServiceAccounts.name | i18n }} x + {{ additionalServiceAccounts.cost | currency: "USD" : "symbol" }} + / + {{ additionalServiceAccounts.cadence | i18n }} +
+
+ {{ additionalServiceAccountsTotal() | currency: "USD" : "symbol" }} +
+
+ } +
+ } + + +
+

{{ "Estimated tax" | i18n }}

+
+ {{ estimatedTax() | currency: "USD" : "symbol" }} +
+
+ + +
+

{{ "Total" | i18n }}

+
+ {{ total() | currency: "USD" : "symbol" }} / {{ passwordManager.cadence | i18n }} +
+
+
+ } + diff --git a/libs/pricing/src/components/cart-summary/cart-summary.component.mdx b/libs/pricing/src/components/cart-summary/cart-summary.component.mdx new file mode 100644 index 00000000000..451d733b385 --- /dev/null +++ b/libs/pricing/src/components/cart-summary/cart-summary.component.mdx @@ -0,0 +1,351 @@ +import { Meta, Story, Canvas } from "@storybook/addon-docs"; +import * as CartSummaryStories from "./cart-summary.component.stories"; + + + +# Cart Summary + +A reusable UI component for displaying order summary information with consistent styling and +behavior across Bitwarden applications. + + + +## Table of Contents + +- [Usage](#usage) +- [API](#api) + - [Inputs](#inputs) + - [Events](#events) +- [Data Structure](#data-structure) +- [Flexibility](#flexibility) +- [Design](#design) +- [Examples](#examples) + - [Yearly Cadence](#yearly-cadence) + - [With Additional Storage](#with-additional-storage) + - [With Secrets Manager](#with-secrets-manager) + - [With Secrets Manager and Additional Service Accounts](#with-secrets-manager-and-additional-service-accounts) + - [All Products](#all-products) + - [Premium Plan](#premium-plan) + - [Family Plan](#family-plan) +- [Features](#features) +- [Do's and Don'ts](#dos-and-donts) +- [Accessibility](#accessibility) + +## Usage + +The cart summary component is designed to be used in checkout and subscription interfaces to display +order details, prices, and totals. + +```ts +import { CartSummaryComponent, LineItem } from "@bitwarden/pricing"; +``` + +```html + + +``` + +## API + +### Inputs + +| Input | Type | Description | +| ------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------- | +| `passwordManager` | `LineItem` | **Required.** The Password Manager product line item | +| `additionalStorage` | `LineItem \| undefined` | **Optional.** Additional storage line item, if applicable | +| `secretsManager` | `{ seats: LineItem; additionalServiceAccounts?: LineItem } \| undefined` | **Optional.** Secrets Manager related line items, if applicable | +| `estimatedTax` | `number` | **Required.** Estimated tax amount | + +### Events + +The cart summary component does not emit any events, but it does have internal behavior for +collapsing and expanding the view. + +## Data Structure + +The component uses the following LineItem data structure: + +```typescript +export type LineItem = { + quantity: number; // Number of items + name: string; // Display name of the item + cost: number; // Cost of each item + cadence: "month" | "year"; // Billing period +}; +``` + +## Flexibility + +The cart summary component provides flexibility through its structured input properties: + +```html + + + + + + + +``` + +## Design + +The component follows the Bitwarden design system with: + +- **Collapsible Interface**: Toggles between compact and detailed views +- **Clean Styling**: Uses Tailwind utility classes for consistent appearance +- **Modern Angular**: Uses `@if` control flow and `@let` with signal inputs +- **Signal inputs**: Type-safe inputs using Angular's signal-based input API +- **Typography**: Consistent text styling using the typography module +- **Layout**: Flexbox layout with clear section boundaries +- **Interactivity**: Collapsible summary with intuitive toggle behavior +- **Accessibility**: Semantic structure with proper button and icon usage using IconButtonModule + +## Examples + +### Yearly Cadence + +Show cart with yearly subscription: + + + +```html + + +``` + +### With Additional Storage + +Show cart with password manager and additional storage: + + + +```html + + +``` + +### With Secrets Manager + +Show cart with password manager and secrets manager seats only: + + + +```html + + +``` + +### With Secrets Manager and Additional Service Accounts + +Show cart with password manager, secrets manager seats, and additional service accounts: + + + +```html + + +``` + +### All Products + +Show a cart with all available products: + + + +```html + + +``` + +### Premium Plan + +Show cart with premium plan: + + +```html + + +``` + +### Families Plan + +Show cart with families plan: + + +```html + + +``` + +## Features + +- **Collapsible Interface**: Users can toggle between a summary view showing only the total and a + detailed view showing all line items +- **Line Item Grouping**: Organizes items by product category (Password Manager, Secrets Manager) +- **Dynamic Calculations**: Automatically calculates and displays subtotals and totals using Angular + signals and computed values +- **Flexible Structure**: Accommodates different combinations of products and add-ons +- **Consistent Formatting**: Maintains uniform display of prices, quantities, and cadence +- **Modern Angular Patterns**: Uses `@let` to efficiently store and reuse signal values in the + template + +## Do's and Don'ts + +### ✅ Do + +- Use consistent naming and formatting for line items +- Include clear quantity and unit pricing information +- Ensure tax estimates are accurate and clearly labeled +- Maintain consistent cadence formats across related items +- Use the same cadence for all items within a single cart + +### ❌ Don't + +- Mix monthly and yearly cadences within the same cart +- Omit required inputs (passwordManager, estimatedTax) +- Modify the component's internal calculations +- Use inconsistent formatting for monetary values +- Override the default styles and layout + +## Accessibility + +The component includes: + +- Semantic HTML structure with proper headings +- Button element for the collapsible toggle +- Keyboard navigation support +- Clear visual indication of expanded state +- Descriptive labels and text +- Sufficient color contrast for text elements diff --git a/libs/pricing/src/components/cart-summary/cart-summary.component.spec.ts b/libs/pricing/src/components/cart-summary/cart-summary.component.spec.ts new file mode 100644 index 00000000000..9e48e7f5c20 --- /dev/null +++ b/libs/pricing/src/components/cart-summary/cart-summary.component.spec.ts @@ -0,0 +1,209 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { By } from "@angular/platform-browser"; + +import { CartSummaryComponent, LineItem } from "./cart-summary.component"; + +describe("CartSummaryComponent", () => { + let component: CartSummaryComponent; + let fixture: ComponentFixture; + + const mockPasswordManager: LineItem = { + quantity: 5, + name: "Password Manager", + cost: 50, + cadence: "month", + }; + + const mockAdditionalStorage: LineItem = { + quantity: 2, + name: "Additional Storage", + cost: 10, + cadence: "month", + }; + + const mockSecretsManager = { + seats: { + quantity: 3, + name: "Secrets Manager Seats", + cost: 30, + cadence: "month" as "month" | "year", + }, + additionalServiceAccounts: { + quantity: 2, + name: "Additional Service Accounts", + cost: 6, + cadence: "month" as "month" | "year", + }, + }; + + const mockEstimatedTax = 9.6; + + function setupComponent( + options: { + passwordManager?: LineItem; + additionalStorage?: LineItem | null; + secretsManager?: { seats: LineItem; additionalServiceAccounts?: LineItem } | null; + estimatedTax?: number; + } = {}, + ) { + const pm = options.passwordManager ?? mockPasswordManager; + const storage = + options.additionalStorage !== null + ? (options.additionalStorage ?? mockAdditionalStorage) + : undefined; + const sm = + options.secretsManager !== null ? (options.secretsManager ?? mockSecretsManager) : undefined; + const tax = options.estimatedTax ?? mockEstimatedTax; + + // Set input values + fixture.componentRef.setInput("passwordManager", pm); + if (storage !== undefined) { + fixture.componentRef.setInput("additionalStorage", storage); + } + if (sm !== undefined) { + fixture.componentRef.setInput("secretsManager", sm); + } + fixture.componentRef.setInput("estimatedTax", tax); + + fixture.detectChanges(); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CartSummaryComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(CartSummaryComponent); + component = fixture.componentInstance; + + // Default setup with all inputs + setupComponent(); + }); + + it("should create", () => { + // Assert + expect(component).toBeTruthy(); + }); + + describe("UI Toggle Functionality", () => { + it("should toggle expanded state when the button is clicked", () => { + // Arrange + expect(component.isExpanded()).toBe(true); + const toggleButton = fixture.debugElement.query(By.css("button[type='button']")); + expect(toggleButton).toBeTruthy(); + + // Act - First click (collapse) + toggleButton.triggerEventHandler("click", null); + fixture.detectChanges(); + + // Assert - Component is collapsed + expect(component.isExpanded()).toBe(false); + const icon = fixture.debugElement.query(By.css("i.bwi")); + expect(icon.nativeElement.classList.contains("bwi-angle-down")).toBe(true); + + // Act - Second click (expand) + toggleButton.triggerEventHandler("click", null); + fixture.detectChanges(); + + // Assert - Component is expanded again + expect(component.isExpanded()).toBe(true); + expect(icon.nativeElement.classList.contains("bwi-angle-up")).toBe(true); + }); + + it("should hide details when collapsed", () => { + // Arrange + component.isExpanded.set(false); + fixture.detectChanges(); + + // Act / Assert + const detailsSection = fixture.debugElement.query(By.css(".tw-mb-4.tw-pb-4.tw-text-muted")); + expect(detailsSection).toBeFalsy(); + }); + + it("should show details when expanded", () => { + // Arrange + component.isExpanded.set(true); + fixture.detectChanges(); + + // Act / Assert + const detailsSection = fixture.debugElement.query(By.css(".tw-mb-4.tw-pb-4.tw-text-muted")); + expect(detailsSection).toBeTruthy(); + }); + }); + + describe("Content Rendering", () => { + it("should display correct password manager information", () => { + // Arrange + const pmSection = fixture.debugElement.query(By.css(".tw-mb-3.tw-border-b")); + const pmHeading = pmSection.query(By.css(".tw-font-semibold")); + const pmLineItem = pmSection.query(By.css(".tw-flex-1 .tw-text-sm")); + const pmTotal = pmSection.query(By.css(".tw-text-sm:not(.tw-flex-1 *)")); + + // Act/ Assert + expect(pmSection).toBeTruthy(); + expect(pmHeading.nativeElement.textContent.trim()).toBe("Password Manager"); + expect(pmLineItem.nativeElement.textContent).toContain("5 Members"); + expect(pmLineItem.nativeElement.textContent).toContain("$50.00"); + expect(pmLineItem.nativeElement.textContent).toContain("month"); + expect(pmTotal.nativeElement.textContent).toContain("$250.00"); // 5 * $50 + }); + + it("should display correct additional storage information", () => { + // Arrange + const storageItem = fixture.debugElement.query( + By.css(".tw-mb-3.tw-border-b .tw-flex-justify-between:nth-of-type(3)"), + ); + const storageText = fixture.debugElement.query(By.css(".tw-mb-3.tw-border-b")).nativeElement + .textContent; + // Act/Assert + + expect(storageItem).toBeTruthy(); + expect(storageText).toContain("2 Additional GB"); + expect(storageText).toContain("$10.00"); + expect(storageText).toContain("$20.00"); + }); + + it("should display correct secrets manager information", () => { + // Arrange + const smSection = fixture.debugElement.queryAll(By.css(".tw-mb-3.tw-border-b"))[1]; + const smHeading = smSection.query(By.css(".tw-font-semibold")); + const sectionText = smSection.nativeElement.textContent; + + // Act/ Assert + expect(smSection).toBeTruthy(); + expect(smHeading.nativeElement.textContent.trim()).toBe("Secrets Manager"); + + // Check seats line item + expect(sectionText).toContain("3 Members"); + expect(sectionText).toContain("$30.00"); + expect(sectionText).toContain("$90.00"); // 3 * $30 + + // Check additional service accounts + expect(sectionText).toContain("2 Additional machine accounts"); + expect(sectionText).toContain("$6.00"); + expect(sectionText).toContain("$12.00"); // 2 * $6 + }); + + it("should display correct tax and total", () => { + // Arrange + const taxSection = fixture.debugElement.query( + By.css(".tw-flex.tw-justify-between.tw-mb-3.tw-border-b:last-of-type"), + ); + const expectedTotal = "$381.60"; // 250 + 20 + 90 + 12 + 9.6 + const topTotal = fixture.debugElement.query(By.css("h2")); + const bottomTotal = fixture.debugElement.query( + By.css( + ".tw-flex.tw-justify-between.tw-items-center:last-child .tw-font-semibold:last-child", + ), + ); + + // Act / Assert + expect(taxSection.nativeElement.textContent).toContain("Estimated Tax"); + expect(taxSection.nativeElement.textContent).toContain("$9.60"); + + expect(topTotal.nativeElement.textContent).toContain(expectedTotal); + + expect(bottomTotal.nativeElement.textContent).toContain(expectedTotal); + }); + }); +}); diff --git a/libs/pricing/src/components/cart-summary/cart-summary.component.stories.ts b/libs/pricing/src/components/cart-summary/cart-summary.component.stories.ts new file mode 100644 index 00000000000..248cbb083ae --- /dev/null +++ b/libs/pricing/src/components/cart-summary/cart-summary.component.stories.ts @@ -0,0 +1,154 @@ +import { Meta, moduleMetadata, StoryObj } from "@storybook/angular"; + +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { IconButtonModule, TypographyModule } from "@bitwarden/components"; + +import { CartSummaryComponent } from "./cart-summary.component"; + +export default { + title: "Billing/Cart Summary", + component: CartSummaryComponent, + description: "A summary of the items in the cart, including pricing details.", + decorators: [ + moduleMetadata({ + imports: [TypographyModule, IconButtonModule], + // Return the same value for all keys for simplicity + providers: [ + { + provide: I18nService, + useValue: { t: (key: string) => key }, + }, + ], + }), + ], + args: { + passwordManager: { + quantity: 5, + name: "Members", + cost: 50.0, + cadence: "month", + }, + estimatedTax: 9.6, + }, + parameters: { + design: { + type: "figma", + url: "https://www.figma.com/design/nuFrzHsgEoEk2Sm8fWOGuS/Premium-Upgrade-flows--pricing-increase-?node-id=877-23653&t=OpDXkupIsvfbh4jT-4", + }, + }, +} as Meta; + +type Story = StoryObj; +export const Default: Story = {}; + +export const WithAdditionalStorage: Story = { + args: { + ...Default.args, + additionalStorage: { + quantity: 2, + name: "Additional storage GB", + cost: 10.0, + cadence: "month", + }, + estimatedTax: 12.0, + }, +}; + +export const PasswordManagerYearlyCadence: Story = { + args: { + passwordManager: { + quantity: 5, + name: "Members", + cost: 500.0, + cadence: "year", + }, + estimatedTax: 120.0, + }, +}; + +export const SecretsManagerSeatsOnly: Story = { + args: { + ...Default.args, + secretsManager: { + seats: { + quantity: 3, + name: "Members", + cost: 30.0, + cadence: "month", + }, + }, + estimatedTax: 16.0, + }, +}; + +export const SecretsManagerSeatsAndServiceAccounts: Story = { + args: { + ...Default.args, + secretsManager: { + seats: { + quantity: 3, + name: "Members", + cost: 30.0, + cadence: "month", + }, + additionalServiceAccounts: { + quantity: 2, + name: "Additional machine accounts", + cost: 6.0, + cadence: "month", + }, + }, + estimatedTax: 16.0, + }, +}; + +export const AllProducts: Story = { + args: { + ...Default.args, + additionalStorage: { + quantity: 2, + name: "Additional storage GB", + cost: 10.0, + cadence: "month", + }, + secretsManager: { + seats: { + quantity: 3, + name: "Members", + cost: 30.0, + cadence: "month", + }, + additionalServiceAccounts: { + quantity: 2, + name: "Additional machine accounts", + cost: 6.0, + cadence: "month", + }, + }, + estimatedTax: 19.2, + }, +}; + +export const FamiliesPlan: Story = { + args: { + passwordManager: { + quantity: 1, + name: "Families membership", + cost: 40.0, + cadence: "year", + }, + estimatedTax: 4.67, + }, +}; + +export const PremiumPlan: Story = { + args: { + passwordManager: { + quantity: 1, + name: "Premium membership", + cost: 10.0, + cadence: "year", + }, + estimatedTax: 2.71, + }, +}; diff --git a/libs/pricing/src/components/cart-summary/cart-summary.component.ts b/libs/pricing/src/components/cart-summary/cart-summary.component.ts new file mode 100644 index 00000000000..b21276b5038 --- /dev/null +++ b/libs/pricing/src/components/cart-summary/cart-summary.component.ts @@ -0,0 +1,92 @@ +import { CurrencyPipe } from "@angular/common"; +import { Component, computed, input, signal } from "@angular/core"; + +import { TypographyModule, IconButtonModule } from "@bitwarden/components"; +import { I18nPipe } from "@bitwarden/ui-common"; + +export type LineItem = { + quantity: number; + name: string; + cost: number; + cadence: "month" | "year"; +}; + +/** + * A reusable UI-only component that displays a cart summary with line items. + * This component has no external dependencies and performs minimal logic - + * it only displays data and allows expanding/collapsing of line items. + */ +@Component({ + selector: "billing-cart-summary", + templateUrl: "./cart-summary.component.html", + imports: [TypographyModule, IconButtonModule, CurrencyPipe, I18nPipe], +}) +export class CartSummaryComponent { + // Required inputs + passwordManager = input.required(); + additionalStorage = input(); + secretsManager = input<{ seats: LineItem; additionalServiceAccounts?: LineItem }>(); + estimatedTax = input.required(); + + // UI state + isExpanded = signal(true); + + /** + * Calculates total for password manager line item + */ + readonly passwordManagerTotal = computed(() => { + return this.passwordManager().quantity * this.passwordManager().cost; + }); + + /** + * Calculates total for additional storage line item if present + */ + readonly additionalStorageTotal = computed(() => { + const storage = this.additionalStorage(); + return storage ? storage.quantity * storage.cost : 0; + }); + + /** + * Calculates total for secrets manager seats if present + */ + readonly secretsManagerSeatsTotal = computed(() => { + const sm = this.secretsManager(); + return sm?.seats ? sm.seats.quantity * sm.seats.cost : 0; + }); + + /** + * Calculates total for secrets manager service accounts if present + */ + readonly additionalServiceAccountsTotal = computed(() => { + const sm = this.secretsManager(); + return sm?.additionalServiceAccounts + ? sm.additionalServiceAccounts.quantity * sm.additionalServiceAccounts.cost + : 0; + }); + + /** + * Calculates the total of all line items + */ + readonly total = computed(() => this.getTotalCost()); + + /** + * Toggles the expanded/collapsed state of the cart items + */ + toggleExpanded(): void { + this.isExpanded.update((value: boolean) => !value); + } + + /** + * Gets the total cost of all line items in the cart + * @returns The total cost as a number + */ + private getTotalCost(): number { + return ( + this.passwordManagerTotal() + + this.additionalStorageTotal() + + this.secretsManagerSeatsTotal() + + this.additionalServiceAccountsTotal() + + this.estimatedTax() + ); + } +} diff --git a/libs/pricing/src/index.ts b/libs/pricing/src/index.ts index 9eeb2de518d..d7c7772bfcb 100644 --- a/libs/pricing/src/index.ts +++ b/libs/pricing/src/index.ts @@ -1,2 +1,3 @@ // Components export * from "./components/pricing-card/pricing-card.component"; +export * from "./components/cart-summary/cart-summary.component"; From c160b421fc44e4ef1eba6655f99c4165dcf1d6dc Mon Sep 17 00:00:00 2001 From: Jonathan Prusik Date: Wed, 10 Sep 2025 16:59:15 -0400 Subject: [PATCH 010/249] use BrowserApi.getTab in place of chrome.tabs.get (#16370) --- .../popup/components/vault-v2/view-v2/view-v2.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts b/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts index fff59e81046..5983b2577a5 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts @@ -329,8 +329,9 @@ export class ViewV2Component { case UPDATE_PASSWORD: { const repromptSuccess = await this.passwordRepromptService.showPasswordPrompt(); + const tab = await BrowserApi.getTab(senderTabId); await sendExtensionMessage("bgHandleReprompt", { - tab: await chrome.tabs.get(senderTabId), + tab, success: repromptSuccess, }); From 926f587ea2e2a449aeb11e85e623356a596f96d3 Mon Sep 17 00:00:00 2001 From: Vicki League Date: Wed, 10 Sep 2025 17:23:53 -0400 Subject: [PATCH 011/249] [CL-581] Update svgs to new designs and make responsive (#16219) --- apps/browser/src/popup/app-routing.module.ts | 7 +- .../send-created/send-created.component.html | 4 +- .../intro-carousel.component.html | 16 ++- .../intro-carousel.component.ts | 8 +- apps/desktop/src/app/app-routing.module.ts | 7 +- .../collections/deprecated_vault.component.ts | 4 +- .../collections/vault.component.ts | 4 +- .../login-via-webauthn.component.html | 8 +- .../login-via-webauthn.component.ts | 9 +- .../create-credential-dialog.component.html | 8 +- .../create-credential-dialog.component.ts | 9 +- ...nization-subscription-cloud.component.html | 4 +- ...ganization-subscription-cloud.component.ts | 4 +- .../subscription-hidden.component.ts | 8 +- apps/web/src/app/dirt/reports/reports.ts | 16 +-- .../report-card/report-card.component.html | 4 +- apps/web/src/app/oss-routing.module.ts | 10 +- apps/web/src/app/shared/shared.module.ts | 3 + .../send/send-access/access.component.html | 4 +- .../send/send-access/access.component.ts | 4 +- .../setup-extension.component.html | 4 +- .../individual-vault/vault.component.html | 31 +++-- .../vault/individual-vault/vault.component.ts | 4 +- .../web/src/connectors/webauthn-fallback.html | 66 +++++----- .../src/images/domain-verification/domain.svg | 1 - .../device-approvals.component.html | 2 +- .../device-approvals.component.ts | 4 +- .../domain-verification.component.html | 22 ++-- .../domain-verification.component.ts | 2 + .../providers/clients/no-clients.component.ts | 35 +++--- .../shared/org-suspended.component.html | 2 +- .../shared/org-suspended.component.ts | 4 +- .../components/two-factor-icon.component.html | 11 +- .../components/two-factor-icon.component.ts | 16 ++- .../set-initial-password.component.ts | 4 +- .../invoices/no-invoices.component.ts | 11 +- libs/angular/src/jslib.module.ts | 2 + libs/assets/src/svg/svgs/active-send.icon.ts | 25 ++-- libs/assets/src/svg/svgs/browser-extension.ts | 27 +++-- .../svg/svgs/create-passkey-failed.icon.ts | 28 ----- .../src/svg/svgs/create-passkey.icon.ts | 26 ---- libs/assets/src/svg/svgs/credit-card.icon.ts | 15 +++ libs/assets/src/svg/svgs/deactivated-org.ts | 55 +++++---- .../src/svg/svgs/device-verification.icon.ts | 18 --- libs/assets/src/svg/svgs/devices.icon.ts | 67 +++------- libs/assets/src/svg/svgs/devices.ts | 17 --- libs/assets/src/svg/svgs/domain.icon.ts | 15 +++ libs/assets/src/svg/svgs/email.icon.ts | 43 ------- libs/assets/src/svg/svgs/empty-trash.ts | 25 ++-- libs/assets/src/svg/svgs/expired-send.icon.ts | 11 -- libs/assets/src/svg/svgs/gear.ts | 35 +++--- libs/assets/src/svg/svgs/index.ts | 27 +---- libs/assets/src/svg/svgs/item-types.ts | 23 ++++ libs/assets/src/svg/svgs/lock.icon.ts | 24 ++-- libs/assets/src/svg/svgs/login-cards.ts | 24 ++-- libs/assets/src/svg/svgs/no-access.ts | 12 -- .../src/svg/svgs/no-credentials.icon.ts | 30 ++--- libs/assets/src/svg/svgs/no-folders.ts | 26 ++-- libs/assets/src/svg/svgs/no-results.ts | 26 ++-- libs/assets/src/svg/svgs/no-send.icon.ts | 22 ++-- libs/assets/src/svg/svgs/partner-trust.ts | 23 ---- libs/assets/src/svg/svgs/party.ts | 45 +++---- libs/assets/src/svg/svgs/recovery.icon.ts | 51 -------- .../svg/svgs/registration-check-email.icon.ts | 33 +++-- .../svgs/registration-expired-link.icon.ts | 9 -- .../svg/svgs/registration-lock-alt.icon.ts | 41 ------- .../svg/svgs/registration-user-add.icon.ts | 35 +++--- .../assets/src/svg/svgs/report-breach.icon.ts | 18 +-- .../svg/svgs/report-exposed-passwords.icon.ts | 38 ++++-- .../svgs/report-inactive-two-factor.icon.ts | 10 -- .../src/svg/svgs/report-member-access.icon.ts | 14 --- .../svg/svgs/report-reused-passwords.icon.ts | 9 -- .../svgs/report-unsecured-websites.icon.ts | 17 +-- .../svg/svgs/report-weak-passwords.icon.ts | 10 -- libs/assets/src/svg/svgs/restricted-view.ts | 21 +++- libs/assets/src/svg/svgs/search.ts | 18 --- libs/assets/src/svg/svgs/secure-devices.ts | 16 --- libs/assets/src/svg/svgs/secure-user.ts | 10 -- .../assets/src/svg/svgs/security-handshake.ts | 12 -- libs/assets/src/svg/svgs/security.ts | 63 +++------- libs/assets/src/svg/svgs/shield.ts | 2 +- libs/assets/src/svg/svgs/sso-key.icon.ts | 13 +- .../src/svg/svgs/subscription-hidden.ts | 24 ---- libs/assets/src/svg/svgs/totp.icon.ts | 61 ---------- .../two-factor-auth-authenticator.icon.ts | 52 +++----- .../svg/svgs/two-factor-auth-email.icon.ts | 28 ++--- ...wo-factor-auth-security-key-failed.icon.ts | 17 +++ .../svgs/two-factor-auth-security-key.icon.ts | 64 +++------- .../svg/svgs/two-factor-auth-webauthn.icon.ts | 49 ++------ .../src/svg/svgs/two-factor-timeout.icon.ts | 14 ++- libs/assets/src/svg/svgs/unlocked.icon.ts | 15 +++ libs/assets/src/svg/svgs/user-lock.icon.ts | 114 +++--------------- ...erification-biometrics-fingerprint.icon.ts | 16 +-- libs/assets/src/svg/svgs/vault-open.ts | 34 ++++-- libs/assets/src/svg/svgs/vault.icon.ts | 36 +++--- libs/assets/src/svg/svgs/wave.icon.ts | 37 ++---- libs/assets/src/svg/svgs/webauthn.icon.ts | 42 ------- .../registration-link-expired.component.ts | 4 +- ...ser-verification-form-input.component.html | 4 +- .../anon-layout/anon-layout.component.html | 2 +- libs/components/src/icon/icon.component.ts | 1 + libs/components/src/icon/icon.stories.ts | 2 +- .../src/no-items/no-items.component.html | 4 +- .../src/no-items/no-items.component.ts | 4 +- .../src/no-items/no-items.stories.ts | 46 ++++++- libs/components/src/tw-theme.css | 8 -- libs/components/tailwind.config.base.js | 5 - .../empty-credential-history.component.html | 11 +- .../src/empty-credential-history.component.ts | 4 +- 109 files changed, 798 insertions(+), 1391 deletions(-) delete mode 100644 apps/web/src/images/domain-verification/domain.svg delete mode 100644 libs/assets/src/svg/svgs/create-passkey-failed.icon.ts delete mode 100644 libs/assets/src/svg/svgs/create-passkey.icon.ts create mode 100644 libs/assets/src/svg/svgs/credit-card.icon.ts delete mode 100644 libs/assets/src/svg/svgs/device-verification.icon.ts delete mode 100644 libs/assets/src/svg/svgs/devices.ts create mode 100644 libs/assets/src/svg/svgs/domain.icon.ts delete mode 100644 libs/assets/src/svg/svgs/email.icon.ts delete mode 100644 libs/assets/src/svg/svgs/expired-send.icon.ts create mode 100644 libs/assets/src/svg/svgs/item-types.ts delete mode 100644 libs/assets/src/svg/svgs/no-access.ts delete mode 100644 libs/assets/src/svg/svgs/partner-trust.ts delete mode 100644 libs/assets/src/svg/svgs/recovery.icon.ts delete mode 100644 libs/assets/src/svg/svgs/registration-expired-link.icon.ts delete mode 100644 libs/assets/src/svg/svgs/registration-lock-alt.icon.ts delete mode 100644 libs/assets/src/svg/svgs/report-inactive-two-factor.icon.ts delete mode 100644 libs/assets/src/svg/svgs/report-member-access.icon.ts delete mode 100644 libs/assets/src/svg/svgs/report-reused-passwords.icon.ts delete mode 100644 libs/assets/src/svg/svgs/report-weak-passwords.icon.ts delete mode 100644 libs/assets/src/svg/svgs/search.ts delete mode 100644 libs/assets/src/svg/svgs/secure-devices.ts delete mode 100644 libs/assets/src/svg/svgs/secure-user.ts delete mode 100644 libs/assets/src/svg/svgs/security-handshake.ts delete mode 100644 libs/assets/src/svg/svgs/subscription-hidden.ts delete mode 100644 libs/assets/src/svg/svgs/totp.icon.ts create mode 100644 libs/assets/src/svg/svgs/two-factor-auth-security-key-failed.icon.ts create mode 100644 libs/assets/src/svg/svgs/unlocked.icon.ts delete mode 100644 libs/assets/src/svg/svgs/webauthn.icon.ts diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts index 8d190e4555c..dd1d1574b22 100644 --- a/apps/browser/src/popup/app-routing.module.ts +++ b/apps/browser/src/popup/app-routing.module.ts @@ -17,10 +17,9 @@ import { SetInitialPasswordComponent } from "@bitwarden/angular/auth/password-ma import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; import { DevicesIcon, - RegistrationLockAltIcon, RegistrationUserAddIcon, TwoFactorTimeoutIcon, - DeviceVerificationIcon, + TwoFactorAuthEmailIcon, UserLockIcon, VaultIcon, LockIcon, @@ -165,7 +164,7 @@ const routes: Routes = [ canActivate: [unauthGuardFn(), activeAuthGuard()], children: [{ path: "", component: NewDeviceVerificationComponent }], data: { - pageIcon: DeviceVerificationIcon, + pageIcon: TwoFactorAuthEmailIcon, pageTitle: { key: "verifyYourIdentity", }, @@ -362,7 +361,7 @@ const routes: Routes = [ path: "finish-signup", canActivate: [unauthGuardFn()], data: { - pageIcon: RegistrationLockAltIcon, + pageIcon: LockIcon, elevation: 1, showBackButton: true, } satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData, diff --git a/apps/browser/src/tools/popup/send-v2/send-created/send-created.component.html b/apps/browser/src/tools/popup/send-v2/send-created/send-created.component.html index af3abbf5427..f0d66bd49ed 100644 --- a/apps/browser/src/tools/popup/send-v2/send-created/send-created.component.html +++ b/apps/browser/src/tools/popup/send-v2/send-created/send-created.component.html @@ -14,7 +14,9 @@
- +
+ +

{{ "createdSendSuccessfully" | i18n }}

diff --git a/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.html b/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.html index ff7bf25b86b..5f19092d6b0 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.html @@ -1,28 +1,36 @@
- +
+ +

{{ "securityPrioritized" | i18n }}

{{ "securityPrioritizedBody" | i18n }}

- +
+ +

{{ "quickLogin" | i18n }}

{{ "quickLoginBody" | i18n }}

- +
+ +

{{ "secureUser" | i18n }}

{{ "secureUserBody" | i18n }}

- +
+ +

{{ "secureDevices" | i18n }}

{{ "secureDevicesBody" | i18n }}

diff --git a/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.ts b/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.ts index 22149f9dc86..94996a054e6 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/intro-carousel/intro-carousel.component.ts @@ -2,7 +2,7 @@ import { Component } from "@angular/core"; import { Router } from "@angular/router"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -import { SecurityHandshake, LoginCards, SecureUser, SecureDevices } from "@bitwarden/assets/svg"; +import { ItemTypes, LoginCards, NoCredentialsIcon, DevicesIcon } from "@bitwarden/assets/svg"; import { ButtonModule, DialogModule, IconModule, TypographyModule } from "@bitwarden/components"; import { I18nPipe } from "@bitwarden/ui-common"; import { VaultCarouselModule } from "@bitwarden/vault"; @@ -23,10 +23,10 @@ import { IntroCarouselService } from "../../../services/intro-carousel.service"; ], }) export class IntroCarouselComponent { - protected securityHandshake = SecurityHandshake; + protected itemTypes = ItemTypes; protected loginCards = LoginCards; - protected secureUser = SecureUser; - protected secureDevices = SecureDevices; + protected noCredentials = NoCredentialsIcon; + protected secureDevices = DevicesIcon; constructor( private router: Router, diff --git a/apps/desktop/src/app/app-routing.module.ts b/apps/desktop/src/app/app-routing.module.ts index 675aec95ac0..b07c1c08718 100644 --- a/apps/desktop/src/app/app-routing.module.ts +++ b/apps/desktop/src/app/app-routing.module.ts @@ -15,10 +15,9 @@ import { ChangePasswordComponent } from "@bitwarden/angular/auth/password-manage import { SetInitialPasswordComponent } from "@bitwarden/angular/auth/password-management/set-initial-password/set-initial-password.component"; import { DevicesIcon, - RegistrationLockAltIcon, RegistrationUserAddIcon, TwoFactorTimeoutIcon, - DeviceVerificationIcon, + TwoFactorAuthEmailIcon, UserLockIcon, VaultIcon, LockIcon, @@ -86,7 +85,7 @@ const routes: Routes = [ canActivate: [unauthGuardFn(), activeAuthGuard()], children: [{ path: "", component: NewDeviceVerificationComponent }], data: { - pageIcon: DeviceVerificationIcon, + pageIcon: TwoFactorAuthEmailIcon, pageTitle: { key: "verifyYourIdentity", }, @@ -150,7 +149,7 @@ const routes: Routes = [ path: "finish-signup", canActivate: [unauthGuardFn()], data: { - pageIcon: RegistrationLockAltIcon, + pageIcon: LockIcon, } satisfies AnonLayoutWrapperData, children: [ { diff --git a/apps/web/src/app/admin-console/organizations/collections/deprecated_vault.component.ts b/apps/web/src/app/admin-console/organizations/collections/deprecated_vault.component.ts index 42900a0b941..abd53c0990c 100644 --- a/apps/web/src/app/admin-console/organizations/collections/deprecated_vault.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/deprecated_vault.component.ts @@ -34,7 +34,7 @@ import { Unassigned, } from "@bitwarden/admin-console/common"; import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; -import { Search } from "@bitwarden/assets/svg"; +import { NoResults } from "@bitwarden/assets/svg"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; @@ -170,7 +170,7 @@ export class VaultComponent implements OnInit, OnDestroy { activeFilter: VaultFilter = new VaultFilter(); protected showAddAccessToggle = false; - protected noItemIcon = Search; + protected noItemIcon = NoResults; protected performingInitialLoad = true; protected refreshing = false; protected processingEvent = false; diff --git a/apps/web/src/app/admin-console/organizations/collections/vault.component.ts b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts index 3c389a05405..63b1cabff7c 100644 --- a/apps/web/src/app/admin-console/organizations/collections/vault.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts @@ -36,7 +36,7 @@ import { Unassigned, } from "@bitwarden/admin-console/common"; import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; -import { Search } from "@bitwarden/assets/svg"; +import { NoResults } from "@bitwarden/assets/svg"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; @@ -183,7 +183,7 @@ export class vNextVaultComponent implements OnInit, OnDestroy { activeFilter: VaultFilter = new VaultFilter(); protected showAddAccessToggle = false; - protected noItemIcon = Search; + protected noItemIcon = NoResults; protected loading$: Observable; protected processingEvent$ = new BehaviorSubject(false); protected organization$: Observable; diff --git a/apps/web/src/app/auth/login/login-via-webauthn/login-via-webauthn.component.html b/apps/web/src/app/auth/login/login-via-webauthn/login-via-webauthn.component.html index 07bd855fdf7..94dfac42976 100644 --- a/apps/web/src/app/auth/login/login-via-webauthn/login-via-webauthn.component.html +++ b/apps/web/src/app/auth/login/login-via-webauthn/login-via-webauthn.component.html @@ -12,7 +12,9 @@ >
- +
+ +

{{ "readingPasskeyLoadingInfo" | i18n }}

diff --git a/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts b/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts index 35e5048b1af..04b148e8a0a 100644 --- a/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts +++ b/apps/web/src/app/auth/settings/webauthn-login-settings/create-credential-dialog/create-credential-dialog.component.ts @@ -4,7 +4,10 @@ import { Component, OnInit } from "@angular/core"; import { FormBuilder, Validators } from "@angular/forms"; import { firstValueFrom, map, Observable } from "rxjs"; -import { CreatePasskeyFailedIcon, CreatePasskeyIcon } from "@bitwarden/assets/svg"; +import { + TwoFactorAuthSecurityKeyFailedIcon, + TwoFactorAuthSecurityKeyIcon, +} from "@bitwarden/assets/svg"; import { PrfKeySet } from "@bitwarden/auth/common"; import { Verification } from "@bitwarden/common/auth/types/verification"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; @@ -37,8 +40,8 @@ export class CreateCredentialDialogComponent implements OnInit { protected readonly NameMaxCharacters = 50; protected readonly CreateCredentialDialogResult = CreateCredentialDialogResult; protected readonly Icons = { - CreatePasskeyIcon, - CreatePasskeyFailedIcon, + TwoFactorAuthSecurityKeyIcon, + TwoFactorAuthSecurityKeyFailedIcon, }; protected currentStep: Step = "userVerification"; diff --git a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html index 3b3e08764ff..5fa10c4c87c 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html +++ b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html @@ -238,7 +238,9 @@
- +
+ +

{{ "billingManagedByProvider" | i18n: userOrg.providerName }}

{{ "billingContactProviderForAssistance" | i18n }}

diff --git a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts index 509fecb88fe..6bb262152ed 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts +++ b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts @@ -5,7 +5,7 @@ import { ActivatedRoute } from "@angular/router"; import { firstValueFrom, lastValueFrom, Subject } from "rxjs"; import { OrganizationUserApiService } from "@bitwarden/admin-console/common"; -import { SubscriptionHiddenIcon } from "@bitwarden/assets/svg"; +import { GearIcon } from "@bitwarden/assets/svg"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { @@ -66,7 +66,7 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy organizationIsManagedByConsolidatedBillingMSP = false; resellerSeatsRemainingMessage: string; - protected readonly subscriptionHiddenIcon = SubscriptionHiddenIcon; + protected readonly gearIcon = GearIcon; protected readonly teamsStarter = ProductTierType.TeamsStarter; private destroy$ = new Subject(); diff --git a/apps/web/src/app/billing/organizations/subscription-hidden.component.ts b/apps/web/src/app/billing/organizations/subscription-hidden.component.ts index f68b20635ba..cca12e938d2 100644 --- a/apps/web/src/app/billing/organizations/subscription-hidden.component.ts +++ b/apps/web/src/app/billing/organizations/subscription-hidden.component.ts @@ -2,12 +2,14 @@ // @ts-strict-ignore import { Component, Input } from "@angular/core"; -import { SubscriptionHiddenIcon } from "@bitwarden/assets/svg"; +import { GearIcon } from "@bitwarden/assets/svg"; @Component({ selector: "app-org-subscription-hidden", template: `
- +
+ +

{{ "billingManagedByProvider" | i18n: providerName }}

{{ "billingContactProviderForAssistance" | i18n }}

`, @@ -15,5 +17,5 @@ import { SubscriptionHiddenIcon } from "@bitwarden/assets/svg"; }) export class SubscriptionHiddenComponent { @Input() providerName: string; - subscriptionHiddenIcon = SubscriptionHiddenIcon; + gearIcon = GearIcon; } diff --git a/apps/web/src/app/dirt/reports/reports.ts b/apps/web/src/app/dirt/reports/reports.ts index d7437382961..eb24f780021 100644 --- a/apps/web/src/app/dirt/reports/reports.ts +++ b/apps/web/src/app/dirt/reports/reports.ts @@ -1,11 +1,11 @@ import { - MemberAccess, + NoCredentialsIcon, ReportBreach, ReportExposedPasswords, - ReportInactiveTwoFactor, - ReportReusedPasswords, ReportUnsecuredWebsites, - ReportWeakPasswords, + TwoFactorAuthSecurityKeyFailedIcon, + UnlockedIcon, + UserLockIcon, } from "@bitwarden/assets/svg"; import { ReportEntry } from "./shared"; @@ -35,13 +35,13 @@ export const reports: Record = { title: "reusedPasswordsReport", description: "reusedPasswordsReportDesc", route: "reused-passwords-report", - icon: ReportReusedPasswords, + icon: NoCredentialsIcon, }, [ReportType.WeakPasswords]: { title: "weakPasswordsReport", description: "weakPasswordsReportDesc", route: "weak-passwords-report", - icon: ReportWeakPasswords, + icon: UnlockedIcon, }, [ReportType.UnsecuredWebsites]: { title: "unsecuredWebsitesReport", @@ -53,7 +53,7 @@ export const reports: Record = { title: "inactive2faReport", description: "inactive2faReportDesc", route: "inactive-two-factor-report", - icon: ReportInactiveTwoFactor, + icon: TwoFactorAuthSecurityKeyFailedIcon, }, [ReportType.DataBreach]: { title: "dataBreachReport", @@ -65,6 +65,6 @@ export const reports: Record = { title: "memberAccessReport", description: "memberAccessReportDesc", route: "member-access-report", - icon: MemberAccess, + icon: UserLockIcon, }, }; diff --git a/apps/web/src/app/dirt/reports/shared/report-card/report-card.component.html b/apps/web/src/app/dirt/reports/shared/report-card/report-card.component.html index 5553daf6e7b..8db0db3b5e6 100644 --- a/apps/web/src/app/dirt/reports/shared/report-card/report-card.component.html +++ b/apps/web/src/app/dirt/reports/shared/report-card/report-card.component.html @@ -7,7 +7,9 @@ class="tw-flex tw-h-28 tw-bg-background-alt2 tw-text-center tw-text-primary-300" [ngClass]="{ 'tw-grayscale': disabled }" > -
+
+ +

{{ title }}

diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index c0b1f9d1622..9ac628752b6 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -14,13 +14,11 @@ import { ChangePasswordComponent } from "@bitwarden/angular/auth/password-manage import { SetInitialPasswordComponent } from "@bitwarden/angular/auth/password-management/set-initial-password/set-initial-password.component"; import { DevicesIcon, - RegistrationLockAltIcon, RegistrationUserAddIcon, TwoFactorTimeoutIcon, - DeviceVerificationIcon, + TwoFactorAuthEmailIcon, UserLockIcon, VaultIcon, - RegistrationExpiredLinkIcon, SsoKeyIcon, LockIcon, BrowserExtensionIcon, @@ -171,7 +169,7 @@ const routes: Routes = [ path: "finish-signup", canActivate: [unauthGuardFn()], data: { - pageIcon: RegistrationLockAltIcon, + pageIcon: LockIcon, titleId: "setAStrongPassword", } satisfies RouteDataProperties & AnonLayoutWrapperData, children: [ @@ -304,7 +302,7 @@ const routes: Routes = [ path: "signup-link-expired", canActivate: [unauthGuardFn()], data: { - pageIcon: RegistrationExpiredLinkIcon, + pageIcon: TwoFactorTimeoutIcon, pageTitle: { key: "expiredLink", }, @@ -435,7 +433,7 @@ const routes: Routes = [ }, ], data: { - pageIcon: DeviceVerificationIcon, + pageIcon: TwoFactorAuthEmailIcon, pageTitle: { key: "verifyYourIdentity", }, diff --git a/apps/web/src/app/shared/shared.module.ts b/apps/web/src/app/shared/shared.module.ts index efb4bb98be6..6012e4867e1 100644 --- a/apps/web/src/app/shared/shared.module.ts +++ b/apps/web/src/app/shared/shared.module.ts @@ -22,6 +22,7 @@ import { LinkModule, MenuModule, MultiSelectModule, + NoItemsModule, ProgressModule, RadioButtonModule, SectionComponent, @@ -66,6 +67,7 @@ import { LinkModule, MenuModule, MultiSelectModule, + NoItemsModule, ProgressModule, RadioButtonModule, SectionComponent, @@ -101,6 +103,7 @@ import { LinkModule, MenuModule, MultiSelectModule, + NoItemsModule, ProgressModule, RadioButtonModule, SectionComponent, diff --git a/apps/web/src/app/tools/send/send-access/access.component.html b/apps/web/src/app/tools/send/send-access/access.component.html index 2a7514ed854..16c1fcf0747 100644 --- a/apps/web/src/app/tools/send/send-access/access.component.html +++ b/apps/web/src/app/tools/send/send-access/access.component.html @@ -11,10 +11,10 @@ (setPasswordEvent)="setPassword($event)" *ngIf="passwordRequired && !error" > - + {{ "sendAccessUnavailable" | i18n }} - + {{ "unexpectedErrorSend" | i18n }}
diff --git a/apps/web/src/app/tools/send/send-access/access.component.ts b/apps/web/src/app/tools/send/send-access/access.component.ts index 1636ac37b87..a21644da924 100644 --- a/apps/web/src/app/tools/send/send-access/access.component.ts +++ b/apps/web/src/app/tools/send/send-access/access.component.ts @@ -4,7 +4,7 @@ import { Component, OnInit } from "@angular/core"; import { FormBuilder } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; -import { ExpiredSendIcon } from "@bitwarden/assets/svg"; +import { ActiveSendIcon } from "@bitwarden/assets/svg"; import { CryptoFunctionService } from "@bitwarden/common/key-management/crypto/abstractions/crypto-function.service"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -49,7 +49,7 @@ export class AccessComponent implements OnInit { protected hideEmail = false; protected decKey: SymmetricCryptoKey; protected accessRequest: SendAccessRequest; - protected expiredSendIcon = ExpiredSendIcon; + protected sendIcon = ActiveSendIcon; protected formGroup = this.formBuilder.group({}); diff --git a/apps/web/src/app/vault/components/setup-extension/setup-extension.component.html b/apps/web/src/app/vault/components/setup-extension/setup-extension.component.html index ac24383a4d3..41ee1b4707e 100644 --- a/apps/web/src/app/vault/components/setup-extension/setup-extension.component.html +++ b/apps/web/src/app/vault/components/setup-extension/setup-extension.component.html @@ -30,7 +30,9 @@
- +
+ +

{{ "bitwardenExtensionInstalled" | i18n }}

{{ "loading" | i18n }}
-
- -

{{ "noItemsInList" | i18n }}

- +
+ +
{{ "noItemsInList" | i18n }}
+ +
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 e27847d5267..e2420631c18 100644 --- a/apps/web/src/app/vault/individual-vault/vault.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault.component.ts @@ -35,7 +35,7 @@ import { Unassigned, } from "@bitwarden/admin-console/common"; import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; -import { Search } from "@bitwarden/assets/svg"; +import { NoResults } from "@bitwarden/assets/svg"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; @@ -165,7 +165,7 @@ export class VaultComponent implements OnInit, OnDestr kdfIterations: number; activeFilter: VaultFilter = new VaultFilter(); - protected noItemIcon = Search; + protected noItemIcon = NoResults; protected performingInitialLoad = true; protected refreshing = false; protected processingEvent = false; diff --git a/apps/web/src/connectors/webauthn-fallback.html b/apps/web/src/connectors/webauthn-fallback.html index 662eb0b6baf..43da5b1a485 100644 --- a/apps/web/src/connectors/webauthn-fallback.html +++ b/apps/web/src/connectors/webauthn-fallback.html @@ -15,75 +15,67 @@
-
- +
+ + + + - - - diff --git a/apps/web/src/images/domain-verification/domain.svg b/apps/web/src/images/domain-verification/domain.svg deleted file mode 100644 index 66b0ece2b10..00000000000 --- a/apps/web/src/images/domain-verification/domain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.html b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.html index fb17989aa57..cb4632ef548 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.html +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.html @@ -103,7 +103,7 @@ {{ "noDeviceRequests" | i18n }} {{ "noDeviceRequestsDesc" | i18n }} 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 bd62d972500..258a112e234 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 @@ -6,7 +6,7 @@ import { BehaviorSubject, Subject, switchMap, takeUntil, tap } from "rxjs"; import { OrganizationUserApiService } from "@bitwarden/admin-console/common"; import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider"; -import { Devices } from "@bitwarden/assets/svg"; +import { DevicesIcon } from "@bitwarden/assets/svg"; import { OrganizationAuthRequestApiService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request-api.service"; import { OrganizationAuthRequestService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request.service"; import { PendingAuthRequestWithFingerprintView } from "@bitwarden/bit-common/admin-console/auth-requests/pending-auth-request-with-fingerprint.view"; @@ -51,7 +51,7 @@ export class DeviceApprovalsComponent implements OnInit, OnDestroy { loading = true; actionInProgress = false; - protected readonly Devices = Devices; + protected readonly DevicesIcon = DevicesIcon; private destroy$ = new Subject(); private refresh$ = new BehaviorSubject(null); diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.html b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.html index 20afe902b73..0b2bb4803fc 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.html +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.html @@ -103,21 +103,13 @@ class="tw-mt-6 tw-flex tw-flex-col tw-items-center tw-justify-center" *ngIf="orgDomains?.length == 0" > - - -
- {{ "noDomains" | i18n }} -
- -
- - {{ "noDomainsSubText" | i18n }} - -
- - + +
{{ "noDomains" | i18n }}
+
{{ "noDomainsSubText" | i18n }}
+ +
diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts index 1f644f55a9f..3bc916d3fc5 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts @@ -13,6 +13,7 @@ import { takeUntil, } from "rxjs"; +import { DomainIcon } from "@bitwarden/assets/svg"; import { OrgDomainApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain-api.service.abstraction"; import { OrgDomainServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain.service.abstraction"; import { OrganizationDomainResponse } from "@bitwarden/common/admin-console/abstractions/organization-domain/responses/organization-domain.response"; @@ -40,6 +41,7 @@ import { export class DomainVerificationComponent implements OnInit, OnDestroy { private componentDestroyed$ = new Subject(); private singleOrgPolicyEnabled = false; + protected domainIcon = DomainIcon; loading = true; diff --git a/bitwarden_license/bit-web/src/app/billing/providers/clients/no-clients.component.ts b/bitwarden_license/bit-web/src/app/billing/providers/clients/no-clients.component.ts index 8ff5d070241..ed11eb8ef0a 100644 --- a/bitwarden_license/bit-web/src/app/billing/providers/clients/no-clients.component.ts +++ b/bitwarden_license/bit-web/src/app/billing/providers/clients/no-clients.component.ts @@ -1,26 +1,29 @@ import { Component, EventEmitter, Input, Output } from "@angular/core"; import { GearIcon } from "@bitwarden/assets/svg"; +import { NoItemsModule } from "@bitwarden/components"; import { SharedOrganizationModule } from "@bitwarden/web-vault/app/admin-console/organizations/shared"; @Component({ selector: "app-no-clients", - imports: [SharedOrganizationModule], - template: `
- -

{{ "noClients" | i18n }}

- - - {{ "addNewOrganization" | i18n }} - -
`, + imports: [SharedOrganizationModule, NoItemsModule], + template: ` + +
{{ "noClients" | i18n }}
+ + + {{ "addNewOrganization" | i18n }} + +
+ `, }) export class NoClientsComponent { icon = GearIcon; diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.html b/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.html index 512ccbf5bb8..2c4647f3d6f 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.html +++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.html @@ -1,7 +1,7 @@ - + {{ "organizationIsDisabled" | i18n }} {{ "secretsAccessSuspended" | i18n }} diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.ts index 0a7d6befde2..6777df7ef7a 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.ts +++ b/bitwarden_license/bit-web/src/app/secrets-manager/shared/org-suspended.component.ts @@ -2,7 +2,7 @@ import { Component } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; import { map, concatMap, firstValueFrom } from "rxjs"; -import { Icon, NoAccess } from "@bitwarden/assets/svg"; +import { Icon, DeactivatedOrg } from "@bitwarden/assets/svg"; import { getOrganizationById, OrganizationService, @@ -21,7 +21,7 @@ export class OrgSuspendedComponent { private route: ActivatedRoute, ) {} - protected NoAccess: Icon = NoAccess; + protected DeactivatedOrg: Icon = DeactivatedOrg; protected organizationName$ = this.route.params.pipe( concatMap(async (params) => { const userId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); diff --git a/libs/angular/src/auth/components/two-factor-icon.component.html b/libs/angular/src/auth/components/two-factor-icon.component.html index 46d5211ca0a..14558700757 100644 --- a/libs/angular/src/auth/components/two-factor-icon.component.html +++ b/libs/angular/src/auth/components/two-factor-icon.component.html @@ -1,12 +1,7 @@ - - - - - - - - +
+ +
- -

{{ "noInvoicesToList" | i18n }}

-
`, + template: ` +
{{ "noInvoicesToList" | i18n }}
+
`, standalone: false, }) export class NoInvoicesComponent { - icon = PartnerTrustIcon; + icon = CreditCardIcon; } diff --git a/libs/angular/src/jslib.module.ts b/libs/angular/src/jslib.module.ts index 86042f4b779..c0bf1425d47 100644 --- a/libs/angular/src/jslib.module.ts +++ b/libs/angular/src/jslib.module.ts @@ -27,6 +27,7 @@ import { TypographyModule, CopyClickDirective, A11yTitleDirective, + NoItemsModule, } from "@bitwarden/components"; import { TwoFactorIconComponent } from "./auth/components/two-factor-icon.component"; @@ -77,6 +78,7 @@ import { IconComponent } from "./vault/components/icon.component"; TypographyModule, TableModule, MenuModule, + NoItemsModule, IconButtonModule, IconModule, LinkModule, diff --git a/libs/assets/src/svg/svgs/active-send.icon.ts b/libs/assets/src/svg/svgs/active-send.icon.ts index be5cb4540f7..3b12ee865d1 100644 --- a/libs/assets/src/svg/svgs/active-send.icon.ts +++ b/libs/assets/src/svg/svgs/active-send.icon.ts @@ -1,16 +1,19 @@ import { svgIcon } from "../icon-service"; export const ActiveSendIcon = svgIcon` - - - - - - - - - - - + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/browser-extension.ts b/libs/assets/src/svg/svgs/browser-extension.ts index 4e3b54e77cd..c15a536c007 100644 --- a/libs/assets/src/svg/svgs/browser-extension.ts +++ b/libs/assets/src/svg/svgs/browser-extension.ts @@ -1,17 +1,18 @@ import { svgIcon } from "../icon-service"; export const BrowserExtensionIcon = svgIcon` - - - - - - - - - - - - - + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/create-passkey-failed.icon.ts b/libs/assets/src/svg/svgs/create-passkey-failed.icon.ts deleted file mode 100644 index 37e679b9b5e..00000000000 --- a/libs/assets/src/svg/svgs/create-passkey-failed.icon.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const CreatePasskeyFailedIcon = svgIcon` - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/create-passkey.icon.ts b/libs/assets/src/svg/svgs/create-passkey.icon.ts deleted file mode 100644 index efe180e1e2f..00000000000 --- a/libs/assets/src/svg/svgs/create-passkey.icon.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const CreatePasskeyIcon = svgIcon` - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/credit-card.icon.ts b/libs/assets/src/svg/svgs/credit-card.icon.ts new file mode 100644 index 00000000000..e334766fac7 --- /dev/null +++ b/libs/assets/src/svg/svgs/credit-card.icon.ts @@ -0,0 +1,15 @@ +import { svgIcon } from "../icon-service"; + +export const CreditCardIcon = svgIcon` + + + + + + + + + + + +`; diff --git a/libs/assets/src/svg/svgs/deactivated-org.ts b/libs/assets/src/svg/svgs/deactivated-org.ts index 92a1064e31e..75b25e3fd27 100644 --- a/libs/assets/src/svg/svgs/deactivated-org.ts +++ b/libs/assets/src/svg/svgs/deactivated-org.ts @@ -1,32 +1,31 @@ import { svgIcon } from "../icon-service"; export const DeactivatedOrg = svgIcon` - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/device-verification.icon.ts b/libs/assets/src/svg/svgs/device-verification.icon.ts deleted file mode 100644 index c8fccbf7eca..00000000000 --- a/libs/assets/src/svg/svgs/device-verification.icon.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const DeviceVerificationIcon = svgIcon` - - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/devices.icon.ts b/libs/assets/src/svg/svgs/devices.icon.ts index 471b44017b1..7c97df48657 100644 --- a/libs/assets/src/svg/svgs/devices.icon.ts +++ b/libs/assets/src/svg/svgs/devices.icon.ts @@ -1,52 +1,25 @@ import { svgIcon } from "../icon-service"; export const DevicesIcon = svgIcon` - - - - - - - - - + + + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/devices.ts b/libs/assets/src/svg/svgs/devices.ts deleted file mode 100644 index 517256ec591..00000000000 --- a/libs/assets/src/svg/svgs/devices.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const Devices = svgIcon` - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/domain.icon.ts b/libs/assets/src/svg/svgs/domain.icon.ts new file mode 100644 index 00000000000..04bd173be98 --- /dev/null +++ b/libs/assets/src/svg/svgs/domain.icon.ts @@ -0,0 +1,15 @@ +import { svgIcon } from "../icon-service"; + +export const DomainIcon = svgIcon` + + + + + + + + + + + +`; diff --git a/libs/assets/src/svg/svgs/email.icon.ts b/libs/assets/src/svg/svgs/email.icon.ts deleted file mode 100644 index c6341707880..00000000000 --- a/libs/assets/src/svg/svgs/email.icon.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const EmailIcon = svgIcon` - - Email - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/empty-trash.ts b/libs/assets/src/svg/svgs/empty-trash.ts index 61df8933d44..d6c0043d880 100644 --- a/libs/assets/src/svg/svgs/empty-trash.ts +++ b/libs/assets/src/svg/svgs/empty-trash.ts @@ -1,18 +1,15 @@ import { svgIcon } from "../icon-service"; export const EmptyTrash = svgIcon` - - - - - - - - - - - - - - + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/expired-send.icon.ts b/libs/assets/src/svg/svgs/expired-send.icon.ts deleted file mode 100644 index 19283525b4c..00000000000 --- a/libs/assets/src/svg/svgs/expired-send.icon.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const ExpiredSendIcon = svgIcon` - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/gear.ts b/libs/assets/src/svg/svgs/gear.ts index 35349f78cce..261c6d262e1 100644 --- a/libs/assets/src/svg/svgs/gear.ts +++ b/libs/assets/src/svg/svgs/gear.ts @@ -1,20 +1,23 @@ import { svgIcon } from "../icon-service"; export const GearIcon = svgIcon` - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/index.ts b/libs/assets/src/svg/svgs/index.ts index a5a4c215a29..10f2f7cd8d4 100644 --- a/libs/assets/src/svg/svgs/index.ts +++ b/libs/assets/src/svg/svgs/index.ts @@ -7,66 +7,49 @@ export * from "./bitwarden-logo.icon"; export * from "./browser-extension"; export { default as BusinessUnitPortalLogo } from "./business-unit-portal"; export * from "./carousel-icon"; -export * from "./create-passkey-failed.icon"; -export * from "./create-passkey.icon"; +export * from "./credit-card.icon"; export * from "./deactivated-org"; -export * from "./device-verification.icon"; export * from "./devices.icon"; -export * from "./devices"; -export * from "./email.icon"; +export * from "./domain.icon"; export * from "./empty-trash"; -export * from "./expired-send.icon"; export * from "./extension-bitwarden-logo.icon"; export * from "./gear"; export * from "./generator"; +export * from "./item-types"; export * from "./lock.icon"; export * from "./login-cards"; -export * from "./no-access"; export * from "./no-credentials.icon"; export * from "./no-folders"; export * from "./no-results"; export * from "./no-send.icon"; -export * from "./partner-trust"; export * from "./party"; export { default as PasswordManagerLogo } from "./password-manager"; export { default as ProviderPortalLogo } from "./provider-portal"; -export * from "./recovery.icon"; export * from "./registration-check-email.icon"; -export * from "./registration-expired-link.icon"; -export * from "./registration-lock-alt.icon"; export * from "./registration-user-add.icon"; export * from "./report-breach.icon"; export * from "./report-exposed-passwords.icon"; -export * from "./report-inactive-two-factor.icon"; -export * from "./report-member-access.icon"; -export * from "./report-reused-passwords.icon"; export * from "./report-unsecured-websites.icon"; -export * from "./report-weak-passwords.icon"; export * from "./restricted-view"; -export * from "./search"; export * from "./secrets-manager-alt"; export { default as SecretsManagerLogo } from "./secrets-manager"; -export * from "./secure-devices"; -export * from "./secure-user"; -export * from "./security-handshake"; export * from "./security"; export * from "./send"; export * from "./settings"; export * from "./shield"; export * from "./sso-key.icon"; -export * from "./subscription-hidden"; -export * from "./totp.icon"; export * from "./two-factor-auth-authenticator.icon"; export * from "./two-factor-auth-duo.icon"; export * from "./two-factor-auth-email.icon"; +export * from "./two-factor-auth-security-key-failed.icon"; export * from "./two-factor-auth-security-key.icon"; export * from "./two-factor-auth-webauthn.icon"; export * from "./two-factor-auth-yubico.icon"; export * from "./two-factor-timeout.icon"; +export * from "./unlocked.icon"; export * from "./user-lock.icon"; export * from "./user-verification-biometrics-fingerprint.icon"; export * from "./vault-open"; export * from "./vault.icon"; export * from "./vault"; export * from "./wave.icon"; -export * from "./webauthn.icon"; diff --git a/libs/assets/src/svg/svgs/item-types.ts b/libs/assets/src/svg/svgs/item-types.ts new file mode 100644 index 00000000000..50ed51bd018 --- /dev/null +++ b/libs/assets/src/svg/svgs/item-types.ts @@ -0,0 +1,23 @@ +import { svgIcon } from "../icon-service"; + +export const ItemTypes = svgIcon` + + + + + + + + + + + + + + + + + + + +`; diff --git a/libs/assets/src/svg/svgs/lock.icon.ts b/libs/assets/src/svg/svgs/lock.icon.ts index 5d5d23bcdd1..9d73ad6294c 100644 --- a/libs/assets/src/svg/svgs/lock.icon.ts +++ b/libs/assets/src/svg/svgs/lock.icon.ts @@ -1,17 +1,15 @@ import { svgIcon } from "../icon-service"; export const LockIcon = svgIcon` - - - - - - - - - - - - - + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/login-cards.ts b/libs/assets/src/svg/svgs/login-cards.ts index 0eea164a512..3a43b1a0121 100644 --- a/libs/assets/src/svg/svgs/login-cards.ts +++ b/libs/assets/src/svg/svgs/login-cards.ts @@ -1,11 +1,21 @@ import { svgIcon } from "../icon-service"; export const LoginCards = svgIcon` - - - - - - - + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/no-access.ts b/libs/assets/src/svg/svgs/no-access.ts deleted file mode 100644 index 6c9dfae939e..00000000000 --- a/libs/assets/src/svg/svgs/no-access.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const NoAccess = svgIcon` - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/no-credentials.icon.ts b/libs/assets/src/svg/svgs/no-credentials.icon.ts index a825de2f95b..bfecfd4834c 100644 --- a/libs/assets/src/svg/svgs/no-credentials.icon.ts +++ b/libs/assets/src/svg/svgs/no-credentials.icon.ts @@ -1,27 +1,13 @@ import { svgIcon } from "../icon-service"; export const NoCredentialsIcon = svgIcon` - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/no-folders.ts b/libs/assets/src/svg/svgs/no-folders.ts index ea06a9827e9..c8858ca83e5 100644 --- a/libs/assets/src/svg/svgs/no-folders.ts +++ b/libs/assets/src/svg/svgs/no-folders.ts @@ -1,19 +1,15 @@ import { svgIcon } from "../icon-service"; export const NoFolders = svgIcon` - - - - - - - - - - - - - - - + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/no-results.ts b/libs/assets/src/svg/svgs/no-results.ts index ce45fce7f3c..5f914ad213c 100644 --- a/libs/assets/src/svg/svgs/no-results.ts +++ b/libs/assets/src/svg/svgs/no-results.ts @@ -1,18 +1,16 @@ import { svgIcon } from "../icon-service"; export const NoResults = svgIcon` - - - - - - - - - - - - - - + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/no-send.icon.ts b/libs/assets/src/svg/svgs/no-send.icon.ts index 85106930961..a246c0177f8 100644 --- a/libs/assets/src/svg/svgs/no-send.icon.ts +++ b/libs/assets/src/svg/svgs/no-send.icon.ts @@ -1,13 +1,19 @@ import { svgIcon } from "../icon-service"; export const NoSendsIcon = svgIcon` - - - - - - - - + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/partner-trust.ts b/libs/assets/src/svg/svgs/partner-trust.ts deleted file mode 100644 index 22249874118..00000000000 --- a/libs/assets/src/svg/svgs/partner-trust.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const PartnerTrustIcon = svgIcon` - - - - - - - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/party.ts b/libs/assets/src/svg/svgs/party.ts index 6fb587a7c14..efa5331f4fc 100644 --- a/libs/assets/src/svg/svgs/party.ts +++ b/libs/assets/src/svg/svgs/party.ts @@ -1,30 +1,25 @@ import { svgIcon } from "../icon-service"; export const Party = svgIcon` - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/recovery.icon.ts b/libs/assets/src/svg/svgs/recovery.icon.ts deleted file mode 100644 index 95de89cad03..00000000000 --- a/libs/assets/src/svg/svgs/recovery.icon.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const RecoveryCodeIcon = svgIcon` - - Recovery Code - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/registration-check-email.icon.ts b/libs/assets/src/svg/svgs/registration-check-email.icon.ts index dd8a5c2cbdb..ae4cf3098e6 100644 --- a/libs/assets/src/svg/svgs/registration-check-email.icon.ts +++ b/libs/assets/src/svg/svgs/registration-check-email.icon.ts @@ -1,23 +1,18 @@ import { svgIcon } from "../icon-service"; export const RegistrationCheckEmailIcon = svgIcon` - - - - - - - - - - - + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/registration-expired-link.icon.ts b/libs/assets/src/svg/svgs/registration-expired-link.icon.ts deleted file mode 100644 index fbeda6c25ad..00000000000 --- a/libs/assets/src/svg/svgs/registration-expired-link.icon.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const RegistrationExpiredLinkIcon = svgIcon` - - - -`; diff --git a/libs/assets/src/svg/svgs/registration-lock-alt.icon.ts b/libs/assets/src/svg/svgs/registration-lock-alt.icon.ts deleted file mode 100644 index 2172d293d96..00000000000 --- a/libs/assets/src/svg/svgs/registration-lock-alt.icon.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const RegistrationLockAltIcon = svgIcon` - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/registration-user-add.icon.ts b/libs/assets/src/svg/svgs/registration-user-add.icon.ts index 2aa5bcc81b5..7428daa5848 100644 --- a/libs/assets/src/svg/svgs/registration-user-add.icon.ts +++ b/libs/assets/src/svg/svgs/registration-user-add.icon.ts @@ -1,24 +1,19 @@ import { svgIcon } from "../icon-service"; export const RegistrationUserAddIcon = svgIcon` - - - - - - - - - - + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/report-breach.icon.ts b/libs/assets/src/svg/svgs/report-breach.icon.ts index 6e7fde74cbc..83dd6c72b82 100644 --- a/libs/assets/src/svg/svgs/report-breach.icon.ts +++ b/libs/assets/src/svg/svgs/report-breach.icon.ts @@ -1,14 +1,14 @@ import { svgIcon } from "../icon-service"; export const ReportBreach = svgIcon` - - - - - - - - - + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/report-exposed-passwords.icon.ts b/libs/assets/src/svg/svgs/report-exposed-passwords.icon.ts index 0a019885805..0309eb643d9 100644 --- a/libs/assets/src/svg/svgs/report-exposed-passwords.icon.ts +++ b/libs/assets/src/svg/svgs/report-exposed-passwords.icon.ts @@ -1,16 +1,32 @@ import { svgIcon } from "../icon-service"; export const ReportExposedPasswords = svgIcon` - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/report-inactive-two-factor.icon.ts b/libs/assets/src/svg/svgs/report-inactive-two-factor.icon.ts deleted file mode 100644 index d7ad3c9084c..00000000000 --- a/libs/assets/src/svg/svgs/report-inactive-two-factor.icon.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const ReportInactiveTwoFactor = svgIcon` - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/report-member-access.icon.ts b/libs/assets/src/svg/svgs/report-member-access.icon.ts deleted file mode 100644 index c47fed9cd2a..00000000000 --- a/libs/assets/src/svg/svgs/report-member-access.icon.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const MemberAccess = svgIcon` - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/report-reused-passwords.icon.ts b/libs/assets/src/svg/svgs/report-reused-passwords.icon.ts deleted file mode 100644 index 30aaeee80fa..00000000000 --- a/libs/assets/src/svg/svgs/report-reused-passwords.icon.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const ReportReusedPasswords = svgIcon` - - - - - -`; diff --git a/libs/assets/src/svg/svgs/report-unsecured-websites.icon.ts b/libs/assets/src/svg/svgs/report-unsecured-websites.icon.ts index d55c06987ca..487381ccaa9 100644 --- a/libs/assets/src/svg/svgs/report-unsecured-websites.icon.ts +++ b/libs/assets/src/svg/svgs/report-unsecured-websites.icon.ts @@ -1,12 +1,15 @@ import { svgIcon } from "../icon-service"; export const ReportUnsecuredWebsites = svgIcon` - - - - - - - + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/report-weak-passwords.icon.ts b/libs/assets/src/svg/svgs/report-weak-passwords.icon.ts deleted file mode 100644 index 9709255169b..00000000000 --- a/libs/assets/src/svg/svgs/report-weak-passwords.icon.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const ReportWeakPasswords = svgIcon` - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/restricted-view.ts b/libs/assets/src/svg/svgs/restricted-view.ts index afe6c752870..5eec1a4a972 100644 --- a/libs/assets/src/svg/svgs/restricted-view.ts +++ b/libs/assets/src/svg/svgs/restricted-view.ts @@ -1,6 +1,19 @@ import { svgIcon } from "../icon-service"; -export const RestrictedView = svgIcon` - - -`; +export const RestrictedView = svgIcon` + + + + + + + + + + + + + + + +`; diff --git a/libs/assets/src/svg/svgs/search.ts b/libs/assets/src/svg/svgs/search.ts deleted file mode 100644 index 40f323acf3e..00000000000 --- a/libs/assets/src/svg/svgs/search.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const Search = svgIcon` - - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/secure-devices.ts b/libs/assets/src/svg/svgs/secure-devices.ts deleted file mode 100644 index ed216f1bc87..00000000000 --- a/libs/assets/src/svg/svgs/secure-devices.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const SecureDevices = svgIcon` - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/secure-user.ts b/libs/assets/src/svg/svgs/secure-user.ts deleted file mode 100644 index 8684549a815..00000000000 --- a/libs/assets/src/svg/svgs/secure-user.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const SecureUser = svgIcon` - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/security-handshake.ts b/libs/assets/src/svg/svgs/security-handshake.ts deleted file mode 100644 index f6309bc4c54..00000000000 --- a/libs/assets/src/svg/svgs/security-handshake.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const SecurityHandshake = svgIcon` - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/security.ts b/libs/assets/src/svg/svgs/security.ts index 0edf0aec14f..6e475b25ab7 100644 --- a/libs/assets/src/svg/svgs/security.ts +++ b/libs/assets/src/svg/svgs/security.ts @@ -1,50 +1,21 @@ import { svgIcon } from "../icon-service"; export const Security = svgIcon` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/shield.ts b/libs/assets/src/svg/svgs/shield.ts index 708642dc6ed..b0c781bd00d 100644 --- a/libs/assets/src/svg/svgs/shield.ts +++ b/libs/assets/src/svg/svgs/shield.ts @@ -4,7 +4,7 @@ import { svgIcon } from "../icon-service"; * Shield logo with extra space in the viewbox. */ const AnonLayoutBitwardenShield = svgIcon` - + `; diff --git a/libs/assets/src/svg/svgs/sso-key.icon.ts b/libs/assets/src/svg/svgs/sso-key.icon.ts index 533c033feac..ad81c707449 100644 --- a/libs/assets/src/svg/svgs/sso-key.icon.ts +++ b/libs/assets/src/svg/svgs/sso-key.icon.ts @@ -1,10 +1,11 @@ import { svgIcon } from "../icon-service"; export const SsoKeyIcon = svgIcon` - - - - - - + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/subscription-hidden.ts b/libs/assets/src/svg/svgs/subscription-hidden.ts deleted file mode 100644 index 38840580f86..00000000000 --- a/libs/assets/src/svg/svgs/subscription-hidden.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const SubscriptionHiddenIcon = svgIcon` - - - - - - - - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/totp.icon.ts b/libs/assets/src/svg/svgs/totp.icon.ts deleted file mode 100644 index 00e96c93b6f..00000000000 --- a/libs/assets/src/svg/svgs/totp.icon.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const TOTPIcon = svgIcon` - - TOTP Authenticator - - - - - - - - - - - - - - - - - -`; diff --git a/libs/assets/src/svg/svgs/two-factor-auth-authenticator.icon.ts b/libs/assets/src/svg/svgs/two-factor-auth-authenticator.icon.ts index 8e4e381eeb9..622875b59f2 100644 --- a/libs/assets/src/svg/svgs/two-factor-auth-authenticator.icon.ts +++ b/libs/assets/src/svg/svgs/two-factor-auth-authenticator.icon.ts @@ -1,39 +1,21 @@ import { svgIcon } from "../icon-service"; export const TwoFactorAuthAuthenticatorIcon = svgIcon` - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/two-factor-auth-email.icon.ts b/libs/assets/src/svg/svgs/two-factor-auth-email.icon.ts index 71ffc099e58..20709a8a1e1 100644 --- a/libs/assets/src/svg/svgs/two-factor-auth-email.icon.ts +++ b/libs/assets/src/svg/svgs/two-factor-auth-email.icon.ts @@ -1,18 +1,18 @@ import { svgIcon } from "../icon-service"; export const TwoFactorAuthEmailIcon = svgIcon` - - - - - - - - - - + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/two-factor-auth-security-key-failed.icon.ts b/libs/assets/src/svg/svgs/two-factor-auth-security-key-failed.icon.ts new file mode 100644 index 00000000000..0e467bf1901 --- /dev/null +++ b/libs/assets/src/svg/svgs/two-factor-auth-security-key-failed.icon.ts @@ -0,0 +1,17 @@ +import { svgIcon } from "../icon-service"; + +export const TwoFactorAuthSecurityKeyFailedIcon = svgIcon` + + + + + + + + + + + + + +`; diff --git a/libs/assets/src/svg/svgs/two-factor-auth-security-key.icon.ts b/libs/assets/src/svg/svgs/two-factor-auth-security-key.icon.ts index 30ef25baabb..f10068b735b 100644 --- a/libs/assets/src/svg/svgs/two-factor-auth-security-key.icon.ts +++ b/libs/assets/src/svg/svgs/two-factor-auth-security-key.icon.ts @@ -1,52 +1,20 @@ import { svgIcon } from "../icon-service"; export const TwoFactorAuthSecurityKeyIcon = svgIcon` - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/two-factor-auth-webauthn.icon.ts b/libs/assets/src/svg/svgs/two-factor-auth-webauthn.icon.ts index f5e7519e024..b9114259584 100644 --- a/libs/assets/src/svg/svgs/two-factor-auth-webauthn.icon.ts +++ b/libs/assets/src/svg/svgs/two-factor-auth-webauthn.icon.ts @@ -1,40 +1,17 @@ import { svgIcon } from "../icon-service"; export const TwoFactorAuthWebAuthnIcon = svgIcon` - - - - - - - - - - - - - - + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/two-factor-timeout.icon.ts b/libs/assets/src/svg/svgs/two-factor-timeout.icon.ts index 7a5e04c07a3..55ca4f4e945 100644 --- a/libs/assets/src/svg/svgs/two-factor-timeout.icon.ts +++ b/libs/assets/src/svg/svgs/two-factor-timeout.icon.ts @@ -1,8 +1,14 @@ import { svgIcon } from "../icon-service"; export const TwoFactorTimeoutIcon = svgIcon` - - - - + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/unlocked.icon.ts b/libs/assets/src/svg/svgs/unlocked.icon.ts new file mode 100644 index 00000000000..6ce40819e44 --- /dev/null +++ b/libs/assets/src/svg/svgs/unlocked.icon.ts @@ -0,0 +1,15 @@ +import { svgIcon } from "../icon-service"; + +export const UnlockedIcon = svgIcon` + + + + + + + + + + + +`; diff --git a/libs/assets/src/svg/svgs/user-lock.icon.ts b/libs/assets/src/svg/svgs/user-lock.icon.ts index ad56d612268..cc848a05769 100644 --- a/libs/assets/src/svg/svgs/user-lock.icon.ts +++ b/libs/assets/src/svg/svgs/user-lock.icon.ts @@ -1,102 +1,20 @@ import { svgIcon } from "../icon-service"; export const UserLockIcon = svgIcon` - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + -`; + `; diff --git a/libs/assets/src/svg/svgs/user-verification-biometrics-fingerprint.icon.ts b/libs/assets/src/svg/svgs/user-verification-biometrics-fingerprint.icon.ts index b3ace19a93d..19e1aa3e6cd 100644 --- a/libs/assets/src/svg/svgs/user-verification-biometrics-fingerprint.icon.ts +++ b/libs/assets/src/svg/svgs/user-verification-biometrics-fingerprint.icon.ts @@ -1,12 +1,12 @@ import { svgIcon } from "../icon-service"; export const UserVerificationBiometricsIcon = svgIcon` - - - - - - - - + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/vault-open.ts b/libs/assets/src/svg/svgs/vault-open.ts index e644e316c05..3ad82b9bbac 100644 --- a/libs/assets/src/svg/svgs/vault-open.ts +++ b/libs/assets/src/svg/svgs/vault-open.ts @@ -1,17 +1,25 @@ import { svgIcon } from "../icon-service"; export const VaultOpen = svgIcon` - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/vault.icon.ts b/libs/assets/src/svg/svgs/vault.icon.ts index 21fcac24e7e..61ec2589b34 100644 --- a/libs/assets/src/svg/svgs/vault.icon.ts +++ b/libs/assets/src/svg/svgs/vault.icon.ts @@ -1,23 +1,23 @@ import { svgIcon } from "../icon-service"; export const VaultIcon = svgIcon` - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/wave.icon.ts b/libs/assets/src/svg/svgs/wave.icon.ts index b7e16213d0f..6c97d0fbbb3 100644 --- a/libs/assets/src/svg/svgs/wave.icon.ts +++ b/libs/assets/src/svg/svgs/wave.icon.ts @@ -1,34 +1,11 @@ import { svgIcon } from "../icon-service"; export const WaveIcon = svgIcon` - - - - - - - + + + + + + + `; diff --git a/libs/assets/src/svg/svgs/webauthn.icon.ts b/libs/assets/src/svg/svgs/webauthn.icon.ts deleted file mode 100644 index 923c75b43c4..00000000000 --- a/libs/assets/src/svg/svgs/webauthn.icon.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { svgIcon } from "../icon-service"; - -export const WebAuthnIcon = svgIcon` - - Webauthn - - - - - - - - - - -`; diff --git a/libs/auth/src/angular/registration/registration-link-expired/registration-link-expired.component.ts b/libs/auth/src/angular/registration/registration-link-expired/registration-link-expired.component.ts index d4267dba1e4..9e75a8b888c 100644 --- a/libs/auth/src/angular/registration/registration-link-expired/registration-link-expired.component.ts +++ b/libs/auth/src/angular/registration/registration-link-expired/registration-link-expired.component.ts @@ -6,7 +6,7 @@ import { ActivatedRoute, RouterModule } from "@angular/router"; import { Subject, firstValueFrom } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -import { RegistrationExpiredLinkIcon } from "@bitwarden/assets/svg"; +import { TwoFactorTimeoutIcon } from "@bitwarden/assets/svg"; // This import has been flagged as unallowed for this class. It may be involved in a circular dependency loop. // eslint-disable-next-line no-restricted-imports import { ButtonModule, IconModule } from "@bitwarden/components"; @@ -29,7 +29,7 @@ export class RegistrationLinkExpiredComponent implements OnInit, OnDestroy { loginRoute: string; - readonly Icons = { RegistrationExpiredLinkIcon }; + readonly Icons = { TwoFactorTimeoutIcon }; constructor(private activatedRoute: ActivatedRoute) {} 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 56bce040d2f..70d8836edd5 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 @@ -41,7 +41,9 @@ " >
- +
+ +

{{ "verifyWithBiometrics" | i18n }}

diff --git a/libs/components/src/anon-layout/anon-layout.component.html b/libs/components/src/anon-layout/anon-layout.component.html index 4be11b607c6..f22d12f5138 100644 --- a/libs/components/src/anon-layout/anon-layout.component.html +++ b/libs/components/src/anon-layout/anon-layout.component.html @@ -14,7 +14,7 @@
-
+
diff --git a/libs/components/src/icon/icon.component.ts b/libs/components/src/icon/icon.component.ts index 49f284b947c..1ef7185c88b 100644 --- a/libs/components/src/icon/icon.component.ts +++ b/libs/components/src/icon/icon.component.ts @@ -9,6 +9,7 @@ import { Icon, isIcon } from "@bitwarden/assets/svg"; "[attr.aria-hidden]": "!ariaLabel()", "[attr.aria-label]": "ariaLabel()", "[innerHtml]": "innerHtml", + class: "tw-max-h-full tw-flex tw-justify-center", }, template: ``, }) diff --git a/libs/components/src/icon/icon.stories.ts b/libs/components/src/icon/icon.stories.ts index e355c3e6e75..e94a7aaf51c 100644 --- a/libs/components/src/icon/icon.stories.ts +++ b/libs/components/src/icon/icon.stories.ts @@ -37,7 +37,7 @@ export const Default = {
{{icon[0]}}
- +
} diff --git a/libs/components/src/no-items/no-items.component.html b/libs/components/src/no-items/no-items.component.html index a2659abb9a2..8caaea3b8ed 100644 --- a/libs/components/src/no-items/no-items.component.html +++ b/libs/components/src/no-items/no-items.component.html @@ -1,6 +1,8 @@
- +
+ +

diff --git a/libs/components/src/no-items/no-items.component.ts b/libs/components/src/no-items/no-items.component.ts index 3d7394a16ae..517abfc9533 100644 --- a/libs/components/src/no-items/no-items.component.ts +++ b/libs/components/src/no-items/no-items.component.ts @@ -1,6 +1,6 @@ import { Component, input } from "@angular/core"; -import { Search } from "@bitwarden/assets/svg"; +import { NoResults } from "@bitwarden/assets/svg"; import { BitIconComponent } from "../icon/icon.component"; @@ -13,5 +13,5 @@ import { BitIconComponent } from "../icon/icon.component"; imports: [BitIconComponent], }) export class NoItemsComponent { - readonly icon = input(Search); + readonly icon = input(NoResults); } diff --git a/libs/components/src/no-items/no-items.stories.ts b/libs/components/src/no-items/no-items.stories.ts index 48d52476b17..8a167ea119e 100644 --- a/libs/components/src/no-items/no-items.stories.ts +++ b/libs/components/src/no-items/no-items.stories.ts @@ -1,5 +1,21 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; +import { + ActiveSendIcon, + DeactivatedOrg, + DevicesIcon, + DomainIcon, + EmptyTrash, + GearIcon, + NoCredentialsIcon, + NoFolders, + NoResults, + NoSendsIcon, + RestrictedView, + Security, + VaultOpen, +} from "@bitwarden/assets/svg"; + import { ButtonModule } from "../button"; import { NoItemsComponent } from "./no-items.component"; @@ -23,11 +39,27 @@ export default { type Story = StoryObj; +const Icons = { + EmptyTrash, + NoFolders, + NoResults, + NoSendsIcon, + VaultOpen, + DeactivatedOrg, + ActiveSendIcon, + DevicesIcon, + Security, + NoCredentialsIcon, + RestrictedView, + DomainIcon, + GearIcon, +}; + export const Default: Story = { render: (args) => ({ props: args, - template: ` - + template: /*html*/ ` + No items found Your description here. - - - - - - - - - -
- -
-
- -
-
{{ secret.name }}
-
- {{ secret.id }} - -
-
-
- - - - {{ project.name }} - - {{ "unassigned" | i18n }} - - {{ secret.revisionDate | date: "medium" }} - - - - - - - - - - - - - -
- - - diff --git a/apps/web/src/app/admin-console/organizations/policies/policies.component.ts b/apps/web/src/app/admin-console/organizations/policies/policies.component.ts index 094f0262629..45383133687 100644 --- a/apps/web/src/app/admin-console/organizations/policies/policies.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policies.component.ts @@ -16,22 +16,31 @@ import { PolicyResponse } from "@bitwarden/common/admin-console/models/response/ import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { DialogService } from "@bitwarden/components"; +import { safeProvider } from "@bitwarden/ui-common"; -import { PolicyListService } from "../../core/policy-list.service"; -import { BasePolicy } from "../policies"; +import { HeaderModule } from "../../../layouts/header/header.module"; +import { SharedModule } from "../../../shared"; -import { PolicyEditComponent, PolicyEditDialogResult } from "./policy-edit.component"; +import { BasePolicyEditDefinition } from "./base-policy-edit.component"; +import { PolicyEditDialogComponent } from "./policy-edit-dialog.component"; +import { PolicyListService } from "./policy-list.service"; +import { POLICY_EDIT_REGISTER } from "./policy-register-token"; @Component({ - selector: "app-org-policies", templateUrl: "policies.component.html", - standalone: false, + imports: [SharedModule, HeaderModule], + providers: [ + safeProvider({ + provide: PolicyListService, + deps: [POLICY_EDIT_REGISTER], + }), + ], }) export class PoliciesComponent implements OnInit { loading = true; organizationId: string; - policies: BasePolicy[]; - organization$: Observable; + policies: readonly BasePolicyEditDefinition[]; + protected organization$: Observable; private orgPolicies: PolicyResponse[]; protected policiesEnabledMap: Map = new Map(); @@ -97,8 +106,8 @@ export class PoliciesComponent implements OnInit { this.loading = false; } - async edit(policy: BasePolicy) { - const dialogRef = PolicyEditComponent.open(this.dialogService, { + async edit(policy: BasePolicyEditDefinition) { + const dialogRef = PolicyEditDialogComponent.open(this.dialogService, { data: { policy: policy, organizationId: this.organizationId, @@ -106,7 +115,7 @@ export class PoliciesComponent implements OnInit { }); const result = await lastValueFrom(dialogRef.closed); - if (result === PolicyEditDialogResult.Saved) { + if (result == "saved") { await this.load(); } } diff --git a/apps/web/src/app/admin-console/organizations/policies/policies.module.ts b/apps/web/src/app/admin-console/organizations/policies/policies.module.ts deleted file mode 100644 index 95b22497eba..00000000000 --- a/apps/web/src/app/admin-console/organizations/policies/policies.module.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { NgModule } from "@angular/core"; - -import { HeaderModule } from "../../../layouts/header/header.module"; -import { SharedModule } from "../../../shared"; - -import { DisableSendPolicyComponent } from "./disable-send.component"; -import { MasterPasswordPolicyComponent } from "./master-password.component"; -import { OrganizationDataOwnershipPolicyComponent } from "./organization-data-ownership.component"; -import { PasswordGeneratorPolicyComponent } from "./password-generator.component"; -import { PoliciesComponent } from "./policies.component"; -import { PolicyEditComponent } from "./policy-edit.component"; -import { RemoveUnlockWithPinPolicyComponent } from "./remove-unlock-with-pin.component"; -import { RequireSsoPolicyComponent } from "./require-sso.component"; -import { ResetPasswordPolicyComponent } from "./reset-password.component"; -import { RestrictedItemTypesPolicyComponent } from "./restricted-item-types.component"; -import { SendOptionsPolicyComponent } from "./send-options.component"; -import { SingleOrgPolicyComponent } from "./single-org.component"; -import { TwoFactorAuthenticationPolicyComponent } from "./two-factor-authentication.component"; - -@NgModule({ - imports: [SharedModule, HeaderModule], - declarations: [ - DisableSendPolicyComponent, - MasterPasswordPolicyComponent, - PasswordGeneratorPolicyComponent, - OrganizationDataOwnershipPolicyComponent, - RequireSsoPolicyComponent, - ResetPasswordPolicyComponent, - SendOptionsPolicyComponent, - SingleOrgPolicyComponent, - TwoFactorAuthenticationPolicyComponent, - PoliciesComponent, - PolicyEditComponent, - RemoveUnlockWithPinPolicyComponent, - RestrictedItemTypesPolicyComponent, - ], - exports: [ - DisableSendPolicyComponent, - MasterPasswordPolicyComponent, - PasswordGeneratorPolicyComponent, - OrganizationDataOwnershipPolicyComponent, - RequireSsoPolicyComponent, - ResetPasswordPolicyComponent, - SendOptionsPolicyComponent, - SingleOrgPolicyComponent, - TwoFactorAuthenticationPolicyComponent, - PoliciesComponent, - PolicyEditComponent, - RemoveUnlockWithPinPolicyComponent, - ], -}) -export class PoliciesModule {} diff --git a/apps/web/src/app/admin-console/organizations/policies/disable-send.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/disable-send.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/disable-send.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/disable-send.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/disable-send.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/disable-send.component.ts similarity index 50% rename from apps/web/src/app/admin-console/organizations/policies/disable-send.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/disable-send.component.ts index b323ac00d34..3b4df75e555 100644 --- a/apps/web/src/app/admin-console/organizations/policies/disable-send.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/disable-send.component.ts @@ -2,9 +2,10 @@ import { Component } from "@angular/core"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class DisableSendPolicy extends BasePolicy { +export class DisableSendPolicy extends BasePolicyEditDefinition { name = "disableSend"; description = "disableSendPolicyDesc"; type = PolicyType.DisableSend; @@ -12,8 +13,7 @@ export class DisableSendPolicy extends BasePolicy { } @Component({ - selector: "policy-disable-send", templateUrl: "disable-send.component.html", - standalone: false, + imports: [SharedModule], }) -export class DisableSendPolicyComponent extends BasePolicyComponent {} +export class DisableSendPolicyComponent extends BasePolicyEditComponent {} diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/index.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/index.ts new file mode 100644 index 00000000000..13f29ab68f7 --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/index.ts @@ -0,0 +1,15 @@ +export { DisableSendPolicy } from "./disable-send.component"; +export { MasterPasswordPolicy } from "./master-password.component"; +export { OrganizationDataOwnershipPolicy } from "./organization-data-ownership.component"; +export { PasswordGeneratorPolicy } from "./password-generator.component"; +export { RemoveUnlockWithPinPolicy } from "./remove-unlock-with-pin.component"; +export { RequireSsoPolicy } from "./require-sso.component"; +export { ResetPasswordPolicy } from "./reset-password.component"; +export { RestrictedItemTypesPolicy } from "./restricted-item-types.component"; +export { SendOptionsPolicy } from "./send-options.component"; +export { SingleOrgPolicy } from "./single-org.component"; +export { TwoFactorAuthenticationPolicy } from "./two-factor-authentication.component"; +export { + vNextOrganizationDataOwnershipPolicy, + vNextOrganizationDataOwnershipPolicyComponent, +} from "./vnext-organization-data-ownership.component"; diff --git a/apps/web/src/app/admin-console/organizations/policies/master-password.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/master-password.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/master-password.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/master-password.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/master-password.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/master-password.component.ts similarity index 88% rename from apps/web/src/app/admin-console/organizations/policies/master-password.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/master-password.component.ts index 54cf1be88fc..fe3d76a0907 100644 --- a/apps/web/src/app/admin-console/organizations/policies/master-password.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/master-password.component.ts @@ -16,9 +16,10 @@ import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class MasterPasswordPolicy extends BasePolicy { +export class MasterPasswordPolicy extends BasePolicyEditDefinition { name = "masterPassPolicyTitle"; description = "masterPassPolicyDesc"; type = PolicyType.MasterPassword; @@ -26,11 +27,10 @@ export class MasterPasswordPolicy extends BasePolicy { } @Component({ - selector: "policy-master-password", templateUrl: "master-password.component.html", - standalone: false, + imports: [SharedModule], }) -export class MasterPasswordPolicyComponent extends BasePolicyComponent implements OnInit { +export class MasterPasswordPolicyComponent extends BasePolicyEditComponent implements OnInit { MinPasswordLength = Utils.minimumPasswordLength; data: FormGroup> = this.formBuilder.group({ diff --git a/apps/web/src/app/admin-console/organizations/policies/organization-data-ownership.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/organization-data-ownership.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/organization-data-ownership.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/organization-data-ownership.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/organization-data-ownership.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/organization-data-ownership.component.ts similarity index 70% rename from apps/web/src/app/admin-console/organizations/policies/organization-data-ownership.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/organization-data-ownership.component.ts index beb9fd5752a..94094b76f69 100644 --- a/apps/web/src/app/admin-console/organizations/policies/organization-data-ownership.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/organization-data-ownership.component.ts @@ -6,15 +6,16 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class OrganizationDataOwnershipPolicy extends BasePolicy { +export class OrganizationDataOwnershipPolicy extends BasePolicyEditDefinition { name = "organizationDataOwnership"; description = "personalOwnershipPolicyDesc"; type = PolicyType.OrganizationDataOwnership; component = OrganizationDataOwnershipPolicyComponent; - display(organization: Organization, configService: ConfigService): Observable { + display$(organization: Organization, configService: ConfigService): Observable { return configService .getFeatureFlag$(FeatureFlag.CreateDefaultLocation) .pipe(map((enabled) => !enabled)); @@ -22,8 +23,7 @@ export class OrganizationDataOwnershipPolicy extends BasePolicy { } @Component({ - selector: "policy-organization-data-ownership", templateUrl: "organization-data-ownership.component.html", - standalone: false, + imports: [SharedModule], }) -export class OrganizationDataOwnershipPolicyComponent extends BasePolicyComponent {} +export class OrganizationDataOwnershipPolicyComponent extends BasePolicyEditComponent {} diff --git a/apps/web/src/app/admin-console/organizations/policies/password-generator.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/password-generator.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/password-generator.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/password-generator.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/password-generator.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/password-generator.component.ts similarity index 94% rename from apps/web/src/app/admin-console/organizations/policies/password-generator.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/password-generator.component.ts index 26f87f333eb..e26d37bfdf2 100644 --- a/apps/web/src/app/admin-console/organizations/policies/password-generator.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/password-generator.component.ts @@ -9,9 +9,10 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { BuiltIn, Profile } from "@bitwarden/generator-core"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class PasswordGeneratorPolicy extends BasePolicy { +export class PasswordGeneratorPolicy extends BasePolicyEditDefinition { name = "passwordGenerator"; description = "passwordGeneratorPolicyDesc"; type = PolicyType.PasswordGenerator; @@ -19,11 +20,10 @@ export class PasswordGeneratorPolicy extends BasePolicy { } @Component({ - selector: "policy-password-generator", templateUrl: "password-generator.component.html", - standalone: false, + imports: [SharedModule], }) -export class PasswordGeneratorPolicyComponent extends BasePolicyComponent { +export class PasswordGeneratorPolicyComponent extends BasePolicyEditComponent { // these properties forward the application default settings to the UI // for HTML attribute bindings protected readonly minLengthMin = diff --git a/apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.spec.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts similarity index 86% rename from apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.spec.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts index 9058cd22f3e..f6df56cd83a 100644 --- a/apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.spec.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts @@ -1,11 +1,8 @@ -import { CommonModule } from "@angular/common"; import { NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { mock } from "jest-mock-extended"; -import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { PolicyResponse } from "@bitwarden/common/admin-console/models/response/policy.response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -33,8 +30,6 @@ describe("RemoveUnlockWithPinPolicyComponent", () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [CommonModule, ReactiveFormsModule], - declarations: [RemoveUnlockWithPinPolicyComponent, I18nPipe], providers: [ { provide: I18nService, useValue: mock() }, { provide: I18nService, useValue: i18nService }, @@ -102,9 +97,6 @@ describe("RemoveUnlockWithPinPolicyComponent", () => { const bitLabelElement = fixture.debugElement.query(By.css("bit-label")); expect(bitLabelElement).not.toBeNull(); - const textNodes = bitLabelElement.childNodes - .filter((node) => node.nativeNode.nodeType === Node.TEXT_NODE) - .map((node) => node.nativeNode.wholeText?.trim()); - expect(textNodes).toContain("Turn on"); + expect(bitLabelElement.nativeElement.textContent.trim()).toBe("Turn on"); }); }); diff --git a/apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.ts similarity index 61% rename from apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.ts index 0d0f42b603e..e95ef8a1422 100644 --- a/apps/web/src/app/admin-console/organizations/policies/remove-unlock-with-pin.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.ts @@ -2,9 +2,10 @@ import { Component } from "@angular/core"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class RemoveUnlockWithPinPolicy extends BasePolicy { +export class RemoveUnlockWithPinPolicy extends BasePolicyEditDefinition { name = "removeUnlockWithPinPolicyTitle"; description = "removeUnlockWithPinPolicyDesc"; type = PolicyType.RemoveUnlockWithPin; @@ -12,8 +13,7 @@ export class RemoveUnlockWithPinPolicy extends BasePolicy { } @Component({ - selector: "remove-unlock-with-pin", templateUrl: "remove-unlock-with-pin.component.html", - standalone: false, + imports: [SharedModule], }) -export class RemoveUnlockWithPinPolicyComponent extends BasePolicyComponent {} +export class RemoveUnlockWithPinPolicyComponent extends BasePolicyEditComponent {} diff --git a/apps/web/src/app/admin-console/organizations/policies/require-sso.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/require-sso.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/require-sso.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/require-sso.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/require-sso.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/require-sso.component.ts similarity index 59% rename from apps/web/src/app/admin-console/organizations/policies/require-sso.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/require-sso.component.ts index 3a0d196c593..3f28c0cb068 100644 --- a/apps/web/src/app/admin-console/organizations/policies/require-sso.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/require-sso.component.ts @@ -5,22 +5,22 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class RequireSsoPolicy extends BasePolicy { +export class RequireSsoPolicy extends BasePolicyEditDefinition { name = "requireSso"; description = "requireSsoPolicyDesc"; type = PolicyType.RequireSso; component = RequireSsoPolicyComponent; - display(organization: Organization, configService: ConfigService) { + display$(organization: Organization, configService: ConfigService) { return of(organization.useSso); } } @Component({ - selector: "policy-require-sso", templateUrl: "require-sso.component.html", - standalone: false, + imports: [SharedModule], }) -export class RequireSsoPolicyComponent extends BasePolicyComponent {} +export class RequireSsoPolicyComponent extends BasePolicyEditComponent {} diff --git a/apps/web/src/app/admin-console/organizations/policies/reset-password.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/reset-password.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/reset-password.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/reset-password.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/reset-password.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/reset-password.component.ts similarity index 82% rename from apps/web/src/app/admin-console/organizations/policies/reset-password.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/reset-password.component.ts index 93a42285fbc..fafb0b32398 100644 --- a/apps/web/src/app/admin-console/organizations/policies/reset-password.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/reset-password.component.ts @@ -12,25 +12,25 @@ import { AccountService } from "@bitwarden/common/auth/abstractions/account.serv import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class ResetPasswordPolicy extends BasePolicy { +export class ResetPasswordPolicy extends BasePolicyEditDefinition { name = "accountRecoveryPolicy"; description = "accountRecoveryPolicyDesc"; type = PolicyType.ResetPassword; component = ResetPasswordPolicyComponent; - display(organization: Organization, configService: ConfigService) { + display$(organization: Organization, configService: ConfigService) { return of(organization.useResetPassword); } } @Component({ - selector: "policy-reset-password", templateUrl: "reset-password.component.html", - standalone: false, + imports: [SharedModule], }) -export class ResetPasswordPolicyComponent extends BasePolicyComponent implements OnInit { +export class ResetPasswordPolicyComponent extends BasePolicyEditComponent implements OnInit { data = this.formBuilder.group({ autoEnrollEnabled: false, }); diff --git a/apps/web/src/app/admin-console/organizations/policies/restricted-item-types.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/restricted-item-types.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/restricted-item-types.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/restricted-item-types.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/restricted-item-types.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/restricted-item-types.component.ts similarity index 70% rename from apps/web/src/app/admin-console/organizations/policies/restricted-item-types.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/restricted-item-types.component.ts index 6cad0fc0170..51cba689693 100644 --- a/apps/web/src/app/admin-console/organizations/policies/restricted-item-types.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/restricted-item-types.component.ts @@ -6,25 +6,25 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class RestrictedItemTypesPolicy extends BasePolicy { +export class RestrictedItemTypesPolicy extends BasePolicyEditDefinition { name = "restrictedItemTypePolicy"; description = "restrictedItemTypePolicyDesc"; type = PolicyType.RestrictedItemTypes; component = RestrictedItemTypesPolicyComponent; - display(organization: Organization, configService: ConfigService): Observable { + display$(organization: Organization, configService: ConfigService): Observable { return configService.getFeatureFlag$(FeatureFlag.RemoveCardItemTypePolicy); } } @Component({ - selector: "policy-restricted-item-types", templateUrl: "restricted-item-types.component.html", - standalone: false, + imports: [SharedModule], }) -export class RestrictedItemTypesPolicyComponent extends BasePolicyComponent { +export class RestrictedItemTypesPolicyComponent extends BasePolicyEditComponent { constructor() { super(); } diff --git a/apps/web/src/app/admin-console/organizations/policies/send-options.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/send-options.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/send-options.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/send-options.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/send-options.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/send-options.component.ts similarity index 62% rename from apps/web/src/app/admin-console/organizations/policies/send-options.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/send-options.component.ts index 9a0a8871296..e581ed2f4c7 100644 --- a/apps/web/src/app/admin-console/organizations/policies/send-options.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/send-options.component.ts @@ -3,9 +3,10 @@ import { UntypedFormBuilder } from "@angular/forms"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class SendOptionsPolicy extends BasePolicy { +export class SendOptionsPolicy extends BasePolicyEditDefinition { name = "sendOptions"; description = "sendOptionsPolicyDesc"; type = PolicyType.SendOptions; @@ -13,11 +14,10 @@ export class SendOptionsPolicy extends BasePolicy { } @Component({ - selector: "policy-send-options", templateUrl: "send-options.component.html", - standalone: false, + imports: [SharedModule], }) -export class SendOptionsPolicyComponent extends BasePolicyComponent { +export class SendOptionsPolicyComponent extends BasePolicyEditComponent { data = this.formBuilder.group({ disableHideEmail: false, }); diff --git a/apps/web/src/app/admin-console/organizations/policies/single-org.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/single-org.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/single-org.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/single-org.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/single-org.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/single-org.component.ts similarity index 61% rename from apps/web/src/app/admin-console/organizations/policies/single-org.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/single-org.component.ts index 613253ef8d9..ecaa86b03bc 100644 --- a/apps/web/src/app/admin-console/organizations/policies/single-org.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/single-org.component.ts @@ -2,9 +2,10 @@ import { Component, OnInit } from "@angular/core"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class SingleOrgPolicy extends BasePolicy { +export class SingleOrgPolicy extends BasePolicyEditDefinition { name = "singleOrg"; description = "singleOrgPolicyDesc"; type = PolicyType.SingleOrg; @@ -12,11 +13,10 @@ export class SingleOrgPolicy extends BasePolicy { } @Component({ - selector: "policy-single-org", templateUrl: "single-org.component.html", - standalone: false, + imports: [SharedModule], }) -export class SingleOrgPolicyComponent extends BasePolicyComponent implements OnInit { +export class SingleOrgPolicyComponent extends BasePolicyEditComponent implements OnInit { async ngOnInit() { super.ngOnInit(); diff --git a/apps/web/src/app/admin-console/organizations/policies/two-factor-authentication.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/two-factor-authentication.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/two-factor-authentication.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/two-factor-authentication.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/two-factor-authentication.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/two-factor-authentication.component.ts similarity index 60% rename from apps/web/src/app/admin-console/organizations/policies/two-factor-authentication.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/two-factor-authentication.component.ts index 691e12c72f6..13b7660c4e7 100644 --- a/apps/web/src/app/admin-console/organizations/policies/two-factor-authentication.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/two-factor-authentication.component.ts @@ -2,9 +2,10 @@ import { Component } from "@angular/core"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; -export class TwoFactorAuthenticationPolicy extends BasePolicy { +export class TwoFactorAuthenticationPolicy extends BasePolicyEditDefinition { name = "twoStepLoginPolicyTitle"; description = "twoStepLoginPolicyDesc"; type = PolicyType.TwoFactorAuthentication; @@ -12,8 +13,7 @@ export class TwoFactorAuthenticationPolicy extends BasePolicy { } @Component({ - selector: "policy-two-factor-authentication", templateUrl: "two-factor-authentication.component.html", - standalone: false, + imports: [SharedModule], }) -export class TwoFactorAuthenticationPolicyComponent extends BasePolicyComponent {} +export class TwoFactorAuthenticationPolicyComponent extends BasePolicyEditComponent {} diff --git a/apps/web/src/app/admin-console/organizations/policies/vnext-organization-data-ownership.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/vnext-organization-data-ownership.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/vnext-organization-data-ownership.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/vnext-organization-data-ownership.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/vnext-organization-data-ownership.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/vnext-organization-data-ownership.component.ts similarity index 88% rename from apps/web/src/app/admin-console/organizations/policies/vnext-organization-data-ownership.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/vnext-organization-data-ownership.component.ts index 89964e94395..2234d5c7437 100644 --- a/apps/web/src/app/admin-console/organizations/policies/vnext-organization-data-ownership.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/vnext-organization-data-ownership.component.ts @@ -12,9 +12,8 @@ import { OrgKey } from "@bitwarden/common/types/key"; import { DialogService } from "@bitwarden/components"; import { EncString } from "@bitwarden/sdk-internal"; -import { SharedModule } from "../../../shared"; - -import { BasePolicy, BasePolicyComponent } from "./base-policy.component"; +import { SharedModule } from "../../../../shared"; +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "../base-policy-edit.component"; interface VNextPolicyRequest { policy: PolicyRequest; @@ -23,26 +22,24 @@ interface VNextPolicyRequest { }; } -export class vNextOrganizationDataOwnershipPolicy extends BasePolicy { +export class vNextOrganizationDataOwnershipPolicy extends BasePolicyEditDefinition { name = "organizationDataOwnership"; description = "organizationDataOwnershipDesc"; type = PolicyType.OrganizationDataOwnership; component = vNextOrganizationDataOwnershipPolicyComponent; showDescription = false; - override display(organization: Organization, configService: ConfigService): Observable { + override display$(organization: Organization, configService: ConfigService): Observable { return configService.getFeatureFlag$(FeatureFlag.CreateDefaultLocation); } } @Component({ - selector: "vnext-policy-organization-data-ownership", templateUrl: "vnext-organization-data-ownership.component.html", - standalone: true, imports: [SharedModule], }) export class vNextOrganizationDataOwnershipPolicyComponent - extends BasePolicyComponent + extends BasePolicyEditComponent implements OnInit { constructor( @@ -74,7 +71,7 @@ export class vNextOrganizationDataOwnershipPolicyComponent const request: VNextPolicyRequest = { policy: { type: this.policy.type, - enabled: this.enabled.value, + enabled: this.enabled.value ?? false, data: this.buildRequestData(), }, metadata: { diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.html b/apps/web/src/app/admin-console/organizations/policies/policy-edit-dialog.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/policies/policy-edit.component.html rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-dialog.component.html diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-dialog.component.ts similarity index 67% rename from apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts rename to apps/web/src/app/admin-console/organizations/policies/policy-edit-dialog.component.ts index ad1099af3cd..f0672d0f861 100644 --- a/apps/web/src/app/admin-console/organizations/policies/policy-edit.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-dialog.component.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { AfterViewInit, ChangeDetectorRef, @@ -9,7 +7,7 @@ import { ViewContainerRef, } from "@angular/core"; import { FormBuilder } from "@angular/forms"; -import { Observable, map, firstValueFrom, switchMap } from "rxjs"; +import { Observable, map, firstValueFrom, switchMap, filter, of } from "rxjs"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; @@ -29,37 +27,38 @@ import { } from "@bitwarden/components"; import { KeyService } from "@bitwarden/key-management"; -import { BasePolicy, BasePolicyComponent } from "../policies"; -import { vNextOrganizationDataOwnershipPolicyComponent } from "../policies/vnext-organization-data-ownership.component"; +import { SharedModule } from "../../../shared"; + +import { BasePolicyEditDefinition, BasePolicyEditComponent } from "./base-policy-edit.component"; +import { vNextOrganizationDataOwnershipPolicyComponent } from "./policy-edit-definitions"; export type PolicyEditDialogData = { - /** Returns policy abstracts. */ - policy: BasePolicy; - /** Returns a unique organization id */ + /** + * The metadata containing information about how to display and edit the policy. + */ + policy: BasePolicyEditDefinition; + /** + * The organization ID for the policy. + */ organizationId: string; }; -// FIXME: update to use a const object instead of a typescript enum -// eslint-disable-next-line @bitwarden/platform/no-enums -export enum PolicyEditDialogResult { - Saved = "saved", -} +export type PolicyEditDialogResult = "saved"; + @Component({ - selector: "app-policy-edit", - templateUrl: "policy-edit.component.html", - standalone: false, + templateUrl: "policy-edit-dialog.component.html", + imports: [SharedModule], }) -export class PolicyEditComponent implements AfterViewInit { +export class PolicyEditDialogComponent implements AfterViewInit { @ViewChild("policyForm", { read: ViewContainerRef, static: true }) - policyFormRef: ViewContainerRef; + policyFormRef: ViewContainerRef | undefined; policyType = PolicyType; loading = true; enabled = false; - saveDisabled$: Observable; - policyComponent: BasePolicyComponent; + saveDisabled$: Observable = of(false); + policyComponent: BasePolicyEditComponent | undefined; - private policyResponse: PolicyResponse; formGroup = this.formBuilder.group({ enabled: [this.enabled], }); @@ -75,35 +74,43 @@ export class PolicyEditComponent implements AfterViewInit { private configService: ConfigService, private keyService: KeyService, ) {} - get policy(): BasePolicy { + + get policy(): BasePolicyEditDefinition { return this.data.policy; } + /** + * Instantiates the child policy component and inserts it into the view. + */ async ngAfterViewInit() { - await this.load(); + const policyResponse = await this.load(); this.loading = false; - this.policyComponent = this.policyFormRef.createComponent(this.data.policy.component) - .instance as BasePolicyComponent; - this.policyComponent.policy = this.data.policy; - this.policyComponent.policyResponse = this.policyResponse; + if (!this.policyFormRef) { + throw new Error("Template not initialized."); + } - this.saveDisabled$ = this.policyComponent.data.statusChanges.pipe( - map((status) => status !== "VALID" || !this.policyResponse.canToggleState), - ); + this.policyComponent = this.policyFormRef.createComponent(this.data.policy.component).instance; + this.policyComponent.policy = this.data.policy; + this.policyComponent.policyResponse = policyResponse; + + if (this.policyComponent.data) { + // If the policy has additional configuration, disable the save button if the form state is invalid + this.saveDisabled$ = this.policyComponent.data.statusChanges.pipe( + map((status) => status !== "VALID" || !policyResponse.canToggleState), + ); + } this.cdr.detectChanges(); } async load() { try { - this.policyResponse = await this.policyApiService.getPolicy( - this.data.organizationId, - this.data.policy.type, - ); - } catch (e) { + return await this.policyApiService.getPolicy(this.data.organizationId, this.data.policy.type); + } catch (e: any) { + // No policy exists yet, instantiate an empty one if (e.statusCode === 404) { - this.policyResponse = new PolicyResponse({ Enabled: false }); + return new PolicyResponse({ Enabled: false }); } else { throw e; } @@ -111,6 +118,10 @@ export class PolicyEditComponent implements AfterViewInit { } submit = async () => { + if (!this.policyComponent) { + throw new Error("PolicyComponent not initialized."); + } + if ((await this.policyComponent.confirm()) == false) { this.dialogRef.close(); return; @@ -128,14 +139,12 @@ export class PolicyEditComponent implements AfterViewInit { this.toastService.showToast({ variant: "success", - title: null, message: this.i18nService.t("editedPolicyId", this.i18nService.t(this.data.policy.name)), }); - this.dialogRef.close(PolicyEditDialogResult.Saved); - } catch (error) { + this.dialogRef.close("saved"); + } catch (error: any) { this.toastService.showToast({ variant: "error", - title: null, message: error.message, }); } @@ -150,6 +159,10 @@ export class PolicyEditComponent implements AfterViewInit { } private async handleStandardSubmission(): Promise { + if (!this.policyComponent) { + throw new Error("PolicyComponent not initialized."); + } + const request = await this.policyComponent.buildRequest(); await this.policyApiService.putPolicy(this.data.organizationId, this.data.policy.type, request); } @@ -161,10 +174,8 @@ export class PolicyEditComponent implements AfterViewInit { this.accountService.activeAccount$.pipe( getUserId, switchMap((userId) => this.keyService.orgKeys$(userId)), - map( - (orgKeys: { [key: OrganizationId]: any }) => - orgKeys[this.data.organizationId as OrganizationId] ?? null, - ), + filter((orgKeys) => orgKeys != null), + map((orgKeys) => orgKeys[this.data.organizationId as OrganizationId] ?? null), ), ); @@ -181,6 +192,6 @@ export class PolicyEditComponent implements AfterViewInit { ); } static open = (dialogService: DialogService, config: DialogConfig) => { - return dialogService.open(PolicyEditComponent, config); + return dialogService.open(PolicyEditDialogComponent, config); }; } diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit-register.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-register.ts new file mode 100644 index 00000000000..3a4ba9a710f --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-register.ts @@ -0,0 +1,34 @@ +import { BasePolicyEditDefinition } from "./base-policy-edit.component"; +import { + DisableSendPolicy, + MasterPasswordPolicy, + OrganizationDataOwnershipPolicy, + PasswordGeneratorPolicy, + RemoveUnlockWithPinPolicy, + RequireSsoPolicy, + ResetPasswordPolicy, + RestrictedItemTypesPolicy, + SendOptionsPolicy, + SingleOrgPolicy, + TwoFactorAuthenticationPolicy, + vNextOrganizationDataOwnershipPolicy, +} from "./policy-edit-definitions"; + +/** + * The policy register for OSS policies. + * Add your policy definition here if it is under the OSS license. + */ +export const ossPolicyEditRegister: BasePolicyEditDefinition[] = [ + new TwoFactorAuthenticationPolicy(), + new MasterPasswordPolicy(), + new RemoveUnlockWithPinPolicy(), + new ResetPasswordPolicy(), + new PasswordGeneratorPolicy(), + new SingleOrgPolicy(), + new RequireSsoPolicy(), + new OrganizationDataOwnershipPolicy(), + new vNextOrganizationDataOwnershipPolicy(), + new DisableSendPolicy(), + new SendOptionsPolicy(), + new RestrictedItemTypesPolicy(), +]; diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-list.service.ts b/apps/web/src/app/admin-console/organizations/policies/policy-list.service.ts new file mode 100644 index 00000000000..0434338f2f0 --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/policies/policy-list.service.ts @@ -0,0 +1,13 @@ +import { BasePolicyEditDefinition } from "./base-policy-edit.component"; + +export class PolicyListService { + private policies: readonly BasePolicyEditDefinition[]; + + constructor(policies: BasePolicyEditDefinition[]) { + this.policies = Object.freeze([...policies]); + } + + getPolicies() { + return this.policies; + } +} diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-register-token.ts b/apps/web/src/app/admin-console/organizations/policies/policy-register-token.ts new file mode 100644 index 00000000000..3c46af32e88 --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/policies/policy-register-token.ts @@ -0,0 +1,7 @@ +import { SafeInjectionToken } from "@bitwarden/ui-common"; + +import { BasePolicyEditDefinition } from "./base-policy-edit.component"; + +export const POLICY_EDIT_REGISTER = new SafeInjectionToken( + "POLICY_EDIT_REGISTER", +); diff --git a/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts b/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts index 7065e8e799c..27a6226f964 100644 --- a/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts +++ b/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts @@ -7,7 +7,6 @@ import { DangerZoneComponent } from "../../../auth/settings/account/danger-zone. import { HeaderModule } from "../../../layouts/header/header.module"; import { SharedModule } from "../../../shared"; import { AccountFingerprintComponent } from "../../../shared/components/account-fingerprint/account-fingerprint.component"; -import { PoliciesModule } from "../../organizations/policies"; import { AccountComponent } from "./account.component"; import { OrganizationSettingsRoutingModule } from "./organization-settings-routing.module"; @@ -16,7 +15,6 @@ import { TwoFactorSetupComponent } from "./two-factor-setup.component"; @NgModule({ imports: [ SharedModule, - PoliciesModule, OrganizationSettingsRoutingModule, AccountFingerprintComponent, DangerZoneComponent, diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 1cb95250611..60911173308 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -30,22 +30,6 @@ import { SearchService } from "@bitwarden/common/vault/abstractions/search.servi import { DialogService, ToastService } from "@bitwarden/components"; import { KeyService, BiometricStateService } from "@bitwarden/key-management"; -import { PolicyListService } from "./admin-console/core/policy-list.service"; -import { - DisableSendPolicy, - MasterPasswordPolicy, - PasswordGeneratorPolicy, - OrganizationDataOwnershipPolicy, - vNextOrganizationDataOwnershipPolicy, - RequireSsoPolicy, - ResetPasswordPolicy, - SendOptionsPolicy, - SingleOrgPolicy, - TwoFactorAuthenticationPolicy, - RemoveUnlockWithPinPolicy, - RestrictedItemTypesPolicy, -} from "./admin-console/organizations/policies"; - const BroadcasterSubscriptionId = "AppComponent"; const IdleTimeout = 60000 * 10; // 10 minutes @@ -79,7 +63,6 @@ export class AppComponent implements OnDestroy, OnInit { private serverNotificationsService: ServerNotificationsService, private stateService: StateService, private eventUploadService: EventUploadService, - protected policyListService: PolicyListService, protected configService: ConfigService, private dialogService: DialogService, private biometricStateService: BiometricStateService, @@ -238,21 +221,6 @@ export class AppComponent implements OnDestroy, OnInit { } }); }); - - this.policyListService.addPolicies([ - new TwoFactorAuthenticationPolicy(), - new MasterPasswordPolicy(), - new RemoveUnlockWithPinPolicy(), - new ResetPasswordPolicy(), - new PasswordGeneratorPolicy(), - new SingleOrgPolicy(), - new RequireSsoPolicy(), - new OrganizationDataOwnershipPolicy(), - new vNextOrganizationDataOwnershipPolicy(), - new DisableSendPolicy(), - new SendOptionsPolicy(), - new RestrictedItemTypesPolicy(), - ]); } ngOnDestroy() { diff --git a/apps/web/src/app/core/core.module.ts b/apps/web/src/app/core/core.module.ts index 22386144732..b3ce39d5021 100644 --- a/apps/web/src/app/core/core.module.ts +++ b/apps/web/src/app/core/core.module.ts @@ -113,7 +113,10 @@ import { DefaultSshImportPromptService, SshImportPromptService } from "@bitwarde import { WebOrganizationInviteService } from "@bitwarden/web-vault/app/auth/core/services/organization-invite/web-organization-invite.service"; import { flagEnabled } from "../../utils/flags"; -import { PolicyListService } from "../admin-console/core/policy-list.service"; +import { + POLICY_EDIT_REGISTER, + ossPolicyEditRegister, +} from "../admin-console/organizations/policies"; import { WebChangePasswordService, WebRegistrationFinishService, @@ -152,7 +155,10 @@ const safeProviders: SafeProvider[] = [ safeProvider(InitService), safeProvider(RouterService), safeProvider(EventService), - safeProvider(PolicyListService), + safeProvider({ + provide: POLICY_EDIT_REGISTER, + useValue: ossPolicyEditRegister, + }), safeProvider({ provide: DEFAULT_VAULT_TIMEOUT, deps: [PlatformUtilsService], diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/index.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/index.ts new file mode 100644 index 00000000000..c2cd83f838c --- /dev/null +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/index.ts @@ -0,0 +1 @@ +export { bitPolicyEditRegister } from "./policy-edit-register"; diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/activate-autofill.component.html b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/activate-autofill.component.html similarity index 100% rename from bitwarden_license/bit-web/src/app/admin-console/policies/activate-autofill.component.html rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/activate-autofill.component.html diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/activate-autofill.component.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/activate-autofill.component.ts similarity index 71% rename from bitwarden_license/bit-web/src/app/admin-console/policies/activate-autofill.component.ts rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/activate-autofill.component.ts index 821509b43e2..17efc017136 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/policies/activate-autofill.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/activate-autofill.component.ts @@ -5,11 +5,12 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { - BasePolicy, - BasePolicyComponent, -} from "@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component"; + BasePolicyEditDefinition, + BasePolicyEditComponent, +} from "@bitwarden/web-vault/app/admin-console/organizations/policies"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; -export class ActivateAutofillPolicy extends BasePolicy { +export class ActivateAutofillPolicy extends BasePolicyEditDefinition { name = "activateAutofill"; description = "activateAutofillPolicyDesc"; type = PolicyType.ActivateAutofill; @@ -21,8 +22,7 @@ export class ActivateAutofillPolicy extends BasePolicy { } @Component({ - selector: "policy-activate-autofill", templateUrl: "activate-autofill.component.html", - standalone: false, + imports: [SharedModule], }) -export class ActivateAutofillPolicyComponent extends BasePolicyComponent {} +export class ActivateAutofillPolicyComponent extends BasePolicyEditComponent {} diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/automatic-app-login.component.html b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/automatic-app-login.component.html similarity index 100% rename from bitwarden_license/bit-web/src/app/admin-console/policies/automatic-app-login.component.html rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/automatic-app-login.component.html diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/automatic-app-login.component.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/automatic-app-login.component.ts similarity index 76% rename from bitwarden_license/bit-web/src/app/admin-console/policies/automatic-app-login.component.ts rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/automatic-app-login.component.ts index 1a478fb4393..7dadc04c6f4 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/policies/automatic-app-login.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/automatic-app-login.component.ts @@ -5,11 +5,12 @@ import { FormBuilder, FormControl } from "@angular/forms"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { - BasePolicy, - BasePolicyComponent, -} from "@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component"; + BasePolicyEditDefinition, + BasePolicyEditComponent, +} from "@bitwarden/web-vault/app/admin-console/organizations/policies"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; -export class AutomaticAppLoginPolicy extends BasePolicy { +export class AutomaticAppLoginPolicy extends BasePolicyEditDefinition { name = "automaticAppLogin"; description = "automaticAppLoginDesc"; type = PolicyType.AutomaticAppLogIn; @@ -17,11 +18,10 @@ export class AutomaticAppLoginPolicy extends BasePolicy { } @Component({ - selector: "policy-automatic-app-login", templateUrl: "automatic-app-login.component.html", - standalone: false, + imports: [SharedModule], }) -export class AutomaticAppLoginPolicyComponent extends BasePolicyComponent { +export class AutomaticAppLoginPolicyComponent extends BasePolicyEditComponent { data = this.formBuilder.group({ idpHost: new FormControl(null), }); diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.html b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/disable-personal-vault-export.component.html similarity index 100% rename from bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.html rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/disable-personal-vault-export.component.html diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/disable-personal-vault-export.component.ts similarity index 75% rename from bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.ts rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/disable-personal-vault-export.component.ts index c274e58ccac..d93fb50b0e2 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/policies/disable-personal-vault-export.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/disable-personal-vault-export.component.ts @@ -2,11 +2,12 @@ import { Component } from "@angular/core"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { - BasePolicy, - BasePolicyComponent, -} from "@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component"; + BasePolicyEditDefinition, + BasePolicyEditComponent, +} from "@bitwarden/web-vault/app/admin-console/organizations/policies"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; -export class DisablePersonalVaultExportPolicy extends BasePolicy { +export class DisablePersonalVaultExportPolicy extends BasePolicyEditDefinition { name = "disablePersonalVaultExport"; description = "disablePersonalVaultExportDescription"; type = PolicyType.DisablePersonalVaultExport; @@ -14,8 +15,7 @@ export class DisablePersonalVaultExportPolicy extends BasePolicy { } @Component({ - selector: "policy-disable-personal-vault-export", templateUrl: "disable-personal-vault-export.component.html", - standalone: false, + imports: [SharedModule], }) -export class DisablePersonalVaultExportPolicyComponent extends BasePolicyComponent {} +export class DisablePersonalVaultExportPolicyComponent extends BasePolicyEditComponent {} diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/index.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/index.ts new file mode 100644 index 00000000000..8c4be2eeea1 --- /dev/null +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/index.ts @@ -0,0 +1,4 @@ +export { ActivateAutofillPolicy } from "./activate-autofill.component"; +export { AutomaticAppLoginPolicy } from "./automatic-app-login.component"; +export { DisablePersonalVaultExportPolicy } from "./disable-personal-vault-export.component"; +export { MaximumVaultTimeoutPolicy } from "./maximum-vault-timeout.component"; diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.html b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/maximum-vault-timeout.component.html similarity index 100% rename from bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.html rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/maximum-vault-timeout.component.html diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/maximum-vault-timeout.component.ts similarity index 90% rename from bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts rename to bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/maximum-vault-timeout.component.ts index a5b9ad47f6e..160ce9aeb20 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-definitions/maximum-vault-timeout.component.ts @@ -8,11 +8,12 @@ import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/po import { VaultTimeoutAction } from "@bitwarden/common/key-management/vault-timeout"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { - BasePolicy, - BasePolicyComponent, -} from "@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component"; + BasePolicyEditDefinition, + BasePolicyEditComponent, +} from "@bitwarden/web-vault/app/admin-console/organizations/policies"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; -export class MaximumVaultTimeoutPolicy extends BasePolicy { +export class MaximumVaultTimeoutPolicy extends BasePolicyEditDefinition { name = "maximumVaultTimeout"; description = "maximumVaultTimeoutDesc"; type = PolicyType.MaximumVaultTimeout; @@ -20,11 +21,10 @@ export class MaximumVaultTimeoutPolicy extends BasePolicy { } @Component({ - selector: "policy-maximum-timeout", templateUrl: "maximum-vault-timeout.component.html", - standalone: false, + imports: [SharedModule], }) -export class MaximumVaultTimeoutPolicyComponent extends BasePolicyComponent { +export class MaximumVaultTimeoutPolicyComponent extends BasePolicyEditComponent { vaultTimeoutActionOptions: { name: string; value: string }[]; data = this.formBuilder.group({ hours: new FormControl(null), diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-register.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-register.ts new file mode 100644 index 00000000000..3438e706f10 --- /dev/null +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/policy-edit-register.ts @@ -0,0 +1,28 @@ +import { + ossPolicyEditRegister, + BasePolicyEditDefinition, +} from "@bitwarden/web-vault/app/admin-console/organizations/policies"; + +import { FreeFamiliesSponsorshipPolicy } from "../../billing/policies/free-families-sponsorship.component"; + +import { + ActivateAutofillPolicy, + AutomaticAppLoginPolicy, + DisablePersonalVaultExportPolicy, + MaximumVaultTimeoutPolicy, +} from "./policy-edit-definitions"; + +/** + * The policy register for Bitwarden Licensed policies. + * Add your policy definition here if it is under the Bitwarden License. + * It will not appear in the web vault when running in OSS mode. + */ +const policyEditRegister: BasePolicyEditDefinition[] = [ + new MaximumVaultTimeoutPolicy(), + new DisablePersonalVaultExportPolicy(), + new FreeFamiliesSponsorshipPolicy(), + new ActivateAutofillPolicy(), + new AutomaticAppLoginPolicy(), +]; + +export const bitPolicyEditRegister = ossPolicyEditRegister.concat(policyEditRegister); diff --git a/bitwarden_license/bit-web/src/app/app.component.ts b/bitwarden_license/bit-web/src/app/app.component.ts index ca6a5ea8f62..abfb79b8f18 100644 --- a/bitwarden_license/bit-web/src/app/app.component.ts +++ b/bitwarden_license/bit-web/src/app/app.component.ts @@ -1,31 +1,10 @@ -import { Component, OnInit } from "@angular/core"; +import { Component } from "@angular/core"; import { AppComponent as BaseAppComponent } from "@bitwarden/web-vault/app/app.component"; -import { ActivateAutofillPolicy } from "./admin-console/policies/activate-autofill.component"; -import { AutomaticAppLoginPolicy } from "./admin-console/policies/automatic-app-login.component"; -import { DisablePersonalVaultExportPolicy } from "./admin-console/policies/disable-personal-vault-export.component"; -import { MaximumVaultTimeoutPolicy } from "./admin-console/policies/maximum-vault-timeout.component"; -import { FreeFamiliesSponsorshipPolicy } from "./billing/policies/free-families-sponsorship.component"; - @Component({ selector: "app-root", templateUrl: "../../../../apps/web/src/app/app.component.html", standalone: false, }) -export class AppComponent extends BaseAppComponent implements OnInit { - ngOnInit() { - super.ngOnInit(); - - this.policyListService.addPolicies([ - new MaximumVaultTimeoutPolicy(), - new DisablePersonalVaultExportPolicy(), - new FreeFamiliesSponsorshipPolicy(), - new ActivateAutofillPolicy(), - ]); - - if (!this.policyListService.getPolicies().some((p) => p instanceof AutomaticAppLoginPolicy)) { - this.policyListService.addPolicies([new AutomaticAppLoginPolicy()]); - } - } -} +export class AppComponent extends BaseAppComponent {} diff --git a/bitwarden_license/bit-web/src/app/app.module.ts b/bitwarden_license/bit-web/src/app/app.module.ts index b665dee3b17..e9696a4549f 100644 --- a/bitwarden_license/bit-web/src/app/app.module.ts +++ b/bitwarden_license/bit-web/src/app/app.module.ts @@ -6,19 +6,17 @@ import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { RouterModule } from "@angular/router"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { safeProvider } from "@bitwarden/ui-common"; +import { POLICY_EDIT_REGISTER } from "@bitwarden/web-vault/app/admin-console/organizations/policies"; import { CoreModule } from "@bitwarden/web-vault/app/core"; import { OssRoutingModule } from "@bitwarden/web-vault/app/oss-routing.module"; import { OssModule } from "@bitwarden/web-vault/app/oss.module"; import { WildcardRoutingModule } from "@bitwarden/web-vault/app/wildcard-routing.module"; import { OrganizationsModule } from "./admin-console/organizations/organizations.module"; -import { ActivateAutofillPolicyComponent } from "./admin-console/policies/activate-autofill.component"; -import { AutomaticAppLoginPolicyComponent } from "./admin-console/policies/automatic-app-login.component"; -import { DisablePersonalVaultExportPolicyComponent } from "./admin-console/policies/disable-personal-vault-export.component"; -import { MaximumVaultTimeoutPolicyComponent } from "./admin-console/policies/maximum-vault-timeout.component"; +import { bitPolicyEditRegister } from "./admin-console/policies"; import { AppRoutingModule } from "./app-routing.module"; import { AppComponent } from "./app.component"; -import { FreeFamiliesSponsorshipPolicyComponent } from "./billing/policies/free-families-sponsorship.component"; import { AccessIntelligenceModule } from "./dirt/access-intelligence/access-intelligence.module"; /** @@ -44,14 +42,13 @@ import { AccessIntelligenceModule } from "./dirt/access-intelligence/access-inte RouterModule, WildcardRoutingModule, // Needs to be last to catch all non-existing routes ], - declarations: [ - AppComponent, - DisablePersonalVaultExportPolicyComponent, - MaximumVaultTimeoutPolicyComponent, - ActivateAutofillPolicyComponent, - AutomaticAppLoginPolicyComponent, - FreeFamiliesSponsorshipPolicyComponent, - ], + declarations: [AppComponent], bootstrap: [AppComponent], + providers: [ + safeProvider({ + provide: POLICY_EDIT_REGISTER, + useValue: bitPolicyEditRegister, + }), + ], }) export class AppModule {} diff --git a/bitwarden_license/bit-web/src/app/billing/policies/free-families-sponsorship.component.ts b/bitwarden_license/bit-web/src/app/billing/policies/free-families-sponsorship.component.ts index dd808300988..db5ef3ba62f 100644 --- a/bitwarden_license/bit-web/src/app/billing/policies/free-families-sponsorship.component.ts +++ b/bitwarden_license/bit-web/src/app/billing/policies/free-families-sponsorship.component.ts @@ -2,11 +2,12 @@ import { Component } from "@angular/core"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { - BasePolicy, - BasePolicyComponent, -} from "@bitwarden/web-vault/app/admin-console/organizations/policies/base-policy.component"; + BasePolicyEditDefinition, + BasePolicyEditComponent, +} from "@bitwarden/web-vault/app/admin-console/organizations/policies"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; -export class FreeFamiliesSponsorshipPolicy extends BasePolicy { +export class FreeFamiliesSponsorshipPolicy extends BasePolicyEditDefinition { name = "freeFamiliesSponsorship"; description = "freeFamiliesSponsorshipPolicyDesc"; type = PolicyType.FreeFamiliesSponsorshipPolicy; @@ -14,8 +15,7 @@ export class FreeFamiliesSponsorshipPolicy extends BasePolicy { } @Component({ - selector: "policy-free-families-sponsorship", templateUrl: "free-families-sponsorship.component.html", - standalone: false, + imports: [SharedModule], }) -export class FreeFamiliesSponsorshipPolicyComponent extends BasePolicyComponent {} +export class FreeFamiliesSponsorshipPolicyComponent extends BasePolicyEditComponent {} From 4857855c119adc1208f7844afd7bc997a4fc5f85 Mon Sep 17 00:00:00 2001 From: Vijay Oommen Date: Thu, 11 Sep 2025 08:10:42 -0500 Subject: [PATCH 015/249] [PM-23824] Implement HEC integration (#16274) --- .../organization-routing.module.ts | 13 - .../shared/components/integrations/index.ts | 4 - apps/web/src/app/core/core.module.ts | 7 - apps/web/src/locales/en/messages.json | 12 + .../bit-common/src/dirt/integrations/index.ts | 6 - .../src/dirt/integrations/services/index.ts | 2 - .../models/configuration/hec-configuration.ts | 18 ++ .../configuration/webhook-configuration.ts | 14 + .../configuration-template/hec-template.ts | 17 ++ .../webhook-template.ts | 14 + ...ebhook-integration-configuration-config.ts | 13 + .../models/integration.ts | 8 +- ...ation-integration-configuration-request.ts | 0 ...tion-integration-configuration-response.ts | 18 +- .../organization-integration-configuration.ts | 41 +++ .../organization-integration-request.ts | 0 .../organization-integration-response.ts | 0 .../organization-integration-service-type.ts | 0 .../models/organization-integration-type.ts | 0 .../models/organization-integration.ts | 36 +++ ...c-organization-integration-service.spec.ts | 201 +++++++++++++ .../hec-organization-integration-service.ts | 284 ++++++++++++++++++ ...ganization-integration-api.service.spec.ts | 0 .../organization-integration-api.service.ts | 3 - ...egration-configuration-api.service.spec.ts | 0 ...n-integration-configuration-api.service.ts | 3 - .../organizations-routing.module.ts | 8 + .../integration-card.component.html | 9 +- .../integration-card.component.spec.ts | 187 ++++++++++-- .../integration-card.component.ts | 106 +++---- .../connect-dialog-hec.component.html | 6 +- .../connect-dialog-hec.component.spec.ts | 17 +- .../connect-dialog-hec.component.ts | 46 +-- .../integration-dialog/index.ts | 0 .../integration-grid.component.html | 1 - .../integration-grid.component.spec.ts | 18 +- .../integration-grid.component.ts | 8 +- .../integrations.component.html | 0 .../integrations.component.ts | 97 +++--- .../integrations.pipe.ts | 3 +- ...rganization-integrations-routing.module.ts | 23 ++ .../organization-integrations.module.ts | 32 ++ .../integrations.component.spec.ts | 13 +- .../integrations/integrations.component.ts | 2 +- .../integrations/integrations.module.ts | 5 +- 45 files changed, 1067 insertions(+), 228 deletions(-) delete mode 100644 apps/web/src/app/admin-console/organizations/shared/components/integrations/index.ts delete mode 100644 bitwarden_license/bit-common/src/dirt/integrations/index.ts delete mode 100644 bitwarden_license/bit-common/src/dirt/integrations/services/index.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/hec-configuration.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/webhook-configuration.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/hec-template.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/webhook-template.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/webhook-integration-configuration-config.ts rename apps/web/src/app/admin-console/organizations/shared/components/integrations/models.ts => bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration.ts (65%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/models/organization-integration-configuration-request.ts (100%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/models/organization-integration-configuration-response.ts (55%) create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration.ts rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/models/organization-integration-request.ts (100%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/models/organization-integration-response.ts (100%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/models/organization-integration-service-type.ts (100%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/models/organization-integration-type.ts (100%) create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.spec.ts create mode 100644 bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.ts rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/services/organization-integration-api.service.spec.ts (100%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/services/organization-integration-api.service.ts (96%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/services/organization-integration-configuration-api.service.spec.ts (100%) rename bitwarden_license/bit-common/src/dirt/{integrations => organization-integrations}/services/organization-integration-configuration-api.service.ts (97%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-card/integration-card.component.html (85%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-card/integration-card.component.spec.ts (50%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-card/integration-card.component.ts (63%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-dialog/connect-dialog/connect-dialog-hec.component.html (91%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-dialog/connect-dialog/connect-dialog-hec.component.spec.ts (93%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-dialog/connect-dialog/connect-dialog-hec.component.ts (56%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-dialog/index.ts (100%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-grid/integration-grid.component.html (94%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-grid/integration-grid.component.spec.ts (86%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integration-grid/integration-grid.component.ts (70%) rename {apps/web/src/app/admin-console/organizations/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integrations.component.html (100%) rename {apps/web/src/app/admin-console/organizations/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integrations.component.ts (78%) rename {apps/web/src/app/admin-console/organizations/shared/components/integrations => bitwarden_license/bit-web/src/app/dirt/organization-integrations}/integrations.pipe.ts (78%) create mode 100644 bitwarden_license/bit-web/src/app/dirt/organization-integrations/organization-integrations-routing.module.ts create mode 100644 bitwarden_license/bit-web/src/app/dirt/organization-integrations/organization-integrations.module.ts diff --git a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts index ab32a0b1eef..230ddbdf860 100644 --- a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts @@ -19,7 +19,6 @@ import { deepLinkGuard } from "../../auth/guards/deep-link/deep-link.guard"; import { VaultModule } from "./collections/vault.module"; import { organizationPermissionsGuard } from "./guards/org-permissions.guard"; import { organizationRedirectGuard } from "./guards/org-redirect.guard"; -import { AdminConsoleIntegrationsComponent } from "./integrations/integrations.component"; import { OrganizationLayoutComponent } from "./layouts/organization-layout.component"; import { GroupsComponent } from "./manage/groups.component"; @@ -39,14 +38,6 @@ const routes: Routes = [ path: "vault", loadChildren: () => VaultModule, }, - { - path: "integrations", - canActivate: [organizationPermissionsGuard(canAccessIntegrations)], - component: AdminConsoleIntegrationsComponent, - data: { - titleId: "integrations", - }, - }, { path: "settings", loadChildren: () => @@ -103,10 +94,6 @@ function getOrganizationRoute(organization: Organization): string { return undefined; } -function canAccessIntegrations(organization: Organization) { - return organization.canAccessIntegrations; -} - @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/index.ts b/apps/web/src/app/admin-console/organizations/shared/components/integrations/index.ts deleted file mode 100644 index c8fe9d32652..00000000000 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./integrations.pipe"; -export * from "./integration-card/integration-card.component"; -export * from "./integration-grid/integration-grid.component"; -export * from "./models"; diff --git a/apps/web/src/app/core/core.module.ts b/apps/web/src/app/core/core.module.ts index b3ce39d5021..06c31a0bfd4 100644 --- a/apps/web/src/app/core/core.module.ts +++ b/apps/web/src/app/core/core.module.ts @@ -41,8 +41,6 @@ import { InternalUserDecryptionOptionsServiceAbstraction, LoginEmailService, } from "@bitwarden/auth/common"; -// eslint-disable-next-line no-restricted-imports -import { OrganizationIntegrationApiService } from "@bitwarden/bit-common/dirt/integrations"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; @@ -405,11 +403,6 @@ const safeProviders: SafeProvider[] = [ useClass: DefaultDeviceManagementComponentService, deps: [], }), - safeProvider({ - provide: OrganizationIntegrationApiService, - useClass: OrganizationIntegrationApiService, - deps: [ApiService], - }), ]; @NgModule({ diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index 5223dff9b2d..01099c4af58 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -7437,6 +7437,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9694,6 +9697,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { diff --git a/bitwarden_license/bit-common/src/dirt/integrations/index.ts b/bitwarden_license/bit-common/src/dirt/integrations/index.ts deleted file mode 100644 index d2c1d173e3c..00000000000 --- a/bitwarden_license/bit-common/src/dirt/integrations/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./services"; -export * from "./models/organization-integration-type"; -export * from "./models/organization-integration-request"; -export * from "./models/organization-integration-response"; -export * from "./models/organization-integration-configuration-request"; -export * from "./models/organization-integration-configuration-response"; diff --git a/bitwarden_license/bit-common/src/dirt/integrations/services/index.ts b/bitwarden_license/bit-common/src/dirt/integrations/services/index.ts deleted file mode 100644 index 68a673854ae..00000000000 --- a/bitwarden_license/bit-common/src/dirt/integrations/services/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./organization-integration-api.service"; -export * from "./organization-integration-configuration-api.service"; diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/hec-configuration.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/hec-configuration.ts new file mode 100644 index 00000000000..cdb7a5f265a --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/hec-configuration.ts @@ -0,0 +1,18 @@ +import { OrganizationIntegrationServiceType } from "../organization-integration-service-type"; + +export class HecConfiguration { + uri: string; + scheme = "Bearer"; + token: string; + service: OrganizationIntegrationServiceType; + + constructor(uri: string, token: string, service: string) { + this.uri = uri; + this.token = token; + this.service = service as OrganizationIntegrationServiceType; + } + + toString(): string { + return JSON.stringify(this); + } +} diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/webhook-configuration.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/webhook-configuration.ts new file mode 100644 index 00000000000..a4dca7378ba --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/configuration/webhook-configuration.ts @@ -0,0 +1,14 @@ +// Added to reflect how future webhook integrations could be structured within the OrganizationIntegration +export class WebhookConfiguration { + propA: string; + propB: string; + + constructor(propA: string, propB: string) { + this.propA = propA; + this.propB = propB; + } + + toString(): string { + return JSON.stringify(this); + } +} diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/hec-template.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/hec-template.ts new file mode 100644 index 00000000000..7a841697fde --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/hec-template.ts @@ -0,0 +1,17 @@ +import { OrganizationIntegrationServiceType } from "../../organization-integration-service-type"; + +export class HecTemplate { + event = "#EventMessage#"; + source = "Bitwarden"; + index: string; + service: OrganizationIntegrationServiceType; + + constructor(index: string, service: string) { + this.index = index; + this.service = service as OrganizationIntegrationServiceType; + } + + toString(): string { + return JSON.stringify(this); + } +} diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/webhook-template.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/webhook-template.ts new file mode 100644 index 00000000000..7c51e98282b --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/configuration-template/webhook-template.ts @@ -0,0 +1,14 @@ +// Added to reflect how future webhook integrations could be structured within the OrganizationIntegration +export class WebhookTemplate { + propA: string; + propB: string; + + constructor(propA: string, propB: string) { + this.propA = propA; + this.propB = propB; + } + + toString(): string { + return JSON.stringify(this); + } +} diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/webhook-integration-configuration-config.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/webhook-integration-configuration-config.ts new file mode 100644 index 00000000000..9ee72bfaa8b --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration-configuration-config/webhook-integration-configuration-config.ts @@ -0,0 +1,13 @@ +export class WebhookIntegrationConfigurationConfig { + propA: string; + propB: string; + + constructor(propA: string, propB: string) { + this.propA = propA; + this.propB = propB; + } + + toString(): string { + return JSON.stringify(this); + } +} diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/models.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration.ts similarity index 65% rename from apps/web/src/app/admin-console/organizations/shared/components/integrations/models.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration.ts index b3d24ffb3b0..1bb38915e9a 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/models.ts +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/integration.ts @@ -1,4 +1,6 @@ -import { IntegrationType } from "@bitwarden/common/enums"; +import { IntegrationType } from "@bitwarden/common/enums/integration-type.enum"; + +import { OrganizationIntegration } from "./organization-integration"; /** Integration or SDK */ export type Integration = { @@ -21,4 +23,8 @@ export type Integration = { isConnected?: boolean; canSetupConnection?: boolean; configuration?: string; + template?: string; + + // OrganizationIntegration + organizationIntegration?: OrganizationIntegration | null; }; diff --git a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-configuration-request.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration-request.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-configuration-request.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration-request.ts diff --git a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-configuration-response.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration-response.ts similarity index 55% rename from bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-configuration-response.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration-response.ts index 47baf3276ad..600edc8c7c9 100644 --- a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-configuration-response.ts +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration-response.ts @@ -1,6 +1,9 @@ import { EventType } from "@bitwarden/common/enums"; import { BaseResponse } from "@bitwarden/common/models/response/base.response"; -import { OrganizationIntegrationConfigurationId } from "@bitwarden/common/types/guid"; +import { + OrganizationIntegrationConfigurationId, + OrganizationIntegrationId, +} from "@bitwarden/common/types/guid"; export class OrganizationIntegrationConfigurationResponse extends BaseResponse { id: OrganizationIntegrationConfigurationId; @@ -18,3 +21,16 @@ export class OrganizationIntegrationConfigurationResponse extends BaseResponse { this.template = this.getResponseProperty("Template"); } } + +export class OrganizationIntegrationConfigurationResponseWithIntegrationId { + integrationId: OrganizationIntegrationId; + configurationResponses: OrganizationIntegrationConfigurationResponse[]; + + constructor( + integrationId: OrganizationIntegrationId, + configurationResponses: OrganizationIntegrationConfigurationResponse[], + ) { + this.integrationId = integrationId; + this.configurationResponses = configurationResponses; + } +} diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration.ts new file mode 100644 index 00000000000..d4bbd30055f --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-configuration.ts @@ -0,0 +1,41 @@ +import { EventType } from "@bitwarden/common/enums"; +import { + OrganizationIntegrationConfigurationId, + OrganizationIntegrationId, +} from "@bitwarden/common/types/guid"; + +import { HecTemplate } from "./integration-configuration-config/configuration-template/hec-template"; +import { WebhookTemplate } from "./integration-configuration-config/configuration-template/webhook-template"; +import { WebhookIntegrationConfigurationConfig } from "./integration-configuration-config/webhook-integration-configuration-config"; + +export class OrganizationIntegrationConfiguration { + id: OrganizationIntegrationConfigurationId; + integrationId: OrganizationIntegrationId; + eventType?: EventType | null; + configuration?: WebhookIntegrationConfigurationConfig | null; + filters?: string; + template?: HecTemplate | WebhookTemplate | null; + + constructor( + id: OrganizationIntegrationConfigurationId, + integrationId: OrganizationIntegrationId, + eventType?: EventType | null, + configuration?: WebhookIntegrationConfigurationConfig | null, + filters?: string, + template?: HecTemplate | WebhookTemplate | null, + ) { + this.id = id; + this.integrationId = integrationId; + this.eventType = eventType; + this.configuration = configuration; + this.filters = filters; + this.template = template; + } + + getTemplate(): T | null { + if (this.template && typeof this.template === "object") { + return this.template as T; + } + return null; + } +} diff --git a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-request.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-request.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-request.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-request.ts diff --git a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-response.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-response.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-response.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-response.ts diff --git a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-service-type.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-service-type.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-service-type.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-service-type.ts diff --git a/bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-type.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-type.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/models/organization-integration-type.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration-type.ts diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration.ts new file mode 100644 index 00000000000..abbe2271b30 --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/models/organization-integration.ts @@ -0,0 +1,36 @@ +import { OrganizationIntegrationId } from "@bitwarden/common/types/guid"; + +import { HecConfiguration } from "./configuration/hec-configuration"; +import { WebhookConfiguration } from "./configuration/webhook-configuration"; +import { OrganizationIntegrationConfiguration } from "./organization-integration-configuration"; +import { OrganizationIntegrationServiceType } from "./organization-integration-service-type"; +import { OrganizationIntegrationType } from "./organization-integration-type"; + +export class OrganizationIntegration { + id: OrganizationIntegrationId; + type: OrganizationIntegrationType; + serviceType: OrganizationIntegrationServiceType; + configuration: HecConfiguration | WebhookConfiguration | null; + integrationConfiguration: OrganizationIntegrationConfiguration[] = []; + + constructor( + id: OrganizationIntegrationId, + type: OrganizationIntegrationType, + serviceType: OrganizationIntegrationServiceType, + configuration: HecConfiguration | WebhookConfiguration | null, + integrationConfiguration: OrganizationIntegrationConfiguration[] = [], + ) { + this.id = id; + this.type = type; + this.serviceType = serviceType; + this.configuration = configuration; + this.integrationConfiguration = integrationConfiguration; + } + + getConfiguration(): T | null { + if (this.configuration && typeof this.configuration === "object") { + return this.configuration as T; + } + return null; + } +} diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.spec.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.spec.ts new file mode 100644 index 00000000000..556078ea862 --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.spec.ts @@ -0,0 +1,201 @@ +import { mock } from "jest-mock-extended"; +import { firstValueFrom } from "rxjs"; + +import { + OrganizationId, + OrganizationIntegrationConfigurationId, + OrganizationIntegrationId, +} from "@bitwarden/common/types/guid"; + +import { HecConfiguration } from "../models/configuration/hec-configuration"; +import { HecTemplate } from "../models/integration-configuration-config/configuration-template/hec-template"; +import { OrganizationIntegration } from "../models/organization-integration"; +import { OrganizationIntegrationConfiguration } from "../models/organization-integration-configuration"; +import { OrganizationIntegrationConfigurationResponse } from "../models/organization-integration-configuration-response"; +import { OrganizationIntegrationResponse } from "../models/organization-integration-response"; +import { OrganizationIntegrationServiceType } from "../models/organization-integration-service-type"; +import { OrganizationIntegrationType } from "../models/organization-integration-type"; + +import { HecOrganizationIntegrationService } from "./hec-organization-integration-service"; +import { OrganizationIntegrationApiService } from "./organization-integration-api.service"; +import { OrganizationIntegrationConfigurationApiService } from "./organization-integration-configuration-api.service"; + +describe("HecOrganizationIntegrationService", () => { + let service: HecOrganizationIntegrationService; + const mockIntegrationApiService = mock(); + const mockIntegrationConfigurationApiService = + mock(); + const organizationId = "org-1" as OrganizationId; + const integrationId = "int-1" as OrganizationIntegrationId; + const configId = "conf-1" as OrganizationIntegrationConfigurationId; + const serviceType = OrganizationIntegrationServiceType.CrowdStrike; + const url = "https://example.com"; + const bearerToken = "token"; + const index = "main"; + + beforeEach(() => { + service = new HecOrganizationIntegrationService( + mockIntegrationApiService, + mockIntegrationConfigurationApiService, + ); + + jest.resetAllMocks(); + }); + + it("should set organization integrations", (done) => { + mockIntegrationApiService.getOrganizationIntegrations.mockResolvedValue([]); + service.setOrganizationIntegrations(organizationId); + const subscription = service.integrations$.subscribe((integrations) => { + expect(integrations).toEqual([]); + subscription.unsubscribe(); + done(); + }); + }); + + it("should save a new Hec integration", async () => { + service.setOrganizationIntegrations(organizationId); + + const integrationResponse = { + id: integrationId, + type: OrganizationIntegrationType.Hec, + configuration: JSON.stringify({ url, bearerToken, service: serviceType }), + } as OrganizationIntegrationResponse; + + const configResponse = { + id: configId, + template: JSON.stringify({ index, service: serviceType }), + } as OrganizationIntegrationConfigurationResponse; + + mockIntegrationApiService.createOrganizationIntegration.mockResolvedValue(integrationResponse); + mockIntegrationConfigurationApiService.createOrganizationIntegrationConfiguration.mockResolvedValue( + configResponse, + ); + + await service.saveHec(organizationId, serviceType, url, bearerToken, index); + + const integrations = await firstValueFrom(service.integrations$); + expect(integrations.length).toBe(1); + expect(integrations[0].id).toBe(integrationId); + expect(integrations[0].serviceType).toBe(serviceType); + }); + + it("should throw error on organization ID mismatch in saveHec", async () => { + service.setOrganizationIntegrations("other-org" as OrganizationId); + await expect( + service.saveHec(organizationId, serviceType, url, bearerToken, index), + ).rejects.toThrow(Error("Organization ID mismatch")); + }); + + it("should update an existing Hec integration", async () => { + service.setOrganizationIntegrations(organizationId); + + const integrationResponse = { + id: integrationId, + type: OrganizationIntegrationType.Hec, + configuration: JSON.stringify({ url, bearerToken, service: serviceType }), + } as OrganizationIntegrationResponse; + + const configResponse = { + id: configId, + template: JSON.stringify({ index, service: serviceType }), + } as OrganizationIntegrationConfigurationResponse; + + mockIntegrationApiService.updateOrganizationIntegration.mockResolvedValue(integrationResponse); + mockIntegrationConfigurationApiService.updateOrganizationIntegrationConfiguration.mockResolvedValue( + configResponse, + ); + + await service.updateHec( + organizationId, + integrationId, + configId, + serviceType, + url, + bearerToken, + index, + ); + + const integrations = await firstValueFrom(service.integrations$); + expect(integrations.length).toBe(1); + expect(integrations[0].id).toBe(integrationId); + }); + + it("should throw error on organization ID mismatch in updateHec", async () => { + service.setOrganizationIntegrations("other-org" as OrganizationId); + await expect( + service.updateHec( + organizationId, + integrationId, + configId, + serviceType, + url, + bearerToken, + index, + ), + ).rejects.toThrow(Error("Organization ID mismatch")); + }); + + it("should get integration by id", async () => { + service["_integrations$"].next([ + new OrganizationIntegration( + integrationId, + OrganizationIntegrationType.Hec, + serviceType, + {} as HecConfiguration, + [], + ), + ]); + const integration = await service.getIntegrationById(integrationId); + expect(integration).not.toBeNull(); + expect(integration!.id).toBe(integrationId); + }); + + it("should get integration by service type", async () => { + service["_integrations$"].next([ + new OrganizationIntegration( + integrationId, + OrganizationIntegrationType.Hec, + serviceType, + {} as HecConfiguration, + [], + ), + ]); + const integration = await service.getIntegrationByServiceType(serviceType); + expect(integration).not.toBeNull(); + expect(integration!.serviceType).toBe(serviceType); + }); + + it("should get integration configurations", async () => { + const config = new OrganizationIntegrationConfiguration( + configId, + integrationId, + null, + null, + "", + {} as HecTemplate, + ); + + service["_integrations$"].next([ + new OrganizationIntegration( + integrationId, + OrganizationIntegrationType.Hec, + serviceType, + {} as HecConfiguration, + [config], + ), + ]); + const configs = await service.getIntegrationConfigurations(integrationId); + expect(configs).not.toBeNull(); + expect(configs![0].id).toBe(configId); + }); + + it("convertToJson should parse valid JSON", () => { + const obj = service.convertToJson<{ a: number }>('{"a":1}'); + expect(obj).toEqual({ a: 1 }); + }); + + it("convertToJson should return null for invalid JSON", () => { + const obj = service.convertToJson<{ a: number }>("invalid"); + expect(obj).toBeNull(); + }); +}); diff --git a/bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.ts new file mode 100644 index 00000000000..d45d4d21652 --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/hec-organization-integration-service.ts @@ -0,0 +1,284 @@ +import { BehaviorSubject, firstValueFrom, map, Subject, switchMap, takeUntil, zip } from "rxjs"; + +import { + OrganizationId, + OrganizationIntegrationId, + OrganizationIntegrationConfigurationId, +} from "@bitwarden/common/types/guid"; + +import { HecConfiguration } from "../models/configuration/hec-configuration"; +import { HecTemplate } from "../models/integration-configuration-config/configuration-template/hec-template"; +import { OrganizationIntegration } from "../models/organization-integration"; +import { OrganizationIntegrationConfiguration } from "../models/organization-integration-configuration"; +import { OrganizationIntegrationConfigurationRequest } from "../models/organization-integration-configuration-request"; +import { OrganizationIntegrationConfigurationResponse } from "../models/organization-integration-configuration-response"; +import { OrganizationIntegrationRequest } from "../models/organization-integration-request"; +import { OrganizationIntegrationResponse } from "../models/organization-integration-response"; +import { OrganizationIntegrationServiceType } from "../models/organization-integration-service-type"; +import { OrganizationIntegrationType } from "../models/organization-integration-type"; + +import { OrganizationIntegrationApiService } from "./organization-integration-api.service"; +import { OrganizationIntegrationConfigurationApiService } from "./organization-integration-configuration-api.service"; + +export class HecOrganizationIntegrationService { + private organizationId$ = new BehaviorSubject(null); + private _integrations$ = new BehaviorSubject([]); + private destroy$ = new Subject(); + + integrations$ = this._integrations$.asObservable(); + + private fetch$ = this.organizationId$ + .pipe( + switchMap(async (orgId) => { + if (orgId) { + const data$ = await this.setIntegrations(orgId); + return await firstValueFrom(data$); + } else { + return this._integrations$.getValue(); + } + }), + takeUntil(this.destroy$), + ) + .subscribe({ + next: (integrations) => { + this._integrations$.next(integrations); + }, + }); + + constructor( + private integrationApiService: OrganizationIntegrationApiService, + private integrationConfigurationApiService: OrganizationIntegrationConfigurationApiService, + ) {} + + /** + * Sets the organization Id and will trigger the retrieval of the + * integrations for a given org. + * @param orgId + */ + setOrganizationIntegrations(orgId: OrganizationId) { + this.organizationId$.next(orgId); + } + + /** + * Saves a new organization integration and updates the integrations$ observable + * @param organizationId id of the organization + * @param service service type of the integration + * @param url url of the service + * @param bearerToken api token + * @param index index in service + */ + async saveHec( + organizationId: OrganizationId, + service: OrganizationIntegrationServiceType, + url: string, + bearerToken: string, + index: string, + ) { + if (organizationId != this.organizationId$.getValue()) { + throw new Error("Organization ID mismatch"); + } + + const hecConfig = new HecConfiguration(url, bearerToken, service); + const newIntegrationResponse = await this.integrationApiService.createOrganizationIntegration( + organizationId, + new OrganizationIntegrationRequest(OrganizationIntegrationType.Hec, hecConfig.toString()), + ); + + const newTemplate = new HecTemplate(index, service); + const newIntegrationConfigResponse = + await this.integrationConfigurationApiService.createOrganizationIntegrationConfiguration( + organizationId, + newIntegrationResponse.id, + new OrganizationIntegrationConfigurationRequest(null, null, null, newTemplate.toString()), + ); + + const newIntegration = this.mapResponsesToOrganizationIntegration( + newIntegrationResponse, + newIntegrationConfigResponse, + ); + if (newIntegration !== null) { + this._integrations$.next([...this._integrations$.getValue(), newIntegration]); + } + } + + /** + * Updates an existing organization integration and updates the integrations$ observable + * @param organizationId id of the organization + * @param OrganizationIntegrationId id of the organization integration + * @param OrganizationIntegrationConfigurationId id of the organization integration configuration + * @param service service type of the integration + * @param url url of the service + * @param bearerToken api token + * @param index index in service + */ + async updateHec( + organizationId: OrganizationId, + OrganizationIntegrationId: OrganizationIntegrationId, + OrganizationIntegrationConfigurationId: OrganizationIntegrationConfigurationId, + service: OrganizationIntegrationServiceType, + url: string, + bearerToken: string, + index: string, + ) { + if (organizationId != this.organizationId$.getValue()) { + throw new Error("Organization ID mismatch"); + } + + const hecConfig = new HecConfiguration(url, bearerToken, service); + const updatedIntegrationResponse = + await this.integrationApiService.updateOrganizationIntegration( + organizationId, + OrganizationIntegrationId, + new OrganizationIntegrationRequest(OrganizationIntegrationType.Hec, hecConfig.toString()), + ); + + const updatedTemplate = new HecTemplate(index, service); + const updatedIntegrationConfigResponse = + await this.integrationConfigurationApiService.updateOrganizationIntegrationConfiguration( + organizationId, + OrganizationIntegrationId, + OrganizationIntegrationConfigurationId, + new OrganizationIntegrationConfigurationRequest( + null, + null, + null, + updatedTemplate.toString(), + ), + ); + + const updatedIntegration = this.mapResponsesToOrganizationIntegration( + updatedIntegrationResponse, + updatedIntegrationConfigResponse, + ); + + if (updatedIntegration !== null) { + this._integrations$.next([...this._integrations$.getValue(), updatedIntegration]); + } + } + + /** + * Gets a OrganizationIntegration for an OrganizationIntegrationId + * @param integrationId id of the integration + * @returns OrganizationIntegration or null + */ + // TODO: Move to base class when another service integration type is implemented + async getIntegrationById( + integrationId: OrganizationIntegrationId, + ): Promise { + return await firstValueFrom( + this.integrations$.pipe( + map((integrations) => integrations.find((i) => i.id === integrationId) || null), + ), + ); + } + + /** + * Gets a OrganizationIntegration for a service type + * @param serviceType type of the service + * @returns OrganizationIntegration or null + */ + // TODO: Move to base class when another service integration type is implemented + async getIntegrationByServiceType( + serviceType: OrganizationIntegrationServiceType, + ): Promise { + return await firstValueFrom( + this.integrations$.pipe( + map((integrations) => integrations.find((i) => i.serviceType === serviceType) || null), + ), + ); + } + + /** + * Gets a OrganizationIntegrationConfigurations for an integration ID + * @param integrationId id of the integration + * @returns OrganizationIntegration array or null + */ + // TODO: Move to base class when another service integration type is implemented + async getIntegrationConfigurations( + integrationId: OrganizationIntegrationId, + ): Promise { + return await firstValueFrom( + this.integrations$.pipe( + map((integrations) => { + const integration = integrations.find((i) => i.id === integrationId); + return integration ? integration.integrationConfiguration : null; + }), + ), + ); + } + + // TODO: Move to data models to be more explicit for future services + private mapResponsesToOrganizationIntegration( + integrationResponse: OrganizationIntegrationResponse, + configurationResponse: OrganizationIntegrationConfigurationResponse, + ): OrganizationIntegration | null { + const hecConfig = this.convertToJson(integrationResponse.configuration); + const template = this.convertToJson(configurationResponse.template); + + if (!hecConfig || !template) { + return null; + } + + const integrationConfig = new OrganizationIntegrationConfiguration( + configurationResponse.id, + integrationResponse.id, + null, + null, + "", + template, + ); + + return new OrganizationIntegration( + integrationResponse.id, + integrationResponse.type, + hecConfig.service, + hecConfig, + [integrationConfig], + ); + } + + // Could possibly be moved to a base service. All services would then assume that the + // integration configuration would always be an array and this hec specific service + // would just assume a single entry. + private setIntegrations(orgId: OrganizationId) { + const results$ = zip(this.integrationApiService.getOrganizationIntegrations(orgId)).pipe( + switchMap(([responses]) => { + const integrations: OrganizationIntegration[] = []; + const promises: Promise[] = []; + + responses.forEach((integration) => { + const promise = this.integrationConfigurationApiService + .getOrganizationIntegrationConfigurations(orgId, integration.id) + .then((response) => { + // Hec events will only have one OrganizationIntegrationConfiguration + const config = response[0]; + + const orgIntegration = this.mapResponsesToOrganizationIntegration( + integration, + config, + ); + + if (orgIntegration !== null) { + integrations.push(orgIntegration); + } + }); + promises.push(promise); + }); + return Promise.all(promises).then(() => { + return integrations; + }); + }), + ); + + return results$; + } + + // TODO: Move to base service when necessary + convertToJson(jsonString?: string): T | null { + try { + return JSON.parse(jsonString || "") as T; + } catch { + return null; + } + } +} diff --git a/bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-api.service.spec.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-api.service.spec.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-api.service.spec.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-api.service.spec.ts diff --git a/bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-api.service.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-api.service.ts similarity index 96% rename from bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-api.service.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-api.service.ts index 2c2266940e0..17dac165baa 100644 --- a/bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-api.service.ts +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-api.service.ts @@ -1,12 +1,9 @@ -import { Injectable } from "@angular/core"; - import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationId, OrganizationIntegrationId } from "@bitwarden/common/types/guid"; import { OrganizationIntegrationRequest } from "../models/organization-integration-request"; import { OrganizationIntegrationResponse } from "../models/organization-integration-response"; -@Injectable() export class OrganizationIntegrationApiService { constructor(private apiService: ApiService) {} diff --git a/bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-configuration-api.service.spec.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-configuration-api.service.spec.ts similarity index 100% rename from bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-configuration-api.service.spec.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-configuration-api.service.spec.ts diff --git a/bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-configuration-api.service.ts b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-configuration-api.service.ts similarity index 97% rename from bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-configuration-api.service.ts rename to bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-configuration-api.service.ts index b5bac73b280..fda4ac19263 100644 --- a/bitwarden_license/bit-common/src/dirt/integrations/services/organization-integration-configuration-api.service.ts +++ b/bitwarden_license/bit-common/src/dirt/organization-integrations/services/organization-integration-configuration-api.service.ts @@ -1,5 +1,3 @@ -import { Injectable } from "@angular/core"; - import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationId, @@ -10,7 +8,6 @@ import { import { OrganizationIntegrationConfigurationRequest } from "../models/organization-integration-configuration-request"; import { OrganizationIntegrationConfigurationResponse } from "../models/organization-integration-configuration-response"; -@Injectable() export class OrganizationIntegrationConfigurationApiService { constructor(private apiService: ApiService) {} diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts index 35659d05dce..0ee78e59312 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/organizations-routing.module.ts @@ -85,6 +85,14 @@ const routes: Routes = [ (m) => m.AccessIntelligenceModule, ), }, + { + path: "integrations", + canActivate: [organizationPermissionsGuard((org) => org.canAccessIntegrations)], + loadChildren: () => + import("../../dirt/organization-integrations/organization-integrations.module").then( + (m) => m.OrganizationIntegrationsModule, + ), + }, ], }, ]; diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.html b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.html similarity index 85% rename from apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.html rename to bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.html index e5687c71ed9..8d077c4b502 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.html +++ b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.html @@ -22,7 +22,7 @@ @if (showConnectedBadge()) { @if (isConnected) { - {{ "on" | i18n }} + {{ "connected" | i18n }} } @if (!isConnected) { {{ "off" | i18n }} @@ -34,7 +34,11 @@ @if (canSetupConnection) { } @@ -44,6 +48,7 @@ [href]="linkURL" rel="noopener noreferrer" target="_blank" + title="{{ linkURL }}" > } diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.spec.ts b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.spec.ts similarity index 50% rename from apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.spec.ts rename to bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.spec.ts index 382d245b235..c7a7ff45761 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.spec.ts +++ b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.spec.ts @@ -1,27 +1,34 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { ActivatedRoute } from "@angular/router"; import { mock } from "jest-mock-extended"; -import { BehaviorSubject } from "rxjs"; +import { BehaviorSubject, of } from "rxjs"; import { SYSTEM_THEME_OBSERVABLE } from "@bitwarden/angular/services/injection-tokens"; -// eslint-disable-next-line no-restricted-imports -import { OrganizationIntegrationApiService } from "@bitwarden/bit-common/dirt/integrations/services"; +import { OrganizationIntegrationServiceType } from "@bitwarden/bit-common/dirt/organization-integrations/models/organization-integration-service-type"; +import { HecOrganizationIntegrationService } from "@bitwarden/bit-common/dirt/organization-integrations/services/hec-organization-integration-service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { ThemeType } from "@bitwarden/common/platform/enums"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; -import { ToastService } from "@bitwarden/components"; -// eslint-disable-next-line no-restricted-imports -import { SharedModule } from "@bitwarden/components/src/shared"; +import { DialogService, ToastService } from "@bitwarden/components"; import { I18nPipe } from "@bitwarden/ui-common"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; + +import { openHecConnectDialog } from "../integration-dialog"; import { IntegrationCardComponent } from "./integration-card.component"; +jest.mock("../integration-dialog", () => ({ + openHecConnectDialog: jest.fn(), +})); + describe("IntegrationCardComponent", () => { let component: IntegrationCardComponent; let fixture: ComponentFixture; const mockI18nService = mock(); const activatedRoute = mock(); - const mockOrgIntegrationApiService = mock(); + const mockIntegrationService = mock(); + const dialogService = mock(); + const toastService = mock(); const systemTheme$ = new BehaviorSubject(ThemeType.Light); const usersPreferenceTheme$ = new BehaviorSubject(ThemeType.Light); @@ -43,8 +50,9 @@ describe("IntegrationCardComponent", () => { { provide: I18nPipe, useValue: mock() }, { provide: I18nService, useValue: mockI18nService }, { provide: ActivatedRoute, useValue: activatedRoute }, - { provide: OrganizationIntegrationApiService, useValue: mockOrgIntegrationApiService }, - { provide: ToastService, useValue: mock() }, + { provide: HecOrganizationIntegrationService, useValue: mockIntegrationService }, + { provide: ToastService, useValue: toastService }, + { provide: DialogService, useValue: dialogService }, ], }).compileComponents(); }); @@ -186,27 +194,160 @@ describe("IntegrationCardComponent", () => { }); }); - describe("connected badge", () => { - it("shows connected badge when isConnected is true", () => { - component.isConnected = true; + describe("showNewBadge", () => { + beforeEach(() => { + jest.useFakeTimers(); + jest.setSystemTime(new Date("2024-06-01")); + }); + afterEach(() => { + jest.useRealTimers(); + }); + + it("returns false when newBadgeExpiration is undefined", () => { + component.newBadgeExpiration = undefined; + expect(component.showNewBadge()).toBe(false); + }); + + it("returns false when newBadgeExpiration is an invalid date", () => { + component.newBadgeExpiration = "invalid-date"; + expect(component.showNewBadge()).toBe(false); + }); + + it("returns true when newBadgeExpiration is in the future", () => { + component.newBadgeExpiration = "2024-06-02"; + expect(component.showNewBadge()).toBe(true); + }); + + it("returns false when newBadgeExpiration is today", () => { + component.newBadgeExpiration = "2024-06-01"; + expect(component.showNewBadge()).toBe(false); + }); + + it("returns false when newBadgeExpiration is in the past", () => { + component.newBadgeExpiration = "2024-05-31"; + expect(component.showNewBadge()).toBe(false); + }); + }); + describe("showConnectedBadge", () => { + it("returns true when canSetupConnection is true", () => { + component.canSetupConnection = true; expect(component.showConnectedBadge()).toBe(true); }); - it("does not show connected badge when isConnected is false", () => { - component.isConnected = false; - fixture.detectChanges(); - const name = fixture.nativeElement.querySelector("h3 > span > span > span"); - - expect(name.textContent).toContain("off"); - // when isConnected is true/false, the badge should be shown as on/off - // when isConnected is undefined, the badge should not be shown - expect(component.showConnectedBadge()).toBe(true); + it("returns false when canSetupConnection is false", () => { + component.canSetupConnection = false; + expect(component.showConnectedBadge()).toBe(false); }); - it("does not show connected badge when isConnected is undefined", () => { - component.isConnected = undefined; + it("returns false when canSetupConnection is undefined", () => { + component.canSetupConnection = undefined; expect(component.showConnectedBadge()).toBe(false); }); }); + + describe("setupConnection", () => { + beforeEach(() => { + component.integrationSettings = { + organizationIntegration: { + id: "integration-id", + configuration: {}, + integrationConfiguration: [{ id: "config-id" }], + }, + name: OrganizationIntegrationServiceType.CrowdStrike, + } as any; + component.organizationId = "org-id" as any; + jest.resetAllMocks(); + }); + + it("should not proceed if dialog is cancelled", async () => { + (openHecConnectDialog as jest.Mock).mockReturnValue({ + closed: of({ success: false }), + }); + await component.setupConnection(); + expect(mockIntegrationService.updateHec).not.toHaveBeenCalled(); + expect(mockIntegrationService.saveHec).not.toHaveBeenCalled(); + }); + + it("should call updateHec if isUpdateAvailable is true", async () => { + (openHecConnectDialog as jest.Mock).mockReturnValue({ + closed: of({ + success: true, + url: "test-url", + bearerToken: "token", + index: "index", + }), + }); + + jest.spyOn(component, "isUpdateAvailable", "get").mockReturnValue(true); + + await component.setupConnection(); + + expect(mockIntegrationService.updateHec).toHaveBeenCalledWith( + "org-id", + "integration-id", + "config-id", + OrganizationIntegrationServiceType.CrowdStrike, + "test-url", + "token", + "index", + ); + expect(mockIntegrationService.saveHec).not.toHaveBeenCalled(); + }); + + it("should call saveHec if isUpdateAvailable is false", async () => { + component.integrationSettings = { + organizationIntegration: null, + name: OrganizationIntegrationServiceType.CrowdStrike, + } as any; + component.organizationId = "org-id" as any; + + (openHecConnectDialog as jest.Mock).mockReturnValue({ + closed: of({ + success: true, + url: "test-url", + bearerToken: "token", + index: "index", + }), + }); + + jest.spyOn(component, "isUpdateAvailable", "get").mockReturnValue(false); + + mockIntegrationService.saveHec.mockResolvedValue(undefined); + + await component.setupConnection(); + + expect(mockIntegrationService.saveHec).toHaveBeenCalledWith( + "org-id", + OrganizationIntegrationServiceType.CrowdStrike, + "test-url", + "token", + "index", + ); + expect(mockIntegrationService.updateHec).not.toHaveBeenCalled(); + }); + + it("should show toast on error", async () => { + (openHecConnectDialog as jest.Mock).mockReturnValue({ + closed: of({ + success: true, + url: "test-url", + bearerToken: "token", + index: "index", + }), + }); + + jest.spyOn(component, "isUpdateAvailable", "get").mockReturnValue(true); + mockIntegrationService.updateHec.mockRejectedValue(new Error("fail")); + + await component.setupConnection(); + + expect(mockIntegrationService.updateHec).toHaveBeenCalled(); + expect(toastService.showToast).toHaveBeenCalledWith({ + variant: "error", + title: "", + message: mockI18nService.t("failedToSaveIntegration"), + }); + }); + }); }); diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.ts similarity index 63% rename from apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts rename to bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.ts index 1d95d3182b2..f40fb03c5f4 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts +++ b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-card/integration-card.component.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { AfterViewInit, Component, @@ -13,22 +11,17 @@ import { ActivatedRoute } from "@angular/router"; import { Observable, Subject, combineLatest, lastValueFrom, takeUntil } from "rxjs"; import { SYSTEM_THEME_OBSERVABLE } from "@bitwarden/angular/services/injection-tokens"; -// eslint-disable-next-line no-restricted-imports -import { - OrganizationIntegrationType, - OrganizationIntegrationRequest, - OrganizationIntegrationResponse, - OrganizationIntegrationApiService, -} from "@bitwarden/bit-common/dirt/integrations/index"; +import { Integration } from "@bitwarden/bit-common/dirt/organization-integrations/models/integration"; +import { OrganizationIntegrationServiceType } from "@bitwarden/bit-common/dirt/organization-integrations/models/organization-integration-service-type"; +import { HecOrganizationIntegrationService } from "@bitwarden/bit-common/dirt/organization-integrations/services/hec-organization-integration-service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { ThemeType } from "@bitwarden/common/platform/enums"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { OrganizationId } from "@bitwarden/common/types/guid"; import { DialogService, ToastService } from "@bitwarden/components"; +import { SharedModule } from "@bitwarden/web-vault/app/shared"; -import { SharedModule } from "../../../../../../shared/shared.module"; import { openHecConnectDialog } from "../integration-dialog/index"; -import { Integration } from "../models"; @Component({ selector: "app-integration-card", @@ -37,13 +30,13 @@ import { Integration } from "../models"; }) export class IntegrationCardComponent implements AfterViewInit, OnDestroy { private destroyed$: Subject = new Subject(); - @ViewChild("imageEle") imageEle: ElementRef; + @ViewChild("imageEle") imageEle!: ElementRef; - @Input() name: string; - @Input() image: string; - @Input() imageDarkMode?: string; - @Input() linkURL: string; - @Input() integrationSettings: Integration; + @Input() name: string = ""; + @Input() image: string = ""; + @Input() imageDarkMode: string = ""; + @Input() linkURL: string = ""; + @Input() integrationSettings!: Integration; /** Adds relevant `rel` attribute to external links */ @Input() externalURL?: boolean; @@ -56,19 +49,24 @@ export class IntegrationCardComponent implements AfterViewInit, OnDestroy { */ @Input() newBadgeExpiration?: string; @Input() description?: string; - @Input() isConnected?: boolean; @Input() canSetupConnection?: boolean; + organizationId: OrganizationId; + constructor( private themeStateService: ThemeStateService, @Inject(SYSTEM_THEME_OBSERVABLE) private systemTheme$: Observable, private dialogService: DialogService, private activatedRoute: ActivatedRoute, - private apiService: OrganizationIntegrationApiService, + private hecOrganizationIntegrationService: HecOrganizationIntegrationService, private toastService: ToastService, private i18nService: I18nService, - ) {} + ) { + this.organizationId = this.activatedRoute.snapshot.paramMap.get( + "organizationId", + ) as OrganizationId; + } ngAfterViewInit() { combineLatest([this.themeStateService.selectedTheme$, this.systemTheme$]) @@ -116,8 +114,16 @@ export class IntegrationCardComponent implements AfterViewInit, OnDestroy { return expirationDate > new Date(); } + get isConnected(): boolean { + return !!this.integrationSettings.organizationIntegration?.configuration; + } + showConnectedBadge(): boolean { - return this.isConnected !== undefined; + return this.canSetupConnection ?? false; + } + + get isUpdateAvailable(): boolean { + return !!this.integrationSettings.organizationIntegration; } async setupConnection() { @@ -135,43 +141,41 @@ export class IntegrationCardComponent implements AfterViewInit, OnDestroy { return; } - // save the integration try { - const dbResponse = await this.saveHecIntegration(result.configuration); - this.isConnected = !!dbResponse.id; + if (this.isUpdateAvailable) { + const orgIntegrationId = this.integrationSettings.organizationIntegration?.id; + const orgIntegrationConfigurationId = + this.integrationSettings.organizationIntegration?.integrationConfiguration[0]?.id; + + if (!orgIntegrationId || !orgIntegrationConfigurationId) { + throw Error("Organization Integration ID or Configuration ID is missing"); + } + + await this.hecOrganizationIntegrationService.updateHec( + this.organizationId, + orgIntegrationId, + orgIntegrationConfigurationId, + this.integrationSettings.name as OrganizationIntegrationServiceType, + result.url, + result.bearerToken, + result.index, + ); + } else { + await this.hecOrganizationIntegrationService.saveHec( + this.organizationId, + this.integrationSettings.name as OrganizationIntegrationServiceType, + result.url, + result.bearerToken, + result.index, + ); + } } catch { this.toastService.showToast({ variant: "error", - title: null, + title: "", message: this.i18nService.t("failedToSaveIntegration"), }); return; } } - - async saveHecIntegration(configuration: string): Promise { - const organizationId = this.activatedRoute.snapshot.paramMap.get( - "organizationId", - ) as OrganizationId; - - const request = new OrganizationIntegrationRequest( - OrganizationIntegrationType.Hec, - configuration, - ); - - const integrations = await this.apiService.getOrganizationIntegrations(organizationId); - const existingIntegration = integrations.find( - (i) => i.type === OrganizationIntegrationType.Hec, - ); - - if (existingIntegration) { - return await this.apiService.updateOrganizationIntegration( - organizationId, - existingIntegration.id, - request, - ); - } else { - return await this.apiService.createOrganizationIntegration(organizationId, request); - } - } } diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-dialog/connect-dialog/connect-dialog-hec.component.html b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-dialog/connect-dialog/connect-dialog-hec.component.html similarity index 91% rename from apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-dialog/connect-dialog/connect-dialog-hec.component.html rename to bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-dialog/connect-dialog/connect-dialog-hec.component.html index 7f28317dd67..2495feacf60 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-dialog/connect-dialog/connect-dialog-hec.component.html +++ b/bitwarden_license/bit-web/src/app/dirt/organization-integrations/integration-dialog/connect-dialog/connect-dialog-hec.component.html @@ -28,7 +28,11 @@
- {{ "faviconDesc" | i18n }}
diff --git a/apps/desktop/src/app/accounts/settings.component.ts b/apps/desktop/src/app/accounts/settings.component.ts index 98d11469d1e..069cfb095ed 100644 --- a/apps/desktop/src/app/accounts/settings.component.ts +++ b/apps/desktop/src/app/accounts/settings.component.ts @@ -54,6 +54,7 @@ import { BadgeComponent, } from "@bitwarden/components"; import { KeyService, BiometricStateService, BiometricsStatus } from "@bitwarden/key-management"; +import { PermitCipherDetailsPopoverComponent } from "@bitwarden/vault"; import { SetPinComponent } from "../../auth/components/set-pin.component"; import { SshAgentPromptType } from "../../autofill/models/ssh-agent-setting"; @@ -85,6 +86,7 @@ import { NativeMessagingManifestService } from "../services/native-messaging-man SelectModule, TypographyModule, VaultTimeoutInputComponent, + PermitCipherDetailsPopoverComponent, ], }) export class SettingsComponent implements OnInit, OnDestroy { diff --git a/apps/desktop/src/app/app.module.ts b/apps/desktop/src/app/app.module.ts index 014e29555e8..4f53e587994 100644 --- a/apps/desktop/src/app/app.module.ts +++ b/apps/desktop/src/app/app.module.ts @@ -31,7 +31,6 @@ import { SharedModule } from "./shared/shared.module"; @NgModule({ imports: [ BrowserAnimationsModule, - SharedModule, AppRoutingModule, VaultFilterModule, diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json index 50e0d4b9e76..86a723bb6f2 100644 --- a/apps/desktop/src/locales/en/messages.json +++ b/apps/desktop/src/locales/en/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3940,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/web/src/app/settings/preferences.component.html b/apps/web/src/app/settings/preferences.component.html index 80261ecccb7..050d7395caf 100644 --- a/apps/web/src/app/settings/preferences.component.html +++ b/apps/web/src/app/settings/preferences.component.html @@ -67,23 +67,17 @@ {{ "languageDesc" | i18n }} - - - {{ "enableFavicon" | i18n }} - - - - - {{ "faviconDesc" | i18n }} - +
+ + + + {{ "showIconsChangePasswordUrls" | i18n }} + + +
+ +
+
{{ "theme" | i18n }} diff --git a/apps/web/src/app/settings/preferences.component.ts b/apps/web/src/app/settings/preferences.component.ts index e6cc35903a7..58a072ce76a 100644 --- a/apps/web/src/app/settings/preferences.component.ts +++ b/apps/web/src/app/settings/preferences.component.ts @@ -34,6 +34,7 @@ import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { DialogService } from "@bitwarden/components"; +import { PermitCipherDetailsPopoverComponent } from "@bitwarden/vault"; import { HeaderModule } from "../layouts/header/header.module"; import { SharedModule } from "../shared"; @@ -41,7 +42,12 @@ import { SharedModule } from "../shared"; @Component({ selector: "app-preferences", templateUrl: "preferences.component.html", - imports: [SharedModule, HeaderModule, VaultTimeoutInputComponent], + imports: [ + SharedModule, + HeaderModule, + VaultTimeoutInputComponent, + PermitCipherDetailsPopoverComponent, + ], }) export class PreferencesComponent implements OnInit, OnDestroy { // For use in template diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index 01099c4af58..ef6e68ff1a0 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -2115,11 +2115,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -11093,6 +11090,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, diff --git a/libs/common/src/vault/models/response/change-password-uri.response.ts b/libs/common/src/vault/models/response/change-password-uri.response.ts new file mode 100644 index 00000000000..1ff3424a269 --- /dev/null +++ b/libs/common/src/vault/models/response/change-password-uri.response.ts @@ -0,0 +1,10 @@ +import { BaseResponse } from "../../../models/response/base.response"; + +export class ChangePasswordUriResponse extends BaseResponse { + uri: string | null; + + constructor(response: any) { + super(response); + this.uri = this.getResponseProperty("uri"); + } +} diff --git a/libs/vault/src/components/permit-cipher-details-popover/permit-cipher-details-popover.component.html b/libs/vault/src/components/permit-cipher-details-popover/permit-cipher-details-popover.component.html new file mode 100644 index 00000000000..1833a148616 --- /dev/null +++ b/libs/vault/src/components/permit-cipher-details-popover/permit-cipher-details-popover.component.html @@ -0,0 +1,22 @@ + + + +

+ {{ "permitCipherDetailsDescription" | i18n }} +

+ +
diff --git a/libs/vault/src/components/permit-cipher-details-popover/permit-cipher-details-popover.component.ts b/libs/vault/src/components/permit-cipher-details-popover/permit-cipher-details-popover.component.ts new file mode 100644 index 00000000000..8e80ddf7810 --- /dev/null +++ b/libs/vault/src/components/permit-cipher-details-popover/permit-cipher-details-popover.component.ts @@ -0,0 +1,19 @@ +import { Component, inject } from "@angular/core"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { LinkModule, PopoverModule } from "@bitwarden/components"; + +@Component({ + selector: "vault-permit-cipher-details-popover", + templateUrl: "./permit-cipher-details-popover.component.html", + imports: [PopoverModule, JslibModule, LinkModule], +}) +export class PermitCipherDetailsPopoverComponent { + private platformUtilService = inject(PlatformUtilsService); + + openLearnMore(e: Event) { + e.preventDefault(); + this.platformUtilService.launchUri("https://bitwarden.com/help/website-icons/"); + } +} diff --git a/libs/vault/src/index.ts b/libs/vault/src/index.ts index f3925ac3379..efaefc77ade 100644 --- a/libs/vault/src/index.ts +++ b/libs/vault/src/index.ts @@ -20,6 +20,7 @@ export { openPasswordHistoryDialog } from "./components/password-history/passwor export * from "./components/add-edit-folder-dialog/add-edit-folder-dialog.component"; export * from "./components/carousel"; export * from "./components/new-cipher-menu/new-cipher-menu.component"; +export * from "./components/permit-cipher-details-popover/permit-cipher-details-popover.component"; export { DefaultSshImportPromptService } from "./services/default-ssh-import-prompt.service"; export { SshImportPromptService } from "./services/ssh-import-prompt.service"; diff --git a/libs/vault/src/services/default-change-login-password.service.spec.ts b/libs/vault/src/services/default-change-login-password.service.spec.ts index c9628797f4d..42242f2e4a8 100644 --- a/libs/vault/src/services/default-change-login-password.service.spec.ts +++ b/libs/vault/src/services/default-change-login-password.service.spec.ts @@ -4,10 +4,14 @@ */ import { mock } from "jest-mock-extended"; +import { BehaviorSubject, of } from "rxjs"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { ClientType } from "@bitwarden/common/enums"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; +import { + Environment, + EnvironmentService, +} from "@bitwarden/common/platform/abstractions/environment.service"; import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view"; @@ -18,37 +22,30 @@ import { DefaultChangeLoginPasswordService } from "./default-change-login-passwo describe("DefaultChangeLoginPasswordService", () => { let service: DefaultChangeLoginPasswordService; - let mockShouldNotExistResponse: Response; - let mockWellKnownResponse: Response; - - const getClientType = jest.fn(() => ClientType.Browser); - const mockApiService = mock(); - const platformUtilsService = mock({ - getClientType, - }); + const mockDomainSettingsService = mock(); + + const showFavicons$ = new BehaviorSubject(true); beforeEach(() => { - mockApiService.nativeFetch.mockClear(); + mockApiService.fetch.mockClear(); + mockApiService.fetch.mockImplementation(() => + Promise.resolve({ ok: true, json: () => Promise.resolve({ uri: null }) } as Response), + ); - // Default responses to success state - mockShouldNotExistResponse = new Response("Not Found", { status: 404 }); - mockWellKnownResponse = new Response("OK", { status: 200 }); + mockDomainSettingsService.showFavicons$ = showFavicons$; - mockApiService.nativeFetch.mockImplementation((request) => { - if ( - request.url.endsWith("resource-that-should-not-exist-whose-status-code-should-not-be-200") - ) { - return Promise.resolve(mockShouldNotExistResponse); - } + const mockEnvironmentService = { + environment$: of({ + getIconsUrl: () => "https://icons.bitwarden.com", + } as Environment), + } as EnvironmentService; - if (request.url.endsWith(".well-known/change-password")) { - return Promise.resolve(mockWellKnownResponse); - } - - throw new Error("Unexpected request"); - }); - service = new DefaultChangeLoginPasswordService(mockApiService, platformUtilsService); + service = new DefaultChangeLoginPasswordService( + mockApiService, + mockEnvironmentService, + mockDomainSettingsService, + ); }); it("should return null for non-login ciphers", async () => { @@ -85,7 +82,7 @@ describe("DefaultChangeLoginPasswordService", () => { expect(url).toBeNull(); }); - it("should check the origin for a reliable status code", async () => { + it("should call the icons url endpoint", async () => { const cipher = { type: CipherType.Login, login: Object.assign(new LoginView(), { @@ -95,35 +92,42 @@ describe("DefaultChangeLoginPasswordService", () => { await service.getChangePasswordUrl(cipher); - expect(mockApiService.nativeFetch).toHaveBeenCalledWith( + expect(mockApiService.fetch).toHaveBeenCalledWith( expect.objectContaining({ - url: "https://example.com/.well-known/resource-that-should-not-exist-whose-status-code-should-not-be-200", + url: "https://icons.bitwarden.com/change-password-uri?uri=https%3A%2F%2Fexample.com%2F", }), ); }); - it("should attempt to fetch the well-known change password URL", async () => { + it("should return the original URI when unable to verify the response", async () => { + mockApiService.fetch.mockImplementation(() => + Promise.resolve({ ok: true, json: () => Promise.resolve({ uri: null }) } as Response), + ); + const cipher = { type: CipherType.Login, login: Object.assign(new LoginView(), { - uris: [{ uri: "https://example.com" }], + uris: [{ uri: "https://example.com/" }], }), } as CipherView; - await service.getChangePasswordUrl(cipher); + const url = await service.getChangePasswordUrl(cipher); - expect(mockApiService.nativeFetch).toHaveBeenCalledWith( - expect.objectContaining({ - url: "https://example.com/.well-known/change-password", - }), - ); + expect(url).toBe("https://example.com/"); }); - it("should return the well-known change password URL when successful at verifying the response", async () => { + it("should return the well known change url from the response", async () => { + mockApiService.fetch.mockImplementation(() => { + return Promise.resolve({ + ok: true, + json: () => Promise.resolve({ uri: "https://example.com/.well-known/change-password" }), + } as Response); + }); + const cipher = { type: CipherType.Login, login: Object.assign(new LoginView(), { - uris: [{ uri: "https://example.com" }], + uris: [{ uri: "https://example.com/" }, { uri: "https://working.com/" }], }), } as CipherView; @@ -132,49 +136,20 @@ describe("DefaultChangeLoginPasswordService", () => { expect(url).toBe("https://example.com/.well-known/change-password"); }); - it("should return the original URI when unable to verify the response", async () => { - mockShouldNotExistResponse = new Response("Ok", { status: 200 }); - - const cipher = { - type: CipherType.Login, - login: Object.assign(new LoginView(), { - uris: [{ uri: "https://example.com/" }], - }), - } as CipherView; - - const url = await service.getChangePasswordUrl(cipher); - - expect(url).toBe("https://example.com/"); - }); - - it("should return the original URI when the well-known URL is not found", async () => { - mockWellKnownResponse = new Response("Not Found", { status: 404 }); - - const cipher = { - type: CipherType.Login, - login: Object.assign(new LoginView(), { - uris: [{ uri: "https://example.com/" }], - }), - } as CipherView; - - const url = await service.getChangePasswordUrl(cipher); - - expect(url).toBe("https://example.com/"); - }); - it("should try the next URI if the first one fails", async () => { - mockApiService.nativeFetch.mockImplementation((request) => { - if ( - request.url.endsWith("resource-that-should-not-exist-whose-status-code-should-not-be-200") - ) { - return Promise.resolve(mockShouldNotExistResponse); + mockApiService.fetch.mockImplementation((request) => { + if (request.url.includes("no-wellknown.com")) { + return Promise.resolve({ + ok: true, + json: () => Promise.resolve({ uri: null }), + } as Response); } - if (request.url.endsWith(".well-known/change-password")) { - if (request.url.includes("working.com")) { - return Promise.resolve(mockWellKnownResponse); - } - return Promise.resolve(new Response("Not Found", { status: 404 })); + if (request.url.includes("working.com")) { + return Promise.resolve({ + ok: true, + json: () => Promise.resolve({ uri: "https://working.com/.well-known/change-password" }), + } as Response); } throw new Error("Unexpected request"); @@ -192,19 +167,19 @@ describe("DefaultChangeLoginPasswordService", () => { expect(url).toBe("https://working.com/.well-known/change-password"); }); - it("should return the first URI when the client type is not browser", async () => { - getClientType.mockReturnValue(ClientType.Web); + it("returns the first URI when `showFavicons$` setting is disabled", async () => { + showFavicons$.next(false); const cipher = { type: CipherType.Login, login: Object.assign(new LoginView(), { - uris: [{ uri: "https://example.com/" }, { uri: "https://example-2.com/" }], + uris: [{ uri: "https://example.com/" }, { uri: "https://another.com/" }], }), } as CipherView; const url = await service.getChangePasswordUrl(cipher); - expect(mockApiService.nativeFetch).not.toHaveBeenCalled(); expect(url).toBe("https://example.com/"); + expect(mockApiService.fetch).not.toHaveBeenCalled(); }); }); diff --git a/libs/vault/src/services/default-change-login-password.service.ts b/libs/vault/src/services/default-change-login-password.service.ts index a0b5646c5a9..929f5819c02 100644 --- a/libs/vault/src/services/default-change-login-password.service.ts +++ b/libs/vault/src/services/default-change-login-password.service.ts @@ -1,9 +1,12 @@ import { Injectable } from "@angular/core"; +import { firstValueFrom } from "rxjs"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; +import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherType } from "@bitwarden/common/vault/enums"; +import { ChangePasswordUriResponse } from "@bitwarden/common/vault/models/response/change-password-uri.response"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { ChangeLoginPasswordService } from "../abstractions/change-login-password.service"; @@ -12,7 +15,8 @@ import { ChangeLoginPasswordService } from "../abstractions/change-login-passwor export class DefaultChangeLoginPasswordService implements ChangeLoginPasswordService { constructor( private apiService: ApiService, - private platformUtilsService: PlatformUtilsService, + private environmentService: EnvironmentService, + private domainSettingsService: DomainSettingsService, ) {} /** @@ -33,24 +37,19 @@ export class DefaultChangeLoginPasswordService implements ChangeLoginPasswordSer return null; } - // CSP policies on the web and desktop restrict the application from making - // cross-origin requests, breaking the below .well-known URL checks. - // For those platforms, this will short circuit and return the first URL. - // PM-21024 will build a solution for the server side to handle this. - if (this.platformUtilsService.getClientType() !== "browser") { + const enableFaviconChangePassword = await firstValueFrom( + this.domainSettingsService.showFavicons$, + ); + + // When the setting is not enabled, return the first URL + if (!enableFaviconChangePassword) { return urls[0].href; } for (const url of urls) { - const [reliable, wellKnownChangeUrl] = await Promise.all([ - this.hasReliableHttpStatusCode(url.origin), - this.getWellKnownChangePasswordUrl(url.origin), - ]); + const wellKnownChangeUrl = await this.fetchWellKnownChangePasswordUri(url.href); - // Some servers return a 200 OK for a resource that should not exist - // Which means we cannot trust the well-known URL is valid, so we skip it - // to avoid potentially sending users to a 404 page - if (reliable && wellKnownChangeUrl != null) { + if (wellKnownChangeUrl) { return wellKnownChangeUrl; } } @@ -60,55 +59,41 @@ export class DefaultChangeLoginPasswordService implements ChangeLoginPasswordSer } /** - * Checks if the server returns a non-200 status code for a resource that should not exist. - * See https://w3c.github.io/webappsec-change-password-url/response-code-reliability.html#semantics - * @param urlOrigin The origin of the URL to check + * Fetches the well-known change-password-uri for the given URL. + * @returns The full URL to the change password page, or null if it could not be found. */ - private async hasReliableHttpStatusCode(urlOrigin: string): Promise { - try { - const url = new URL( - "./.well-known/resource-that-should-not-exist-whose-status-code-should-not-be-200", - urlOrigin, - ); + private async fetchWellKnownChangePasswordUri(url: string): Promise { + const getChangePasswordUriRequest = await this.buildChangePasswordUriRequest(url); - const request = new Request(url, { - method: "GET", - mode: "same-origin", - credentials: "omit", - cache: "no-store", - redirect: "follow", - }); + const response = await this.apiService.fetch(getChangePasswordUriRequest); - const response = await this.apiService.nativeFetch(request); - return !response.ok; - } catch { - return false; + if (!response.ok) { + return null; } + + const data = await response.json(); + + const { uri } = new ChangePasswordUriResponse(data); + + return uri; } /** - * Builds a well-known change password URL for the given origin. Attempts to fetch the URL to ensure a valid response - * is returned. Returns null if the request throws or the response is not 200 OK. - * See https://w3c.github.io/webappsec-change-password-url/ - * @param urlOrigin The origin of the URL to check + * Construct the request for the change-password-uri endpoint. */ - private async getWellKnownChangePasswordUrl(urlOrigin: string): Promise { - try { - const url = new URL("./.well-known/change-password", urlOrigin); + private async buildChangePasswordUriRequest(cipherUri: string): Promise { + const searchParams = new URLSearchParams(); + searchParams.set("uri", cipherUri); - const request = new Request(url, { - method: "GET", - mode: "same-origin", - credentials: "omit", - cache: "no-store", - redirect: "follow", - }); + // The change-password-uri endpoint lives within the icons service + // as it uses decrypted cipher data. + const env = await firstValueFrom(this.environmentService.environment$); + const iconsUrl = env.getIconsUrl(); - const response = await this.apiService.nativeFetch(request); + const url = new URL(`${iconsUrl}/change-password-uri?${searchParams.toString()}`); - return response.ok ? url.toString() : null; - } catch { - return null; - } + return new Request(url, { + method: "GET", + }); } } From a2e36c44890a21bcc290433ec240d0c225d9a7d1 Mon Sep 17 00:00:00 2001 From: Andreas Coroiu Date: Thu, 11 Sep 2025 16:05:32 +0200 Subject: [PATCH 017/249] feat: add folder.clear warning (#16376) --- apps/browser/src/background/main.background.ts | 1 + apps/cli/src/service-container/service-container.ts | 1 + apps/desktop/src/app/app.component.ts | 1 + apps/web/src/app/app.component.ts | 1 + .../vault-timeout/services/vault-timeout.service.ts | 1 + 5 files changed, 5 insertions(+) diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 37bd85a9be8..d52f1b9e35a 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -1640,6 +1640,7 @@ export default class MainBackground { await Promise.all([ this.keyService.clearKeys(userBeingLoggedOut), this.cipherService.clear(userBeingLoggedOut), + // ! DO NOT REMOVE folderService.clear ! For more information see PM-25660 this.folderService.clear(userBeingLoggedOut), this.vaultTimeoutSettingsService.clear(userBeingLoggedOut), this.biometricStateService.logout(userBeingLoggedOut), diff --git a/apps/cli/src/service-container/service-container.ts b/apps/cli/src/service-container/service-container.ts index 76eeb340550..b213f3ba1c9 100644 --- a/apps/cli/src/service-container/service-container.ts +++ b/apps/cli/src/service-container/service-container.ts @@ -907,6 +907,7 @@ export class ServiceContainer { this.eventUploadService.uploadEvents(userId as UserId), this.keyService.clearKeys(userId), this.cipherService.clear(userId), + // ! DO NOT REMOVE folderService.clear ! For more information see PM-25660 this.folderService.clear(userId), ]); diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index c4e60e4ff93..7cdb45a6ca7 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -689,6 +689,7 @@ export class AppComponent implements OnInit, OnDestroy { await this.eventUploadService.uploadEvents(userBeingLoggedOut); await this.keyService.clearKeys(userBeingLoggedOut); await this.cipherService.clear(userBeingLoggedOut); + // ! DO NOT REMOVE folderService.clear ! For more information see PM-25660 await this.folderService.clear(userBeingLoggedOut); await this.vaultTimeoutSettingsService.clear(userBeingLoggedOut); await this.biometricStateService.logout(userBeingLoggedOut); diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 60911173308..2fc81fe2119 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -258,6 +258,7 @@ export class AppComponent implements OnDestroy, OnInit { await Promise.all([ this.keyService.clearKeys(userId), this.cipherService.clear(userId), + // ! DO NOT REMOVE folderService.clear ! For more information see PM-25660 this.folderService.clear(userId), this.biometricStateService.logout(userId), ]); diff --git a/libs/common/src/key-management/vault-timeout/services/vault-timeout.service.ts b/libs/common/src/key-management/vault-timeout/services/vault-timeout.service.ts index 8b523498c31..9b1350fc3a7 100644 --- a/libs/common/src/key-management/vault-timeout/services/vault-timeout.service.ts +++ b/libs/common/src/key-management/vault-timeout/services/vault-timeout.service.ts @@ -144,6 +144,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { await this.searchService.clearIndex(lockingUserId); + // ! DO NOT REMOVE folderService.clearDecryptedFolderState ! For more information see PM-25660 await this.folderService.clearDecryptedFolderState(lockingUserId); await this.masterPasswordService.clearMasterKey(lockingUserId); From 31d5b639e948635863b9b305db0806fb54f35e82 Mon Sep 17 00:00:00 2001 From: Leslie Tilton <23057410+Banrion@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:17:13 -0500 Subject: [PATCH 018/249] [PM-20578] [PM-20579] Merge existing feature branch into main (#16364) * PM-20578 Added api to fetch and save data (#15334) * [PM-20579] Update risk-insights report service to use api service with encryption (#15357) * Fix type error * Fix paths for changed key generation service * Finalize the api services * Fixing test case for summary date range * Fixing report service tests. Encryption will be modified in the future * Fixing encryption service tests * fixing linting issues --------- Co-authored-by: Vijay Oommen Co-authored-by: Tom --- .../risk-insights/models/password-health.ts | 40 +++- .../risk-insights-api.service.spec.ts | 181 +++++++++++--- .../services/risk-insights-api.service.ts | 54 ++++- .../services/risk-insights-data.service.ts | 6 +- .../risk-insights-encryption.service.spec.ts | 220 ++++++++++++++++++ .../risk-insights-encryption.service.ts | 105 +++++++++ .../risk-insights-report.service.spec.ts | 124 +++++++++- .../services/risk-insights-report.service.ts | 112 ++++++++- .../access-intelligence.module.ts | 7 + .../all-applications.component.ts | 4 +- .../critical-applications.component.ts | 7 +- .../risk-insights.component.ts | 8 +- libs/common/src/types/guid.ts | 1 + 13 files changed, 806 insertions(+), 63 deletions(-) create mode 100644 bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.spec.ts create mode 100644 bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.ts diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts index 6be24d60b89..07037f7da6d 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/password-health.ts @@ -1,11 +1,11 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore - import { Opaque } from "type-fest"; import { OrganizationId } from "@bitwarden/common/types/guid"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { BadgeVariant } from "@bitwarden/components"; +import { EncString } from "@bitwarden/sdk-internal"; /** * All applications report summary. The total members, @@ -132,6 +132,16 @@ export type AppAtRiskMembersDialogParams = { applicationName: string; }; +/* + * After data is encrypted, it is returned with the + * encryption key used to encrypt the data. + */ +export interface EncryptedDataWithKey { + organizationId: OrganizationId; + encryptedData: EncString; + encryptionKey: EncString; +} + /** * Request to drop a password health report application * Model is expected by the API endpoint @@ -174,4 +184,32 @@ export enum DrawerType { OrgAtRiskApps = 3, } +export interface RiskInsightsReport { + organizationId: OrganizationId; + date: string; + reportData: string; + reportKey: string; +} + +export interface ReportInsightsReportData { + data: ApplicationHealthReportDetail[]; + summary: ApplicationHealthReportSummary; +} + +export interface SaveRiskInsightsReportRequest { + data: RiskInsightsReport; +} + +export interface SaveRiskInsightsReportResponse { + id: string; +} + +export interface GetRiskInsightsReportResponse { + id: string; + organizationId: OrganizationId; + date: string; + reportData: EncString; + reportKey: EncString; +} + export type PasswordHealthReportApplicationId = Opaque; diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts index ef9fc768944..19172d2e7fb 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts @@ -1,8 +1,10 @@ import { mock } from "jest-mock-extended"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { makeEncString } from "@bitwarden/common/spec"; +import { OrganizationId, OrganizationReportId } from "@bitwarden/common/types/guid"; -import { EncryptedDataModel } from "../models/password-health"; +import { EncryptedDataModel, SaveRiskInsightsReportRequest } from "../models/password-health"; import { RiskInsightsApiService } from "./risk-insights-api.service"; @@ -10,6 +12,30 @@ describe("RiskInsightsApiService", () => { let service: RiskInsightsApiService; const mockApiService = mock(); + const orgId = "org1" as OrganizationId; + + const getRiskInsightsReportResponse = { + organizationId: orgId, + date: new Date().toISOString(), + reportData: "test", + reportKey: "test-key", + }; + + const reportData = makeEncString("test").encryptedString?.toString() ?? ""; + const reportKey = makeEncString("test-key").encryptedString?.toString() ?? ""; + + const saveRiskInsightsReportRequest: SaveRiskInsightsReportRequest = { + data: { + organizationId: orgId, + date: new Date().toISOString(), + reportData: reportData, + reportKey: reportKey, + }, + }; + const saveRiskInsightsReportResponse = { + ...saveRiskInsightsReportRequest.data, + }; + beforeEach(() => { service = new RiskInsightsApiService(mockApiService); }); @@ -18,66 +44,157 @@ describe("RiskInsightsApiService", () => { expect(service).toBeTruthy(); }); - describe("getRiskInsightsSummary", () => { - it("should call apiService.send with correct parameters and return an Observable", (done) => { - const orgId = "org123"; - const minDate = new Date("2024-01-01"); - const maxDate = new Date("2024-01-31"); - const mockResponse: EncryptedDataModel[] = [{ encryptedData: "abc" } as EncryptedDataModel]; + it("should call apiService.send with correct parameters and return the response for getRiskInsightsReport ", (done) => { + mockApiService.send.mockReturnValue(Promise.resolve(getRiskInsightsReportResponse)); - mockApiService.send.mockResolvedValueOnce(mockResponse); + service.getRiskInsightsReport(orgId).subscribe((result) => { + expect(result).toEqual(getRiskInsightsReportResponse); + expect(mockApiService.send).toHaveBeenCalledWith( + "GET", + `/reports/organizations/${orgId.toString()}/latest`, + null, + true, + true, + ); + done(); + }); + }); - service.getRiskInsightsSummary(orgId, minDate, maxDate).subscribe((result) => { + it("should return null if apiService.send rejects with 404 error for getRiskInsightsReport", (done) => { + const error = { statusCode: 404 }; + mockApiService.send.mockReturnValue(Promise.reject(error)); + + service.getRiskInsightsReport(orgId).subscribe((result) => { + expect(result).toBeNull(); + done(); + }); + }); + + it("should throw error if apiService.send rejects with non-404 error for getRiskInsightsReport", (done) => { + const error = { statusCode: 500, message: "Server error" }; + mockApiService.send.mockReturnValue(Promise.reject(error)); + + service.getRiskInsightsReport(orgId).subscribe({ + next: () => { + // Should not reach here + fail("Expected error to be thrown"); + }, + error: () => { expect(mockApiService.send).toHaveBeenCalledWith( "GET", - `organization-report-summary/org123?from=2024-01-01&to=2024-01-31`, + `/reports/organizations/${orgId.toString()}/latest`, null, true, true, ); - expect(result).toEqual(mockResponse); done(); - }); + }, + complete: () => { + done(); + }, }); }); - describe("saveRiskInsightsSummary", () => { - it("should call apiService.send with correct parameters and return an Observable", (done) => { - const data: EncryptedDataModel = { encryptedData: "xyz" } as EncryptedDataModel; + it("should call apiService.send with correct parameters for saveRiskInsightsReport", (done) => { + mockApiService.send.mockReturnValue(Promise.resolve(saveRiskInsightsReportResponse)); - mockApiService.send.mockResolvedValueOnce(undefined); + service.saveRiskInsightsReport(saveRiskInsightsReportRequest, orgId).subscribe((result) => { + expect(result).toEqual(saveRiskInsightsReportResponse); + expect(mockApiService.send).toHaveBeenCalledWith( + "POST", + `/reports/organizations/${orgId.toString()}`, + saveRiskInsightsReportRequest.data, + true, + true, + ); + done(); + }); + }); - service.saveRiskInsightsSummary(data).subscribe((result) => { + it("should propagate errors from apiService.send for saveRiskInsightsReport - 1", (done) => { + const error = { statusCode: 500, message: "Internal Server Error" }; + mockApiService.send.mockReturnValue(Promise.reject(error)); + + service.saveRiskInsightsReport(saveRiskInsightsReportRequest, orgId).subscribe({ + next: () => { + fail("Expected error to be thrown"); + }, + error: () => { expect(mockApiService.send).toHaveBeenCalledWith( "POST", - "organization-report-summary", - data, + `/reports/organizations/${orgId.toString()}`, + saveRiskInsightsReportRequest.data, true, true, ); - expect(result).toBeUndefined(); done(); - }); + }, + complete: () => { + done(); + }, }); }); - describe("updateRiskInsightsSummary", () => { - it("should call apiService.send with correct parameters and return an Observable", (done) => { - const data: EncryptedDataModel = { encryptedData: "xyz" } as EncryptedDataModel; + it("should propagate network errors from apiService.send for saveRiskInsightsReport - 2", (done) => { + const error = new Error("Network error"); + mockApiService.send.mockReturnValue(Promise.reject(error)); - mockApiService.send.mockResolvedValueOnce(undefined); - - service.updateRiskInsightsSummary(data).subscribe((result) => { + service.saveRiskInsightsReport(saveRiskInsightsReportRequest, orgId).subscribe({ + next: () => { + fail("Expected error to be thrown"); + }, + error: () => { expect(mockApiService.send).toHaveBeenCalledWith( - "PUT", - "organization-report-summary", - data, + "POST", + `/reports/organizations/${orgId.toString()}`, + saveRiskInsightsReportRequest.data, true, true, ); - expect(result).toBeUndefined(); done(); - }); + }, + complete: () => { + done(); + }, + }); + }); + + it("should call apiService.send with correct parameters and return an Observable", (done) => { + const minDate = new Date("2024-01-01"); + const maxDate = new Date("2024-01-31"); + const mockResponse: EncryptedDataModel[] = [{ encryptedData: "abc" } as EncryptedDataModel]; + + mockApiService.send.mockResolvedValueOnce(mockResponse); + + service.getRiskInsightsSummary(orgId, minDate, maxDate).subscribe((result) => { + expect(mockApiService.send).toHaveBeenCalledWith( + "GET", + `/reports/organizations/${orgId.toString()}/data/summary?startDate=${minDate.toISOString().split("T")[0]}&endDate=${maxDate.toISOString().split("T")[0]}`, + null, + true, + true, + ); + expect(result).toEqual(mockResponse); + done(); + }); + }); + + it("should call apiService.send with correct parameters and return an Observable", (done) => { + const data: EncryptedDataModel = { encryptedData: "xyz" } as EncryptedDataModel; + const reportId = "report123" as OrganizationReportId; + + mockApiService.send.mockResolvedValueOnce(undefined); + + service.updateRiskInsightsSummary(data, orgId, reportId).subscribe((result) => { + expect(mockApiService.send).toHaveBeenCalledWith( + "PATCH", + `/reports/organizations/${orgId.toString()}/data/summary/${reportId.toString()}`, + data, + true, + true, + ); + expect(result).toBeUndefined(); + done(); }); }); }); diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts index 0d69947b826..6beef8d1401 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts @@ -1,12 +1,46 @@ import { from, Observable } from "rxjs"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { OrganizationId, OrganizationReportId } from "@bitwarden/common/types/guid"; -import { EncryptedDataModel } from "../models/password-health"; +import { + EncryptedDataModel, + GetRiskInsightsReportResponse, + SaveRiskInsightsReportRequest, + SaveRiskInsightsReportResponse, +} from "../models/password-health"; export class RiskInsightsApiService { constructor(private apiService: ApiService) {} + getRiskInsightsReport(orgId: OrganizationId): Observable { + const dbResponse = this.apiService + .send("GET", `/reports/organizations/${orgId.toString()}/latest`, null, true, true) + .catch((error: any): any => { + if (error.statusCode === 404) { + return null; // Handle 404 by returning null or an appropriate default value + } + throw error; // Re-throw other errors + }); + + return from(dbResponse as Promise); + } + + saveRiskInsightsReport( + request: SaveRiskInsightsReportRequest, + organizationId: OrganizationId, + ): Observable { + const dbResponse = this.apiService.send( + "POST", + `/reports/organizations/${organizationId.toString()}`, + request.data, + true, + true, + ); + + return from(dbResponse as Promise); + } + getRiskInsightsSummary( orgId: string, minDate: Date, @@ -16,7 +50,7 @@ export class RiskInsightsApiService { const maxDateStr = maxDate.toISOString().split("T")[0]; const dbResponse = this.apiService.send( "GET", - `organization-report-summary/${orgId.toString()}?from=${minDateStr}&to=${maxDateStr}`, + `/reports/organizations/${orgId.toString()}/data/summary?startDate=${minDateStr}&endDate=${maxDateStr}`, null, true, true, @@ -25,10 +59,14 @@ export class RiskInsightsApiService { return from(dbResponse as Promise); } - saveRiskInsightsSummary(data: EncryptedDataModel): Observable { + updateRiskInsightsSummary( + data: EncryptedDataModel, + organizationId: OrganizationId, + reportId: OrganizationReportId, + ): Observable { const dbResponse = this.apiService.send( - "POST", - "organization-report-summary", + "PATCH", + `/reports/organizations/${organizationId.toString()}/data/summary/${reportId.toString()}`, data, true, true, @@ -36,10 +74,4 @@ export class RiskInsightsApiService { return from(dbResponse as Promise); } - - updateRiskInsightsSummary(data: EncryptedDataModel): Observable { - const dbResponse = this.apiService.send("PUT", "organization-report-summary", data, true, true); - - return from(dbResponse as Promise); - } } diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-data.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-data.service.ts index 386c6fd6865..5e6dbcd54b5 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-data.service.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-data.service.ts @@ -1,6 +1,8 @@ import { BehaviorSubject } from "rxjs"; import { finalize } from "rxjs/operators"; +import { OrganizationId } from "@bitwarden/common/types/guid"; + import { AppAtRiskMembersDialogParams, ApplicationHealthReportDetail, @@ -40,7 +42,7 @@ export class RiskInsightsDataService { * Fetches the applications report and updates the applicationsSubject. * @param organizationId The ID of the organization. */ - fetchApplicationsReport(organizationId: string, isRefresh?: boolean): void { + fetchApplicationsReport(organizationId: OrganizationId, isRefresh?: boolean): void { if (isRefresh) { this.isRefreshingSubject.next(true); } else { @@ -66,7 +68,7 @@ export class RiskInsightsDataService { }); } - refreshApplicationsReport(organizationId: string): void { + refreshApplicationsReport(organizationId: OrganizationId): void { this.fetchApplicationsReport(organizationId, true); } diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.spec.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.spec.ts new file mode 100644 index 00000000000..dae56327c29 --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.spec.ts @@ -0,0 +1,220 @@ +import { mock } from "jest-mock-extended"; +import { BehaviorSubject } from "rxjs"; + +import { KeyGenerationService } from "@bitwarden/common/key-management/crypto"; +import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; +import { EncString } from "@bitwarden/common/key-management/crypto/models/enc-string"; +import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { makeSymmetricCryptoKey } from "@bitwarden/common/spec"; +import { OrganizationId, UserId } from "@bitwarden/common/types/guid"; +import { OrgKey } from "@bitwarden/common/types/key"; +import { KeyService } from "@bitwarden/key-management"; + +import { RiskInsightsEncryptionService } from "./risk-insights-encryption.service"; + +describe("RiskInsightsEncryptionService", () => { + let service: RiskInsightsEncryptionService; + const mockKeyService = mock(); + const mockEncryptService = mock(); + const mockKeyGenerationService = mock(); + + const ENCRYPTED_TEXT = "This data has been encrypted"; + const ENCRYPTED_KEY = "Re-encrypted Cipher Key"; + const orgId = "org-123" as OrganizationId; + const userId = "user-123" as UserId; + const orgKey = makeSymmetricCryptoKey(); + const contentEncryptionKey = new SymmetricCryptoKey(new Uint8Array(64)); + const testData = { foo: "bar" }; + const OrgRecords: Record = { + [orgId]: orgKey, + ["testOrg" as OrganizationId]: makeSymmetricCryptoKey(), + }; + const orgKey$ = new BehaviorSubject(OrgRecords); + + beforeEach(() => { + service = new RiskInsightsEncryptionService( + mockKeyService, + mockEncryptService, + mockKeyGenerationService, + ); + + jest.clearAllMocks(); + + // Always use the same contentEncryptionKey for both encrypt and decrypt tests + mockKeyGenerationService.createKey.mockResolvedValue(contentEncryptionKey); + mockEncryptService.wrapSymmetricKey.mockResolvedValue(new EncString(ENCRYPTED_KEY)); + mockEncryptService.encryptString.mockResolvedValue(new EncString(ENCRYPTED_TEXT)); + mockEncryptService.unwrapSymmetricKey.mockResolvedValue(contentEncryptionKey); + mockEncryptService.decryptString.mockResolvedValue(JSON.stringify(testData)); + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + }); + + describe("encryptRiskInsightsReport", () => { + it("should encrypt data and return encrypted packet", async () => { + // arrange: setup our mocks + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + + // Act: call the method under test + const result = await service.encryptRiskInsightsReport(orgId, userId, testData); + + // Assert: ensure that the methods were called with the expected parameters + expect(mockKeyService.orgKeys$).toHaveBeenCalledWith(userId); + expect(mockKeyGenerationService.createKey).toHaveBeenCalledWith(512); + expect(mockEncryptService.encryptString).toHaveBeenCalledWith( + JSON.stringify(testData), + contentEncryptionKey, + ); + expect(mockEncryptService.wrapSymmetricKey).toHaveBeenCalledWith( + contentEncryptionKey, + orgKey, + ); + expect(result).toEqual({ + organizationId: orgId, + encryptedData: ENCRYPTED_TEXT, + encryptionKey: ENCRYPTED_KEY, + }); + }); + + it("should throw an error when encrypted text is null or empty", async () => { + // arrange: setup our mocks + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.encryptString.mockResolvedValue(new EncString("")); + mockEncryptService.wrapSymmetricKey.mockResolvedValue(new EncString(ENCRYPTED_KEY)); + + // Act & Assert: call the method under test and expect rejection + await expect(service.encryptRiskInsightsReport(orgId, userId, testData)).rejects.toThrow( + "Encryption failed, encrypted strings are null", + ); + }); + + it("should throw an error when encrypted key is null or empty", async () => { + // arrange: setup our mocks + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.encryptString.mockResolvedValue(new EncString(ENCRYPTED_TEXT)); + mockEncryptService.wrapSymmetricKey.mockResolvedValue(new EncString("")); + + // Act & Assert: call the method under test and expect rejection + await expect(service.encryptRiskInsightsReport(orgId, userId, testData)).rejects.toThrow( + "Encryption failed, encrypted strings are null", + ); + }); + + it("should throw if org key is not found", async () => { + // when we cannot get an organization key, we should throw an error + mockKeyService.orgKeys$.mockReturnValue(new BehaviorSubject({})); + + await expect(service.encryptRiskInsightsReport(orgId, userId, testData)).rejects.toThrow( + "Organization key not found", + ); + }); + }); + + describe("decryptRiskInsightsReport", () => { + it("should decrypt data and return original object", async () => { + // Arrange: setup our mocks + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.unwrapSymmetricKey.mockResolvedValue(contentEncryptionKey); + mockEncryptService.decryptString.mockResolvedValue(JSON.stringify(testData)); + + // act: call the decrypt method - with any params + // actual decryption does not happen here, + // we just want to ensure the method calls are correct + const result = await service.decryptRiskInsightsReport( + orgId, + userId, + new EncString("encrypted-data"), + new EncString("wrapped-key"), + (data) => data as typeof testData, + ); + + expect(mockKeyService.orgKeys$).toHaveBeenCalledWith(userId); + expect(mockEncryptService.unwrapSymmetricKey).toHaveBeenCalledWith( + new EncString("wrapped-key"), + orgKey, + ); + expect(mockEncryptService.decryptString).toHaveBeenCalledWith( + new EncString("encrypted-data"), + contentEncryptionKey, + ); + expect(result).toEqual(testData); + }); + + it("should invoke data type validation method during decryption", async () => { + // Arrange: setup our mocks + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.unwrapSymmetricKey.mockResolvedValue(contentEncryptionKey); + mockEncryptService.decryptString.mockResolvedValue(JSON.stringify(testData)); + const mockParseFn = jest.fn((data) => data as typeof testData); + + // act: call the decrypt method - with any params + // actual decryption does not happen here, + // we just want to ensure the method calls are correct + const result = await service.decryptRiskInsightsReport( + orgId, + userId, + new EncString("encrypted-data"), + new EncString("wrapped-key"), + mockParseFn, + ); + + expect(mockParseFn).toHaveBeenCalledWith(JSON.parse(JSON.stringify(testData))); + expect(result).toEqual(testData); + }); + + it("should return null if org key is not found", async () => { + mockKeyService.orgKeys$.mockReturnValue(new BehaviorSubject({})); + + const result = await service.decryptRiskInsightsReport( + orgId, + userId, + new EncString("encrypted-data"), + new EncString("wrapped-key"), + (data) => data as typeof testData, + ); + + expect(result).toBeNull(); + }); + + it("should return null if decrypt throws", async () => { + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.unwrapSymmetricKey.mockRejectedValue(new Error("fail")); + + const result = await service.decryptRiskInsightsReport( + orgId, + userId, + new EncString("encrypted-data"), + new EncString("wrapped-key"), + (data) => data as typeof testData, + ); + expect(result).toBeNull(); + }); + + it("should return null if decrypt throws", async () => { + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.unwrapSymmetricKey.mockRejectedValue(new Error("fail")); + + const result = await service.decryptRiskInsightsReport( + orgId, + userId, + new EncString("encrypted-data"), + new EncString("wrapped-key"), + (data) => data as typeof testData, + ); + expect(result).toBeNull(); + }); + + it("should return null if decrypt throws", async () => { + mockKeyService.orgKeys$.mockReturnValue(orgKey$); + mockEncryptService.unwrapSymmetricKey.mockRejectedValue(new Error("fail")); + + const result = await service.decryptRiskInsightsReport( + orgId, + userId, + new EncString("encrypted-data"), + new EncString("wrapped-key"), + (data) => data as typeof testData, + ); + expect(result).toBeNull(); + }); + }); +}); diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.ts new file mode 100644 index 00000000000..f3c3a68b470 --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-encryption.service.ts @@ -0,0 +1,105 @@ +import { firstValueFrom, map } from "rxjs"; +import { Jsonify } from "type-fest"; + +import { KeyGenerationService } from "@bitwarden/common/key-management/crypto"; +import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; +import { EncString } from "@bitwarden/common/key-management/crypto/models/enc-string"; +import { OrganizationId, UserId } from "@bitwarden/common/types/guid"; +import { KeyService } from "@bitwarden/key-management"; + +import { EncryptedDataWithKey } from "../models/password-health"; + +export class RiskInsightsEncryptionService { + constructor( + private keyService: KeyService, + private encryptService: EncryptService, + private keyGeneratorService: KeyGenerationService, + ) {} + + async encryptRiskInsightsReport( + organizationId: OrganizationId, + userId: UserId, + data: T, + ): Promise { + const orgKey = await firstValueFrom( + this.keyService + .orgKeys$(userId) + .pipe( + map((organizationKeysById) => + organizationKeysById ? organizationKeysById[organizationId] : null, + ), + ), + ); + + if (!orgKey) { + throw new Error("Organization key not found"); + } + + const contentEncryptionKey = await this.keyGeneratorService.createKey(512); + + const dataEncrypted = await this.encryptService.encryptString( + JSON.stringify(data), + contentEncryptionKey, + ); + + const wrappedEncryptionKey = await this.encryptService.wrapSymmetricKey( + contentEncryptionKey, + orgKey, + ); + + if (!dataEncrypted.encryptedString || !wrappedEncryptionKey.encryptedString) { + throw new Error("Encryption failed, encrypted strings are null"); + } + + const encryptedData = dataEncrypted.encryptedString; + const encryptionKey = wrappedEncryptionKey.encryptedString; + + const encryptedDataPacket = { + organizationId: organizationId, + encryptedData: encryptedData, + encryptionKey: encryptionKey, + }; + + return encryptedDataPacket; + } + + async decryptRiskInsightsReport( + organizationId: OrganizationId, + userId: UserId, + encryptedData: EncString, + wrappedKey: EncString, + parser: (data: Jsonify) => T, + ): Promise { + try { + const orgKey = await firstValueFrom( + this.keyService + .orgKeys$(userId) + .pipe( + map((organizationKeysById) => + organizationKeysById ? organizationKeysById[organizationId] : null, + ), + ), + ); + + if (!orgKey) { + throw new Error("Organization key not found"); + } + + const unwrappedEncryptionKey = await this.encryptService.unwrapSymmetricKey( + wrappedKey, + orgKey, + ); + + const dataUnencrypted = await this.encryptService.decryptString( + encryptedData, + unwrappedEncryptionKey, + ); + + const dataUnencryptedJson = parser(JSON.parse(dataUnencrypted)); + + return dataUnencryptedJson as T; + } catch { + return null; + } + } +} diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts index 3aa624f1e59..b066bc7c16c 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts @@ -1,14 +1,20 @@ import { mock } from "jest-mock-extended"; -import { firstValueFrom } from "rxjs"; +import { firstValueFrom, of } from "rxjs"; import { ZXCVBNResult } from "zxcvbn"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; +import { EncryptedString } from "@bitwarden/common/key-management/crypto/models/enc-string"; import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; +import { OrganizationId, UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; +import { GetRiskInsightsReportResponse } from "../models/password-health"; + import { mockCiphers } from "./ciphers.mock"; import { MemberCipherDetailsApiService } from "./member-cipher-details-api.service"; import { mockMemberCipherDetails } from "./member-cipher-details-api.service.spec"; +import { RiskInsightsApiService } from "./risk-insights-api.service"; +import { RiskInsightsEncryptionService } from "./risk-insights-encryption.service"; import { RiskInsightsReportService } from "./risk-insights-report.service"; describe("RiskInsightsReportService", () => { @@ -17,6 +23,12 @@ describe("RiskInsightsReportService", () => { const auditService = mock(); const cipherService = mock(); const memberCipherDetailsService = mock(); + const mockRiskInsightsApiService = mock(); + const mockRiskInsightsEncryptionService = mock({ + encryptRiskInsightsReport: jest.fn().mockResolvedValue("encryptedReportData"), + decryptRiskInsightsReport: jest.fn().mockResolvedValue("decryptedReportData"), + }); + const orgId = "orgId" as OrganizationId; beforeEach(() => { pwdStrengthService.getPasswordStrength.mockImplementation((password: string) => { @@ -37,11 +49,13 @@ describe("RiskInsightsReportService", () => { auditService, cipherService, memberCipherDetailsService, + mockRiskInsightsApiService, + mockRiskInsightsEncryptionService, ); }); it("should generate the raw data report correctly", async () => { - const result = await firstValueFrom(service.generateRawDataReport$("orgId")); + const result = await firstValueFrom(service.generateRawDataReport$(orgId)); expect(result).toHaveLength(6); @@ -67,7 +81,7 @@ describe("RiskInsightsReportService", () => { }); it("should generate the raw data + uri report correctly", async () => { - const result = await firstValueFrom(service.generateRawDataUriReport$("orgId")); + const result = await firstValueFrom(service.generateRawDataUriReport$(orgId)); expect(result).toHaveLength(11); @@ -90,7 +104,7 @@ describe("RiskInsightsReportService", () => { }); it("should generate applications health report data correctly", async () => { - const result = await firstValueFrom(service.generateApplicationsReport$("orgId")); + const result = await firstValueFrom(service.generateApplicationsReport$(orgId)); expect(result).toHaveLength(8); @@ -131,7 +145,7 @@ describe("RiskInsightsReportService", () => { }); it("should generate applications summary data correctly", async () => { - const reportResult = await firstValueFrom(service.generateApplicationsReport$("orgId")); + const reportResult = await firstValueFrom(service.generateApplicationsReport$(orgId)); const reportSummary = service.generateApplicationsSummary(reportResult); expect(reportSummary.totalMemberCount).toEqual(7); @@ -139,4 +153,104 @@ describe("RiskInsightsReportService", () => { expect(reportSummary.totalApplicationCount).toEqual(8); expect(reportSummary.totalAtRiskApplicationCount).toEqual(7); }); + + describe("saveRiskInsightsReport", () => { + it("should not update subjects if save response does not have id", async () => { + const organizationId = "orgId" as OrganizationId; + const userId = "userId" as UserId; + const report = [{ applicationName: "app1" }] as any; + + const encryptedReport = { + organizationId: organizationId as OrganizationId, + encryptedData: "encryptedData" as EncryptedString, + encryptionKey: "encryptionKey" as EncryptedString, + }; + + mockRiskInsightsEncryptionService.encryptRiskInsightsReport.mockResolvedValue( + encryptedReport, + ); + + const saveResponse = { id: "" }; // Simulating no ID in response + mockRiskInsightsApiService.saveRiskInsightsReport.mockReturnValue(of(saveResponse)); + + const reportSubjectSpy = jest.spyOn((service as any).riskInsightsReportSubject, "next"); + const summarySubjectSpy = jest.spyOn((service as any).riskInsightsSummarySubject, "next"); + + await service.saveRiskInsightsReport(organizationId, userId, report); + + expect(reportSubjectSpy).not.toHaveBeenCalled(); + expect(summarySubjectSpy).not.toHaveBeenCalled(); + }); + }); + + describe("getRiskInsightsReport", () => { + beforeEach(() => { + // Reset the mocks before each test + jest.clearAllMocks(); + }); + + it("should call riskInsightsApiService.getRiskInsightsReport with the correct organizationId", () => { + // we need to ensure that the api is invoked with the specified organizationId + // here it doesn't matter what the Api returns + const apiResponse = { + id: "reportId", + date: new Date().toISOString(), + organizationId: "orgId", + reportData: "encryptedReportData", + reportKey: "encryptionKey", + } as GetRiskInsightsReportResponse; + + const organizationId = "orgId" as OrganizationId; + const userId = "userId" as UserId; + mockRiskInsightsApiService.getRiskInsightsReport.mockReturnValue(of(apiResponse)); + service.getRiskInsightsReport(organizationId, userId); + expect(mockRiskInsightsApiService.getRiskInsightsReport).toHaveBeenCalledWith(organizationId); + expect(mockRiskInsightsEncryptionService.decryptRiskInsightsReport).toHaveBeenCalledWith( + organizationId, + userId, + expect.anything(), // encryptedData + expect.anything(), // wrappedKey + expect.any(Function), // parser + ); + }); + + it("should decrypt report and update subjects if response is present", async () => { + // Arrange: setup a mock response from the API + // and ensure the decryption service is called with the correct parameters + const organizationId = "orgId" as OrganizationId; + const userId = "userId" as UserId; + + const mockResponse = { + id: "reportId", + date: new Date().toISOString(), + organizationId: organizationId as OrganizationId, + reportData: "encryptedReportData", + reportKey: "encryptionKey", + } as GetRiskInsightsReportResponse; + + const decryptedReport = { + data: [{ foo: "bar" }], + }; + mockRiskInsightsApiService.getRiskInsightsReport.mockReturnValue(of(mockResponse)); + mockRiskInsightsEncryptionService.decryptRiskInsightsReport.mockResolvedValue( + decryptedReport, + ); + + const reportSubjectSpy = jest.spyOn((service as any).riskInsightsReportSubject, "next"); + + service.getRiskInsightsReport(organizationId, userId); + + // Wait for all microtasks to complete + await Promise.resolve(); + + expect(mockRiskInsightsEncryptionService.decryptRiskInsightsReport).toHaveBeenCalledWith( + organizationId, + userId, + expect.anything(), + expect.anything(), + expect.any(Function), + ); + expect(reportSubjectSpy).toHaveBeenCalledWith(decryptedReport.data); + }); + }); }); diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts index 182e8aa6882..23471327fe0 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts @@ -1,10 +1,23 @@ // FIXME: Update this file to be type safe // @ts-strict-ignore -import { concatMap, first, from, map, Observable, zip } from "rxjs"; +import { + BehaviorSubject, + concatMap, + first, + firstValueFrom, + from, + map, + Observable, + of, + switchMap, + zip, +} from "rxjs"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; +import { EncString } from "@bitwarden/common/key-management/crypto/models/enc-string"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; +import { OrganizationId, UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; @@ -21,9 +34,12 @@ import { WeakPasswordDetail, WeakPasswordScore, ApplicationHealthReportDetailWithCriticalFlagAndCipher, + ReportInsightsReportData, } from "../models/password-health"; import { MemberCipherDetailsApiService } from "./member-cipher-details-api.service"; +import { RiskInsightsApiService } from "./risk-insights-api.service"; +import { RiskInsightsEncryptionService } from "./risk-insights-encryption.service"; export class RiskInsightsReportService { constructor( @@ -31,8 +47,21 @@ export class RiskInsightsReportService { private auditService: AuditService, private cipherService: CipherService, private memberCipherDetailsApiService: MemberCipherDetailsApiService, + private riskInsightsApiService: RiskInsightsApiService, + private riskInsightsEncryptionService: RiskInsightsEncryptionService, ) {} + private riskInsightsReportSubject = new BehaviorSubject([]); + riskInsightsReport$ = this.riskInsightsReportSubject.asObservable(); + + private riskInsightsSummarySubject = new BehaviorSubject({ + totalMemberCount: 0, + totalAtRiskMemberCount: 0, + totalApplicationCount: 0, + totalAtRiskApplicationCount: 0, + }); + riskInsightsSummary$ = this.riskInsightsSummarySubject.asObservable(); + /** * Report data from raw cipher health data. * Can be used in the Raw Data diagnostic tab (just exclude the members in the view) @@ -40,7 +69,7 @@ export class RiskInsightsReportService { * @param organizationId * @returns Cipher health report data with members and trimmed uris */ - generateRawDataReport$(organizationId: string): Observable { + generateRawDataReport$(organizationId: OrganizationId): Observable { const allCiphers$ = from(this.cipherService.getAllFromApiForOrganization(organizationId)); const memberCiphers$ = from( this.memberCipherDetailsApiService.getMemberCipherDetails(organizationId), @@ -68,7 +97,9 @@ export class RiskInsightsReportService { * @param organizationId Id of the organization * @returns Cipher health report data flattened to the uris */ - generateRawDataUriReport$(organizationId: string): Observable { + generateRawDataUriReport$( + organizationId: OrganizationId, + ): Observable { const cipherHealthDetails$ = this.generateRawDataReport$(organizationId); const results$ = cipherHealthDetails$.pipe( map((healthDetails) => this.getCipherUriDetails(healthDetails)), @@ -84,7 +115,9 @@ export class RiskInsightsReportService { * @param organizationId Id of the organization * @returns The all applications health report data */ - generateApplicationsReport$(organizationId: string): Observable { + generateApplicationsReport$( + organizationId: OrganizationId, + ): Observable { const cipherHealthUriReport$ = this.generateRawDataUriReport$(organizationId); const results$ = cipherHealthUriReport$.pipe( map((uriDetails) => this.getApplicationHealthReport(uriDetails)), @@ -167,7 +200,7 @@ export class RiskInsightsReportService { async identifyCiphers( data: ApplicationHealthReportDetail[], - organizationId: string, + organizationId: OrganizationId, ): Promise { const cipherViews = await this.cipherService.getAllFromApiForOrganization(organizationId); @@ -181,6 +214,75 @@ export class RiskInsightsReportService { return dataWithCiphers; } + getRiskInsightsReport(organizationId: OrganizationId, userId: UserId): void { + this.riskInsightsApiService + .getRiskInsightsReport(organizationId) + .pipe( + switchMap((response) => { + if (!response) { + // Return an empty report and summary if response is falsy + return of({ + data: [], + summary: { + totalMemberCount: 0, + totalAtRiskMemberCount: 0, + totalApplicationCount: 0, + totalAtRiskApplicationCount: 0, + }, + }); + } + return from( + this.riskInsightsEncryptionService.decryptRiskInsightsReport( + organizationId, + userId, + new EncString(response.reportData), + new EncString(response.reportKey), + (data) => data as ReportInsightsReportData, + ), + ); + }), + ) + .subscribe({ + next: (decryptRiskInsightsReport) => { + this.riskInsightsReportSubject.next(decryptRiskInsightsReport.data); + this.riskInsightsSummarySubject.next(decryptRiskInsightsReport.summary); + }, + }); + } + + async saveRiskInsightsReport( + organizationId: OrganizationId, + userId: UserId, + report: ApplicationHealthReportDetail[], + ): Promise { + const riskReport = { + data: report, + }; + + const encryptedReport = await this.riskInsightsEncryptionService.encryptRiskInsightsReport( + organizationId, + userId, + riskReport, + ); + + const saveRequest = { + data: { + organizationId: organizationId, + date: new Date().toISOString(), + reportData: encryptedReport.encryptedData, + reportKey: encryptedReport.encryptionKey, + }, + }; + + const response = await firstValueFrom( + this.riskInsightsApiService.saveRiskInsightsReport(saveRequest, organizationId), + ); + + if (response && response.id) { + this.riskInsightsReportSubject.next(report); + } + } + /** * Associates the members with the ciphers they have access to. Calculates the password health. * Finds the trimmed uris. diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/access-intelligence.module.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/access-intelligence.module.ts index 25baf2e0fed..0fe1737bde3 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/access-intelligence.module.ts +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/access-intelligence.module.ts @@ -8,8 +8,10 @@ import { RiskInsightsDataService, RiskInsightsReportService, } from "@bitwarden/bit-common/dirt/reports/risk-insights/services"; +import { RiskInsightsEncryptionService } from "@bitwarden/bit-common/dirt/reports/risk-insights/services/risk-insights-encryption.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; +import { KeyGenerationService } from "@bitwarden/common/key-management/crypto"; 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"; @@ -38,6 +40,11 @@ import { RiskInsightsComponent } from "./risk-insights.component"; provide: RiskInsightsDataService, deps: [RiskInsightsReportService], }, + { + provide: RiskInsightsEncryptionService, + useClass: RiskInsightsEncryptionService, + deps: [KeyService, EncryptService, KeyGenerationService], + }, safeProvider({ provide: CriticalAppsService, useClass: CriticalAppsService, diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.ts index 75712c51a3d..e8a69ddec25 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.ts +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.ts @@ -16,6 +16,7 @@ import { ApplicationHealthReportDetailWithCriticalFlagAndCipher, ApplicationHealthReportSummary, } from "@bitwarden/bit-common/dirt/reports/risk-insights/models/password-health"; +import { RiskInsightsEncryptionService } from "@bitwarden/bit-common/dirt/reports/risk-insights/services/risk-insights-encryption.service"; import { getOrganizationById, OrganizationService, @@ -108,7 +109,7 @@ export class AllApplicationsComponent implements OnInit { if (data && organization) { const dataWithCiphers = await this.reportService.identifyCiphers( data, - organization.id, + organization.id as OrganizationId, ); return { @@ -145,6 +146,7 @@ export class AllApplicationsComponent implements OnInit { protected reportService: RiskInsightsReportService, private accountService: AccountService, protected criticalAppsService: CriticalAppsService, + protected riskInsightsEncryptionService: RiskInsightsEncryptionService, ) { this.searchControl.valueChanges .pipe(debounceTime(200), takeUntilDestroyed()) diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/critical-applications.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/critical-applications.component.ts index a94cc6d1441..2d28d38c29c 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/critical-applications.component.ts +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/critical-applications.component.ts @@ -56,15 +56,18 @@ export class CriticalApplicationsComponent implements OnInit { protected searchControl = new FormControl("", { nonNullable: true }); private destroyRef = inject(DestroyRef); protected loading = false; - protected organizationId: string; + protected organizationId: OrganizationId; protected applicationSummary = {} as ApplicationHealthReportSummary; noItemsIcon = Security; enableRequestPasswordChange = false; async ngOnInit() { - this.organizationId = this.activatedRoute.snapshot.paramMap.get("organizationId") ?? ""; + this.organizationId = this.activatedRoute.snapshot.paramMap.get( + "organizationId", + ) as OrganizationId; const userId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); this.criticalAppsService.setOrganizationId(this.organizationId as OrganizationId, userId); + // this.criticalAppsService.setOrganizationId(this.organizationId as OrganizationId); combineLatest([ this.dataService.applications$, this.criticalAppsService.getAppsListForOrg(this.organizationId as OrganizationId), diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts index e2fb4469ec4..0b32d311e41 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts @@ -67,7 +67,7 @@ export class RiskInsightsComponent implements OnInit { criticalAppsCount: number = 0; notifiedMembersCount: number = 0; - private organizationId: string | null = null; + private organizationId: OrganizationId = "" as OrganizationId; private destroyRef = inject(DestroyRef); isLoading$: Observable = new Observable(); isRefreshing$: Observable = new Observable(); @@ -94,10 +94,10 @@ export class RiskInsightsComponent implements OnInit { .pipe( takeUntilDestroyed(this.destroyRef), map((params) => params.get("organizationId")), - switchMap((orgId: string | null) => { + switchMap((orgId) => { if (orgId) { - this.organizationId = orgId; - this.dataService.fetchApplicationsReport(orgId); + this.organizationId = orgId as OrganizationId; + this.dataService.fetchApplicationsReport(this.organizationId); this.isLoading$ = this.dataService.isLoading$; this.isRefreshing$ = this.dataService.isRefreshing$; this.dataLastUpdated$ = this.dataService.dataLastUpdated$; diff --git a/libs/common/src/types/guid.ts b/libs/common/src/types/guid.ts index 5a6aaf2ce51..94aa44d64ba 100644 --- a/libs/common/src/types/guid.ts +++ b/libs/common/src/types/guid.ts @@ -20,6 +20,7 @@ export type OrganizationIntegrationConfigurationId = Opaque< string, "OrganizationIntegrationConfigurationId" >; +export type OrganizationReportId = Opaque; /** * A string representation of an empty guid. From db9061d120441a6f7cff5aba72e97ee65fef87a6 Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:15:29 -0700 Subject: [PATCH 019/249] [PM-25633] - [Defect] Fix premium badge in totp (#16373) * fixes to premium upgrade * revert change to dialog * handle premium upgrade prompt redirect in AC * use new input/output api --- .../billing/app/accounts/premium.component.html | 2 +- .../organizations/collections/vault.component.ts | 6 ++++++ .../premium-badge/premium-badge.component.ts | 14 +++++++++++--- .../login-credentials-view.component.html | 2 +- .../login-credentials-view.component.ts | 4 ++-- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/apps/desktop/src/billing/app/accounts/premium.component.html b/apps/desktop/src/billing/app/accounts/premium.component.html index d88602bed1e..c8179c6e486 100644 --- a/apps/desktop/src/billing/app/accounts/premium.component.html +++ b/apps/desktop/src/billing/app/accounts/premium.component.html @@ -61,7 +61,7 @@ > {{ "premiumPurchase" | i18n }} - +
`, imports: [BadgeModule, JslibModule], }) export class PremiumBadgeComponent { + /** Skip sending the premiumRequired message (default: false). */ + skipMessaging = input(false); + onClick = output(); + constructor(private messagingService: MessagingService) {} - premiumRequired() { + async promptForPremium() { + this.onClick.emit(); + if (this.skipMessaging()) { + return; + } this.messagingService.send("premiumRequired"); } } diff --git a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html index bc10c6f7014..d31f20f771b 100644 --- a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html +++ b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html @@ -124,7 +124,7 @@
{{ "verificationCodeTotp" | i18n }} - +
Date: Fri, 12 Sep 2025 09:49:41 +0200 Subject: [PATCH 020/249] Autosync the updated translations (#16394) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/ar/messages.json | 16 +++++----- apps/browser/src/_locales/az/messages.json | 16 +++++----- apps/browser/src/_locales/be/messages.json | 16 +++++----- apps/browser/src/_locales/bg/messages.json | 16 +++++----- apps/browser/src/_locales/bn/messages.json | 16 +++++----- apps/browser/src/_locales/bs/messages.json | 16 +++++----- apps/browser/src/_locales/ca/messages.json | 16 +++++----- apps/browser/src/_locales/cs/messages.json | 16 +++++----- apps/browser/src/_locales/cy/messages.json | 16 +++++----- apps/browser/src/_locales/da/messages.json | 16 +++++----- apps/browser/src/_locales/de/messages.json | 16 +++++----- apps/browser/src/_locales/el/messages.json | 16 +++++----- apps/browser/src/_locales/en_GB/messages.json | 16 +++++----- apps/browser/src/_locales/en_IN/messages.json | 16 +++++----- apps/browser/src/_locales/es/messages.json | 16 +++++----- apps/browser/src/_locales/et/messages.json | 16 +++++----- apps/browser/src/_locales/eu/messages.json | 16 +++++----- apps/browser/src/_locales/fa/messages.json | 16 +++++----- apps/browser/src/_locales/fi/messages.json | 16 +++++----- apps/browser/src/_locales/fil/messages.json | 16 +++++----- apps/browser/src/_locales/fr/messages.json | 20 ++++++------- apps/browser/src/_locales/gl/messages.json | 16 +++++----- apps/browser/src/_locales/he/messages.json | 16 +++++----- apps/browser/src/_locales/hi/messages.json | 16 +++++----- apps/browser/src/_locales/hr/messages.json | 16 +++++----- apps/browser/src/_locales/hu/messages.json | 16 +++++----- apps/browser/src/_locales/id/messages.json | 16 +++++----- apps/browser/src/_locales/it/messages.json | 16 +++++----- apps/browser/src/_locales/ja/messages.json | 16 +++++----- apps/browser/src/_locales/ka/messages.json | 16 +++++----- apps/browser/src/_locales/km/messages.json | 16 +++++----- apps/browser/src/_locales/kn/messages.json | 16 +++++----- apps/browser/src/_locales/ko/messages.json | 16 +++++----- apps/browser/src/_locales/lt/messages.json | 16 +++++----- apps/browser/src/_locales/lv/messages.json | 16 +++++----- apps/browser/src/_locales/ml/messages.json | 16 +++++----- apps/browser/src/_locales/mr/messages.json | 16 +++++----- apps/browser/src/_locales/my/messages.json | 16 +++++----- apps/browser/src/_locales/nb/messages.json | 16 +++++----- apps/browser/src/_locales/ne/messages.json | 16 +++++----- apps/browser/src/_locales/nl/messages.json | 16 +++++----- apps/browser/src/_locales/nn/messages.json | 16 +++++----- apps/browser/src/_locales/or/messages.json | 16 +++++----- apps/browser/src/_locales/pl/messages.json | 16 +++++----- apps/browser/src/_locales/pt_BR/messages.json | 16 +++++----- apps/browser/src/_locales/pt_PT/messages.json | 16 +++++----- apps/browser/src/_locales/ro/messages.json | 16 +++++----- apps/browser/src/_locales/ru/messages.json | 16 +++++----- apps/browser/src/_locales/si/messages.json | 16 +++++----- apps/browser/src/_locales/sk/messages.json | 16 +++++----- apps/browser/src/_locales/sl/messages.json | 16 +++++----- apps/browser/src/_locales/sr/messages.json | 16 +++++----- apps/browser/src/_locales/sv/messages.json | 16 +++++----- apps/browser/src/_locales/ta/messages.json | 16 +++++----- apps/browser/src/_locales/te/messages.json | 16 +++++----- apps/browser/src/_locales/th/messages.json | 16 +++++----- apps/browser/src/_locales/tr/messages.json | 30 +++++++++---------- apps/browser/src/_locales/uk/messages.json | 16 +++++----- apps/browser/src/_locales/vi/messages.json | 22 +++++++------- apps/browser/src/_locales/zh_CN/messages.json | 22 +++++++------- apps/browser/src/_locales/zh_TW/messages.json | 16 +++++----- 61 files changed, 503 insertions(+), 503 deletions(-) diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 1bb7d3433d2..535b5c70b31 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "لا يمكن لهذا المتصفح معالجة طلبات U2F في هذه النافذة المنبثقة. هل تريد فتح هذا المنبثق في نافذة جديدة بحيث يمكنك تسجيل الدخول باستخدام U2F؟" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "إظهار عداد الشارات" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 2a7659d9002..42f8918c7f2 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Bu brauzer bu açılan pəncərədə U2F tələblərini emal edə bilmir. U2F istifadə edərək giriş etmək üçün bu açılan pəncərəni yeni bir pəncərədə açmaq istəyirsiniz?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Nişan sayğacını göstər" @@ -5584,6 +5578,12 @@ "message": "Girişlərinizi güvənli şəkildə saxlamağınıza kömək etməsi üçün Parol yarat düyməsinə klikləyərək güclü və unikal parolları asanlıqla yaradın.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Bu səhifəyə baxmaq icazəniz yoxdur. Fərqli hesabla giriş etməyə çalışın." }, diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index e1af3400be1..4e70cf42c85 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Дадзены браўзер не можа апрацоўваць запыты U2F у гэтым усплывальным акне. Адкрыць гэта ўсплывальнае акно ў новым акне, каб мець магчымасць увайсці ў сістэму, выкарыстоўваючы U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Паказваць лічыльнік на значку" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index b70e5e6f825..8850c011c57 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Този браузър не поддържа заявки чрез U2F в такъв изскачащ прозорец. Искате ли да се отвори нов прозорец, за да може да се впишете чрез U2F?" }, - "enableFavicon": { - "message": "Показване на иконките на уеб сайтовете" - }, - "faviconDesc": { - "message": "Показване на разпознаваемо изображение до всеки запис." - }, - "faviconDescAlt": { - "message": "Показване на разпознаваемо изображение до всеки елемент. Прилага се към всички акаунти, в които сте вписан(а)." + "showIconsChangePasswordUrls": { + "message": "Показване на иконките на уеб сайтовете и извличане на адресите за смяна на паролата" }, "enableBadgeCounter": { "message": "Показване на брояч в значка" @@ -5584,6 +5578,12 @@ "message": "Създавайте лесно сложни и уникални пароли като щракнете върху бутона за генериране на парола, за да защитите данните си за вписване.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Относно тази настройка" + }, + "permitCipherDetailsDescription": { + "message": "Битуорден ще използва запазените адреси за вписване, за да определи коя иконка или адрес за смяна на паролата да се ползва, за да улесни работата Ви. Никакви данни не се събират или съхраняват, когато използвате тази услуга." + }, "noPermissionsViewPage": { "message": "Нямате права за преглед на тази страница. Опитайте да се впишете с друг акаунт." }, diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index ff36e30adb1..74c4d328ed7 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "ব্রাউজারটি এই পপআপ উইন্ডোতে U2F অনুরোধগুলি প্রক্রিয়া করতে পারে না। আপনি কি এই পপআপটি একটি নতুন উইন্ডোতে খুলতে চান যাতে আপনি U2F ব্যবহার করে লগ ইন করতে পারেন?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 8acfda7f422..e58d490a2f3 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 53c71129630..0ad129175ae 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Aquest navegador no pot processar sol·licituds U2F en aquesta finestra emergent. Voleu obrir l'emergent en una finestra nova per poder iniciar la sessió mitjançant U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Mostra el comptador insígnia" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index a8209ef4016..9e41f72f880 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Tento prohlížeč nemůže zpracovat požadavky U2F ve vyskakovacím okně. Chcete otevřít toto vyskakovací okno v novém okně, abyste se mohli přihlásit pomocí U2F?" }, - "enableFavicon": { - "message": "Zobrazit ikony webových stránek" - }, - "faviconDesc": { - "message": "Zobrazí rozeznatelný obrázek vedle každého přihlášení." - }, - "faviconDescAlt": { - "message": "Zobrazí rozeznatelný obrázek vedle každého přihlášení. Platí pro všechny přihlášené účty." + "showIconsChangePasswordUrls": { + "message": "Zobrazit ikony webových stránek a načíst URL adresy pro změnu hesla" }, "enableBadgeCounter": { "message": "Zobrazovat počet uložených přihlašovacích údajů na stránce" @@ -5584,6 +5578,12 @@ "message": "Jednoduše vytvořte silná a unikátní hesla klepnutím na tlačítko Generovat heslo, které Vám pomůže udržet Vaše přihlašovací údaje v bezpečí.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden bude používat uložené přihlašovací URI k identifikaci, která ikona nebo změna adresy URL by měla být použita pro zlepšení Vašeho zážitku. Při používání této služby nejsou shromažďovány ani ukládány žádné informace." + }, "noPermissionsViewPage": { "message": "Nemáte oprávnění k zobrazení této stránky. Zkuste se přihlásit jiným účtem." }, diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index 5f7c624cbda..8353c1d1422 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index e3a18790a85..f87ad6712ac 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Denne browser kan ikke behandle U2F-anmodninger i dette popup-vindue. Vil du åbne denne popup i et nyt vindue, så du kan logge ind ved hjælp af U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Vis badge-tæller" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 0836c82c0c2..81d1398f7b4 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Dieser Browser kann U2F-Anfragen in diesem Popup-Fenster nicht verarbeiten. Möchtest du dieses Popup in einem neuen Fenster öffnen, damit du dich mit U2F anmelden kannst?" }, - "enableFavicon": { - "message": "Website-Symbole anzeigen" - }, - "faviconDesc": { - "message": "Ein wiedererkennbares Bild neben jedem Login anzeigen." - }, - "faviconDescAlt": { - "message": "Ein wiedererkennbares Bild neben jedem Login anzeigen. Gilt für alle eingeloggten Konten." + "showIconsChangePasswordUrls": { + "message": "Website Symbole anzeigen und URLs zum Ändern von Passwörtern abrufen" }, "enableBadgeCounter": { "message": "Badge-Zähler anzeigen" @@ -5584,6 +5578,12 @@ "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den \"Passwort generieren\"-Button klickst, um dir zu helfen, deine Zugangsdaten sicher zu halten.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Über diese Einstellung" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden wird gespeicherte Login-URIs verwenden, um zu ermitteln, welches Symbol oder welche URL zum Ändern des Passworts verwendet werden soll, um Ihr Erlebnis zu verbessern. Bei der Nutzung dieses Dienstes werden keine Informationen erfasst oder gespeichert." + }, "noPermissionsViewPage": { "message": "Du hast keine Berechtigung, diese Seite anzuzeigen. Versuche dich mit einem anderen Konto anzumelden." }, diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index c2ea283e4d9..f62a8e6099e 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Αυτό το πρόγραμμα περιήγησης δεν μπορεί να επεξεργαστεί αιτήματα του U2F σε αυτό το αναδυόμενο παράθυρο. Θέλετε να ανοίξετε το αναδυόμενο σε νέο παράθυρο, ώστε να μπορείτε να συνδεθείτε χρησιμοποιώντας U2F;" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Εμφάνιση μετρητή εμβλημάτων" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index d5a554e0163..86dfdfd07b8 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this pop-up window. Do you want to open this pop-up in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognisable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index 7cf57ebd099..929150f2b81 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this pop-up window. Do you want to open this pop-up in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognisable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 4f9d67b15f1..b5fe43940c4 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Este navegador no puede procesar las peticiones U2F en esta ventana emergente. ¿Desea abrir esta ventana emergente en una nueva ventana para que pueda iniciar sesión usando U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Mostrar el contador numérico" @@ -5584,6 +5578,12 @@ "message": "Crea fácilmente contraseñas seguras y únicas haciendo clic en el botón Generar contraseña para ayudarte a mantener tus inicios de sesión seguros.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "No tienes permisos para ver esta página. Intenta iniciar sesión con otra cuenta." }, diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 68e57c06dbd..12352dc1945 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Kasutatav brauser ei suuda selles aknas U2F päringuid töödelda. Kas avan uue akna, et saaksid U2F abil sisse logida?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Kuva kirjete arvu" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index ea3f38764dd..2f0256d6b1c 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Nabigatzaile honek ezin ditu U2F eskaerak prozesatu leiho gainjarri honetan. Leiho berri batean ireki nahi duzu leiho gainjarri hau saioa U2F erabiliz hasi ahal izateko?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Erakutsi txartelen kontagailua" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index dde97ff4058..380b4240c25 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "این مرورگر نمی‌تواند درخواستهای U2F را در این پنجره پاپ آپ پردازش کند. آیا می‌خواهید این پنجره را در یک پنجره جدید باز کنید تا بتوانید با استفاده از U2F وارد شوید؟" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "نمایش شمارنده نشان" @@ -5584,6 +5578,12 @@ "message": "با کلیک روی دکمه تولید کلمه عبور، به‌راحتی کلمات عبور قوی و منحصر به‌ فرد ایجاد کنید تا ورودهای شما ایمن باقی بمانند.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "شما اجازه دسترسی به این صفحه را ندارید. لطفاً با حساب کاربری دیگری وارد شوید." }, diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 046769b9043..74e54268725 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Tämä selain ei voi käsitellä U2F-pyyntöjä tässä ponnahdusikkunassa. Haluatko avata näkymän uuteen ikkunaan vahvistaaksesi kirjautumisen U2F-suojausavaimella?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Näytä laskuri" @@ -5584,6 +5578,12 @@ "message": "Luo helposti vahvoja ja uniikkeja salasanoja klikkaamalla Luo salasana -painiketta. Sen avuilla voit pitää kirjautumisesi turvallisina.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Sinulla ei ole oikeuksia tähän sivuun. Yritä kirjautua sisään toisella tilillä." }, diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 8c24dd456e5..6c206386a60 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Ang browser na ito ay hindi maaaring prosesuhin ang mga hiling ng U2F sa popup window na ito. Nais mo bang buksan ang popup na ito sa isang bagong window upang ma-log in gamit ang U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Ipakita ang badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 039ba8142ef..7f3c75b2b5a 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Ce navigateur ne peut pas traiter les demandes U2F dans cette fenêtre popup. Voulez-vous ouvrir cette popup dans une nouvelle fenêtre afin de pouvoir vous connecter à l'aide de l'U2F ?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Afficher le compteur de badge" @@ -5584,6 +5578,12 @@ "message": "Créez facilement des mots de passe forts et uniques en cliquant sur le bouton Générer un mot de passe pour vous aider à sécuriser vos connexions.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Vous n'avez pas les autorisations pour consulter cette page. Essayez de vous connecter avec un autre compte." }, @@ -5601,10 +5601,10 @@ "message": "Next" }, "moreBreadcrumbs": { - "message": "More breadcrumbs", + "message": "Plus de fil d'Ariane", "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." }, "confirmKeyConnectorDomain": { - "message": "Confirm Key Connector domain" + "message": "Confirmez le domaine de Key Connector" } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index f8fbd03b759..ba7d6982962 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Este navegador non pode procesar peticións U2F nesta ventá emerxente. Queres convertila nunha ventá completa para poder continuar?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Amosar contador na icona" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 1cc76b23633..f84121f6372 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "דפדפן זה לא יכול לעבד בקשות U2F בחלון צף זה. האם ברצונך לפתוח את החלון הצף כחלון חדש רגיל כדי שתוכל להכנס באמצעות U2F?" }, - "enableFavicon": { - "message": "הצג סמלי אתר אינטרנט" - }, - "faviconDesc": { - "message": "הצג תמונה מוכרת ליד כל כניסה." - }, - "faviconDescAlt": { - "message": "הצג תמונה מוכרת ליד כל כניסה. חל על כל החשבונות המחוברים." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "הצג מונה סמל" @@ -5584,6 +5578,12 @@ "message": "צור בקלות סיסמאות חזקות וייחודיות על ידי לחיצה על הלחצן 'צור סיסמה' כדי לעזור לך לשמור את הכניסות שלך מאובטחות.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "אין לך הרשאות כדי לראות עמוד זה. נסה להיכנס עם חשבון אחר." }, diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index a9ebd8170bf..b6b23dd3f43 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "यह ब्राउज़र इस पॉपअप विंडो में U2F अनुरोधों को संसाधित नहीं कर सकता है।क्या आप इस पॉपअप को एक नई विंडो में खोलना चाहते हैं ताकि आप U2F का उपयोग करके लॉग इन कर सकें?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "बैज काउंटर दिखाएं" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 22bac18ecf7..df6db09b816 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Ovaj preglednik ne može obraditi U2F zahtjeve u ovom iskočnom prozoru. Želiš li otvoriti ovaj iskočni prozor u novom prozoru za prijavu putem U2F?" }, - "enableFavicon": { - "message": "Prikaži ikone mrežnih mjesta" - }, - "faviconDesc": { - "message": "Prikaži prepoznatljivu sliku pored svake prijave." - }, - "faviconDescAlt": { - "message": "Prikaži prepoznatljivu sliku pokraj svake prijave. Primjenjuje se na sve prijavljene račune." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Prikaži značku brojača" @@ -5584,6 +5578,12 @@ "message": "Jednostavno stvori jake i sigurne lozinke odabirom tipke Generiraj lozinku kako bi tvoje prijave ostale sigurne.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Nemaš dozvolu za pregled ove stranice. Pokušaj se prijaviti s drugim računom." }, diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index b44439f6578..eaf0ddb453f 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Ez a böngésző nem dolgozza fel az U2F kéréseket ebben a felbukkanó ablakban. Szeretnénk megnyitni a felbukkanó ablakot új böngészőablakban az U2F segítségével történő bejelentkezéshez?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Számláló jelvény megjelenítése" @@ -5584,6 +5578,12 @@ "message": "Könnyedén hozhatunk létre erős és egyedi jelszavakat a Jelszó generálása gombra kattintva, amely segít megőrizni a bejelentkezések biztonságát.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Nincs jogosultság az oldal megtekintéséhez. Próbáljunk meg másik fiókkal bejelentkezni." }, diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 81b1ba32229..a1fe7c3d75b 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Peramban ini tidak bisa memproses permintaan U2F di jendela popup ini. Apakah Anda ingin membuka popup ini di jendela baru sehingga Anda dapat masuk menggunakan U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Tampilkan hitungan di lencana" @@ -5584,6 +5578,12 @@ "message": "Buat kata sandi yang kuat dan unik dengan mudah dengan menekan pada tombol Buat kata sandi untuk membantu Anda menyimpan login Anda dengan aman.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Anda tidak memiliki izin untuk melihat halaman ini. Coba masuk dengan akun yang berbeda." }, diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index c05a3ad6c81..7ef741f41e8 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Questo browser non può elaborare richieste U2F in questo pop-up. Aprire questo pop-up in una nuova finestra per accedere usando U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Mostra badge contatore" @@ -5584,6 +5578,12 @@ "message": "Crea facilmente password forti e uniche cliccando sul pulsante 'Genera password' per aiutarti a mantenere al sicuro i tuoi login.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Non hai i permessi per visualizzare questa pagina. Prova ad accedere con un altro account." }, diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index d05c5a13128..cc49bfdb929 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "このブラウザーでは U2F 要求をポップアップウインドウでは実行できません。U2F でログインできるよう、新しいウインドウで開き直しますか?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "バッジカウンターを表示" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 68e2cf47230..81cdf158813 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index be0400906cc..0406e6e13cd 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index a4a56b0dd8f..af1e43d65be 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "ಈ ಬ್ರೌಸರ್ ಈ ಪಾಪ್ಅಪ್ ವಿಂಡೋದಲ್ಲಿ ಯು 2 ಎಫ್ ವಿನಂತಿಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ಪಾಪ್ಅಪ್ ಅನ್ನು ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಲು ನೀವು ಬಯಸುವಿರಾ, ಇದರಿಂದ ನೀವು ಯು 2 ಎಫ್ ಬಳಸಿ ಲಾಗ್ ಇನ್ ಆಗಬಹುದು." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index f27465a26f1..dc56f9606e0 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "이 브라우저의 팝업 창에서는 U2F 요청을 처리할 수 없습니다. U2F로 로그인할 수 있도록 이 창을 새 창에서 여시겠습니까?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "배지 갯수 표시" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 7ca0353af67..78cac846009 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Ši naršyklė negali apdoroti U2F prašymų šiame iššokančiame lange. Ar nori atidaryti šį iššokantį langą naujame lange, kad galėtum prisijungti naudodamas (-a) U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Rodyti ženkliukų skaitiklį" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 08a99915648..b8625e70541 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Šis pārlūks nevar apstrādāt U2F pieprasījumus šajā uznirstošajā logā. Vai atvērt to atsevišķā logā, lai varētu pieteikties, izmantojot U2F?" }, - "enableFavicon": { - "message": "Rādīt tīmekļvietņu ikonas" - }, - "faviconDesc": { - "message": "Attēlot atpazīstamu attēlu pie katra pieteikšanās vienuma." - }, - "faviconDescAlt": { - "message": "Parādīt atpazīstamu attēlu pie katra pieteikšanās vienuma. Attiecas uz visiem kontiem, kuros ir notikusi pieteikšanās." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Rādīt skaita nozīmīti" @@ -5584,6 +5578,12 @@ "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar pogu \"Izveidot paroli\", lai palīdzētu uzturēt pieteikšanās vienumus drošus.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Nav atļaujas apskatīt šo lapu. Jāmēģina pieteikties ar citu kontu." }, diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 00bd531945c..21a816a9354 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "ഈ ബ്ര pop സറിന് ഈ പോപ്പ്അപ്പ് വിൻഡോയിൽ U2F അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല. യു 2 എഫ് ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യാൻ ഈ പോപ്പ്അപ്പ് ഒരു പുതിയ വിൻഡോയിൽ തുറക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index d370a096583..a0a78170bba 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index be0400906cc..0406e6e13cd 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index a86b371e537..dffe6eae114 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Denne nettleseren kan ikke behandle U2F-forespørsler i dette popup-vinduet. Vil du åpne denne popupen i et nytt vindu, slik at du kan logge deg på med U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Vis merke-teller" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index be0400906cc..0406e6e13cd 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 87910f9172c..710fac3a7b2 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Deze browser kan U2F-verzoeken niet verwerken in dit popupvenster. Wilt je deze pop-up openen in een nieuw venster zodat je kunt inloggen met U2F?" }, - "enableFavicon": { - "message": "Websitepictogrammen weergeven" - }, - "faviconDesc": { - "message": "Een herkenbare afbeelding naast iedere login weergeven." - }, - "faviconDescAlt": { - "message": "Toon een herkenbare afbeelding naast elke login. Geldt voor alle ingelogde accounts." + "showIconsChangePasswordUrls": { + "message": "Websitepictogrammen weergeven en URL's voor wachtwoordwijzigingen ophalen" }, "enableBadgeCounter": { "message": "Teller weergeven" @@ -5584,6 +5578,12 @@ "message": "Maak eenvoudig sterke en unieke wachtwoorden door op de knop Wachtwoord genereren te klikken om je logins veilig te houden.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Over deze instelling" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden gebruikt opgeslagen login-URI's om te bepalen welk pictogram of URL voor het wijzigen van het wachtwoord moet worden gebruikt om je ervaring te verbeteren. Er wordt geen informatie verzameld of opgeslagen wanneer je deze service gebruikt." + }, "noPermissionsViewPage": { "message": "Je hebt geen rechten om deze pagina te bekijken. Probeer in te loggen met een ander account." }, diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index be0400906cc..0406e6e13cd 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index be0400906cc..0406e6e13cd 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 1be9d204250..9803c44ab69 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Przeglądarka nie może przetworzyć żądań U2F. Czy chcesz otworzyć nowe okno, aby zalogować się za pomocą U2F?" }, - "enableFavicon": { - "message": "Pokaż ikony stron internetowych" - }, - "faviconDesc": { - "message": "Pokaż rozpoznawalną ikonę obok danych logowania." - }, - "faviconDescAlt": { - "message": "Pokaż rozpoznawalną ikonę obok danych logowania. Dotyczy wszystkich zalogowanych kont." + "showIconsChangePasswordUrls": { + "message": "Pokaż ikony stron internetowych i pobierz adresy URL do zmiany hasła" }, "enableBadgeCounter": { "message": "Pokaż licznik na ikonie" @@ -5584,6 +5578,12 @@ "message": "Twórz silne i unikalne hasła, klikając przycisk Wygeneruj hasło, aby zapewnić bezpieczeństwo danych logowania.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O ustawieniu" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden użyje zapisanych adresów URL danych logowania, aby określić, która ikona lub adres URL zmiany hasła powinien zostać użyty w celu poprawy komfortu użytkowania. Usługa nie zapisuje żadnych danych." + }, "noPermissionsViewPage": { "message": "Nie masz uprawnień do przeglądania tej strony. Zaloguj się na inne konto." }, diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 7e192777a4b..6911afc8ef0 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Este navegador não pode processar requisições U2F nesta janela popup. Você quer abrir este popup em uma nova janela para que você possa entrar usando U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Mostrar contador de insígnia" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 605b3dd520c..5bd8f85dfdb 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Este navegador não pode processar pedidos U2F nesta janela pop-up. Pretende abrir este pop-up numa nova janela para poder iniciar sessão utilizando o U2F?" }, - "enableFavicon": { - "message": "Mostrar ícones do site" - }, - "faviconDesc": { - "message": "Mostrar uma imagem reconhecível junto a cada credencial." - }, - "faviconDescAlt": { - "message": "Mostrar uma imagem reconhecível junto a cada credencial. Aplica-se a todas as contas com sessão iniciada." + "showIconsChangePasswordUrls": { + "message": "Mostrar ícones de sites e recuperar URLs de alteração de palavra-passe" }, "enableBadgeCounter": { "message": "Mostrar distintivo de contador" @@ -5584,6 +5578,12 @@ "message": "Crie facilmente palavras-passe fortes e únicas clicando no botão Gerar palavra-passe para o ajudar a manter as suas credenciais seguras.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Acerca desta definição" + }, + "permitCipherDetailsDescription": { + "message": "O Bitwarden utilizará os URIs de credenciais guardadas para identificar qual o ícone ou URL de alteração de palavra-passe que deve ser utilizado para melhorar a sua experiência. Nenhuma informação é recolhida ou guardada quando utiliza este serviço." + }, "noPermissionsViewPage": { "message": "Não tem permissões para ver esta página. Tente iniciar sessão com uma conta diferente." }, diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 5c9655f9759..aa5418245b1 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Acest browser nu poate procesa cererile U2F în această fereastră pop-up. Doriți să deschideți acest pop-up într-o fereastră nouă, astfel încât să vă puteți conecta utilizând U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Afișați contorul de insigne" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index 72166573df6..be12a1b3f1c 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Этот браузер не может обрабатывать запросы U2F в этом всплывающем окне. Вы хотите открыть это всплывающее окно в новом окне, чтобы иметь возможность войти в систему, используя U2F?" }, - "enableFavicon": { - "message": "Показать значки сайтов" - }, - "faviconDesc": { - "message": "Отображать узнаваемое изображение рядом с каждым логином." - }, - "faviconDescAlt": { - "message": "Показывать узнаваемое изображение рядом с каждым логином. Применяется ко всем авторизованным аккаунтам." + "showIconsChangePasswordUrls": { + "message": "Показывать значки сайтов и извлекать URL изменения пароля" }, "enableBadgeCounter": { "message": "Показать счетчик на значке" @@ -5584,6 +5578,12 @@ "message": "Легко создавайте надежные и уникальные пароли, нажатием на кнопку 'Сгенерировать пароль', чтобы обеспечить безопасность ваших логинов.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Об этой настройке" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden будет использовать сохраненные URI логинов, чтобы определить, какой значок или URL для смены пароля следует использовать для улучшения вашего взаимодействия. При использовании этого сервиса никакая информация не собирается и не сохраняется." + }, "noPermissionsViewPage": { "message": "У вас нет прав для просмотра этой страницы. Попробуйте авторизоваться под другим аккаунтом." }, diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index c0edd60f344..80468ba048b 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "මෙම බ්රවුසරයට මෙම උත්පතන කවුළුව තුළ U2F ඉල්ලීම් සැකසීමට නොහැක. ඔබට U2F භාවිතයෙන් පිවිසිය හැකි වන පරිදි නව කවුළුවක මෙම උත්පතන විවෘත කිරීමට අවශ්යද?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 6f1f578b14f..45e94ba34e2 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Tento prehliadač nedokáže spracovať U2F požiadavku v popup okne. Chcete ho otvoriť v novom okne aby ste sa mohli prihlásiť pomocou U2F?" }, - "enableFavicon": { - "message": "Zobraziť favikony stránok" - }, - "faviconDesc": { - "message": "Pri každom prihlásení zobrazí rozpoznateľný obrázok." - }, - "faviconDescAlt": { - "message": "Vedľa každého účtu zobraziť rozpoznateľný obrázok. Použije sa na všetky prihlásené účty." + "showIconsChangePasswordUrls": { + "message": "Zobraziť ikony webových stránok a načítať adresy URL na zmenu hesla" }, "enableBadgeCounter": { "message": "Zobraziť počítadlo na ikone" @@ -5584,6 +5578,12 @@ "message": "Jednoducho vytvorte silné a jedinečné heslá kliknutím na tlačidlo Generovať heslo, aby ste zabezpečili prihlasovacie údaje.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden použije uložené prihlasovacie URI na určenie ikony alebo adresy URL na zmenu hesla, ktoré by sa mali použiť na zlepšenie vášho zážitku. Pri používaní tejto služby sa nezbierajú ani neukladajú žiadne informácie." + }, "noPermissionsViewPage": { "message": "Nemáte oprávnenie na zobrazenie tejto stránky. Skúste sa prihlásiť pomocou iného účtu." }, diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 1f2295f2c59..440bc93c512 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Ta spletni brskalnik ne more obdelati U2F zahteve v tem pojavnem oknu. Želite odpreti to pojavno okno v novem oknu, tako, da se lahko prijavite z U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index e48e10ce1b6..504cb6f824c 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Овај прегледач не може да обрађује U2F захтеве у овом искачућем прозору. Да ли желите да отворите овај искачући прозор у новом прозору како бисте могли да се пријавите користећи U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Прикажи бедж са бројачем" @@ -5584,6 +5578,12 @@ "message": "Лако креирајте снажне и јединствене лозинке кликом на дугме „Генерирате лозинку“ да вам помогне да чувате своје пријаве на сигурно.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Немате дозволе за преглед ове странице. Покушајте да се пријавите са другим налогом." }, diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 1fb9498f2df..8b614e3bee8 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Den här webbläsaren kan inte bearbeta U2F-förfrågningar i detta popup-fönster. Vill du öppna ett nytt fönster så att du kan logga in med U2F?" }, - "enableFavicon": { - "message": "Visa webbplatsikoner" - }, - "faviconDesc": { - "message": "Visa en igenkännbar bild bredvid varje inloggning." - }, - "faviconDescAlt": { - "message": "Visa en igenkännbar bild bredvid varje inloggning. Gäller för alla inloggade konton." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Visa aktivitetsräknaren" @@ -5584,6 +5578,12 @@ "message": "Skapa enkelt starka och unika lösenord genom att klicka på knappen Generera lösenord så att du kan hålla dina inloggningar säkra.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Du har inte behörighet att visa den här sidan. Försök att logga in med ett annat konto." }, diff --git a/apps/browser/src/_locales/ta/messages.json b/apps/browser/src/_locales/ta/messages.json index 1c6d7bc4528..300a249283c 100644 --- a/apps/browser/src/_locales/ta/messages.json +++ b/apps/browser/src/_locales/ta/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "இந்த உலாவி இந்தப் பாப்அப் சாளரத்தில் U2F கோரிக்கைகளை செயலாக்க முடியாது. U2F ஐப் பயன்படுத்தி உள்நுழைய, இந்த பாப்அப்பை புதிய சாளரத்தில் திறக்க விரும்புகிறீர்களா?" }, - "enableFavicon": { - "message": "வலைத்தள ஐகான்களைக் காட்டு" - }, - "faviconDesc": { - "message": "ஒவ்வொரு உள்நுழைவுக்கும் அருகில் அடையாளம் காணக்கூடிய படத்தைக் காட்டு." - }, - "faviconDescAlt": { - "message": "ஒவ்வொரு உள்நுழைவுக்கும் அருகில் அடையாளம் காணக்கூடிய படத்தைக் காட்டு. உள்நுழைந்துள்ள அனைத்து கணக்குகளுக்கும் பொருந்தும்." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "பேட்ஜ் கவுண்டரைக் காட்டு" @@ -5584,6 +5578,12 @@ "message": "உங்கள் உள்நுழைவுகளைப் பாதுகாப்பாக வைத்திருக்க கடவுச்சொல்லை உருவாக்கு பொத்தானை கிளிக் செய்வதன் மூலம் வலுவான மற்றும் தனித்துவமான கடவுச்சொற்களை எளிதாக உருவாக்கலாம்.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "இந்த பக்கத்தைக் காண உங்களுக்கு அனுமதிகள் இல்லை. வேறு கணக்குடன் உள்நுழைய முயற்சிக்கவும்." }, diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index be0400906cc..0406e6e13cd 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index d2351c8d943..a88f75d4836 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Show badge counter" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index f8fd3f08945..a56984d77ba 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Bu tarayıcı bu açılır pencerede U2F isteklerini işleyemiyor. U2F kullanarak giriş yapmak için bu açılır pencereyi yeni bir pencerede açmak ister misiniz?" }, - "enableFavicon": { - "message": "Web sitesi simgelerini göster" - }, - "faviconDesc": { - "message": "Hesapların yanında tanıdık görseller göster." - }, - "faviconDescAlt": { - "message": "Her hesabın yanında tanınabilir bir resim göster. Oturum açmış tüm hesaplar için geçerlidir." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Rozet sayacını göster" @@ -4382,11 +4376,11 @@ "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Düzenli ifadeler\" gelişmiş bir seçenektir ve kimlik bilgilerini açığa çıkarma riski taşır.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "\"İle başla\" gelişmiş bir seçenektir ve kimlik bilgilerini açığa çıkarma riski taşır.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { @@ -4989,7 +4983,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "$LABEL$'i yeniden sıralayın. Kayıtı yukarı veya aşağı taşımak için ok tuşunu kullanın.", "placeholders": { "label": { "content": "$1", @@ -4998,10 +4992,10 @@ } }, "reorderWebsiteUriButton": { - "message": "Reorder website URI. Use arrow key to move item up or down." + "message": "Web sitesi URI'sini yeniden sıralayın. Kayıtı yukarı veya aşağı taşımak için ok tuşunu kullanın." }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ yukarı taşındı, konum: $LENGTH$'in $INDEX$'i", "placeholders": { "label": { "content": "$1", @@ -5079,7 +5073,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ aşağı taşındı, konum: $LENGTH$'in $INDEX$'i", "placeholders": { "label": { "content": "$1", @@ -5584,6 +5578,12 @@ "message": "Güvenli oturumlar açmaya yardımcı olmak için Parola Oluştur düğmesine tıklayarak güçlü ve benzersiz parolalar oluşturun.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Bu sayfayı görüntüleme izniniz yok. Farklı bir hesapla giriş yapmayı deneyin." }, @@ -5601,7 +5601,7 @@ "message": "İleri" }, "moreBreadcrumbs": { - "message": "More breadcrumbs", + "message": "Daha fazla gezinme izi", "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." }, "confirmKeyConnectorDomain": { diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 7da89bc0f6a..5de2bf5cf31 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Цей браузер не може обробити U2F запити в цьому виринаючому вікні. Хочете відкрити його у новому вікні, щоб ви змогли увійти з використанням U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Показувати лічильник" @@ -5584,6 +5578,12 @@ "message": "Легко створюйте надійні та унікальні паролі, натиснувши кнопку Генерувати пароль, щоб зберегти свої записи в безпеці.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "У вас немає дозволу переглядати цю сторінку. Спробуйте ввійти з іншим обліковим записом." }, diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index e5121753adc..1e3621330e5 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -557,7 +557,7 @@ "message": "Xem" }, "viewLogin": { - "message": "View login" + "message": "Xem đăng nhập" }, "noItemsInList": { "message": "Không có mục nào để liệt kê." @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "Trình duyệt này không thể xử lý các yêu cầu U2F trong cửa sổ popup này. Bạn có muốn mở popup này trong cửa sổ mới để bạn có thể đăng nhập thông qua U2F?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "Hiển thị biểu tượng bộ đếm" @@ -5456,10 +5450,10 @@ "message": "Thay đổi mật khẩu có rủi ro" }, "changeAtRiskPasswordAndAddWebsite": { - "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + "message": "Thông tin đăng nhập này có rủi ro và thiếu một trang web. Hãy thêm trang web và đổi mật khẩu để tăng cường bảo mật." }, "missingWebsite": { - "message": "Missing website" + "message": "Thiếu trang web" }, "settingsVaultOptions": { "message": "Tùy chọn kho" @@ -5584,6 +5578,12 @@ "message": "Dễ dàng tạo mật khẩu mạnh và duy nhất bằng cách nhấp vào Trình tạo mật khẩu để giúp bạn bảo vệ tài khoản đăng nhập của mình.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Bạn không có quyền truy cập vào trang này. Hãy thử đăng nhập bằng tài khoản khác." }, diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 23d20abd4f9..a70d0b86636 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "此浏览器无法处理此弹出窗口中的 U2F 请求。您想要在新窗口中打开此弹出窗口吗?" }, - "enableFavicon": { - "message": "显示网站图标" - }, - "faviconDesc": { - "message": "在每个登录项目旁边显示一个可识别的图像。" - }, - "faviconDescAlt": { - "message": "在每个登录的旁边显示一个可识别的图像。适用于所有已登录的账户。" + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "显示角标计数器" @@ -3377,10 +3371,10 @@ "message": "需要高级版订阅" }, "organizationIsDisabled": { - "message": "组织已停用。" + "message": "组织已暂停。" }, "disabledOrganizationFilterError": { - "message": "无法访问已停用组织中的项目。请联系您的组织所有者寻求帮助。" + "message": "无法访问已暂停组织中的项目。请联系您的组织所有者寻求帮助。" }, "loggingInTo": { "message": "正在登录到 $DOMAIN$", @@ -5456,7 +5450,7 @@ "message": "更改有风险的密码" }, "changeAtRiskPasswordAndAddWebsite": { - "message": "此登录存在风险且缺少网站。请添加一个网站并更改密码以增强安全性。" + "message": "此登录存在风险且缺少网站。请添加网站并更改密码以增强安全性。" }, "missingWebsite": { "message": "缺少网站" @@ -5584,6 +5578,12 @@ "message": "点击「生成密码」按钮,轻松创建强大且唯一的密码,帮助您保持登录安全。", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "您没有查看此页面的权限。请尝试使用其他账户登录。" }, diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index dddc938b071..ec460352036 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -1763,14 +1763,8 @@ "popupU2fCloseMessage": { "message": "此瀏覽器不能在彈出式視窗中處理 U2F 要求。是否在新視窗開啟此對話方塊,以便您能夠使用 U2F 登入?" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableBadgeCounter": { "message": "顯示圖示計數器" @@ -5584,6 +5578,12 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, From d33fd5ff681e42e492a46bd53e810e0c8b689d38 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 12 Sep 2025 09:57:04 +0200 Subject: [PATCH 021/249] Autosync the updated translations (#16393) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/desktop/src/locales/af/messages.json | 19 ++++-- apps/desktop/src/locales/ar/messages.json | 19 ++++-- apps/desktop/src/locales/az/messages.json | 19 ++++-- apps/desktop/src/locales/be/messages.json | 19 ++++-- apps/desktop/src/locales/bg/messages.json | 19 ++++-- apps/desktop/src/locales/bn/messages.json | 19 ++++-- apps/desktop/src/locales/bs/messages.json | 19 ++++-- apps/desktop/src/locales/ca/messages.json | 19 ++++-- apps/desktop/src/locales/cs/messages.json | 19 ++++-- apps/desktop/src/locales/cy/messages.json | 19 ++++-- apps/desktop/src/locales/da/messages.json | 19 ++++-- apps/desktop/src/locales/de/messages.json | 19 ++++-- apps/desktop/src/locales/el/messages.json | 19 ++++-- apps/desktop/src/locales/en_GB/messages.json | 19 ++++-- apps/desktop/src/locales/en_IN/messages.json | 19 ++++-- apps/desktop/src/locales/eo/messages.json | 19 ++++-- apps/desktop/src/locales/es/messages.json | 19 ++++-- apps/desktop/src/locales/et/messages.json | 19 ++++-- apps/desktop/src/locales/eu/messages.json | 19 ++++-- apps/desktop/src/locales/fa/messages.json | 19 ++++-- apps/desktop/src/locales/fi/messages.json | 19 ++++-- apps/desktop/src/locales/fil/messages.json | 19 ++++-- apps/desktop/src/locales/fr/messages.json | 63 +++++++++++--------- apps/desktop/src/locales/gl/messages.json | 19 ++++-- apps/desktop/src/locales/he/messages.json | 19 ++++-- apps/desktop/src/locales/hi/messages.json | 19 ++++-- apps/desktop/src/locales/hr/messages.json | 19 ++++-- apps/desktop/src/locales/hu/messages.json | 19 ++++-- apps/desktop/src/locales/id/messages.json | 19 ++++-- apps/desktop/src/locales/it/messages.json | 19 ++++-- apps/desktop/src/locales/ja/messages.json | 19 ++++-- apps/desktop/src/locales/ka/messages.json | 19 ++++-- apps/desktop/src/locales/km/messages.json | 19 ++++-- apps/desktop/src/locales/kn/messages.json | 19 ++++-- apps/desktop/src/locales/ko/messages.json | 19 ++++-- apps/desktop/src/locales/lt/messages.json | 19 ++++-- apps/desktop/src/locales/lv/messages.json | 19 ++++-- apps/desktop/src/locales/me/messages.json | 19 ++++-- apps/desktop/src/locales/ml/messages.json | 19 ++++-- apps/desktop/src/locales/mr/messages.json | 19 ++++-- apps/desktop/src/locales/my/messages.json | 19 ++++-- apps/desktop/src/locales/nb/messages.json | 19 ++++-- apps/desktop/src/locales/ne/messages.json | 19 ++++-- apps/desktop/src/locales/nl/messages.json | 19 ++++-- apps/desktop/src/locales/nn/messages.json | 19 ++++-- apps/desktop/src/locales/or/messages.json | 19 ++++-- apps/desktop/src/locales/pl/messages.json | 19 ++++-- apps/desktop/src/locales/pt_BR/messages.json | 19 ++++-- apps/desktop/src/locales/pt_PT/messages.json | 19 ++++-- apps/desktop/src/locales/ro/messages.json | 19 ++++-- apps/desktop/src/locales/ru/messages.json | 19 ++++-- apps/desktop/src/locales/si/messages.json | 19 ++++-- apps/desktop/src/locales/sk/messages.json | 19 ++++-- apps/desktop/src/locales/sl/messages.json | 19 ++++-- apps/desktop/src/locales/sr/messages.json | 19 ++++-- apps/desktop/src/locales/sv/messages.json | 19 ++++-- apps/desktop/src/locales/ta/messages.json | 19 ++++-- apps/desktop/src/locales/te/messages.json | 19 ++++-- apps/desktop/src/locales/th/messages.json | 19 ++++-- apps/desktop/src/locales/tr/messages.json | 19 ++++-- apps/desktop/src/locales/uk/messages.json | 19 ++++-- apps/desktop/src/locales/vi/messages.json | 35 +++++++---- apps/desktop/src/locales/zh_CN/messages.json | 23 ++++--- apps/desktop/src/locales/zh_TW/messages.json | 19 ++++-- 64 files changed, 928 insertions(+), 352 deletions(-) diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index 5622ec1e6eb..041a7236f89 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -1305,11 +1305,8 @@ "message": "Wis gekopieerde waardes outomaties vanuit u knipbord.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimaliseer na stelsellaai" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/ar/messages.json b/apps/desktop/src/locales/ar/messages.json index c143c50f9c8..a8d438f5d82 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -1305,11 +1305,8 @@ "message": "مسح القيم المنسوخة تلقائيًا من حافظتك.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "تصغير إلى أيقونة شريط المهام" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index ddb16691a95..95d39ed48fc 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -1305,11 +1305,8 @@ "message": "Kopyalanmış dəyərləri lövhədən avtomatik təmizlə.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Bildiriş sahəsi ikonuna kiçilt" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Riskli parolları dəyişdir" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "\"Yalnız baxma\" icazələrinə sahib kolleksiyaları silə bilməzsiniz: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Kolleksiyalara təyin et" }, diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 23c34a55864..b49657945a1 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -1305,11 +1305,8 @@ "message": "Аўтаматычна ачышчаць скапіяваныя значэнні з вашага буфера абмену.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Згарнуць у вобласць апавяшчэнняў" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index e288b2c59ac..d1f8af3cfee 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -1305,11 +1305,8 @@ "message": "Автоматично изчистване на буфера след поставяне на стойността.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Показване на иконките на уеб сайтовете" - }, - "faviconDesc": { - "message": "Показване на разпознаваемо изображение до всеки запис." + "showIconsChangePasswordUrls": { + "message": "Показване на иконките на уеб сайтовете и извличане на адресите за смяна на паролата" }, "enableMinToTray": { "message": "Смаляване в областта за уведомяване" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Промяна на парола в риск" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Този елемент за вписване е в риск и в него липсва уеб сайт. Добавете уеб сайт и сменете паролата, за по-добра сигурност." + }, + "missingWebsite": { + "message": "Липсващ уеб сайт" + }, "cannotRemoveViewOnlyCollections": { "message": "Не можете да премахвате колекции с права „Само за преглед“: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "Относно тази настройка" + }, + "permitCipherDetailsDescription": { + "message": "Битуорден ще използва запазените адреси за вписване, за да определи коя иконка или адрес за смяна на паролата да се ползва, за да улесни работата Ви. Никакви данни не се събират или съхраняват, когато използвате тази услуга." + }, "assignToCollections": { "message": "Свързване с колекции" }, diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index 8405aa6642e..69ec27ed805 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -1305,11 +1305,8 @@ "message": "আপনার ক্লিপবোর্ড থেকে অনুলিপিত মানগুলি স্বয়ংক্রিয়ভাবে সাফ করে।", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/bs/messages.json b/apps/desktop/src/locales/bs/messages.json index afad9d9d456..aceab83513b 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatski očistiti kopirane vrijednosti iz vaše međumemorije.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimiziraj kao ikonicu u sistemskoj traci" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/ca/messages.json b/apps/desktop/src/locales/ca/messages.json index 46b7418784a..17c9a2f30b6 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -1305,11 +1305,8 @@ "message": "Esborra automàticament els valors copiats del porta-retalls.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimitza a icona en la safata" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assigna a col·leccions" }, diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index 6e5e69fb3b2..1a548543825 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -1305,11 +1305,8 @@ "message": "Automaticky vymaže zkopírované hodnoty z Vaší schránky.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Zobrazit ikony webových stránek" - }, - "faviconDesc": { - "message": "Zobrazí rozeznatelný obrázek vedle každého přihlášení." + "showIconsChangePasswordUrls": { + "message": "Zobrazit ikony webových stránek a načíst URL adresy pro změnu hesla" }, "enableMinToTray": { "message": "Minimalizovat do systémové lišty" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Změnit ohrožené heslo" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Tyto přihlašovací údaje jsou ohrožené a chybí jim webová stránka. Přidejte webovou stránku a změňte heslo pro větší bezpečnost." + }, + "missingWebsite": { + "message": "Chybějící webová stránka" + }, "cannotRemoveViewOnlyCollections": { "message": "Nemůžete odebrat sbírky s oprávněními jen pro zobrazení: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden bude používat uložené přihlašovací URI k identifikaci, která ikona nebo změna adresy URL by měla být použita pro zlepšení Vašeho zážitku. Při používání této služby nejsou shromažďovány ani ukládány žádné informace." + }, "assignToCollections": { "message": "Přiřadit ke sbírkám" }, diff --git a/apps/desktop/src/locales/cy/messages.json b/apps/desktop/src/locales/cy/messages.json index 9546bdb1bf2..604c38fd9a7 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/da/messages.json b/apps/desktop/src/locales/da/messages.json index 984268a2c67..384e4a463a5 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -1305,11 +1305,8 @@ "message": "Ryd automatisk kopierede data fra udklipsholderen.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimér som bakkeikon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index 9128148a5af..642e2859e7e 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -1305,11 +1305,8 @@ "message": "Kopierten Inhalt automatisch aus der Zwischenablage löschen.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "In Infobereich-Symbol minimieren" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Gefährdetes Passwort ändern" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Du kannst Sammlungen mit Leseberechtigung nicht entfernen: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Sammlungen zuweisen" }, diff --git a/apps/desktop/src/locales/el/messages.json b/apps/desktop/src/locales/el/messages.json index 586a23069dc..e4ab1a8fdd8 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -1305,11 +1305,8 @@ "message": "Αυτόματη εκκαθάριση αντιγραμμένων τιμών προχείρου.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Ελαχιστοποίηση σε εικονίδιο περιοχής ειδοποιήσεων" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index 48181d5a803..66062c6ce17 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimise to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/en_IN/messages.json b/apps/desktop/src/locales/en_IN/messages.json index 01c2881f6a0..61a4f7fd8e3 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimise to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/eo/messages.json b/apps/desktop/src/locales/eo/messages.json index 0e6e6d20197..f47e199e34c 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -1305,11 +1305,8 @@ "message": "Aŭtomate forviŝi la kopiitajn valorojn el via tondujo.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/es/messages.json b/apps/desktop/src/locales/es/messages.json index 2f4559d3fa2..e5e9c86ec9f 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -1305,11 +1305,8 @@ "message": "Borrar automáticamente los valores copiados de su portapapeles.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimizar a icono en la bandeja" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Cambiar contraseña en riesgo" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "No puedes eliminar colecciones con permisos de solo Visualización: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Asignar a colecciones" }, diff --git a/apps/desktop/src/locales/et/messages.json b/apps/desktop/src/locales/et/messages.json index c6a25016a57..115746d190e 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -1305,11 +1305,8 @@ "message": "Puhastab automaatselt lõikelauale kopeeritud sisu.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimeeri tegumiribale" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/eu/messages.json b/apps/desktop/src/locales/eu/messages.json index cbc2b6ff42a..c633e54d605 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -1305,11 +1305,8 @@ "message": "Ezabatu automatikoki arbelean kopiatutako balioak.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimizatu erretiluko ikonora" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/fa/messages.json b/apps/desktop/src/locales/fa/messages.json index 43af55b02dc..31c8cdee00a 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -1305,11 +1305,8 @@ "message": "به صورت خودکار، مقادیر کپی شده را از حافظه موقت پاک کن.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "کوچک کردن به نماد سینی" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "تغییر کلمه عبور در معرض خطر" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "نمی‌توانید مجموعه‌هایی را که فقط دسترسی مشاهده دارند حذف کنید: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "اختصاص به مجموعه‌ها" }, diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index 38a266c90a7..4cc0a6b54b4 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -1305,11 +1305,8 @@ "message": "Poista kopioidut arvot leikepöydältä automaattisesti.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Pienennä ilmoitusalueelle" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Vaihda vaarantunut salasana" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index b824145e001..390c98564c8 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -1305,11 +1305,8 @@ "message": "Awtomatikong linisin ang mga kopya mula sa iy.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "I-minimise sa icon ng tray" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/fr/messages.json b/apps/desktop/src/locales/fr/messages.json index 6a7697de8f4..d4adb97b7a7 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -1232,7 +1232,7 @@ "message": "Authentification à deux facteurs" }, "vaultTimeoutHeader": { - "message": "Vault timeout" + "message": "Délai d'expiration du coffre" }, "vaultTimeout": { "message": "Délai d'expiration du coffre" @@ -1241,7 +1241,7 @@ "message": "Délai dépassé" }, "vaultTimeoutAction1": { - "message": "Timeout action" + "message": "Expiration de l'action" }, "vaultTimeoutDesc": { "message": "Choisissez quand votre coffre réalisera l'action d'expiration." @@ -1305,11 +1305,8 @@ "message": "Effacer automatiquement de votre presse-papiers les valeurs copiées.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Affiche les icônes du site web et récupère les URL de changement de mot de passe" }, "enableMinToTray": { "message": "Réduire dans la zone de notification" @@ -2518,10 +2515,10 @@ "message": "Le délai d'expiration de votre coffre dépasse les restrictions définies par votre organisation." }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Enterprise policy requirements have been applied to your timeout options" + "message": "Les exigences de la politique de sécurité d'Entreprise ont été appliquées à vos options de délai d'expiration" }, "vaultTimeoutPolicyInEffect": { - "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", + "message": "Les politiques de sécurité de votre organisation ont défini le délai d'expiration de votre coffre à $HOURS$ heure(s) et $MINUTES$ minute(s) maximum.", "placeholders": { "hours": { "content": "$1", @@ -2534,7 +2531,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "message": "Le délai d'expiration dépasse la restriction définie par votre organisation : $HOURS$ heure(s) et $MINUTES$ minute(s) maximum", "placeholders": { "hours": { "content": "$1", @@ -3037,7 +3034,7 @@ } }, "loginRequestApprovedForEmailOnDevice": { - "message": "Login request approved for $EMAIL$ on $DEVICE$", + "message": "Demande de connexion approuvée pour $EMAIL$ sur $DEVICE$", "placeholders": { "email": { "content": "$1", @@ -3050,10 +3047,10 @@ } }, "youDeniedLoginAttemptFromAnotherDevice": { - "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + "message": "Vous avez refusé une tentative de connexion depuis un autre appareil. Si c'était vous, essayez de vous reconnecter avec l'appareil." }, "webApp": { - "message": "Web app" + "message": "Application web" }, "mobile": { "message": "Mobile", @@ -3064,7 +3061,7 @@ "description": "Browser extension/addon" }, "desktop": { - "message": "Desktop", + "message": "Bureau", "description": "Desktop app" }, "cli": { @@ -3075,10 +3072,10 @@ "description": "Software Development Kit" }, "server": { - "message": "Server" + "message": "Serveur" }, "loginRequest": { - "message": "Login request" + "message": "Demande de connexion" }, "deviceType": { "message": "Type d'appareil" @@ -3492,10 +3489,10 @@ "message": "Sélectionnez une collection" }, "importTargetHintCollection": { - "message": "Select this option if you want the imported file contents moved to a collection" + "message": "Sélectionnez cette option si vous voulez que le contenu du fichier importé soit déplacé vers une collection" }, "importTargetHintFolder": { - "message": "Select this option if you want the imported file contents moved to a folder" + "message": "Sélectionnez cette option si vous voulez que le contenu du fichier importé soit déplacé vers un dossier" }, "importUnassignedItemsError": { "message": "Le fichier contient des éléments non assignés." @@ -3592,10 +3589,10 @@ "message": "Veuillez continuer à vous connecter en utilisant les identifiants de votre entreprise." }, "importDirectlyFromBrowser": { - "message": "Import directly from browser" + "message": "Importer directement du navigateur" }, "browserProfile": { - "message": "Browser Profile" + "message": "Profil du navigateur" }, "seeDetailedInstructions": { "message": "Consultez les instructions détaillées sur notre site d'aide à", @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Changer le mot de passe à risque" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Cet identifiant est à risques et manque un site web. Ajoutez un site web et changez le mot de passe pour une meilleure sécurité." + }, + "missingWebsite": { + "message": "Site Web manquant" + }, "cannotRemoveViewOnlyCollections": { "message": "Vous ne pouvez pas supprimer des collections avec les autorisations d'affichage uniquement : $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "À propos de ce paramètre" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden utilisera les URI de connexion enregistrées pour identifier quelle icône ou URL de changement de mot de passe doit être utilisée pour améliorer votre expérience. Aucune information n'est recueillie ou enregistrée lorsque vous utilisez ce service." + }, "assignToCollections": { "message": "Assigner aux collections" }, @@ -4069,10 +4078,10 @@ } }, "showMore": { - "message": "Show more" + "message": "Afficher plus" }, "showLess": { - "message": "Show less" + "message": "Afficher moins" }, "enableAutotype": { "message": "Activer le type automatique" @@ -4081,17 +4090,17 @@ "message": "Bitwarden ne valide pas les emplacements d'entrée, assurez-vous d'être dans la bonne fenêtre et le bon champ avant d'utiliser le raccourci." }, "moreBreadcrumbs": { - "message": "More breadcrumbs", + "message": "Plus de fil d'Ariane", "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." }, "next": { - "message": "Next" + "message": "Suivant" }, "confirmKeyConnectorDomain": { - "message": "Confirm Key Connector domain" + "message": "Confirmez le domaine de Key Connector" }, "confirm": { - "message": "Confirm" + "message": "Confirmer" }, "enableAutotypeTransitionKey": { "message": "Enable autotype shortcut" @@ -4100,6 +4109,6 @@ "message": "Be sure you are in the correct field before using the shortcut to avoid filling data into the wrong place." }, "editShortcut": { - "message": "Edit shortcut" + "message": "Modifier le raccourci" } } diff --git a/apps/desktop/src/locales/gl/messages.json b/apps/desktop/src/locales/gl/messages.json index a0df0343dbc..4a34c81997a 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/he/messages.json b/apps/desktop/src/locales/he/messages.json index b9e8b04a5e0..132e359f94b 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -1305,11 +1305,8 @@ "message": "נקה אוטומטית ערכים שהועתקו ללוח ההעתקות (clipboard).", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "הצג סמלי אתר אינטרנט" - }, - "faviconDesc": { - "message": "הצג תמונה מוכרת ליד כל כניסה." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "מזער למגש המערכת" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "שנה סיסמה בסיכון" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "אינך יכול להסיר אוספים עם הרשאות הצגה בלבד: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "הקצה לאוספים" }, diff --git a/apps/desktop/src/locales/hi/messages.json b/apps/desktop/src/locales/hi/messages.json index 70b8b2c63bf..40245538d35 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/hr/messages.json b/apps/desktop/src/locales/hr/messages.json index ae48290fbfa..a5f1fd35047 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatski očisti kopirane vrijednosti iz međuspremnika.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Prikaži ikone mrežnih mjesta" - }, - "faviconDesc": { - "message": "Prikaži prepoznatljivu sliku pored svake prijave." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimiziraj u područje obavijesti" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Promijeni rizičnu lozinku" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Ova prijava je ugrožena i nedostaje joj web-stranica. Dodaj web-stranicu i promijeni lozinku za veću sigurnost." + }, + "missingWebsite": { + "message": "Nedostaje web-stranica" + }, "cannotRemoveViewOnlyCollections": { "message": "S dopuštenjima samo za prikaz ne možeš ukloniti zbirke: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Dodijeli zbirkama" }, diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index 74c822c757d..1cccabb1ba0 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatikusan törli a vágólapra másolt értékeket.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Kicsinyítés tálcaikonná" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Kockázatos jelszó megváltoztatása" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Nem távolíthatók el a csak megtekintési engedéllyel bíró gyűjtemények: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Hozzárendelés gyűjteményekhez" }, diff --git a/apps/desktop/src/locales/id/messages.json b/apps/desktop/src/locales/id/messages.json index bff06071eee..56f96293f08 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -1305,11 +1305,8 @@ "message": "Secara otomatis menghapus nilai yang disalin dari clipboard Anda.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Kecilkan ke Ikon Baki" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/it/messages.json b/apps/desktop/src/locales/it/messages.json index 153b9cfe28b..e4f6fd08efe 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -1305,11 +1305,8 @@ "message": "Cancella automaticamente i valori copiati dagli appunti.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimizza nell'area di notifica" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Modifica la password non sicura o esposta" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Non puoi rimuovere raccolte con i soli permessi di visualizzazione: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assegna a una raccolta" }, diff --git a/apps/desktop/src/locales/ja/messages.json b/apps/desktop/src/locales/ja/messages.json index 27bf6a3c9ca..085df8023ee 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -1305,11 +1305,8 @@ "message": "選択した時間が経過した後、自動的にクリップボードを消去します。", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "トレイアイコンに最小化" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "危険なパスワードの変更" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/ka/messages.json b/apps/desktop/src/locales/ka/messages.json index 6133b34a007..a28737be5be 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/km/messages.json b/apps/desktop/src/locales/km/messages.json index a0df0343dbc..4a34c81997a 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/kn/messages.json b/apps/desktop/src/locales/kn/messages.json index ea7ed12b821..0719225b66c 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -1305,11 +1305,8 @@ "message": "ನಿಮ್ಮ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಿಂದ ನಕಲಿಸಿದ ಮೌಲ್ಯಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆರವುಗೊಳಿಸಿ.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "ಟ್ರೇ ಐಕಾನ್‌ಗೆ ಕಡಿಮೆ ಮಾಡಿ" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/ko/messages.json b/apps/desktop/src/locales/ko/messages.json index fa50520635b..e82f130a98d 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -1305,11 +1305,8 @@ "message": "자동으로 클립보드에 복사된 값을 제거합니다.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "알림 영역으로 최소화" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/lt/messages.json b/apps/desktop/src/locales/lt/messages.json index 655ff38e251..9ce453750c1 100644 --- a/apps/desktop/src/locales/lt/messages.json +++ b/apps/desktop/src/locales/lt/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatiškai išvalyti nukopijuotas reikšmes iškarpinėje.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Sumažinti į užduočių juostos piktogramą" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index 1fcd6ba599e..9d0504db65b 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -1305,11 +1305,8 @@ "message": "Automātiski noņemt starpliktuvē ievietotās vērtības.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Rādīt tīmekļvietņu ikonas" - }, - "faviconDesc": { - "message": "Attēlot atpazīstamu attēlu pie katra pieteikšanās vienuma." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Samazināt ikonjoslā" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Mainīt riskam pakļautu paroli" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Šis pieteikšanās vienums ir pakļauts riskam, un tam nav norādīta tīmekļvietne. Lielākai drošībai jāpievieno tīmekļvietne un jānomaina parole." + }, + "missingWebsite": { + "message": "Nav norādīta tīmekļvietne" + }, "cannotRemoveViewOnlyCollections": { "message": "Nevar noņemt krājumus ar tiesībām \"Tikai skatīt\": $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Piešķirt krājumiem" }, diff --git a/apps/desktop/src/locales/me/messages.json b/apps/desktop/src/locales/me/messages.json index badf50b2ab6..c12d7f0bf60 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatsko brisanje kopiranih vrijednosti iz vašeg međuspremnika.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "MInimiziraj u sistemsku traku" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/ml/messages.json b/apps/desktop/src/locales/ml/messages.json index 420103c8f8e..60dcd9ce04f 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -1305,11 +1305,8 @@ "message": "നിങ്ങളുടെ ക്ലിപ്പ്ബോർഡിൽ നിന്ന് പകർത്തിയ മൂല്യങ്ങൾ സ്വയം മായ്‌ക്കുക.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "ട്രേ ഐക്കണിലേക്ക് ചെറുതാക്കുക" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/mr/messages.json b/apps/desktop/src/locales/mr/messages.json index a0df0343dbc..4a34c81997a 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/my/messages.json b/apps/desktop/src/locales/my/messages.json index a98853e9db8..055492f5782 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/nb/messages.json b/apps/desktop/src/locales/nb/messages.json index 38b6b40745b..44ee271da56 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -1305,11 +1305,8 @@ "message": "Slett automatisk kopierte verdier fra utklippstavlen.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimer til oppgavelinjen" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Legg til i samlinger" }, diff --git a/apps/desktop/src/locales/ne/messages.json b/apps/desktop/src/locales/ne/messages.json index d476f9d9c52..4a2031d4474 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/nl/messages.json b/apps/desktop/src/locales/nl/messages.json index cfcc110bb03..116d2a2f592 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -1305,11 +1305,8 @@ "message": "Gekopieerde waarden automatisch van het klembord wissen.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Toon website-pictogrammen" - }, - "faviconDesc": { - "message": "Een herkenbare afbeelding naast iedere login weergeven." + "showIconsChangePasswordUrls": { + "message": "Websitepictogrammen weergeven en URL's voor wachtwoordwijzigingen ophalen" }, "enableMinToTray": { "message": "Minimaliseren naar systeemvak" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Risicovol wachtwoord wijzigen" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Deze login is in gevaar en mist een website. Voeg een website toe en verander het wachtwoord voor een sterkere beveiliging." + }, + "missingWebsite": { + "message": "Ontbrekende website" + }, "cannotRemoveViewOnlyCollections": { "message": "Je kunt verzamelingen niet verwijderen met alleen rechten voor weergeven: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "Over deze instelling" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden gebruikt opgeslagen login-URI's om te bepalen welk pictogram of URL voor het wijzigen van het wachtwoord moet worden gebruikt om je ervaring te verbeteren. Er wordt geen informatie verzameld of opgeslagen wanneer je deze service gebruikt." + }, "assignToCollections": { "message": "Aan collecties toewijzen" }, diff --git a/apps/desktop/src/locales/nn/messages.json b/apps/desktop/src/locales/nn/messages.json index bda98fa2b50..ae57c13657d 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/or/messages.json b/apps/desktop/src/locales/or/messages.json index 8eb7dbf8d52..1ab02f8d7a3 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/pl/messages.json b/apps/desktop/src/locales/pl/messages.json index 639a8c266c6..6df529951aa 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatycznie wyczyść skopiowaną wartość ze schowka.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimalizuj do zasobnika systemowego" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Zmień zagrożone hasło" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Nie możesz usunąć następujących kolekcji z uprawnieniami tylko do odczytu: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Przypisz do kolekcji" }, diff --git a/apps/desktop/src/locales/pt_BR/messages.json b/apps/desktop/src/locales/pt_BR/messages.json index 7397eb1a0ed..c1c2ccbb90e 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -1305,11 +1305,8 @@ "message": "Limpar automaticamente os valores copiados da sua área de transferência.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimizar para ícone da bandeja" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Alterar senhas vulneráveis" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Você não pode remover coleções com permissões de Apenas visualização: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Atribuído a coleções" }, diff --git a/apps/desktop/src/locales/pt_PT/messages.json b/apps/desktop/src/locales/pt_PT/messages.json index c9b17299179..d2b12e4d457 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -1305,11 +1305,8 @@ "message": "Limpar automaticamente os valores copiados da sua área de transferência.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Mostrar ícones do site" - }, - "faviconDesc": { - "message": "Mostrar uma imagem reconhecível junto a cada credencial." + "showIconsChangePasswordUrls": { + "message": "Mostrar ícones de sites e recuperar URLs de alteração de palavra-passe" }, "enableMinToTray": { "message": "Minimizar para ícone de bandeja" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Alterar palavra-passe em risco" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Esta credencial está em risco e não tem um site. Adicione um site e altere a palavra-passe para uma segurança mais forte." + }, + "missingWebsite": { + "message": "Site em falta" + }, "cannotRemoveViewOnlyCollections": { "message": "Não é possível remover coleções com permissões de Apenas visualização: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "Acerca desta definição" + }, + "permitCipherDetailsDescription": { + "message": "O Bitwarden utilizará os URIs de credenciais guardadas para identificar qual o ícone ou URL de alteração de palavra-passe que deve ser utilizado para melhorar a sua experiência. Nenhuma informação é recolhida ou guardada quando utiliza este serviço." + }, "assignToCollections": { "message": "Atribuir às coleções" }, diff --git a/apps/desktop/src/locales/ro/messages.json b/apps/desktop/src/locales/ro/messages.json index d1717dce4c5..48b4302fa43 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -1305,11 +1305,8 @@ "message": "Se șterg automat valorile copiate din clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Se minimizează în zona de notificare" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index 284cc8d5b85..9c35cb87be6 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -1305,11 +1305,8 @@ "message": "Автоматически удалять скопированные значения из буфера обмена.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Показать значки сайтов" - }, - "faviconDesc": { - "message": "Отображать узнаваемое изображение рядом с каждым логином." + "showIconsChangePasswordUrls": { + "message": "Показывать значки сайтов и извлекать URL изменения пароля" }, "enableMinToTray": { "message": "Сворачивать в область уведомлений" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Изменить пароль, подверженный риску" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Вы не можете удалить коллекции с правами только на просмотр: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "Об этой настройке" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden будет использовать сохраненные URI логинов, чтобы определить, какой значок или URL для смены пароля следует использовать для улучшения вашего взаимодействия. При использовании этого сервиса никакая информация не собирается и не сохраняется." + }, "assignToCollections": { "message": "Назначить коллекциям" }, diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index 0dd892fdad5..fde3c933fd4 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index 1c5caa51d4c..c5abe79a9ff 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -1305,11 +1305,8 @@ "message": "Automaticky vymazať skopírované hodnoty zo schránky.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Zobraziť favikony stránok" - }, - "faviconDesc": { - "message": "Pri každom prihlásení zobrazí rozpoznateľný obrázok." + "showIconsChangePasswordUrls": { + "message": "Zobraziť ikony webových stránok a načítať adresy URL na zmenu hesla" }, "enableMinToTray": { "message": "Minimalizovať do systémovej lišty" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Zmeniť rizikové heslá" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Toto prihlásenie je v ohrození a chýba mu webová stránka. Pridajte webovú stránku a zmeňte heslo na silnejšie zabezpečenie." + }, + "missingWebsite": { + "message": "Chýbajúca webová stránka" + }, "cannotRemoveViewOnlyCollections": { "message": "Zbierky, ktoré môžete len zobraziť nemôžete odstrániť: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden použije uložené prihlasovacie URI na určenie ikony alebo adresy URL na zmenu hesla, ktoré by sa mali použiť na zlepšenie vášho zážitku. Pri používaní tejto služby sa nezbierajú ani neukladajú žiadne informácie." + }, "assignToCollections": { "message": "Priradiť ku zbierkam" }, diff --git a/apps/desktop/src/locales/sl/messages.json b/apps/desktop/src/locales/sl/messages.json index 529b52f5bae..4877150c482 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -1305,11 +1305,8 @@ "message": "Samodejno počisti kopirane vrednosti iz odložišča.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Pomanjšaj v orodno vrstico" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/sr/messages.json b/apps/desktop/src/locales/sr/messages.json index d6fbeb37981..09e63ad9083 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -1305,11 +1305,8 @@ "message": "Аутоматски обришите копиране вредности из привремене меморије.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Минимизирај као иконицу у системској траци" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Променити ризичну лозинку" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Не можете уклонити колекције са дозволама само за приказ: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Додели колекцијама" }, diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index b8ad3f49d35..f0b825d7519 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -1305,11 +1305,8 @@ "message": "Rensa automatiskt kopierade värden från urklipp.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Visa webbplatsikoner" - }, - "faviconDesc": { - "message": "Visa en igenkännbar bild bredvid varje inloggning." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimera till systemfältsikon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Ändra lösenord för riskgrupper" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Denna inloggning är utsatt för risk och saknar en webbplats. Lägg till en webbplats och ändra lösenordet för ökad säkerhet." + }, + "missingWebsite": { + "message": "Saknar webbplats" + }, "cannotRemoveViewOnlyCollections": { "message": "Du kan inte ta bort samlingar med behörigheten Visa endast: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Tilldela till samlingar" }, diff --git a/apps/desktop/src/locales/ta/messages.json b/apps/desktop/src/locales/ta/messages.json index 19cf1ddb5cb..ce01c305045 100644 --- a/apps/desktop/src/locales/ta/messages.json +++ b/apps/desktop/src/locales/ta/messages.json @@ -1305,11 +1305,8 @@ "message": "உங்கள் கிளிப்போர்டில் இருந்து நகலெடுக்கப்பட்ட மதிப்புகளை தானாக அழிக்கவும்.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "வலைத்தள ஐகான்களைக் காட்டு" - }, - "faviconDesc": { - "message": "ஒவ்வொரு உள்நுழைவுக்கும் அருகில் அடையாளம் காணக்கூடிய படத்தைக் காட்டு." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "ட்ராய் ஐகானுக்கு சுருக்கவும்" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "ஆபத்தில் உள்ள கடவுச்சொல்லை மாற்று" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "காட்சி மட்டும் அனுமதிகளுடன் உள்ள தொகுப்புகளை உங்களால் அகற்ற முடியாது: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "தொகுப்புகளுக்கு ஒதுக்கு" }, diff --git a/apps/desktop/src/locales/te/messages.json b/apps/desktop/src/locales/te/messages.json index a0df0343dbc..4a34c81997a 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -1305,11 +1305,8 @@ "message": "Automatically clear copied values from your clipboard.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to tray icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/th/messages.json b/apps/desktop/src/locales/th/messages.json index eabbd7b007c..47c397f739b 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -1305,11 +1305,8 @@ "message": "ล้างค่าที่คัดลอกโดยอัตโนมัติจากคลิปบอร์ดของคุณ", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Minimize to Tray Icon" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 761e552930d..30d36bc7c6e 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -1305,11 +1305,8 @@ "message": "Kopyalanan değerleri otomatik olarak panodan sil.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Web sitesi simgelerini göster" - }, - "faviconDesc": { - "message": "Hesapların yanında tanıdık görseller göster." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Tepsi simgesine küçült" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Risk altındaki parolayı değiştirin" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Bu hesap risk altında ve web sitesi eksik. Bir web sitesi ekleyin ve güvenliğinizi artırmak için parolayı değiştirin." + }, + "missingWebsite": { + "message": "Web sitesi eksik" + }, "cannotRemoveViewOnlyCollections": { "message": "Yalnızca Görüntüleme izinlerine sahip koleksiyonları kaldıramazsınız: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Koleksiyonlara ata" }, diff --git a/apps/desktop/src/locales/uk/messages.json b/apps/desktop/src/locales/uk/messages.json index 2119189594d..47e6ac9c5c6 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -1305,11 +1305,8 @@ "message": "Автоматично очищати скопійовані значення з буфера обміну.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Згортати до системного лотка" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Змінити ризикований пароль" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "Ви не можете вилучати збірки, маючи дозвіл лише на перегляд: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Призначити до збірок" }, diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index 2bdf42df372..66cba851678 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -1305,11 +1305,8 @@ "message": "Tự động xóa mọi thứ đã sao chép khỏi bảng nhớ tạm.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "Thu nhỏ vào khay hệ thống" @@ -3592,10 +3589,10 @@ "message": "Vui lòng tiếp tục đăng nhập bằng thông tin đăng nhập của công ty bạn." }, "importDirectlyFromBrowser": { - "message": "Import directly from browser" + "message": "Nhập trực tiếp từ trình duyệt" }, "browserProfile": { - "message": "Browser Profile" + "message": "Hồ sơ trình duyệt" }, "seeDetailedInstructions": { "message": "Xem hướng dẫn chi tiết trên trang trợ giúp của chúng tôi tại", @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Thay đổi mật khẩu có rủi ro" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Thông tin đăng nhập này có rủi ro và thiếu một trang web. Hãy thêm trang web và đổi mật khẩu để tăng cường bảo mật." + }, + "missingWebsite": { + "message": "Thiếu trang web" + }, "cannotRemoveViewOnlyCollections": { "message": "Bạn không thể xóa các bộ sưu tập với quyền chỉ xem: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Gán vào bộ sưu tập" }, @@ -4085,21 +4094,21 @@ "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." }, "next": { - "message": "Next" + "message": "Tiếp theo" }, "confirmKeyConnectorDomain": { - "message": "Confirm Key Connector domain" + "message": "Xác nhận tên miền Key Connector" }, "confirm": { - "message": "Confirm" + "message": "Xác nhận" }, "enableAutotypeTransitionKey": { - "message": "Enable autotype shortcut" + "message": "Bật phím tắt tự động điền" }, "enableAutotypeDescriptionTransitionKey": { - "message": "Be sure you are in the correct field before using the shortcut to avoid filling data into the wrong place." + "message": "Hãy đảm bảo bạn đang ở đúng trường trước khi sử dụng phím tắt để tránh điền dữ liệu vào chỗ không đúng." }, "editShortcut": { - "message": "Edit shortcut" + "message": "Chỉnh sửa phím tắt" } } diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index 3849979360a..e4d3833d107 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -1305,11 +1305,8 @@ "message": "自动清除复制到剪贴板的值。", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "显示网站图标" - }, - "faviconDesc": { - "message": "在每个登录项目旁边显示一个可识别的图像。" + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "最小化到托盘图标" @@ -2946,10 +2943,10 @@ "message": "需要高级版订阅" }, "organizationIsDisabled": { - "message": "组织已停用" + "message": "组织已暂停" }, "disabledOrganizationFilterError": { - "message": "无法访问已停用组织中的项目。请联系您的组织所有者寻求帮助。" + "message": "无法访问已暂停组织中的项目。请联系您的组织所有者寻求帮助。" }, "neverLockWarning": { "message": "确定要使用「从不」选项吗?将锁定选项设置为「从不」会将密码库的加密密钥存储在您的设备上。如果使用此选项,您必须确保您的设备安全。" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "更改有风险的密码" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "此登录存在风险且缺少网站。请添加网站并更改密码以增强安全性。" + }, + "missingWebsite": { + "message": "缺少网站" + }, "cannotRemoveViewOnlyCollections": { "message": "您无法移除仅具有「查看」权限的集合:$COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "分配到集合" }, diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index b2a4ad91fce..cc979d0dc8a 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -1305,11 +1305,8 @@ "message": "自動清除剪貼簿中複製的值。", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "enableMinToTray": { "message": "最小化至系統匣圖示" @@ -3839,6 +3836,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", "placeholders": { @@ -3934,6 +3937,12 @@ "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "assignToCollections": { "message": "Assign to collections" }, From 24c8b2dc5d263d63b934f5720fc84529ecb2c1db Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 12 Sep 2025 10:26:44 +0200 Subject: [PATCH 022/249] Autosync the updated translations (#16395) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/af/messages.json | 57 +- apps/web/src/locales/ar/messages.json | 57 +- apps/web/src/locales/az/messages.json | 57 +- apps/web/src/locales/be/messages.json | 57 +- apps/web/src/locales/bg/messages.json | 55 +- apps/web/src/locales/bn/messages.json | 57 +- apps/web/src/locales/bs/messages.json | 57 +- apps/web/src/locales/ca/messages.json | 57 +- apps/web/src/locales/cs/messages.json | 55 +- apps/web/src/locales/cy/messages.json | 57 +- apps/web/src/locales/da/messages.json | 57 +- apps/web/src/locales/de/messages.json | 57 +- apps/web/src/locales/el/messages.json | 57 +- apps/web/src/locales/en_GB/messages.json | 57 +- apps/web/src/locales/en_IN/messages.json | 57 +- apps/web/src/locales/eo/messages.json | 57 +- apps/web/src/locales/es/messages.json | 57 +- apps/web/src/locales/et/messages.json | 57 +- apps/web/src/locales/eu/messages.json | 57 +- apps/web/src/locales/fa/messages.json | 57 +- apps/web/src/locales/fi/messages.json | 57 +- apps/web/src/locales/fil/messages.json | 57 +- apps/web/src/locales/fr/messages.json | 57 +- apps/web/src/locales/gl/messages.json | 57 +- apps/web/src/locales/he/messages.json | 57 +- apps/web/src/locales/hi/messages.json | 57 +- apps/web/src/locales/hr/messages.json | 55 +- apps/web/src/locales/hu/messages.json | 57 +- apps/web/src/locales/id/messages.json | 57 +- apps/web/src/locales/it/messages.json | 57 +- apps/web/src/locales/ja/messages.json | 57 +- apps/web/src/locales/ka/messages.json | 57 +- apps/web/src/locales/km/messages.json | 57 +- apps/web/src/locales/kn/messages.json | 57 +- apps/web/src/locales/ko/messages.json | 57 +- apps/web/src/locales/lv/messages.json | 55 +- apps/web/src/locales/ml/messages.json | 57 +- apps/web/src/locales/mr/messages.json | 57 +- apps/web/src/locales/my/messages.json | 57 +- apps/web/src/locales/nb/messages.json | 57 +- apps/web/src/locales/ne/messages.json | 57 +- apps/web/src/locales/nl/messages.json | 55 +- apps/web/src/locales/nn/messages.json | 57 +- apps/web/src/locales/or/messages.json | 57 +- apps/web/src/locales/pl/messages.json | 57 +- apps/web/src/locales/pt_BR/messages.json | 57 +- apps/web/src/locales/pt_PT/messages.json | 55 +- apps/web/src/locales/ro/messages.json | 57 +- apps/web/src/locales/ru/messages.json | 55 +- apps/web/src/locales/si/messages.json | 57 +- apps/web/src/locales/sk/messages.json | 71 ++- apps/web/src/locales/sl/messages.json | 57 +- apps/web/src/locales/sr_CS/messages.json | 57 +- apps/web/src/locales/sr_CY/messages.json | 57 +- apps/web/src/locales/sv/messages.json | 55 +- apps/web/src/locales/ta/messages.json | 57 +- apps/web/src/locales/te/messages.json | 57 +- apps/web/src/locales/th/messages.json | 57 +- apps/web/src/locales/tr/messages.json | 703 ++++++++++++----------- apps/web/src/locales/uk/messages.json | 57 +- apps/web/src/locales/vi/messages.json | 87 ++- apps/web/src/locales/zh_CN/messages.json | 101 ++-- apps/web/src/locales/zh_TW/messages.json | 57 +- 63 files changed, 3068 insertions(+), 1241 deletions(-) diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 25dddae897c..7223879e5db 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Welke tipe item is dit?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Verander die taal wat deur die webkluis gebruik word." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Verstek" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Lede" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index dab2ef77242..e2a4cd27a69 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "وضع علامة على التطبيقات الحساسة" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "تعيين كتطبيق حساس" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "تم إلغاء تصنيف التطبيق الحرج بنجاح" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "ما هو نوع العنصر؟" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "تغيير اللغة المستخدمة في خزانة الويب." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "الافتراضي" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "الأعضاء" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index 26147b2b512..0cff73b9eb1 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "İstifadəçilər giriş məlumatlarını saxladıqda, tətbiqlər burada görünür və riskli parolları göstərir. Kritik tətbiqləri işarələyin və parollarını güncəlləməsi üçün istifadəçiləri məlumatlandırın." }, - "noCriticalAppsTitle": { - "message": "Heç bir tətbiqi Kritik olaraq işarələməmisiniz" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Riskli parolları kəşf etmək üçün ən kritik tətbiqlərinizi seçin və bu parolları dəyişdirməsi üçün istifadəçiləri məlumatlandırın." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Kritik tətbiqləri işarələ" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Tətbiqi kritik olaraq işarələ" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Kritik olaraq işarələməni götür" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritik tətbiq işarəsi uğurla götürüldü" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Bu elementin növü nədir?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Veb seyfdə istifadə olunan dili dəyişdirin." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "İlkin" @@ -7433,6 +7430,9 @@ "off": { "message": "Bağlı" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Üzvlər" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "$INTEGRATION$ icra bələdçisini başlat.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Riskli parolları dəyişdir" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Kilidi PIN ilə açmanı ləğv et" }, @@ -11071,6 +11086,12 @@ "message": "Kredit əlavə etmək üçün faktura ünvanı tələb olunur.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Faktura ünvanı" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Key Connector domenini təsdiqlə" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 746e609c918..6ddd29a1b6b 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Тут будуць адлюстроўвацца праграмы па меры таго, як карыстальнікі будуць захоўваць запісы ўваходу, якія знаходзяцца ў зоне рызыкі. Пазначце крытычныя праграмы і апавяшчайце карыстальнікаў аб неабходнасці абнавіць паролі." }, - "noCriticalAppsTitle": { - "message": "Вы не пазначылі ніводную праграму ў якасці кратычнай" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Выберыце найбольш крытычныя праграмы для выяўлення пароляў, якія знаходзяцца ў зоне рызыкі. Апавяшчайце карыстальнікаў аб неабходнасці змяніць іх." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Пазначыць крытычныя праграмы" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Пазначыць праграму як крытычную" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Пазнака з крытычнай праграмы паспяхова знята" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Які гэта элемент запісу?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Змяніць мову інтэрфейсу вэб-сховішча." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Прадвызначана" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Удзельнікі" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index 870efcbcc09..53a69936675 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Когато потребителите запазват данните си за вписване, тук ще се появяват приложения, а също и ще се показват паролите в риск. Можете да отбелязвате важните приложения и да напомняте на потребителите да сменят паролите си." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Не сте отбелязали нито едно приложение като важно" }, - "noCriticalAppsDescription": { - "message": "Изберете най-важните си приложения, за да откриете паролите, които може да са в риск, и да известите потребителите да ги сменят." + "noCriticalApplicationsDescription": { + "message": "Изберете най важните си приложения, за да приоритизирате действията по сигурността за своите потребители, както и да адресирате паролите в риск." }, - "markCriticalApps": { - "message": "Отбележете важните приложения" + "markCriticalApplications": { + "message": "Изберете важните приложения" }, "markAppAsCritical": { "message": "Отбелязване на приложението като важно" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Премахване от важните" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Приложението е премахнато от важните" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Успешно премахване на приложението от важните" }, "whatTypeOfItem": { "message": "Вид на елемента" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Смяна на езика на интерфейса. Ще трябва да пуснете програмата повторно." }, - "enableFavicon": { - "message": "Показване на иконките на уеб сайтовете" - }, - "faviconDesc": { - "message": "Показване на разпознаваемо изображение до всеки запис." + "showIconsChangePasswordUrls": { + "message": "Показване на иконките на уеб сайтовете и извличане на адресите за смяна на паролата" }, "default": { "message": "Стандартно" @@ -7433,6 +7430,9 @@ "off": { "message": "Изключено" }, + "connected": { + "message": "Свързано" + }, "members": { "message": "Членове" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Обновяване на $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Стартиране на ръководството за внедряване за $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Промяна на парола в риск" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Този елемент за вписване е в риск и в него липсва уеб сайт. Добавете уеб сайт и сменете паролата, за по-добра сигурност." + }, + "missingWebsite": { + "message": "Липсващ уеб сайт" + }, "removeUnlockWithPinPolicyTitle": { "message": "Премахване на отключването чрез ПИН" }, @@ -11071,6 +11086,12 @@ "message": "Адресът за таксуване е задължителен за добавянето на средства.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "Относно тази настройка" + }, + "permitCipherDetailsDescription": { + "message": "Битуорден ще използва запазените адреси за вписване, за да определи коя иконка или адрес за смяна на паролата да се ползва, за да улесни работата Ви. Никакви данни не се събират или съхраняват, когато използвате тази услуга." + }, "billingAddress": { "message": "Адрес за фактуриране" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Потвърждаване на домейна на конектора за ключове" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Плащането чрез банкова сметка е налично само за клиенти от САЩ. Ще трябва да потвърдите банковата си сметка. В следващите 1-2 работни дни ще направим малък депозит. Ако не потвърдите банковата сметка, може да пропуснете плащането и абонаментът Ви да бъде спрян." + }, + "verifyBankAccountWithStripe": { + "message": "Направихме малък депозит по банковата Ви сметка. Може да отнеме 1-2 работни дни преди да го видите. Когато видите депозита, ще можете да потвърдите банковата си сметка. Ако не потвърдите банковата сметка, може да пропуснете плащането и абонаментът Ви да бъде спрян." + }, + "verifyNow": { + "message": "Потвърдете сега." } } - diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 248145d21c5..433668e48c5 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "এটি কোন ধরণের বস্তু?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "পূর্ব-নির্ধারিত" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 57d12cf742b..5827c6512e2 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Koja je ovo vrsta stavke?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index bcdbc3aeb5c..84a972ef18f 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Quin tipus d'element és aquest?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Canvia l'idioma utilitzat per la caixa forta web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Per defecte" @@ -7433,6 +7430,9 @@ "off": { "message": "Desactivat" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Membres" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 3e761da97b7..9db1ab21749 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Jakmile uživatelé uloží přihlašovací údaje, zobrazí se zde aplikace, které zobrazují všechna ohrožená hesla. Označte kritické aplikace a upozorněte uživatele, aby hesla aktualizovali." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Neoznačili jste žádné aplikace jako kritické" }, - "noCriticalAppsDescription": { - "message": "Vyberte své nejkritičtější aplikace, abyste objevili ohrožená hesla a upozorněte uživatele na změnu těchto hesel." + "noCriticalApplicationsDescription": { + "message": "Vyberte nejdůležitější aplikace a stanovte priority bezpečnostních opatření, která mají uživatelé provést, aby vyřešili problém rizikových hesel." }, - "markCriticalApps": { - "message": "Označit kritické aplikace" + "markCriticalApplications": { + "message": "Vyberte kritické aplikace" }, "markAppAsCritical": { "message": "Označit aplikaci jako kritickou" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Zrušit označení jako kritické" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritická aplikace úspěšně odoznačena" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Úspěšné zrušení označení aplikace jako kritické" }, "whatTypeOfItem": { "message": "O jaký typ položky se jedná?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Změní jazyk používaný ve webovém trezoru." }, - "enableFavicon": { - "message": "Zobrazit ikony webových stránek" - }, - "faviconDesc": { - "message": "Zobrazí rozeznatelný obrázek vedle každého přihlášení." + "showIconsChangePasswordUrls": { + "message": "Zobrazit ikony webových stránek a načíst URL adresy pro změnu hesla" }, "default": { "message": "Výchozí" @@ -7433,6 +7430,9 @@ "off": { "message": "VYP." }, + "connected": { + "message": "Připojeno" + }, "members": { "message": "Členové" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Aktualizovat $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Spustí průvodce implementací $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Změnit ohrožené heslo" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Tyto přihlašovací údaje jsou ohrožené a chybí jim webová stránka. Přidejte webovou stránku a změňte heslo pro větší bezpečnost." + }, + "missingWebsite": { + "message": "Chybějící webová stránka" + }, "removeUnlockWithPinPolicyTitle": { "message": "Odebrat odemknutí pomocí PIN" }, @@ -11071,6 +11086,12 @@ "message": "Pro přidání kreditu je vyžadována fakturační adresa.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden bude používat uložené přihlašovací URI k identifikaci, která ikona nebo změna adresy URL by měla být použita pro zlepšení Vašeho zážitku. Při používání této služby nejsou shromažďovány ani ukládány žádné informace." + }, "billingAddress": { "message": "Fakturační adresa" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Potvrdit doménu Key Connectoru" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Platba z bankovního účtu je k dispozici jen zákazníkům ve Spojených státech. Budete požádáni o ověření svého bankovního účtu. V průběhu následujících 1–2 pracovních dnů provedeme mikroplatbu. Pokud bankovní účet neověříte, platba nebude provedena a Vaše předplatné bude pozastaveno." + }, + "verifyBankAccountWithStripe": { + "message": "Provedli jsme mikroplatbu na Váš bankovní účet. To může trvat 1–2 pracovní dny. Jakmile se platba objeví na Vašem účtu, můžete svůj bankovní účet ověřit. Pokud svůj bankovní účet neověříte, dojde k neprovedení platby a Vaše předplatné bude pozastaveno." + }, + "verifyNow": { + "message": "Ověřit nyní" } } - diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 404d26bc5f9..ad7559ee5be 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index a92cefbeb66..aabb231871f 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Når brugerne gemmer logins, vil apps med udsatte adgangskoder fremgå her. Markér kritiske apps og giv brugerne besked om at opdatere adgangskoder." }, - "noCriticalAppsTitle": { - "message": "Ingen apps markret som Kritisk" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Vælg de mest kritiske apps for at afsløre udsatte adgangskoder og give brugerne besked om at ændre disse." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Markér kritiske apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Markér app som kritisk" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritisk app afmarkeret" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Hvilken emnetype er denne?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Skift sproget brugt af web-boksen." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Standard" @@ -7433,6 +7430,9 @@ "off": { "message": "Fra" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Medlemmer" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Start $INTEGRATION$-implementeringsguiden.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index 895b2a050b9..997f5a9ed02 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Während Benutzer Zugangsdaten speichern, werden hier Anwendungen angezeigt, die alle gefährdeten Passwörter anzeigen. Markiere kritische Anwendungen und benachrichtige Benutzer, um Passwörter zu ändern." }, - "noCriticalAppsTitle": { - "message": "Du hast keine Anwendungen als kritisch markiert" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Wähle deine wichtigsten Anwendungen aus, um gefährdete Passwörter zu ermitteln, und benachrichtige die Benutzer, damit sie diese Passwörter ändern." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Kritische Anwendungen markieren" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Anwendung als kritisch markieren" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Markierung als kritische Anwendung erfolgreich aufgehoben" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Um welche Art von Eintrag handelt es sich hierbei?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Die Sprache des Web-Tresors ändern." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Standard" @@ -7433,6 +7430,9 @@ "off": { "message": "Aus" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Mitglieder" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "$INTEGRATION$-Implementierungsanleitung starten.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Gefährdetes Passwort ändern" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Entsperren mit PIN entfernen" }, @@ -11071,6 +11086,12 @@ "message": "Rechnungsadresse erforderlich, um Guthaben hinzuzufügen.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Rechnungsadresse" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index d5c0c2b8fcb..ad12637d9f0 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Επισήμανση κρίσιμων εφαρμογών" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Τι είδους στοιχείο είναι αυτό;" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Αλλάξτε γλώσσα που χρησιμοποιείται από το web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Προεπιλογή" @@ -7433,6 +7430,9 @@ "off": { "message": "Ανενεργό" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Μέλη" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Κατάργηση ξεκλειδώματος με PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index f9f9c84e783..305d82aad83 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritise security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index c2e369c76e9..afe0d2fffa7 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritise security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index f7b5c8e3fa7..8d1253a7c22 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Marki kritikajn apojn" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Kiuspeca estas ĉi tiu ero?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Ŝanĝi la lingvon uzatan por la retejo de la kaso." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Implicita" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Membroj" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 7b371e5c796..4388f59947e 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "¿Qué tipo de elemento es este?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Cambiar el idioma utilizado en la caja fuerte web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Por defecto" @@ -7433,6 +7430,9 @@ "off": { "message": "Apagado" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Miembros" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 1e805e77b06..8fcde528b20 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Mis tüüpi kirje see on?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Siin saab veebihoidla keelt muuta." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Vaikimisi" @@ -7433,6 +7430,9 @@ "off": { "message": "Väljas" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Liikmed" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index b0f96d9cbfe..d722c2a1858 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Zein elementu mota da hau?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Aldatu webguneko kutxa gotorrean erabiltzen den hizkuntza." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Lehenetsia" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Kideak" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index ec3fab7000a..1577595b3fa 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "با ذخیره‌ی اطلاعات ورود توسط کاربران، برنامه‌ها در اینجا نمایش داده می‌شوند و کلمات عبور در معرض خطر مشخص می‌گردند. برنامه‌های حیاتی را علامت‌گذاری کرده و کاربران را برای به‌روزرسانی کلمات عبور مطلع کنید." }, - "noCriticalAppsTitle": { - "message": "شما هیچ برنامه‌ای را به عنوان حیاتی علامت‌گذاری نکرده‌اید" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "مهم‌ترین برنامه‌های خود را انتخاب کنید تا کلمات عبور در معرض خطر شناسایی شوند و کاربران برای تغییر آن‌ها مطلع شوند." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "برنامه‌های حیاتی را علامت‌گذاری کنید" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "برنامه را به عنوان حیاتی علامت‌گذاری کنید" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "برنامه حیاتی با موفقیت لغو علامت شد" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "این چه نوع موردی است؟" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "زبان مورد استفاده در گاوصندوق وب را تغییر دهید." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "پیش‌فرض" @@ -7433,6 +7430,9 @@ "off": { "message": "خاموش" }, + "connected": { + "message": "Connected" + }, "members": { "message": "اعضا" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "راهنمای پیاده‌سازی $INTEGRATION$ را اجرا کنید.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "تغییر کلمه عبور در معرض خطر" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "حذف گزینه‌ی بازکردن با کد پین" }, @@ -11071,6 +11086,12 @@ "message": "نشانی صورتحساب برای افزودن اعتبار الزامی است.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 0b733b8ae8a..e416b8dfeb5 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "Et ole merkinnyt yhtään sovellusta Kriittiseksi" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Merkitse kriittiset sovellukset" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Merkitse sovellus kriittiseksi" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Minkä tyyppinen kohde tämä on?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Vaihda verkkoholvissa käytettävä kieli." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Oletus" @@ -7433,6 +7430,9 @@ "off": { "message": "Ei käytössä" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Jäsenet" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Vaihda vaarantunut salasana" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index dfceb237057..54762dd7545 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Ano'ng uri ng item na ito?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Baguhin ang wikang ginagamit ng web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Mga Miyembro" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index af8ebd886c3..18152d4b291 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Au fur et à mesure que les utilisateurs enregistrent des identifiants, les applications apparaissent ici, montrant les mots de passe à risque. Marquez les applications critiques et avertissez les utilisateurs de mettre à jour les mots de passe." }, - "noCriticalAppsTitle": { - "message": "Vous n'avez marqué aucune application comme Critique" + "noCriticalApplicationsTitle": { + "message": "Vous n'avez marqué aucune application comme critique" }, - "noCriticalAppsDescription": { - "message": "Sélectionnez vos applications les plus critiques pour découvrir les mots de passe à risque et avertissez les utilisateurs de modifier ces mots de passe." + "noCriticalApplicationsDescription": { + "message": "Sélectionnez vos applications les plus critiques afin de prioriser les actions de sécurité pour vos utilisateurs afin de traiter les mots de passe à risque." }, - "markCriticalApps": { - "message": "Marquer les applications critiques" + "markCriticalApplications": { + "message": "Sélectionner les applications critiques" }, "markAppAsCritical": { "message": "Marquer l'application comme critique" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Retirer la cote critique" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Marquage d'application critique retiré avec succès" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Retrait de la marque critique pour l'application réussi" }, "whatTypeOfItem": { "message": "Quel type d'élément est-ce ?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Changez la langue utilisée par le coffre web." }, - "enableFavicon": { - "message": "Afficher les icônes des sites web" - }, - "faviconDesc": { - "message": "Affiche une image reconnaissable à côté de chaque identifiant." + "showIconsChangePasswordUrls": { + "message": "Affiche les icônes du site web et récupère les URL de changement de mot de passe" }, "default": { "message": "Par défaut" @@ -7433,6 +7430,9 @@ "off": { "message": "Désactivée" }, + "connected": { + "message": "Connecté" + }, "members": { "message": "Membres" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Mettre à jour $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Lancez le guide d'implémentation $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Changer le mot de passe à risque" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Cet identifiant est à risques et manque un site web. Ajoutez un site web et changez le mot de passe pour une meilleure sécurité." + }, + "missingWebsite": { + "message": "Site Web manquant" + }, "removeUnlockWithPinPolicyTitle": { "message": "Supprimer Déverrouiller avec un NIP" }, @@ -11071,6 +11086,12 @@ "message": "L'adresse de facturation est requise pour ajouter du crédit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "À propos de ce paramètre" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden utilisera les URI de connexion enregistrées pour identifier quelle icône ou URL de changement de mot de passe doit être utilisée pour améliorer votre expérience. Aucune information n'est recueillie ou enregistrée lorsque vous utilisez ce service." + }, "billingAddress": { "message": "Adresse de facturation" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirmez le domaine de Key Connector" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Le paiement avec un compte bancaire est seulement disponible pour les clients aux États-Unis. Vous devrez procéder à la vérification de votre compte bancaire. Nous effectuerons un micro-dépôt dans 2 prochains jours ouvrables. Si vous ne complétez pas la vérification de votre compte bancaire résultera en un paiement manqué et votre abonnement sera suspendu." + }, + "verifyBankAccountWithStripe": { + "message": "Nous avons effectué un micro-dépôt dans votre compte bancaire. Cela peut prendre jusqu'à 2 jours ouvrables. Quand vous verrez le dépôt dans votre compte, vous pourrez faire la vérification de votre compte bancaire. Si vous ne complétez pas la vérification de votre compte bancaire, cela résultera en un paiement manqué et votre abonnement sera suspendu." + }, + "verifyNow": { + "message": "Vérifier maintenant." } } - diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index 77f276627a1..9eb0f59f4ee 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Que tipo de elemento é este?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 6734a11cfba..72a0442789f 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "ככל שמשתמשים שומרים כניסות, יישומים מופיעים כאן, ומוצגות כל הסיסמאות בסיכון. סמן יישומים קריטיים והודע למשתמשים לעדכן סיסמאות." }, - "noCriticalAppsTitle": { - "message": "לא סימנת אף יישום כקריטי" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "בחר את היישומים הכי קריטיים שלך כדי לגלות סיסמאות בסיכון, ולהודיע למשתמשים לשנות את הסיסמאות הללו." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "סמן יישומים קריטיים" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "סמן יישום כקריטי" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "בטל סימון כקריטי" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "בוטל סימון יישום קריטי בהצלחה" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "מאיזה סוג פריט זה?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "שנה את השפה של כספת הרשת." }, - "enableFavicon": { - "message": "הצג סמלי אתר אינטרנט" - }, - "faviconDesc": { - "message": "הצג תמונה מוכרת ליד כל כניסה." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "ברירת מחדל" @@ -7433,6 +7430,9 @@ "off": { "message": "כבוי" }, + "connected": { + "message": "Connected" + }, "members": { "message": "חברים" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "פתח מדריך יישום $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "שנה סיסמה בסיכון" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "הסר ביטול נעילה עם PIN" }, @@ -11071,6 +11086,12 @@ "message": "נדרשת כתובת לחיוב כדי להוסיף אשראי.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "כתובת לחיוב" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "אשר דומיין של Key Connector" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index 9d8ee630f08..fbb1e5167fc 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "यह किस प्रकार का आइटम है?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 1b3ca815011..8fd78fcda18 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Kako korisnici spremaju podatke za prijavu, ovdje se pojavljuju aplikacije koje prikazuju sve rizične lozinke. Označi kritične aplikacije i obavijesti korisnike da ažuriraju lozinke." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Niti jedna aplikacija nije označena kao kritična" }, - "noCriticalAppsDescription": { - "message": "Odaberi svoje najkritičnije aplikacije za otkrivanje rizičnih lozinki i obavijesti korisnike da promijene te lozinke." + "noCriticalApplicationsDescription": { + "message": "Odaberite svoje kritične aplikacije kako bi se odredio prioritet sigurnosnih radnji za tvoje korisnike i riješili problemi s lozinkama koje su u riziku." }, - "markCriticalApps": { - "message": "Označi kritične aplikacije" + "markCriticalApplications": { + "message": "Odaberi kritične aplikacije" }, "markAppAsCritical": { "message": "Označi aplikacije kao kritične" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Odznači kao kritično" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritična aplikacija uspješno odznačena" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Aplikacije uspješno odznačene kao kritične" }, "whatTypeOfItem": { "message": "Koja je ovo vrsta stavke?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Promijeni jezik web trezora." }, - "enableFavicon": { - "message": "Prikaži ikone mrežnih mjesta" - }, - "faviconDesc": { - "message": "Prikaži prepoznatljivu sliku pored svake prijave." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Zadano" @@ -7433,6 +7430,9 @@ "off": { "message": "Isključeno" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Članovi" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Pokreni vodič za implementaciju $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Promijeni rizičnu lozinku" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Ova prijava je ugrožena i nedostaje joj web-stranica. Dodaj web-stranicu i promijeni lozinku za veću sigurnost." + }, + "missingWebsite": { + "message": "Nedostaje web-stranica" + }, "removeUnlockWithPinPolicyTitle": { "message": "Ukloni otključavanje PIN-om" }, @@ -11071,6 +11086,12 @@ "message": "Za dodavanje kredita potrebna je adresa za naplatu.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Adresa za naplatu" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Potvrdi domenu kontektora ključa" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Plaćanje putem bankovnog računa dostupno je samo kupcima u SAD-u. Bit će potrebno potvrditi bankovni račun. Izvršit ćemo mikrodepozit u roku od sljedećih 1 - 2 radna dana. Ako ne potvrdiš bankovni račun, to će rezultirati propuštenom uplatom i obustavom tvoje pretplate." + }, + "verifyBankAccountWithStripe": { + "message": "Izvršili smo mikrodepozit na tvoj bankovni račun. To može potrajati 1 - 2 radna dana. Kada vidiš uplatu na svom računu, možeš ga potvrditi. Ako ne potvrdiš svoj bankovni račun, propuštena uplata će biti izvršena, a tvoja pretplata će biti obustavljena." + }, + "verifyNow": { + "message": "Potvrdi sada." } } - diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 4b654fe7ee8..3bb0aeeea6e 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Amint a felhasználók elmentik a bejelentkezéseket, itt megjelennek az alkalmazások és megjelenítik a veszélyeztetett jelszavakat. Jelöljük meg a kritikus alkalmazásokat és értesítsük a felhasználókat a jelszavak frissítéséről." }, - "noCriticalAppsTitle": { - "message": "Egyetlen alkalmazás sem lett megjelölve kritikusként." + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Válasszuk ki a legkritikusabb alkalmazásokat a veszélyeztetett jelszavak felfedezéséhez és értesítsük a felhasználókat a jelszavak megváltoztatásáról." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Kritikus alkalmazások megjelölése" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Alkalmazások megjelölése kritikusként" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Ktritkus jelölés eltávolítása" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "A ktritkus alkalmazás jelölés eltávolítása sikeres volt." + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Milyen típusú elem ez?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "A webes széf nyelvének megváltoztatása." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Alapértelmezett" @@ -7433,6 +7430,9 @@ "off": { "message": "Ki" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Tagok" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "$INTEGRATION$ megvalósítási útmutató elindítása.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Kockázatos jelszó megváltoztatása" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Feloldás eltávolítása PIN kóddal" }, @@ -11071,6 +11086,12 @@ "message": "A jóváírás hozzáadásához szükséges számlázási cím.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Számlázási cím" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "A Key Connector tartomány megerősítése" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index 79fb0753f50..9519a1fc52e 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Setelah pengguna menyimpan info masuk, aplikasi akan muncul di sini menampilkan sandi yang berisiko. Tandai aplikasi penting dan beri tahukan pengguna untuk memperbarui sandi." }, - "noCriticalAppsTitle": { - "message": "Anda belum menandai aplikasi apa pun Penting" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Jenis barang apa ini?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Ubah bahasa yang digunakan oleh brankas web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Bawaan" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Anggota" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index c56aba333b2..81b95476be1 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Quando gli utenti salvano i login, i relativi dati e le password a rischio sono mostrati qui. Contrassegna le applicazioni critiche e notifica agli utenti di aggiornare le password." }, - "noCriticalAppsTitle": { - "message": "Non hai contrassegnato nessuna applicazione come critica" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Seleziona le applicazioni critiche per scoprire le password a rischio e invitare gli utenti a modificarle." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Seleziona le applicazioni critiche" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Contrassegna l'applicazione come critica" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Contrassegna l'elemento come non critico" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Applicazione contrassegnata come non critica" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Che tipo di elemento è questo?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Cambia la lingua utilizzata dalla cassaforte web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Predefinito" @@ -7433,6 +7430,9 @@ "off": { "message": "No" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Membri" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Avvia la guida di $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Cambia parola d'accesso a rischio" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Rimuovi sblocco con PIN" }, @@ -11071,6 +11086,12 @@ "message": "Indirizzo di fatturazione richiesto per aggiungere credito.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Indirizzo di fatturazione" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Conferma dominio Key Connector" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 796960a79bd..cbf8192cb50 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "ユーザーがログイン情報を保存すると、アプリがここに表示され、リスクの高いパスワードがあれば表示されます。特に重要なアプリはマークして、パスワードを更新するようにユーザーに通知しましょう。" }, - "noCriticalAppsTitle": { - "message": "重要なアプリとしてマークしたものがありません" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "特に重要なアプリケーションを選択して、危険なパスワードを発見し、ユーザーにパスワードを変更するよう通知しましょう。" + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "重要なアプリをマークする" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "重要なアプリとしてマーク" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "重要なアプリケーションのマークを解除しました" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "このアイテムのタイプは何ですか?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "ウェブ保管庫で使用する言語を変更します。" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "デフォルト" @@ -7433,6 +7430,9 @@ "off": { "message": "オフ" }, + "connected": { + "message": "Connected" + }, "members": { "message": "メンバー" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "危険なパスワードの変更" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "PINによるロック解除を削除" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index e14a47d04ac..8e284f6cb99 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Რა სახის საგანია ეს?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 6b81195467a..f8c27cfcd7a 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index cd9e37bf64b..b1646f86b3c 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "ಇದು ಯಾವ ರೀತಿಯ ಐಟಂ?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "ವೆಬ್ ವಾಲ್ಟ್ ಬಳಸುವ ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಿ." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "ಡಿಫಾಲ್ಟ್" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 7dd6b691751..640edcd74ef 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "항목의 유형이 무엇입니까?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "웹 보관함에서 사용할 언어를 변경합니다." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "기본값" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "구성원" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 7b13ff3507a..91cc601a7e0 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Tiklīdz lietotāji saglabā pieteikšanās vienumus, šeit parādās lietotnes, norādot uz jebkurām riskam pakļautām parolēm. Atzīmēt kritiskās lietotnēs un apziņot lietotājus, lai atjaunina paroles." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Neviena lietotne nav atzīmēta kā kritiska" }, - "noCriticalAppsDescription": { - "message": "Atlasi kritiskākās lietotnes, la iatklātu riskam pakļautas paroles un apziņotu lietotājus, lai tās nomaina!" + "noCriticalApplicationsDescription": { + "message": "Atlasi savas visbūtiskākās lietotnes, lai lietotājiem izvirzīdu svarīgas drošības darbības, lai novērstu riskam pakļautas paroles." }, - "markCriticalApps": { - "message": "Atzīmēt kritiskās lietotnes" + "markCriticalApplications": { + "message": "Atlasīt būtiskās lietotnes" }, "markAppAsCritical": { "message": "Atzīmēt lietotni kā kritisku" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Noņemt kritiskuma atzīmi" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritiskas lietotnes atzīme sekmīgi noņemta" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Lietotnei sekmīgi noņemta būtiskuma atzīme" }, "whatTypeOfItem": { "message": "Kāda veida vienums tas ir?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Nomainīt tīmekļa glabātavā izmantoto valodu." }, - "enableFavicon": { - "message": "Rādīt tīmekļvietņu ikonas" - }, - "faviconDesc": { - "message": "Attēlot atpazīstamu attēlu pie katra pieteikšanās vienuma." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Noklusējums" @@ -7433,6 +7430,9 @@ "off": { "message": "Izslēgts" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Dalībnieki" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Palaist $INTEGRATION$ ieviešanas norādes.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Mainīt riskam pakļautu paroli" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Šis pieteikšanās vienums ir pakļauts riskam, un tam nav norādīta tīmekļvietne. Lielākai drošībai jāpievieno tīmekļvietne un jānomaina parole." + }, + "missingWebsite": { + "message": "Nav norādīta tīmekļvietne" + }, "removeUnlockWithPinPolicyTitle": { "message": "Noņemt atslēgšanu ar PIN" }, @@ -11071,6 +11086,12 @@ "message": "Norēķinu adrese ir nepieciešama, lai pievienot kredītu.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Norēķinu adrese" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Apstiprināt Key Connector domēnu" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Apmaksa ar bankas kontu ir pieejama tikai klientiem Savienotajās Valstīs. Būs nepieciešams apliecināt savu bankas kontu. Mēs veiksim sīkiemaksu nākamās darba dienas vai divu laikā. Bankas konta apliecināšanas neveikšana beigsies ar nokavētu maksājumu un apturētu abonementu." + }, + "verifyBankAccountWithStripe": { + "message": "Mēs veicām sīkiemaksu Tavā bankas kontā. Tas var aizņemt 1 līdz 2 darba dienas. Kad redzēsi iemaksu savā kontā, varēsi apliecināt savu bankas kontu. Bankas konta apliecināšans neveikšana beigsies ar nokavētu maksājumu un apturētu abonementu." + }, + "verifyNow": { + "message": "Apliecini tagad!" } } - diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index 912a9304ed6..e86cff3907d 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "ഇത് ഏതു തരം ഇനം ആണ്?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "അപ്ലിക്കേഷൻ ഉപയോഗിക്കുന്ന ഭാഷ മാറ്റുക. പുനരാരംഭിക്കൽ ആവശ്യമാണ്." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "സാധാരണ പോലെ" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index e668a0b27ed..05312608d36 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "अ‍ॅपला गंभीर म्हणून चिन्हांकित करा" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 6b81195467a..f8c27cfcd7a 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 205aaa63ae0..60605466c7b 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Hva slags element er dette?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Endre språket som brukes av netthvelvet." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Standard" @@ -7433,6 +7430,9 @@ "off": { "message": "Av" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Medlemmer" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Fakturaadresse" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index b60d8451c54..b60229a2de7 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "यो कस्तो प्रकारको वस्तु हो?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index 54d9138fa06..96d77b1c0a7 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Als gebruikers inloggegevens opslaan, verschijnen hier applicaties met wachtwoorden die risico lopen. Markeer belangrijke applicaties en attendeer gebruikers op het bijwerken van wachtwoorden." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Je hebt nog geen applicaties als belangrijk aangewezen" }, - "noCriticalAppsDescription": { - "message": "Wijs je meest belangrijke applicaties aan om risicovolle wachtwoorden te ontdekken en gebruikers te attenderen deze te wijzigen." + "noCriticalApplicationsDescription": { + "message": "Selecteer je meest belangrijke applicaties om prioriteit te geven aan beveiligingsacties voor je gebruikers om risico-wachtwoorden aan te pakken." }, - "markCriticalApps": { - "message": "Markeer belangrijke apps" + "markCriticalApplications": { + "message": "Belangrijke applicaties selecteren" }, "markAppAsCritical": { "message": "App aanwijzen als belangrijk" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Markeren als belangrijk ongedaan maken" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Markeren als belangrijke app ongedaan gemaakt" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Toepassing niet meer gemarkeerd als belangrijk" }, "whatTypeOfItem": { "message": "Van welke categorie is dit item?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "De taal van de webkluis aanpassen." }, - "enableFavicon": { - "message": "Websitepictogrammen weergeven" - }, - "faviconDesc": { - "message": "Een herkenbare afbeelding naast iedere login weergeven." + "showIconsChangePasswordUrls": { + "message": "Websitepictogrammen weergeven en URL's voor wachtwoordwijzigingen ophalen" }, "default": { "message": "Standaard" @@ -7433,6 +7430,9 @@ "off": { "message": "Uit" }, + "connected": { + "message": "Verbonden" + }, "members": { "message": "Leden" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "$INTEGRATION$ bijwerken", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "$INTEGRATION$ implementatiehandleiding openen.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Risicovol wachtwoord wijzigen" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Deze login is in gevaar en mist een website. Voeg een website toe en verander het wachtwoord voor een sterkere beveiliging." + }, + "missingWebsite": { + "message": "Ontbrekende website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Ontgrendelen met PIN verwijderen" }, @@ -11071,6 +11086,12 @@ "message": "Factuuradres vereist voor het toevoegen van krediet.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "Over deze instelling" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden gebruikt opgeslagen login-URI's om te bepalen welk pictogram of URL voor het wijzigen van het wachtwoord moet worden gebruikt om je ervaring te verbeteren. Er wordt geen informatie verzameld of opgeslagen wanneer je deze service gebruikt." + }, "billingAddress": { "message": "Factuuradres" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Key Connector-domein bevestigen" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Betaling met een bankrekening is alleen beschikbaar voor klanten in de Verenigde Staten. Je moet je bankrekening verifiëren. We zullen binnen 1-2 werkdagen een microbetaling uitvoeren. Als de bankrekening niet wordt geverifieerd, wordt er een betaling gemist en wordt je abonnement opgeschort." + }, + "verifyBankAccountWithStripe": { + "message": "We hebben een microbetaling op je bankrekening gedaan. Dit kan 1-2 werkdagen duren. Als je de betaling op je rekening ziet, kun je je bannkrekening verifiëren. Als de bankrekening niet wordt geverifieerd, wordt er een betaling gemist en wordt je abonnement opgeschort." + }, + "verifyNow": { + "message": "Nu verifiëren." } } - diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 932144903a1..9b9f2b708e9 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Kva type oppføring er dette?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 6b81195467a..f8c27cfcd7a 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index d0ea7376483..f808aaf27c3 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "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": "Nie oznaczyłeś żadnych aplikacji jako krytycznych" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Wybierz najbardziej krytyczne aplikacje, aby odkryć hasła zagrożone i poinformuj użytkowników, by zmienili te hasła." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Oznacz krytyczne aplikacje" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Oznacz aplikację jako krytyczną" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Krytyczna aplikacja została pomyślnie odznaczona" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Jakiego rodzaju jest to element?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Zmień język używany przez sejf." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Domyślny" @@ -7433,6 +7430,9 @@ "off": { "message": "Wyłączone" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Użytkownicy" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Uruchom przewodnik implementacyjny $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Zmień hasło zagrożone" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Usuń odblokowanie kodem PIN" }, @@ -11071,6 +11086,12 @@ "message": "Aby dodać środki, wymagany jest adres rozliczeniowy.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Adres rozliczeniowy" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index bd8fefc7302..c3235dc794d 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Como os usuários salvam as credenciais, os aplicativos aparecem aqui, mostrando qualquer senha de risco. Marque aplicativos críticos e notifique os usuários a atualizar senhas." }, - "noCriticalAppsTitle": { - "message": "Você não marcou nenhum aplicativo como Crítico" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Selecione suas aplicações mais críticas para descobrir senhas de risco e notifique os usuários a alterar essas senhas." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Marcar aplicativos críticos" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Marcar aplicativo como crítico" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Desmarcar como crítico" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Aplicação crítica desmarcada com sucesso" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Que tipo de item é este?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Altere o idioma usado pelo cofre web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Padrão" @@ -7433,6 +7430,9 @@ "off": { "message": "Desligado" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Membros" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Inicie o guia de implementação $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Alterar senhas vulneráveis" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remover desbloqueio com o PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index 78f8183abe0..3ccf1d9a208 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "À medida que os utilizadores guardam as credenciais, as aplicações aparecem aqui, mostrando quaisquer palavras-passe em risco. Marque as aplicações críticas e notifique os utilizadores para atualizarem as palavras-passe." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Não marcou nenhuma aplicação como crítica" }, - "noCriticalAppsDescription": { - "message": "Selecione as suas aplicações mais críticas para descobrir palavras-passe em risco e notifique os utilizadores para alterarem essas palavras-passe." + "noCriticalApplicationsDescription": { + "message": "Selecione as suas aplicações mais críticas para dar prioridade a ações de segurança para os seus utilizadores, de modo a resolver as palavras-passe em risco." }, - "markCriticalApps": { - "message": "Marcar apps críticas" + "markCriticalApplications": { + "message": "Selecionar aplicações críticas" }, "markAppAsCritical": { "message": "Marcar a app como crítica" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Desmarcar como crítica" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Aplicação crítica desmarcada com sucesso" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Aplicação desmarcada como crítica com sucesso" }, "whatTypeOfItem": { "message": "Que tipo de item é este?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Alterar o idioma utilizado pelo cofre web." }, - "enableFavicon": { - "message": "Mostrar ícones do site" - }, - "faviconDesc": { - "message": "Mostrar uma imagem reconhecível junto a cada credencial." + "showIconsChangePasswordUrls": { + "message": "Mostrar ícones de sites e recuperar URLs de alteração de palavra-passe" }, "default": { "message": "Predefinido" @@ -7433,6 +7430,9 @@ "off": { "message": "Desativado" }, + "connected": { + "message": "Ligado" + }, "members": { "message": "Membros" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Atualizar $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Lançar o guia de implementação da $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Alterar palavra-passe em risco" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Esta credencial está em risco e não tem um site. Adicione um site e altere a palavra-passe para uma segurança mais forte." + }, + "missingWebsite": { + "message": "Site em falta" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remover o desbloqueio com PIN" }, @@ -11071,6 +11086,12 @@ "message": "Endereço de faturação necessário para adicionar crédito.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "Acerca desta definição" + }, + "permitCipherDetailsDescription": { + "message": "O Bitwarden utilizará os URIs de credenciais guardadas para identificar qual o ícone ou URL de alteração de palavra-passe que deve ser utilizado para melhorar a sua experiência. Nenhuma informação é recolhida ou guardada quando utiliza este serviço." + }, "billingAddress": { "message": "Endereço de faturação" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirmar o domínio do Key Connector" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "O pagamento com uma conta bancária só está disponível para clientes nos Estados Unidos. Ser-lhe-á pedido que verifique a sua conta bancária. Efetuaremos um micro-depósito nos próximos 1-2 dias úteis. A não verificação da conta bancária resultará na perda de um pagamento e na suspensão da subscrição." + }, + "verifyBankAccountWithStripe": { + "message": "Efetuámos um micro-depósito na sua conta bancária. Isto pode demorar 1-2 dias úteis. Quando vir o depósito na sua conta, pode verificar a sua conta bancária. A não verificação da sua conta bancária resultará na falta de pagamento e a sua subscrição será suspensa." + }, + "verifyNow": { + "message": "Verificar agora." } } - diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 6c3532f1d9c..051e4c7df30 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "Nu ai marcat nicio aplicație drept critică" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Marchează aplicațiile critice" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Marchează aplicația drept critică" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Ce fel de articol este acesta?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Alegeți limba în care folosiți seiful web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Implicit" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index c34e78b45a8..38ecd2362c4 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "По мере сохранения пользователями логинов, здесь отображаются приложения, с подверженными риску паролями. Отметьте критичные приложения и уведомите пользователей об необходимости обновления пароля." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Вы не отметили ни одного приложения в качестве критичного" }, - "noCriticalAppsDescription": { - "message": "Выберите наиболее важные приложения, чтобы обнаружить пароли, подверженные риску, и уведомить пользователей о необходимости сменить эти пароли." + "noCriticalApplicationsDescription": { + "message": "Выберите наиболее критичные приложения, чтобы определить приоритетность действий по обеспечению безопасности для ваших пользователей при обработке паролей, подверженных риску." }, - "markCriticalApps": { - "message": "Отметить критичные приложения" + "markCriticalApplications": { + "message": "Выбрать критичные приложения" }, "markAppAsCritical": { "message": "Пометить приложение как критическое" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Снять отметку критического" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Отметка критического приложения успешно снята" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Приложение больше не является критичным" }, "whatTypeOfItem": { "message": "Выберите тип элемента" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Изменение языка, используемого веб-хранилищем." }, - "enableFavicon": { - "message": "Показать значки сайтов" - }, - "faviconDesc": { - "message": "Отображать узнаваемое изображение рядом с каждым логином." + "showIconsChangePasswordUrls": { + "message": "Показывать значки сайтов и извлекать URL изменения пароля" }, "default": { "message": "По умолчанию" @@ -7433,6 +7430,9 @@ "off": { "message": "Выкл" }, + "connected": { + "message": "Подключено" + }, "members": { "message": "Участники" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Обновить $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Запустить руководство по внедрению $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Изменить пароль, подверженный риску" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Отключить разблокировку PIN-кодом" }, @@ -11071,6 +11086,12 @@ "message": "Для пополнения счета необходим платежный адрес.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "Об этой настройке" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden будет использовать сохраненные URI логинов, чтобы определить, какой значок или URL для смены пароля следует использовать для улучшения вашего взаимодействия. При использовании этого сервиса никакая информация не собирается и не сохраняется." + }, "billingAddress": { "message": "Платежный адрес" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Подтвердите домен соединителя ключей" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Оплата с помощью банковского счета доступна только для клиентов в США. Вам потребуется подтвердить свой банковский счет. Мы сделаем микродепозит в течение следующих 1-2 рабочих дней. Неподтверждение банковского счета приведет к пропуску платежа и приостановке подписки." + }, + "verifyBankAccountWithStripe": { + "message": "Мы перевели микродепозит на ваш банковский счет. Это может занять 1-2 рабочих дня. Когда увидите пополнение вашего счета, вы сможете подтвердить его. Если вы не подтвердите банковский счет, это приведет к пропуску платежа и приостановке подписки." + }, + "verifyNow": { + "message": "Подтвердить сейчас." } } - diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index 15ee1dbcc77..87a829df6b3 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 06647fccb9c..ed0f2ba6a29 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Keď používatelia uložia prihlasovacie údaje, tu sa zobrazia aplikácie a ohrozené heslá. Označte kritické aplikácie a upozornite používateľov, aby si aktualizovali heslá." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Neoznačili ste žiadne aplikácie ako kritické" }, - "noCriticalAppsDescription": { - "message": "Pre odhalenie ohrozených hesiel a upozornenie používateľov aby si ich zmenili vyberte vaše najkritickejšie aplikácie." + "noCriticalApplicationsDescription": { + "message": "Vyberte najviac kritické aplikácie aby ste uprednostnili bezpečnostné aktivity vašich používateľov pri riešení ohrozených hesiel." }, - "markCriticalApps": { - "message": "Označiť kritické aplikácie" + "markCriticalApplications": { + "message": "Vybrať kritické aplikácie" }, "markAppAsCritical": { "message": "Označiť aplikáciu ako kritickú" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Zrušiť označenie za kritické" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Označenie aplikácie za kritickú úspešne zrušené" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Úspešne zrušené onačenie aplikácie za kritickú" }, "whatTypeOfItem": { "message": "Aký typ položky to je?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Zmeňte východzí jazyk pre webový trezor." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Predvolené" @@ -7433,6 +7430,9 @@ "off": { "message": "Vypnuté" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Členovia" }, @@ -9035,7 +9035,7 @@ } }, "limitCollectionCreationEnabled": { - "message": "Turned on Restrict collection creation setting $ID$.", + "message": "Zapnuté nastavenie obmedzenia vytvárania zbierky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9044,7 +9044,7 @@ } }, "limitCollectionCreationDisabled": { - "message": "Turned off Restrict collection creation setting $ID$.", + "message": "Vypnuté nastavenie obmedzenia vytvárania zbierky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9053,7 +9053,7 @@ } }, "limitCollectionDeletionEnabled": { - "message": "Turned on Restrict collection deletion setting $ID$.", + "message": "Zapnuté nastavenie obmedzenia vymazávania zbierky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9062,7 +9062,7 @@ } }, "limitCollectionDeletionDisabled": { - "message": "Turned off Restrict collection deletion setting $ID$.", + "message": "Vypnuté nastavenie obmedzenia vymazávania zbierky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9071,7 +9071,7 @@ } }, "limitItemDeletionEnabled": { - "message": "Turned on Restrict item deletion setting $ID$.", + "message": "Zapnuté nastavenie obmedzenia vymazávania položky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9080,7 +9080,7 @@ } }, "limitItemDeletionDisabled": { - "message": "Turned off Restrict item deletion setting $ID$.", + "message": "Vypnuté nastavenie obmedzenia vymazávania položky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9089,7 +9089,7 @@ } }, "allowAdminAccessToAllCollectionItemsEnabled": { - "message": "Turned on Allow owners and admins to manage all collections and items setting $ID$.", + "message": "Zapnuté povolenie vlastníkov a správcov spravovať všetky položky a zbierky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9098,7 +9098,7 @@ } }, "allowAdminAccessToAllCollectionItemsDisabled": { - "message": "Turned off Allow owners and admins to manage all collections and items setting $ID$.", + "message": "Vypnuté povolenie vlastníkov a správcov spravovať všetky položky a zbierky $ID$.", "placeholders": { "id": { "content": "$1", @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Zmeniť ohrozené heslo" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Toto prihlásenie je v ohrození a chýba mu webová stránka. Pridajte webovú stránku a zmeňte heslo na silnejšie zabezpečenie." + }, + "missingWebsite": { + "message": "Chýbajúca webová stránka" + }, "removeUnlockWithPinPolicyTitle": { "message": "Odstrániť odomknutie PIN kódom" }, @@ -11071,6 +11086,12 @@ "message": "Na pridanie kreditu je potrebná fakturačná adresa.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Fakturačná adresa" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Potvrdiť doménu Key Connectora" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Platba prostredníctvom bankového účtu je dostupná len pre zákazníkov v Spojených Štátoch. Budete musieť overiť svoj bankový účet. V priebehu nasledujúcich 1-2 pracovných dní vykonáme mikro vklad. Neoverenie bankového účtu bude mať za následok neuskutočnenie platby a pozastavenie vášho predplatného." + }, + "verifyBankAccountWithStripe": { + "message": "Na váš bankový účet sme vykonali mikro vklad. Môže to trvať 1-2 pracovné dni. Keď uvidíte vklad na vašom účte, môžete váš účet overiť. Neoverenie bankového účtu bude mať za následok neuskutočnenie platby a pozastavenie vášho predplatného." + }, + "verifyNow": { + "message": "Overiť teraz." } } - diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index 3cccdaa5261..f95a12b1a0d 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Katere vrste element je to?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Nastavite, v katerem jeziku uporabljate spletni trezor." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Privzeto" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index 3e25e856eff..f12adf9eb62 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "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" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Kog je tipa ovaj unos?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Promenite jezik veb trezora." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Podrazumevano" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/sr_CY/messages.json b/apps/web/src/locales/sr_CY/messages.json index 50173a81d4b..4c4d3bbb627 100644 --- a/apps/web/src/locales/sr_CY/messages.json +++ b/apps/web/src/locales/sr_CY/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Док корисници чувају пријаве, апликације се појављују овде, приказујући све ризичне лозинке. Означите критичне апликације и обавестите кориснике да ажурирају лозинке." }, - "noCriticalAppsTitle": { - "message": "Нисте означили ниједну апликацију као критичну" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Изаберите своје најкритичније апликације да бисте открили ризичне лозинке и обавестите кориснике да промене те лозинке." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Означите критичне апликације" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Означите апликацију као критичну" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Уклони као критично" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Успешно уклоњена ознака са критичне апликације" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Који је ово тип елемента?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Променити језик за Сеф." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Подразумевано" @@ -7433,6 +7430,9 @@ "off": { "message": "Искључено" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Чланови" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Покренути $INTEGRATION$ водич за имплементацију.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Променити ризичну лозинку" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Адреса за наплату је потребна за додавање кредита.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Адреса рачуна" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 09fbafad29f..f764139da86 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "När användare sparar inloggningar visas applikationer här och visar eventuella riskfyllda lösenord. Markera kritiska appar och meddela användarna att de ska uppdatera lösenorden." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Du har inte markerat några applikationer som kritiska" }, - "noCriticalAppsDescription": { - "message": "Välj ut dina mest kritiska applikationer för att upptäcka riskfyllda lösenord och meddela användarna att de ska byta lösenord." + "noCriticalApplicationsDescription": { + "message": "Välj dina mest kritiska program för att prioritera säkerhetsåtgärder för dina användare att adressera lösenord i riskzonen." }, - "markCriticalApps": { - "message": "Markera kritiska applikationer" + "markCriticalApplications": { + "message": "Välj kritiska applikationer" }, "markAppAsCritical": { "message": "Markera app som kritisk" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Avmarkera som kritisk" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritisk applikation avmarkerades" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Avmarkerade applikation som kritisk" }, "whatTypeOfItem": { "message": "Vilken typ av objekt är detta?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Ändra språket som används i webbvalvet." }, - "enableFavicon": { - "message": "Visa webbplatsikoner" - }, - "faviconDesc": { - "message": "Visa en igenkännbar bild bredvid varje inloggning." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Standard" @@ -7433,6 +7430,9 @@ "off": { "message": "Av" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Medlemmar" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Starta implementeringsguiden för $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Ändra lösenord för riskgrupper" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Denna inloggning är i riskzonen och saknar en webbplats. Lägg till en webbplats och ändra lösenordet för starkare säkerhet." + }, + "missingWebsite": { + "message": "Saknar webbplats" + }, "removeUnlockWithPinPolicyTitle": { "message": "Ta bort upplåsning med PIN-kod" }, @@ -11071,6 +11086,12 @@ "message": "Faktureringsadress krävs för att lägga till kredit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Faktureringsadress" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Bekräfta Key Connector-domän" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Betalning med ett bankkonto är endast tillgänglig för kunder i USA. Du kommer att behöva verifiera ditt bankkonto. Vi kommer att göra en mikroinsättning inom de närmaste 1-2 arbetsdagarna. Underlåtenhet att verifiera bankkontot kommer att resultera i en missad betalning och ditt abonnemang stängs av." + }, + "verifyBankAccountWithStripe": { + "message": "Vi har gjort en mikroinsättning till ditt bankkonto. Detta kan ta 1-2 arbetsdagar. När du ser insättningen på ditt konto kan du verifiera ditt bankkonto. Underlåtenhet att verifiera ditt bankkonto resulterar i en missad betalning och ditt abonnemang kommer att stängas av." + }, + "verifyNow": { + "message": "Verifiera nu." } } - diff --git a/apps/web/src/locales/ta/messages.json b/apps/web/src/locales/ta/messages.json index 2675c4bdb6e..639b2ddaf9b 100644 --- a/apps/web/src/locales/ta/messages.json +++ b/apps/web/src/locales/ta/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "பயனர்கள் உள்நுழைவுகளை சேமிக்கும்போது, ​​பயன்பாடுகள் இங்கே தோன்றி, எந்தவொரு ஆபத்தான கடவுச்சொற்களையும் காண்பிக்கும். முக்கியமான பயன்பாடுகளைக் குறியிட்டு, கடவுச்சொற்களைப் புதுப்பிக்க பயனர்களுக்குத் தெரிவிக்கவும்." }, - "noCriticalAppsTitle": { - "message": "நீங்கள் எந்தப் பயன்பாட்டையும் முக்கியமானது என்று குறியிடவில்லை" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "ஆபத்தான கடவுச்சொற்களைக் கண்டறிய உங்கள் மிக முக்கியமான பயன்பாடுகளைத் தேர்ந்தெடுத்து, அந்தக் கடவுச்சொற்களை மாற்ற பயனர்களுக்குத் தெரிவிக்கவும்." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "முக்கியமான பயன்பாடுகளைக் குறியிடு" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "பயன்பாட்டை முக்கியமானதாகக் குறியிடு" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "முக்கியமானதாக இருந்து குறியீட்டை நீக்கு" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "முக்கியமான பயன்பாட்டின் குறியீடு வெற்றிகரமாக நீக்கப்பட்டது" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "இது என்ன வகை உருப்படி?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "வெப் வால்ட் பயன்படுத்தும் மொழியை மாற்றவும்." }, - "enableFavicon": { - "message": "வலைத்தள ஐகான்களைக் காட்டு" - }, - "faviconDesc": { - "message": "ஒவ்வொரு உள்நுழைவுக்கும் அருகில் அடையாளம் காணக்கூடிய படத்தைக் காட்டு." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "இயல்புநிலை" @@ -7433,6 +7430,9 @@ "off": { "message": "நிறுத்தப்பட்டது" }, + "connected": { + "message": "Connected" + }, "members": { "message": "உறுப்பினர்கள்" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "$INTEGRATION$ செயல்முறை வழிகாட்டியைத் தொடங்கவும்.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "அபாயகரமான கடவுச்சொல்லை மாற்றவும்" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "பின் குறியீட்டைக் கொண்டு திறக்கும் வசதியை அகற்று" }, @@ -11071,6 +11086,12 @@ "message": "கடன் தொகையைச் சேர்க்க, பில்லிங் முகவரி தேவை.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "பில்லிங் முகவரி" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "கீ கனெக்டர் டொமைனை உறுதிப்படுத்தவும்" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 6b81195467a..f8c27cfcd7a 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index 7981e14b9db..dfe09c9a63b 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, - "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Mark critical apps" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Mark app as critical" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "What type of item is this?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Default" @@ -7433,6 +7430,9 @@ "off": { "message": "Off" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Members" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index af099018d13..fe9ac47046a 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Kullanıcılar oturum açma bilgilerini kaydettikçe, uygulamalar burada görünür ve risk altındaki parolaları gösterir. Kritik uygulamaları işaretleyin ve kullanıcıları parolalarını güncellemeleri için bilgilendirin." }, - "noCriticalAppsTitle": { + "noCriticalApplicationsTitle": { "message": "Hiçbir uygulamayı kritik olarak işaretlemediniz" }, - "noCriticalAppsDescription": { - "message": "Risk altındaki parolaları keşfetmek için en kritik uygulamalarınızı seçin ve kullanıcıları bu parolaları değiştirmeleri için bilgilendirin." + "noCriticalApplicationsDescription": { + "message": "Kullanıcılarınız için risk altındaki parolalara yönelik güvenlik eylemlerine öncelik vermek üzere en kritik uygulamalarınızı seçin." }, - "markCriticalApps": { - "message": "Kritik uygulamaları işaretleyin" + "markCriticalApplications": { + "message": "Kritik uygulamaları seçin" }, "markAppAsCritical": { "message": "Uygulamayı kritik olarak işaretle" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Kritik olarak işaretlemeyi kaldır" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Kritik uygulama işareti başarıyla kaldırıldı" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Uygulamanın kritik olarak işaretlenmesi başarıyla kaldırıldı" }, "whatTypeOfItem": { "message": "Bu kaydın türü nedir?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Web kasasında kullanılan dili değiştirin." }, - "enableFavicon": { - "message": "Web sitesi simgelerini göster" - }, - "faviconDesc": { - "message": "Hesapların yanında tanıdık görseller göster." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Varsayılan" @@ -2515,7 +2512,7 @@ "message": "İki aşamalı girişi olmayan hesaplar bulundu" }, "inactive2faFoundReportDesc": { - "message": "We found $COUNT$ website(s) in your $VAULT$ that may not be configured with two-step login (according to 2fa.directory). To further protect these accounts, you should set up two-step login.", + "message": "$VAULT$ kasasında iki aşamalı giriş kullanmıyor olabilecek $COUNT$ web sitesi bulduk (2fa.directory’ye göre). Bu hesapları daha iyi korumak için iki aşamalı girişi etkinleştirmelisiniz.", "placeholders": { "count": { "content": "$1", @@ -2543,7 +2540,7 @@ "message": "Açığa çıkmış parolalar bulundu" }, "exposedPasswordsFoundReportDesc": { - "message": "We found $COUNT$ items in your $VAULT$ that have passwords that were exposed in known data breaches. You should change them to use a new password.", + "message": "$VAULT$ kasasında, bilinen veri ihlallerine maruz kalmış parolalara sahip $COUNT$ kayıt bulundu. Bu parolaları değiştirmelisiniz.", "placeholders": { "count": { "content": "$1", @@ -2611,7 +2608,7 @@ "message": "Yeniden kullanılmış parolalar bulundu" }, "reusedPasswordsFoundReportDesc": { - "message": "We found $COUNT$ passwords that are being reused in your $VAULT$. You should change them to a unique value.", + "message": "$VAULT$ kasasında tekrar kullanılmakta olan $COUNT$ parola bulduk. Onları benzersiz parolalarla değiştirmelisiniz.", "placeholders": { "count": { "content": "$1", @@ -4243,7 +4240,7 @@ "message": "Hesabınıza normalde kullandığınız iki aşamalı giriş yöntemleriyle erişemiyorsanız iki aşamalı giriş kurtarma kodunuzu kullanarak heasbınızdaki tüm iki aşamalı giriş sağlayıcılarını kapatabilirsiniz." }, "logInBelowUsingYourSingleUseRecoveryCode": { - "message": "Log in below using your single-use recovery code. This will turn off all two-step providers on your account." + "message": "Tek kullanımlık kurtarma kodunuzu kullanarak aşağıdan giriş yapın. Bu, hesabınızdaki tüm iki adımlı sağlayıcıları kapatacaktır." }, "recoverAccountTwoStep": { "message": "Hesabı iki aşamalı girişten kurtar" @@ -4543,7 +4540,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "$LABEL$'i yeniden sıralayın. Kayıtı yukarı veya aşağı taşımak için ok tuşunu kullanın.", "placeholders": { "label": { "content": "$1", @@ -4552,7 +4549,7 @@ } }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ yukarı taşındı, konum: $LENGTH$'in $INDEX$'i", "placeholders": { "label": { "content": "$1", @@ -4569,7 +4566,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ aşağı taşındı, konum: $LENGTH$'in $INDEX$'i", "placeholders": { "label": { "content": "$1", @@ -5040,7 +5037,7 @@ "message": "Başlamak için kuruluşunuzun SSO tanımlayıcısını girin" }, "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": "SSO sağlayıcınızla giriş yapmak için, başlamak üzere kuruluşunuzun SSO tanımlayıcısını girin. Yeni bir cihazdan giriş yaptığınızda bu SSO tanımlayıcısını girmeniz gerekebilir." }, "enterpriseSingleSignOn": { "message": "Kurumsal çoklu oturum açma" @@ -5460,10 +5457,10 @@ "message": "Devam etmek istediğinizden emin misiniz?" }, "organizationDataOwnershipWarning1": { - "message": "will remain accessible to members" + "message": "üyelerin erişimine açık kalacaktır" }, "organizationDataOwnershipWarning2": { - "message": "will not be automatically selected when creating new items" + "message": "yeni kayıtlar oluşturulurken otomatik olarak seçilmeyecektir" }, "organizationDataOwnershipWarning3": { "message": "kullanıcı kapalı oluncaya kadar yönetici arayüzünden yönetilemez" @@ -5651,31 +5648,31 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, **or** try it now.'" }, "developmentDevOpsAndITTeamsChooseBWSecret": { - "message": "Development, DevOps, and IT teams choose Bitwarden Secrets Manager to securely manage and deploy their infrastructure and machine secrets." + "message": "Geliştirme, DevOps ve BT ekipleri, altyapılarını ve makine sırlarını güvenli bir şekilde yönetmek ve dağıtmak için Bitwarden Sır Yöneticisi'ni seçiyor." }, "centralizeSecretsManagement": { - "message": "Centralize secrets management." + "message": "Sır yönetimini merkezileştirin." }, "centralizeSecretsManagementDescription": { - "message": "Securely store and manage secrets in one location to prevent secret sprawl across your organization." + "message": "Kuruluşunuz genelinde gizli bilgilerin yayılmasını önlemek için gizli bilgileri tek bir konumda güvenli bir şekilde depolayın ve yönetin (gizli bilgi = sır)." }, "preventSecretLeaks": { "message": "Gizli sızıntıları önleyin." }, "preventSecretLeaksDescription": { - "message": "Protect secrets with end-to-end encryption. No more hard coding secrets or sharing through .env files." + "message": "Uçtan uca şifreleme ile sırları koruyun. Artık zor kodlama sırları veya .env dosyaları aracılığıyla paylaşım yok." }, "enhanceDeveloperProductivity": { "message": "Geliştirici üretkenliğini artırın." }, "enhanceDeveloperProductivityDescription": { - "message": "Programmatically retrieve and deploy secrets at runtime so developers can focus on what matters most, like improving code quality." + "message": "Sırları çalışma zamanında programlı olarak alın ve dağıtın, böylece geliştiriciler kod kalitesini artırmak gibi en önemli şeylere odaklanabilirler." }, "strengthenBusinessSecurity": { "message": "İş güvenliğini güçlendirin." }, "strengthenBusinessSecurityDescription": { - "message": "Maintain tight control over machine and human access to secrets with SSO integrations, event logs, and access rotation." + "message": "SSO entegrasyonları, olay günlükleri ve erişim rotasyonu ile sırlara makine ve insan erişimi üzerinde sıkı kontrol sağlayın." }, "tryItNow": { "message": "Şimdi deneyin" @@ -5699,7 +5696,7 @@ "message": "Sır Yöneticisi'ni denemek için yöneticinizden onay almanız gerekir." }, "smAccessRequestEmailSent": { - "message": "Access request for secrets manager email sent to admins." + "message": "Yöneticilere gönderilen sır yöneticisi e-postası için erişim talebi." }, "requestAccessSMDefaultEmailContent": { "message": "Selam,\n\nEkibimiz için Bitwarden Sır Yöneticisi aboneliği talep ediyorum. Desteğiniz çok anlamlı olacaktır!\n\nBitwarden Sır Yöneticisi, API anahtarları, veritabanı parolaları ve kimlik doğrulama sertifikaları gibi makine kimlik bilgilerini güvenli bir şekilde depolamak, paylaşmak ve dağıtmak için uçtan uca şifrelenmiş bir gizli bilgi yönetimi çözümüdür.\n\nSır Yöneticisi bize şu konularda yardımcı olacaktır:\n\n- Güvenliği artırmak\n- Operasyonları kolaylaştırmak\n- Maliyetli gizli bilgi sızıntılarını önlemek\n\nEkibimiz için ücretsiz deneme talep etmek için lütfen Bitwarden ile iletişime geçin.\n\nYardımlarınız için teşekkür ederiz!" @@ -6019,7 +6016,7 @@ "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "accountRecoveryManageUsers": { - "message": "Manage users must also be granted with the manage account recovery permission" + "message": "\"Hesap kurtarmayı yönet\" izniyle birlikte \"Kullanıcıları yönet\" izni de verilmelidir" }, "setupProvider": { "message": "Sağlayıcı kurulumu" @@ -7413,10 +7410,10 @@ "message": "Hesabınız için Duo iki adımlı giriş gereklidir." }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "Hesabınız için Duo iki adımlı giriş gereklidir. Giriş işlemini tamamlamak için aşağıdaki adımları izleyin." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Girişi tamamlamak için aşağıdaki adımları izleyin." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { "message": "Güvenlik anahtarınızla girişi tamamlamak için aşağıdaki adımları izleyin." @@ -7433,6 +7430,9 @@ "off": { "message": "Kapalı" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Üyeler" }, @@ -7832,7 +7832,7 @@ "description": "Title for the section displaying access tokens." }, "createAccessToken": { - "message": "Create access token", + "message": "Erişim anahtarı oluştur", "description": "Button label for creating a new access token." }, "expires": { @@ -7931,7 +7931,7 @@ "message": "Kullanıcıları bu gruba ekleyerek koleksiyonlara erişim izni verin." }, "restrictedCollectionAssignmentDesc": { - "message": "You can only assign collections you manage." + "message": "Yalnızca yönettiğiniz koleksiyonları atayabilirsiniz." }, "selectMembers": { "message": "Üyeleri seçin" @@ -8087,7 +8087,7 @@ "message": "Grupları seçin" }, "userPermissionOverrideHelperDesc": { - "message": "Permissions set for a member will replace permissions set by that member's group." + "message": "Bir üye için ayarlanan izinler, o üyenin grubu tarafından ayarlanan izinlerin yerini alacak." }, "noMembersOrGroupsAdded": { "message": "Hiç üye veya grup eklenmedi" @@ -8102,7 +8102,7 @@ "message": "Üye davet et" }, "addSponsorship": { - "message": "Add sponsorship" + "message": "Sponsorluk ekle" }, "needsConfirmation": { "message": "Onay gerekli" @@ -8192,7 +8192,7 @@ "message": "Dosya yükleme" }, "upload": { - "message": "Upload" + "message": "Yükle" }, "acceptedFormats": { "message": "Kabul edilen biçimler:" @@ -8300,10 +8300,10 @@ "message": "Sır Yöneticisi" }, "secretsManagerAccessDescription": { - "message": "Activate user access to Secrets Manager." + "message": "Sır Yöneticisi'ne kullanıcı erişimini etkinleştirin." }, "userAccessSecretsManagerGA": { - "message": "This user can access Secrets Manager" + "message": "Bu kullanıcı Sır Yöneticisi'ne erişebilir" }, "important": { "message": "Önemli:" @@ -8334,7 +8334,7 @@ "message": "İçe aktarma dosyası okunurken bir hata oluştu" }, "accessedSecretWithId": { - "message": "Accessed a secret with identifier: $SECRET_ID$", + "message": "Tanımlayıcısı: $SECRET_ID$ olan bir sırra erişildi", "placeholders": { "secret_id": { "content": "$1", @@ -8352,7 +8352,7 @@ } }, "editedSecretWithId": { - "message": "Edited a secret with identifier: $SECRET_ID$", + "message": "Tanımlayıcısı: $SECRET_ID$ olan bir sır düzenlendi", "placeholders": { "secret_id": { "content": "$1", @@ -8361,7 +8361,7 @@ } }, "deletedSecretWithId": { - "message": "Deleted a secret with identifier: $SECRET_ID$", + "message": "Tanımlayıcısı: $SECRET_ID$ olan bir sır silindi", "placeholders": { "secret_id": { "content": "$1", @@ -8370,7 +8370,7 @@ } }, "permanentlyDeletedSecretWithId": { - "message": "Permanently deleted a secret with identifier: $SECRET_ID$", + "message": "Tanımlayıcısı: $SECRET_ID$ olan bir sır kalıcı olarak silindi", "placeholders": { "secret_id": { "content": "$1", @@ -8379,7 +8379,7 @@ } }, "restoredSecretWithId": { - "message": "Restored a secret with identifier: $SECRET_ID$", + "message": "Tanımlayıcısı: $SECRET_ID$ olan bir sır geri yüklendi", "placeholders": { "secret_id": { "content": "$1", @@ -8388,7 +8388,7 @@ } }, "createdSecretWithId": { - "message": "Created a new secret with identifier: $SECRET_ID$", + "message": "Tanımlayıcısı: $SECRET_ID$ olan yeni bir sır oluşturuldu", "placeholders": { "secret_id": { "content": "$1", @@ -8397,7 +8397,7 @@ } }, "accessedProjectWithId": { - "message": "Accessed a project with Id: $PROJECT_ID$.", + "message": "Kimliği: $PROJECT_ID$ olan bir projeye erişildi.", "placeholders": { "project_id": { "content": "$1", @@ -8406,7 +8406,7 @@ } }, "nameUnavailableProjectDeleted": { - "message": "Deleted project Id: $PROJECT_ID$", + "message": "Proje kimliği silindi: $PROJECT_ID$", "placeholders": { "project_id": { "content": "$1", @@ -8415,7 +8415,7 @@ } }, "nameUnavailableSecretDeleted": { - "message": "Deleted secret Id: $SECRET_ID$", + "message": "Sır kimliği silindi: $SECRET_ID$", "placeholders": { "secret_id": { "content": "$1", @@ -8424,7 +8424,7 @@ } }, "editedProjectWithId": { - "message": "Edited a project with identifier: $PROJECT_ID$", + "message": "Tanımlayıcısı: $PROJECT_ID$ olan bir proje düzenlendi", "placeholders": { "project_id": { "content": "$1", @@ -8433,7 +8433,7 @@ } }, "deletedProjectWithId": { - "message": "Deleted a project with identifier: $PROJECT_ID$", + "message": "Tanımlayıcısı: $PROJECT_ID$ olan bir proje silindi", "placeholders": { "project_id": { "content": "$1", @@ -8442,7 +8442,7 @@ } }, "createdProjectWithId": { - "message": "Created a new project with identifier: $PROJECT_ID$", + "message": "Tanımlayıcısı: $PROJECT_ID$ olan yeni bir proje oluşturuldu", "placeholders": { "project_id": { "content": "$1", @@ -8647,19 +8647,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.'" }, "memberDecryptionOptionTdeDescLink2": { - "message": "SSO required", + "message": "SSO zorunlu", "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": "ilkesi ve", "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": "hesap kurtarma yönetimi", "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": "ilkesi bu seçenek kullanıldığında açılacaktır.", "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": { @@ -8699,7 +8699,7 @@ "message": "Kullanıcı, hesap kurtarma yoluyla verilen bir parolayı güncelledi." }, "activatedAccessToSecretsManager": { - "message": "Activated access to Secrets Manager", + "message": "Sır Yöneticisi'ne erişim etkinleştirildi", "description": "Confirmation message that one or more users gained access to Secrets Manager" }, "activateAccess": { @@ -8710,7 +8710,7 @@ "description": "This description is shown to an admin when they are attempting to add more users to Secrets Manager." }, "activateSecretsManager": { - "message": "Activate Secrets Manager" + "message": "Sır Yöneticisi'ni Etkinleştir" }, "yourOrganizationsFingerprint": { "message": "Kuruluşunuzun parmak izi ifadesi", @@ -8738,16 +8738,16 @@ "message": "İsteği onayla" }, "deviceApproved": { - "message": "Device approved" + "message": "Cihaz onaylandı" }, "deviceRemoved": { - "message": "Device removed" + "message": "Cihaz kaldırıldı" }, "removeDevice": { "message": "Cihazı kaldır" }, "removeDeviceConfirmation": { - "message": "Are you sure you want to remove this device?" + "message": "Cihazı kaldırmak istediğinizden emin misiniz?" }, "noDeviceRequests": { "message": "Cihaz isteği yok" @@ -8783,7 +8783,7 @@ "message": "Removing members who do not have master passwords without setting one for them may restrict access to their full account." }, "approvedAuthRequest": { - "message": "Approved device for $ID$.", + "message": "$ID$ için cihaz onaylandı.", "placeholders": { "id": { "content": "$1", @@ -8792,7 +8792,7 @@ } }, "rejectedAuthRequest": { - "message": "Denied device for $ID$.", + "message": "$ID$ için cihaz reddedildi.", "placeholders": { "id": { "content": "$1", @@ -8861,7 +8861,7 @@ "message": "Kullanıcıları davet et" }, "secretsManagerForPlan": { - "message": "Secrets Manager for $PLAN$", + "message": "$PLAN$ için Sır Yöneticisi", "placeholders": { "plan": { "content": "$1", @@ -8873,7 +8873,7 @@ "message": "For engineering and DevOps teams to manage secrets throughout the software development lifecycle." }, "free2PersonOrganization": { - "message": "Free 2-person Organizations" + "message": "Ücretsiz 2 Kişilik Kuruluşlar" }, "unlimitedSecrets": { "message": "Sınırsız sır" @@ -8915,10 +8915,10 @@ "message": "Add Secrets Manager to your upgraded plan to maintain access to any secrets created with your previous plan." }, "additionalServiceAccounts": { - "message": "Additional service accounts" + "message": "İlave hizmet hesapları" }, "includedServiceAccounts": { - "message": "Your plan comes with $COUNT$ service accounts.", + "message": "Planınız $COUNT$ hizmet hesabıyla birlikte gelir.", "placeholders": { "count": { "content": "$1", @@ -8927,7 +8927,7 @@ } }, "addAdditionalServiceAccounts": { - "message": "You can add additional service accounts for $COST$ per month.", + "message": "Aylık $COST$ karşılığında ilave hizmet hesapları ekleyebilirsiniz.", "placeholders": { "cost": { "content": "$1", @@ -8936,7 +8936,7 @@ } }, "collectionManagement": { - "message": "Collection management" + "message": "Koleksiyon yönetimi" }, "collectionManagementDescription": { "message": "Kuruluş için koleksiyon davranışını yapılandır" @@ -8945,10 +8945,10 @@ "message": "Allow owners and admins to manage all collections and items from the Admin Console" }, "restrictCollectionCreationDescription": { - "message": "Restrict collection creation to owners and admins" + "message": "Koleksiyon oluşturmayı sahipler ve yöneticilerle kısıtla" }, "restrictCollectionDeletionDescription": { - "message": "Restrict collection deletion to owners and admins" + "message": "Koleksiyon silme işlemini sahipler ve yöneticilerle kısıtla" }, "restrictItemDeletionDescriptionStart": { "message": "Restrict item deletion to members with the ", @@ -8959,31 +8959,31 @@ "description": "This will be used as part of a larger sentence, broken up to allow styling of the middle portion. Full sentence: 'Restrict item deletion to members with the [Manage collection] permission'" }, "updatedCollectionManagement": { - "message": "Updated collection management setting" + "message": "Güncellenmiş koleksiyon yönetimi ayarı" }, "passwordManagerPlanPrice": { - "message": "Password Manager plan price" + "message": "Parola Yöneticisi plan fiyatı" }, "secretsManagerPlanPrice": { - "message": "Secrets Manager plan price" + "message": "Sır Yöneticisi plan fiyatı" }, "passwordManager": { "message": "Parola Yöneticisi" }, "freeOrganization": { - "message": "Free Organization" + "message": "Ücretsiz Kuruluş" }, "limitServiceAccounts": { - "message": "Limit service accounts (optional)" + "message": "Hizmet hesaplarını sınırlayın (isteğe bağlı)" }, "limitServiceAccountsDesc": { - "message": "Set a limit for your service accounts. Once this limit is reached, you will not be able to create new service accounts." + "message": "Hizmet hesaplarınız için bir limit belirleyin. Bu sınıra ulaşıldığında, yeni hizmet hesapları oluşturamazsınız." }, "serviceAccountLimit": { - "message": "Service account limit (optional)" + "message": "Hizmet hesabı limiti (isteğe bağlı)" }, "maxServiceAccountCost": { - "message": "Max potential service account cost" + "message": "Maksimum potansiyel hizmet hesabı maliyeti" }, "loggedInExclamation": { "message": "Giriş yapıldı!" @@ -8992,16 +8992,16 @@ "message": "Beta" }, "assignCollectionAccess": { - "message": "Assign collection access" + "message": "Koleksiyon erişimi ata" }, "editedCollections": { - "message": "Edited collections" + "message": "Düzenlenmiş koleksiyonlar" }, "baseUrl": { "message": "Sunucu URL'si" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "Kendi kendine barındırılan sunucu URL'si", "description": "Label for field requesting a self-hosted integration service URL" }, "alreadyHaveAccount": { @@ -9035,7 +9035,7 @@ } }, "limitCollectionCreationEnabled": { - "message": "Turned on Restrict collection creation setting $ID$.", + "message": "Koleksiyon oluşturmayı kısıtlamak için $ID$ ayarı açıldı.", "placeholders": { "id": { "content": "$1", @@ -9044,7 +9044,7 @@ } }, "limitCollectionCreationDisabled": { - "message": "Turned off Restrict collection creation setting $ID$.", + "message": "Koleksiyon oluşturmayı kısıtlamak için $ID$ ayarı kapatıldı.", "placeholders": { "id": { "content": "$1", @@ -9053,7 +9053,7 @@ } }, "limitCollectionDeletionEnabled": { - "message": "Turned on Restrict collection deletion setting $ID$.", + "message": "Koleksiyon silmeyi kısıtlamak için $ID$ ayarı açıldı.", "placeholders": { "id": { "content": "$1", @@ -9062,7 +9062,7 @@ } }, "limitCollectionDeletionDisabled": { - "message": "Turned off Restrict collection deletion setting $ID$.", + "message": "Koleksiyon silmeyi kısıtlamak için $ID$ ayarı kapatıldı.", "placeholders": { "id": { "content": "$1", @@ -9071,7 +9071,7 @@ } }, "limitItemDeletionEnabled": { - "message": "Turned on Restrict item deletion setting $ID$.", + "message": "Kayıt silmeyi kısıtlamak için $ID$ ayarı açıldı.", "placeholders": { "id": { "content": "$1", @@ -9080,7 +9080,7 @@ } }, "limitItemDeletionDisabled": { - "message": "Turned off Restrict item deletion setting $ID$.", + "message": "Kayıt silmeyi kısıtlamak için $ID$ ayarı kapatıldı.", "placeholders": { "id": { "content": "$1", @@ -9089,7 +9089,7 @@ } }, "allowAdminAccessToAllCollectionItemsEnabled": { - "message": "Turned on Allow owners and admins to manage all collections and items setting $ID$.", + "message": "Sahiplerin ve yöneticilerin $ID$ ayarlı tüm koleksiyonları ve kayıtları yönetmesine izin verme seçeneği açıldı.", "placeholders": { "id": { "content": "$1", @@ -9098,7 +9098,7 @@ } }, "allowAdminAccessToAllCollectionItemsDisabled": { - "message": "Turned off Allow owners and admins to manage all collections and items setting $ID$.", + "message": "Sahiplerin ve yöneticilerin $ID$ ayarlı tüm koleksiyonları ve kayıtları yönetmesine izin verme seçeneği kapatıldı.", "placeholders": { "id": { "content": "$1", @@ -9123,19 +9123,19 @@ "message": "Bu Gönderim yüklenirken beklenmeyen bir hata oluştu. Daha sonra tekrar deneyin." }, "seatLimitReached": { - "message": "Seat limit has been reached" + "message": "Yer limitine ulaşıldı" }, "contactYourProvider": { - "message": "Contact your provider to purchase additional seats." + "message": "Ek yerler satın almak için sağlayıcınızla iletişime geçin." }, "seatLimitReachedContactYourProvider": { - "message": "Seat limit has been reached. Contact your provider to purchase additional seats." + "message": "Yer limitine ulaşıldı. Ek yerler satın almak için sağlayıcınızla iletişime geçin." }, "collectionAccessRestricted": { "message": "Koleksiyona erişim kısıtlı" }, "readOnlyCollectionAccess": { - "message": "You do not have access to manage this collection." + "message": "Bu koleksiyonu yönetmek için erişiminiz yok." }, "grantManageCollectionWarningTitle": { "message": "Missing Manage Collection Permissions" @@ -9172,7 +9172,7 @@ "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Eşleşme tespiti hakkında daha fazla bilgi", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { @@ -9226,7 +9226,7 @@ "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "movingToAnotherTool": { - "message": "Moving to another tool", + "message": "Başka bir araca geçme", "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "tooDifficultToUse": { @@ -9263,7 +9263,7 @@ "message": "Kendinizi gruplara ekleyemezsiniz." }, "cannotAddYourselfToCollections": { - "message": "You cannot add yourself to collections." + "message": "Kendinizi koleksiyonlara ekleyemezsiniz." }, "assign": { "message": "Ata" @@ -9275,10 +9275,10 @@ "message": "Bu koleksiyonlara ata" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Only organization members with access to these collections will be able to see the item." + "message": "Yalnızca bu koleksiyonlara erişimi olan kuruluş üyeleri kayıtı görebilecektir." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Only organization members with access to these collections will be able to see the items." + "message": "Yalnızca bu koleksiyonlara erişimi olan kuruluş üyeleri kayıtları görebilecektir." }, "selectCollectionsToAssign": { "message": "Atanacak koleksiyonları seçin" @@ -9312,10 +9312,10 @@ "message": "Kayıtlar" }, "assignedSeats": { - "message": "Assigned seats" + "message": "Atanmış yerler" }, "assigned": { - "message": "Assigned" + "message": "Atandı" }, "used": { "message": "Kullanılan" @@ -9324,32 +9324,32 @@ "message": "Kalan" }, "unlinkOrganization": { - "message": "Unlink organization" + "message": "Kuruluş bağlantısını kaldır" }, "manageSeats": { - "message": "MANAGE SEATS" + "message": "YERLERİ YÖNET" }, "manageSeatsDescription": { - "message": "Adjustments to seats will be reflected in the next billing cycle." + "message": "Yerlerde yapılacak ayarlamalar bir sonraki faturalandırma döngüsüne yansıtılacaktır." }, "unassignedSeatsDescription": { - "message": "Unassigned seats" + "message": "Atanmamış yerler" }, "purchaseSeatDescription": { - "message": "Additional seats purchased" + "message": "Satın alınan ek yerler" }, "assignedSeatCannotUpdate": { - "message": "Assigned Seats can not be updated. Please contact your organization owner for assistance." + "message": "Atanmış Yerler güncellenemez. Yardım için lütfen kuruluş sahibinizle iletişime geçin." }, "subscriptionUpdateFailed": { - "message": "Subscription update failed" + "message": "Abonelik güncellemesi başarısız oldu" }, "trial": { "message": "Deneme", "description": "A subscription status label." }, "pastDue": { - "message": "Past due", + "message": "Vadesi geçmiş", "description": "A subscription status label" }, "subscriptionExpired": { @@ -9385,11 +9385,11 @@ "description": "A warning shown to the user when their subscription is past due and they pay via invoice." }, "unpaidInvoice": { - "message": "Unpaid invoice", + "message": "Ödenmemiş fatura", "description": "The header of a warning box shown to a user whose subscription is unpaid." }, "toReactivateYourSubscription": { - "message": "To reactivate your subscription, please resolve the past due invoices.", + "message": "Aboneliğinizi yeniden etkinleştirmek için lütfen vadesi geçmiş faturaları çözün.", "description": "The body of a warning box shown to a user whose subscription is unpaid." }, "cancellationDate": { @@ -9397,7 +9397,7 @@ "description": "The date header used when a subscription is cancelled." }, "machineAccountsCannotCreate": { - "message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance." + "message": "Askıya alınan kuruluşlarda makine hesapları oluşturulamaz. Lütfen yardım için kuruluşunuzun sahibiyle iletişime geçin." }, "machineAccount": { "message": "Makine hesabı", @@ -9527,7 +9527,7 @@ "message": "İlave makine hesapları" }, "includedMachineAccounts": { - "message": "Your plan comes with $COUNT$ machine accounts.", + "message": "Planınız $COUNT$ makine hesabıyla birlikte gelir.", "placeholders": { "count": { "content": "$1", @@ -9536,7 +9536,7 @@ } }, "addAdditionalMachineAccounts": { - "message": "You can add additional machine accounts for $COST$ per month.", + "message": "Aylık $COST$ karşılığında ilave makine hesapları ekleyebilirsiniz.", "placeholders": { "cost": { "content": "$1", @@ -9545,16 +9545,16 @@ } }, "limitMachineAccounts": { - "message": "Limit machine accounts (optional)" + "message": "Makine hesaplarını sınırlayın (isteğe bağlı)" }, "limitMachineAccountsDesc": { - "message": "Set a limit for your machine accounts. Once this limit is reached, you will not be able to create new machine accounts." + "message": "Makine hesaplarınız için bir limit belirleyin. Bu sınıra ulaşıldığında, yeni makine hesapları oluşturamazsınız." }, "machineAccountLimit": { - "message": "Machine account limit (optional)" + "message": "Makine hesabı limiti (isteğe bağlı)" }, "maxMachineAccountCost": { - "message": "Max potential machine account cost" + "message": "Maksimum potansiyel makine hesabı maliyeti" }, "machineAccountAccessUpdated": { "message": "Makine hesabı erişimi güncellendi" @@ -9563,7 +9563,7 @@ "message": "Kendinizi gruba ekleyemezsiniz." }, "deleteProvider": { - "message": "Delete provider" + "message": "Sağlayıcıyı sil" }, "deleteProviderConfirmation": { "message": "Deleting a provider is permanent and irreversible. Enter your master password to confirm the deletion of the provider and all associated data." @@ -9578,7 +9578,7 @@ } }, "deleteProviderWarningDescription": { - "message": "You must unlink all clients before you can delete $ID$.", + "message": "$ID$'yi silmeden önce tüm istemcilerin bağlantısını kaldırmanız gerekir.", "placeholders": { "id": { "content": "$1", @@ -9590,46 +9590,46 @@ "message": "Sağlayıcı silindi" }, "providerDeletedDesc": { - "message": "The Provider and all associated data has been deleted." + "message": "Sağlayıcı ve ilişkili tüm veriler silindi." }, "deleteProviderRecoverConfirmDesc": { - "message": "You have requested to delete this Provider. Use the button below to confirm." + "message": "Bu Sağlayıcının silinmesini talep ettiniz. Onaylamak için aşağıdaki düğmeyi kullanın." }, "deleteProviderWarning": { - "message": "Deleting your provider is permanent. It cannot be undone." + "message": "Sağlayıcınızı silmek kalıcıdır. Geri alınamaz." }, "errorAssigningTargetCollection": { - "message": "Error assigning target collection." + "message": "Hedef koleksiyon atama hatası." }, "errorAssigningTargetFolder": { - "message": "Error assigning target folder." + "message": "Hedef klasör atama hatası." }, "integrationsAndSdks": { - "message": "Integrations & SDKs", + "message": "Entegrasyonlar & SDK'lar", "description": "The title for the section that deals with integrations and SDKs." }, "integrations": { "message": "Entegrasyonlar" }, "integrationsDesc": { - "message": "Automatically sync secrets from Bitwarden Secrets Manager to a third-party service." + "message": "Sırları Bitwarden Sır Yöneticisi'nden üçüncü taraf bir hizmetle otomatik olarak eşitleyin." }, "sdks": { - "message": "SDKs" + "message": "SDK'lar" }, "sdksDesc": { - "message": "Use Bitwarden Secrets Manager SDK in the following programming languages to build your own applications." + "message": "Kendi uygulamalarınızı oluşturmak için aşağıdaki programlama dillerinde Bitwarden Sır Yöneticisi SDK'yı kullanın." }, "ssoDescStart": { - "message": "Configure", + "message": "Yapılandır:", "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": "Kimlik Sağlayıcınızın uygulama kılavuzunu kullanarak Bitwarden için.", "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": "Kullanıcı hazırlama" }, "scimIntegration": { "message": "SCIM" @@ -9643,46 +9643,55 @@ "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" + "message": "Bitwarden Dizin Bağlayıcısı" }, "bwdcDesc": { "message": "Configure Bitwarden Directory Connector to automatically provision users and groups using the implementation guide for your Identity Provider." }, "eventManagement": { - "message": "Event management" + "message": "Olay yönetimi" }, "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": "Cihaz yönetimi" }, "deviceManagementDesc": { - "message": "Configure device management for Bitwarden using the implementation guide for your platform." + "message": "Platformunuz için uygulama kılavuzunu kullanarak Bitwarden için cihaz yönetimini yapılandırın." }, "crowdstrikeEventIntegrationDesc": { "message": "Etkinlik verilerini Logscale'e gönderin" }, "failedToSaveIntegration": { - "message": "Failed to save integration. Please try again later." + "message": "Entegrasyon kaydedilemedi. Lütfen daha sonra tekrar deneyin." }, "deviceIdMissing": { - "message": "Device ID is missing" + "message": "Cihaz kimliği eksik" }, "deviceTypeMissing": { - "message": "Device type is missing" + "message": "Cihaz türü eksik" }, "deviceCreationDateMissing": { - "message": "Device creation date is missing" + "message": "Cihaz oluşturma tarihi eksik" }, "desktopRequired": { - "message": "Desktop required" + "message": "Masaüstü gerekli" }, "reopenLinkOnDesktop": { - "message": "Reopen this link from your email on a desktop." + "message": "Bu bağlantıyı e-postanızdan bir masaüstünde yeniden açın." }, "connectIntegrationButtonDesc": { - "message": "Connect $INTEGRATION$", + "message": "$INTEGRATION$ Entegrasyonuna Bağlan", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", "placeholders": { "integration": { "content": "$1", @@ -9691,7 +9700,7 @@ } }, "integrationCardTooltip": { - "message": "Launch $INTEGRATION$ implementation guide.", + "message": "$INTEGRATION$ uygulama kılavuzunu başlatın.", "placeholders": { "integration": { "content": "$1", @@ -9700,7 +9709,7 @@ } }, "smIntegrationTooltip": { - "message": "Set up $INTEGRATION$.", + "message": "$INTEGRATION$ entegrasyonunu ayarlayın.", "placeholders": { "integration": { "content": "$1", @@ -9709,7 +9718,7 @@ } }, "smSdkTooltip": { - "message": "View $SDK$ repository", + "message": "$SDK$ deposunu görüntüle", "placeholders": { "sdk": { "content": "$1", @@ -9718,7 +9727,7 @@ } }, "integrationCardAriaLabel": { - "message": "open $INTEGRATION$ implementation guide in a new tab.", + "message": "yeni bir sekmede $INTEGRATION$ uygulama kılavuzunu açın.", "placeholders": { "integration": { "content": "$1", @@ -9727,7 +9736,7 @@ } }, "smSdkAriaLabel": { - "message": "view $SDK$ repository in a new tab.", + "message": "$SDK$ deposunu yeni bir sekmede görüntüleyin.", "placeholders": { "sdk": { "content": "$1", @@ -9736,7 +9745,7 @@ } }, "smIntegrationCardAriaLabel": { - "message": "set up $INTEGRATION$ implementation guide in a new tab.", + "message": "yeni bir sekmede $INTEGRATION$ uygulama kılavuzunu kurun.", "placeholders": { "integration": { "content": "$1", @@ -9751,10 +9760,10 @@ "message": "URL" }, "bearerToken": { - "message": "Bearer Token" + "message": "Taşıyıcı Erişim Anahtarı" }, "index": { - "message": "Index" + "message": "İndeks" }, "selectAPlan": { "message": "Bir plan seçin" @@ -9763,19 +9772,19 @@ "message": "35% indirim" }, "monthPerMember": { - "message": "month per member" + "message": "üye başına aylık" }, "monthPerMemberBilledAnnually": { - "message": "month per member billed annually" + "message": "yıllık faturalandırılan üye başına aylık" }, "seats": { - "message": "Seats" + "message": "Yerler" }, "addOrganization": { "message": "Kuruluş ekle" }, "createdNewClient": { - "message": "Successfully created new client" + "message": "Başarıyla yeni istemci oluşturuldu" }, "noAccess": { "message": "Erişim yok" @@ -9784,46 +9793,46 @@ "message": "Bu derlem yalnızca yönetici arayüzünden erişilebilir" }, "organizationOptionsMenu": { - "message": "Toggle Organization Menu" + "message": "Kuruluş Menüsünü Aç / Kapat" }, "vaultItemSelect": { - "message": "Select vault item" + "message": "Kasa kaydını seçin" }, "collectionItemSelect": { - "message": "Select collection item" + "message": "Koleksiyon kaydını seçin" }, "manageBillingFromProviderPortalMessage": { - "message": "Manage billing from the Provider Portal" + "message": "Faturalandırmayı Sağlayıcı Portalından yönetin" }, "continueSettingUp": { "message": "Bitwarden’ı kurmaya devam et" }, "continueSettingUpFreeTrial": { - "message": "Continue setting up your free trial of Bitwarden" + "message": "Ücretsiz Bitwarden denemenizi kurmaya devam edin" }, "continueSettingUpPasswordManager": { "message": "Bitwarden Parola Yöneticisi’ni kurmaya devam et" }, "continueSettingUpFreeTrialPasswordManager": { - "message": "Continue setting up your free trial of Bitwarden Password Manager" + "message": "Bitwarden Parola Yöneticisi'nin ücretsiz deneme sürümünü kurmaya devam edin" }, "continueSettingUpSecretsManager": { "message": "Bitwarden Secrets Manager’ı kurmaya devam et" }, "continueSettingUpFreeTrialSecretsManager": { - "message": "Continue setting up your free trial of Bitwarden Secrets Manager" + "message": "Bitwarden Sır Yöneticisi'nin ücretsiz deneme sürümünü kurmaya devam edin" }, "enterTeamsOrgInfo": { - "message": "Enter your Teams organization information" + "message": "Ekip kuruluş bilgilerinizi girin" }, "enterFamiliesOrgInfo": { - "message": "Enter your Families organization information" + "message": "Aileler kuruluş bilgilerinizi girin" }, "enterEnterpriseOrgInfo": { - "message": "Enter your Enterprise organization information" + "message": "Kurumsal kuruluş bilgilerinizi girin" }, "viewItemsIn": { - "message": "View items in $NAME$", + "message": "$NAME$ içindeki kayıtları görüntüle", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -9833,7 +9842,7 @@ } }, "backTo": { - "message": "Back to $NAME$", + "message": "$NAME$ klasörüne dön", "description": "Navigate back to a previous folder or collection", "placeholders": { "name": { @@ -9863,25 +9872,25 @@ "message": "Erişimi görüntüle" }, "noCollectionsSelected": { - "message": "You have not selected any collections." + "message": "Herhangi bir koleksiyon seçmediniz." }, "updateName": { - "message": "Update name" + "message": "İsmi güncelle" }, "updatedOrganizationName": { - "message": "Updated organization name" + "message": "Güncellenmiş kuruluş ismi" }, "providerPlan": { - "message": "Managed Service Provider" + "message": "Yönetilen Hizmet Sağlayıcısı" }, "managedServiceProvider": { - "message": "Managed service provider" + "message": "Yönetilen hizmet sağlayıcısı" }, "multiOrganizationEnterprise": { - "message": "Multi-organization enterprise" + "message": "Çoklu kuruluşlu işletme" }, "orgSeats": { - "message": "Organization Seats" + "message": "Kuruluş Yerleri" }, "providerDiscount": { "message": "%$AMOUNT$ indirim", @@ -9899,22 +9908,22 @@ "message": "KDF ayarlarını değiştir" }, "secureYourInfrastructure": { - "message": "Secure your infrastructure" + "message": "Altyapınızı güvence altına alın" }, "protectYourFamilyOrBusiness": { - "message": "Protect your family or business" + "message": "Ailenizi veya işinizi koruyun" }, "upgradeOrganizationCloseSecurityGaps": { - "message": "Close security gaps with monitoring reports" + "message": "İzleme raporları ile güvenlik açıklarını kapatın" }, "upgradeOrganizationCloseSecurityGapsDesc": { "message": "Stay ahead of security vulnerabilities by upgrading to a paid plan for enhanced monitoring." }, "approveAllRequests": { - "message": "Approve all requests" + "message": "Tüm istekleri onayla" }, "allLoginRequestsApproved": { - "message": "All login requests approved" + "message": "Tüm giriş istekleri onaylandı" }, "payPal": { "message": "PayPal" @@ -9923,7 +9932,7 @@ "message": "Bitcoin" }, "updatedTaxInformation": { - "message": "Updated tax information" + "message": "Güncellenmiş vergi bilgileri" }, "billingInvalidTaxIdError": { "message": "Invalid tax ID, if you believe this is an error please contact support." @@ -9944,17 +9953,17 @@ "message": "Doğrulandı" }, "viewSecret": { - "message": "View secret" + "message": "Sırrı görüntüle" }, "noClients": { - "message": "There are no clients to list" + "message": "Listelenecek istemci yok" }, "providerBillingEmailHint": { - "message": "This email address will receive all invoices pertaining to this provider", + "message": "Bu e-posta adresi, bu sağlayıcıya ait tüm faturaları alacaktır", "description": "A hint that shows up on the Provider setup page to inform the admin the billing email will receive the provider's invoices." }, "upgradeOrganizationEnterprise": { - "message": "Identify security risks by auditing member access" + "message": "Üye erişimini denetleyerek güvenlik risklerini belirleyin" }, "onlyAvailableForEnterpriseOrganization": { "message": "Quickly view member access across the organization by upgrading to an Enterprise plan." @@ -9963,7 +9972,7 @@ "message": "Tarih" }, "exportClientReport": { - "message": "Export client report" + "message": "İstemci raporunu dışa aktar" }, "memberAccessReport": { "message": "Üye erişimi" @@ -10023,25 +10032,25 @@ "message": "Grant groups or people access to this secret. Permissions set for people will override permissions set by groups." }, "secretPeopleEmptyMessage": { - "message": "Add people or groups to share access to this secret" + "message": "Bu sırra erişimi paylaşacak kişi veya gruplar ekleyin" }, "secretMachineAccountsDescription": { - "message": "Grant machine accounts access to this secret." + "message": "Makine hesaplarına bu sırra erişim izni verin." }, "secretMachineAccountsEmptyMessage": { - "message": "Add machine accounts to grant access to this secret" + "message": "Bu sırra erişim izni vermek için makine hesapları ekleyin" }, "smAccessRemovalWarningSecretTitle": { - "message": "Remove access to this secret" + "message": "Bu sırra erişimi kaldır" }, "smAccessRemovalSecretMessage": { - "message": "This action will remove your access to this secret." + "message": "Bu işlem, bu sırra erişiminizi kaldıracaktır." }, "invoice": { "message": "Fatura" }, "unassignedSeatsAvailable": { - "message": "You have $SEATS$ unassigned seats available.", + "message": "Mevcut $SEATS$ tane atanmamış yeriniz var.", "placeholders": { "seats": { "content": "$1", @@ -10051,18 +10060,18 @@ "description": "A message showing how many unassigned seats are available for a provider." }, "contactYourProviderForAdditionalSeats": { - "message": "Contact your provider admin to purchase additional seats." + "message": "Ek yerler satın almak için sağlayıcınızın yöneticisiyle iletişime geçin." }, "open": { "message": "Açık", "description": "The status of an invoice." }, "uncollectible": { - "message": "Uncollectible", + "message": "Toplanamaz", "description": "The status of an invoice." }, "clientDetails": { - "message": "Client details" + "message": "İstemci detayları" }, "downloadCSV": { "message": "CSV'yi indir" @@ -10086,14 +10095,14 @@ "description": "This will be displayed as part of a larger sentence. The whole sentence reads: 'Notice: Later this month, client vault privacy will be improved and provider members will no longer have direct access to client vault items. For questions, please contact Bitwarden support'." }, "contactBitwardenSupport": { - "message": "contact Bitwarden support.", + "message": "Bitwarden desteğiyle iletişime geçin.", "description": "This will be displayed as part of a larger sentence. The whole sentence reads: 'Notice: Later this month, client vault privacy will be improved and provider members will no longer have direct access to client vault items. For questions, please contact Bitwarden support'. 'Bitwarden' should not be translated" }, "sponsored": { "message": "Sponsorlu" }, "licenseAndBillingManagementDesc": { - "message": "After making updates in the Bitwarden cloud server, upload your license file to apply the most recent changes." + "message": "Bitwarden bulut sunucusunda güncellemeler yaptıktan sonra, en son değişiklikleri uygulamak için lisans dosyanızı yükleyin." }, "addToFolder": { "message": "Klasöre ekle" @@ -10102,10 +10111,10 @@ "message": "Klasör seç" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "1 kayıt kalıcı olarak seçilen kuruluşa aktarılacaktır. Artık bu kayıta sahip olmayacaksınız." }, "personalItemsTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to the selected organization. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ kayıt kalıcı olarak seçilen kuruluşa aktarılacaktır. Artık bu kayıtlara sahip olmayacaksınız.", "placeholders": { "personal_items_count": { "content": "$1", @@ -10114,7 +10123,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 item will be permanently transferred to $ORG$. You will no longer own this item.", + "message": "1 kayıt kalıcı olarak $ORG$ kuruluşuna aktarılacaktır. Artık bu kayda sahip olmayacaksınız.", "placeholders": { "org": { "content": "$1", @@ -10123,7 +10132,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to $ORG$. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ kayıt kalıcı olarak $ORG$ kuruluşuna aktarılacaktır. Artık bu kayıtlara sahip olmayacaksınız.", "placeholders": { "personal_items_count": { "content": "$1", @@ -10139,7 +10148,7 @@ "message": "Veri" }, "purchasedSeatsRemoved": { - "message": "purchased seats removed" + "message": "satın alınan yerler kaldırıldı" }, "environmentVariables": { "message": "Ortam değişkenleri" @@ -10154,52 +10163,52 @@ "message": "Proje kimliği" }, "projectsAccessedByMachineAccount": { - "message": "The following projects can be accessed by this machine account." + "message": "Aşağıdaki projelere bu makine hesabı tarafından erişilebilir." }, "config": { "message": "Yapılandırma" }, "learnMoreAboutEmergencyAccess": { - "message": "Learn more about emergency access" + "message": "Acil durum erişimi hakkında daha fazla bilgi edinin" }, "learnMoreAboutMatchDetection": { - "message": "Learn more about match detection" + "message": "Eşleşme tespiti hakkında daha fazla bilgi edinin" }, "learnMoreAboutMasterPasswordReprompt": { - "message": "Learn more about master password re-prompt" + "message": "Ana parolanın yeniden sorulması hakkında daha fazla bilgi edinin" }, "learnMoreAboutSearchingYourVault": { - "message": "Learn more about searching your vault" + "message": "Kasanızda arama yapma hakkında daha fazla bilgi edinin" }, "learnMoreAboutYourAccountFingerprintPhrase": { - "message": "Learn about your account fingerprint phrase" + "message": "Hesap parmak izi ifadeniz hakkında bilgi edinin" }, "impactOfRotatingYourEncryptionKey": { - "message": "Impact of rotating your encryption key" + "message": "Şifreleme anahtarınızı döndürmenin etkisi" }, "learnMoreAboutEncryptionAlgorithms": { - "message": "Learn more about encryption algorithms" + "message": "Şifreleme algoritmaları hakkında daha fazla bilgi edinin" }, "learnMoreAboutKDFIterations": { - "message": "Learn more about KDF iterations" + "message": "KDF iterasyonu hakkında daha fazla bilgi edinin" }, "learnMoreAboutLocalization": { - "message": "Learn more about localization" + "message": "Yerelleştirme hakkında daha fazla bilgi edinin" }, "learnMoreAboutWebsiteIcons": { - "message": "Learn more about using website icons" + "message": "Web sitesi simgelerini kullanma hakkında daha fazla bilgi edinin" }, "learnMoreAboutUserAccess": { - "message": "Learn more about user access" + "message": "Kullanıcı erişimi hakkında daha fazla bilgi edinin" }, "learnMoreAboutMemberRoles": { - "message": "Learn more about member roles and permissions" + "message": "Üye rolleri ve izinleri hakkında daha fazla bilgi edinin" }, "whatIsACvvNumber": { - "message": "What is a CVV number?" + "message": "CVV numarası nedir?" }, "learnMoreAboutApi": { - "message": "Learn more about Bitwarden's API" + "message": "Bitwarden'ın API'si hakkında daha fazla bilgi edinin" }, "fileSend": { "message": "Dosya Send'i" @@ -10214,7 +10223,7 @@ "message": "Metin Send'leri" }, "includesXMembers": { - "message": "for $COUNT$ member", + "message": "$COUNT$ üye için", "placeholders": { "count": { "content": "$1", @@ -10232,10 +10241,10 @@ } }, "optionalOnPremHosting": { - "message": "Optional on-premises hosting" + "message": "İsteğe bağlı şirket içi barındırma" }, "upgradeFreeOrganization": { - "message": "Upgrade your $NAME$ organization ", + "message": "$NAME$ kuruluşunuzu yükseltin ", "placeholders": { "name": { "content": "$1", @@ -10244,10 +10253,10 @@ } }, "includeSsoAuthenticationMessage": { - "message": "SSO Authentication" + "message": "SSO Kimlik Doğrulama" }, "familiesPlanInvLimitReachedManageBilling": { - "message": "Families organizations may have up to $SEATCOUNT$ members. Upgrade to a paid plan to invite more members.", + "message": "Aile kuruluşlarının en fazla $SEATCOUNT$ üyesi olabilir. Daha fazla üye davet etmek için ücretli bir plana geçin.", "placeholders": { "seatcount": { "content": "$1", @@ -10256,7 +10265,7 @@ } }, "familiesPlanInvLimitReachedNoManageBilling": { - "message": "Families organizations may have up to $SEATCOUNT$ members. Contact your organization owner to upgrade.", + "message": "Aile kuruluşlarının en fazla $SEATCOUNT$ üyesi olabilir. Yükseltmek için kuruluşunuzun sahibiyle iletişime geçin.", "placeholders": { "seatcount": { "content": "$1", @@ -10265,10 +10274,10 @@ } }, "upgradePlans": { - "message": "Upgrade your plan to invite members and experience powerful security features." + "message": "Üyeleri davet etmek ve güçlü güvenlik özelliklerini deneyimlemek için planınızı yükseltin." }, "upgradeDiscount": { - "message": "Save $AMOUNT$%", + "message": "%$AMOUNT$ indirim", "placeholders": { "amount": { "content": "$1", @@ -10277,31 +10286,31 @@ } }, "enterprisePlanUpgradeMessage": { - "message": "Advanced capabilities for larger organizations" + "message": "Daha büyük kuruluşlar için gelişmiş yetenekler" }, "teamsPlanUpgradeMessage": { - "message": "Resilient protection for growing teams" + "message": "Büyüyen ekipler için esnek koruma" }, "teamsInviteMessage": { - "message": "Invite unlimited members" + "message": "Sınırsız üye davet edin" }, "accessToCreateGroups": { - "message": "Access to create groups" + "message": "Grup oluşturma erişimi" }, "syncGroupsAndUsersFromDirectory": { - "message": "Sync groups and users from a directory" + "message": "Grupları ve kullanıcıları bir dizinden eşitleme" }, "familyPlanUpgradeMessage": { - "message": "Secure your family logins" + "message": "Aile hesaplarınızı güvence altına alın" }, "accessToPremiumFeatures": { - "message": "Access to Premium features" + "message": "Premium özelliklere erişim" }, "additionalStorageGbMessage": { "message": "GB ek depolama" }, "sshKeyAlgorithm": { - "message": "Key algorithm" + "message": "Anahtar algoritması" }, "sshPrivateKey": { "message": "Özel anahtar" @@ -10313,13 +10322,13 @@ "message": "Parmak izi" }, "sshKeyFingerprint": { - "message": "Fingerprint" + "message": "Parmak izi" }, "sshKeyPrivateKey": { - "message": "Private key" + "message": "Özel anahtar" }, "sshKeyPublicKey": { - "message": "Public key" + "message": "Ortak anahtar" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -10398,7 +10407,7 @@ "message": "Karakter sayacını gizle" }, "editAccess": { - "message": "Edit access" + "message": "Erişimi düzenle" }, "textHelpText": { "message": "Güvenlik sorusu gibi veriler için metin alanlarını kullanın" @@ -10410,10 +10419,10 @@ "message": "Formlardaki onay kutularını (örn. \"e-posta adresimi hatırla\") otomatik doldurmak isterseniz onay kutularını kullanın" }, "linkedHelpText": { - "message": "Use a linked field when you are experiencing autofill issues for a specific website." + "message": "Belirli bir web sitesi için otomatik doldurma sorunları yaşıyorsanız bağlantılı bir alan kullanın." }, "linkedLabelHelpText": { - "message": "Enter the the field's html id, name, aria-label, or placeholder." + "message": "Alanın html kimliğini (id), adını (name), aria-label etiketini veya yer tutucusunu (placeholder) girin." }, "uppercaseDescription": { "message": "Büyük harfleri dahil et", @@ -10453,23 +10462,23 @@ "message": "Bu dosyayı kalıcı olarak silmek istediğinizden emin misiniz?" }, "manageSubscriptionFromThe": { - "message": "Manage subscription from the", + "message": "Aboneliğinizi şuradan yönetin:", "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." }, "selfHostingTitleProper": { - "message": "Self-Hosting" + "message": "Kendi Kendinize Barındırma" }, "claim-domain-single-org-warning": { - "message": "Claiming a domain will turn on the single organization policy." + "message": "Bir alan adının talep edilmesi tek kuruluş ilkesini etkinleştirir." }, "single-org-revoked-user-warning": { "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations." }, "deleteOrganizationUser": { - "message": "Delete $NAME$", + "message": "$NAME$ - sil", "placeholders": { "name": { "content": "$1", @@ -10493,7 +10502,7 @@ "description": "Warning description for the bulk delete organization users dialog" }, "organizationUserDeleted": { - "message": "Deleted $NAME$", + "message": "$NAME$ silindi", "placeholders": { "name": { "content": "$1", @@ -10514,7 +10523,7 @@ } }, "userLeftOrganization": { - "message": "User $ID$ left organization", + "message": "Kullanıcı $ID$ kuruluşundan ayrıldı", "placeholders": { "id": { "content": "$1", @@ -10523,7 +10532,7 @@ } }, "suspendedOrganizationTitle": { - "message": "The $ORGANIZATION$ is suspended", + "message": "$ORGANIZATION$ kuruluşu askıya alındı", "placeholders": { "organization": { "content": "$1", @@ -10532,10 +10541,10 @@ } }, "suspendedUserOrgMessage": { - "message": "Contact your organization owner for assistance." + "message": "Yardım için kuruluş sahibinizle iletişime geçin." }, "suspendedOwnerOrgMessage": { - "message": "To regain access to your organization, add a payment method." + "message": "Kuruluşunuza yeniden erişim kazanmak için bir ödeme yöntemi ekleyin." }, "deleteMembers": { "message": "Üyeleri sil" @@ -10547,10 +10556,10 @@ "message": "Başarıyla silindi" }, "freeFamiliesSponsorship": { - "message": "Remove Free Bitwarden Families sponsorship" + "message": "Ücretsiz Bitwarden Aileler sponsorluğunu kaldırın" }, "freeFamiliesSponsorshipPolicyDesc": { - "message": "Do not allow members to redeem a Families plan through this organization." + "message": "Üyelerin bu kuruluş aracılığıyla bir Aile planını kullanmalarına izin vermeyin." }, "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." @@ -10559,7 +10568,7 @@ "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": "Tanımlayıcı kodu" }, "cannotRemoveViewOnlyCollections": { "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", @@ -10571,37 +10580,37 @@ } }, "removeMembers": { - "message": "Remove members" + "message": "Üyeleri kaldır" }, "devices": { "message": "Cihazlar" }, "deviceListDescription": { - "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now." + "message": "Hesabınız aşağıdaki cihazların her birinde giriş yaptı. Bir cihazı tanımıyorsanız, şimdi kaldırın." }, "deviceListDescriptionTemp": { "message": "Hesabınıza aşağıdaki cihazlardan giriş yapıldı." }, "claimedDomains": { - "message": "Claimed domains" + "message": "Alınan alan adları" }, "claimDomain": { - "message": "Claim domain" + "message": "Alan adını al" }, "reclaimDomain": { - "message": "Reclaim domain" + "message": "Alan adını geri al" }, "claimDomainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be claimed." + "message": "Örnek: mydomain.com. Alt alan adlarının alınması için ayrı kayıtlar gerekir." }, "automaticClaimedDomains": { - "message": "Automatic Claimed Domains" + "message": "Otomatik Alınan Alan Adları" }, "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." }, "domainNotClaimed": { - "message": "$DOMAIN$ not claimed. Check your DNS records.", + "message": "$DOMAIN$ alınmadı. DNS kayıtlarınızı kontrol edin.", "placeholders": { "DOMAIN": { "content": "$1", @@ -10610,19 +10619,19 @@ } }, "domainStatusClaimed": { - "message": "Claimed" + "message": "Alındı" }, "domainStatusUnderVerification": { - "message": "Under verification" + "message": "Doğrulama altında" }, "claimedDomainsDescription": { "message": "Claim a domain to own member accounts. The SSO identifier page will be skipped during login for members with claimed domains and administrators will be able to delete claimed accounts." }, "invalidDomainNameClaimMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be claimed." + "message": "Giriş geçerli bir format değil. Biçim: mydomain.com. Alt alan adlarının alınması için ayrı girişler gerekir." }, "domainClaimedEvent": { - "message": "$DOMAIN$ claimed", + "message": "$DOMAIN$ alındı", "placeholders": { "DOMAIN": { "content": "$1", @@ -10631,7 +10640,7 @@ } }, "domainNotClaimedEvent": { - "message": "$DOMAIN$ not claimed", + "message": "$DOMAIN$ alınmadı", "placeholders": { "DOMAIN": { "content": "$1", @@ -10662,43 +10671,43 @@ } }, "domainClaimed": { - "message": "Domain claimed" + "message": "Alan adı alındı" }, "organizationNameMaxLength": { - "message": "Organization name cannot exceed 50 characters." + "message": "Kuruluş adı 50 karakteri geçemez." }, "rotationCompletedTitle": { - "message": "Key rotation successful" + "message": "Anahtar rotasyonu başarılı" }, "rotationCompletedDesc": { - "message": "Your master password and encryption keys have been updated. Your other devices have been logged out." + "message": "Ana parolanız ve şifreleme anahtarlarınız güncellendi. Diğer cihazlarınızın oturumu kapatıldı." }, "trustUserEmergencyAccess": { - "message": "Trust and confirm user" + "message": "Kullanıcıya güven ve onayla" }, "trustOrganization": { - "message": "Trust organization" + "message": "Kuruluşa güven" }, "trust": { - "message": "Trust" + "message": "Güven" }, "doNotTrust": { - "message": "Do not trust" + "message": "Güvenme" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Kuruluşa güvenilmiyor" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Hesabınızın güvenliği için, yalnızca bu kullanıcıya acil erişim yetkisi verdiyseniz ve parmak izi hesaplarındakiyle uyuşuyorsa onaylayın" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Hesabınızın güvenliği için, yalnızca bu kuruluşun bir üyesiyseniz, hesap kurtarma etkinse ve aşağıda görüntülenen parmak izi kuruluşun parmak iziyle eşleşiyorsa devam edin." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Bu kuruluşun, sizi hesap kurtarma sistemine kaydedecek bir kurumsal politikası vardır. Bu kaydolma işlemi, kuruluş yöneticilerinin parolanızı değiştirmesine izin verir. Yalnızca bu kuruluşu tanıyorsanız ve aşağıda görüntülenen parmak izi ifadesi kuruluşun parmak iziyle eşleşiyorsa devam edin." }, "trustUser": { - "message": "Trust user" + "message": "Kullanıcıya güven" }, "sshKeyWrongPassword": { "message": "Girdiğiniz parola yanlış." @@ -10716,43 +10725,43 @@ "message": "Parolayı girin" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "SSH anahtarı geçersiz" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "SSH anahtar türü desteklenmiyor" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "Anahtarı panodan içe aktar" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "SSH anahtarı başarıyla içe aktarıldı" }, "copySSHPrivateKey": { - "message": "Copy private key" + "message": "Özel anahtarı kopyala" }, "openingExtension": { - "message": "Opening the Bitwarden browser extension" + "message": "Bitwarden tarayıcı uzantısı açılıyor" }, "somethingWentWrong": { "message": "Bir şeyler ters gitti..." }, "openingExtensionError": { - "message": "We had trouble opening the Bitwarden browser extension. Click the button to open it now." + "message": "Bitwarden tarayıcı uzantısını açmakta sorun yaşadık. Şimdi açmak için düğmeye tıklayın." }, "openExtension": { "message": "Uzantıyı aç" }, "doNotHaveExtension": { - "message": "Don't have the Bitwarden browser extension?" + "message": "Bitwarden tarayıcı uzantısına sahip değil misiniz?" }, "installExtension": { "message": "Uzantıyı yükle" }, "openedExtension": { - "message": "Opened the browser extension" + "message": "Tarayıcı uzantısı açıldı" }, "openedExtensionViewAtRiskPasswords": { - "message": "Successfully opened the Bitwarden browser extension. You can now review your at-risk passwords." + "message": "Bitwarden tarayıcı uzantısı başarıyla açıldı. Artık risk altındaki parolalarınızı gözden geçirebilirsiniz." }, "openExtensionManuallyPart1": { "message": "We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon", @@ -10864,13 +10873,13 @@ } }, "addedExistingOrganization": { - "message": "Added existing organization" + "message": "Mevcut kuruluş eklendi" }, "assignedExceedsAvailable": { - "message": "Assigned seats exceed available seats." + "message": "Atanan yer sayısı mevcut yer sayısından fazladır." }, "userkeyRotationDisclaimerEmergencyAccessText": { - "message": "Fingerprint phrase for $NUM_USERS$ contacts for which you have enabled emergency access.", + "message": "Acil durum erişimini etkinleştirdiğiniz $NUM_USERS$ kişi için parmak izi ifadesi.", "placeholders": { "num_users": { "content": "$1", @@ -10879,7 +10888,7 @@ } }, "userkeyRotationDisclaimerAccountRecoveryOrgsText": { - "message": "Fingerprint phrase for the organization $ORG_NAME$ for which you have enabled account recovery.", + "message": "Hesap kurtarmayı etkinleştirdiğiniz $ORG_NAME$ kuruluşu için parmak izi ifadesi.", "placeholders": { "org_name": { "content": "$1", @@ -10891,40 +10900,46 @@ "message": "Rotating your encryption keys will require you to trust keys of any organizations that can recover your account, and any contacts that you have enabled emergency access for. To continue, make sure you can verify the following:" }, "userkeyRotationDisclaimerTitle": { - "message": "Untrusted encryption keys" + "message": "Güvenilmeyen şifreleme anahtarları" }, "changeAtRiskPassword": { - "message": "Change at-risk password" + "message": "Risk altındaki parolayı değiştirin" + }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Bu hesap risk altında ve web sitesi eksik. Bir web sitesi ekleyin ve güvenliğinizi artırmak için parolayı değiştirin." + }, + "missingWebsite": { + "message": "Web sitesi eksik" }, "removeUnlockWithPinPolicyTitle": { - "message": "Remove Unlock with PIN" + "message": "PIN ile Kilit Açmayı Kaldır" }, "removeUnlockWithPinPolicyDesc": { - "message": "Do not allow members to unlock their account with a PIN." + "message": "Üyelerin hesaplarının kilidini PIN ile açmalarına izin vermeyin." }, "upgradeForFullEventsMessage": { "message": "Event logs are not stored for your organization. Upgrade to a Teams or Enterprise plan to get full access to organization event logs." }, "upgradeEventLogTitleMessage": { - "message": "Upgrade to see event logs from your organization." + "message": "Kuruluşunuzdaki olay günlüklerini görmek için yükseltin." }, "upgradeEventLogMessage": { "message": "These events are examples only and do not reflect real events within your Bitwarden organization." }, "viewEvents": { - "message": "View Events" + "message": "Olayları Görüntüle" }, "cannotCreateCollection": { "message": "Ücretsiz kuruluşların en fazla 2 koleksiyonu olabilir. Daha fazla koleksiyon eklemek için ücretli bir plana geçin." }, "businessUnit": { - "message": "Business Unit" + "message": "İş Birimi" }, "businessUnits": { - "message": "Business Units" + "message": "İş Birimleri" }, "newBusinessUnit": { - "message": "New business unit" + "message": "Yeni iş birimi" }, "sendsTitleNoItems": { "message": "Hassas bilgileri güvenle paylaşın", @@ -10935,20 +10950,20 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Hızlıca parola oluşturun" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Tıklayarak güçlü ve benzersiz parolaları kolayca oluşturun", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "hesaplarınızı güvende tutmanıza yardımcı olmak için.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Güvenli oturumlar açmaya yardımcı olmak için Parola Oluştur düğmesine tıklayarak güçlü ve benzersiz parolalar oluşturun.", "description": "Aria label for the body content of the generator nudge" }, "newLoginNudgeTitle": { @@ -10973,30 +10988,30 @@ "message": "Kesintisiz çevrimiçi alışveriş" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Kartlarla, ödeme formlarını güvenli ve doğru bir şekilde kolayca otomatik doldurun." }, "newIdentityNudgeTitle": { "message": "Hesap oluşturmak artık daha basit" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Kimlikler ile uzun kayıt veya iletişim formlarını hızla otomatik doldurun." }, "newNoteNudgeTitle": { "message": "Hassas verilerinizi güvende tutun" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Notlarla, bankacılık veya sigorta bilgileri gibi hassas verileri güvenli bir şekilde saklayın." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Geliştirici dostu SSH erişimi" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Anahtarlarınızı saklayın ve hızlı, şifreli kimlik doğrulama için SSH aracısıyla bağlantı kurun.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "SSH agent hakkında daha fazla bilgi edinin", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, @@ -11031,15 +11046,15 @@ "message": "Bitwarden uzantısını aç" }, "gettingStartedWithBitwardenPart1": { - "message": "For tips on getting started with Bitwarden visit the", + "message": "Bitwarden ile çalışmaya başlamaya ilişkin ipuçları için", "description": "This will be displayed as part of a larger sentence. The whole sentence reads: 'For tips on getting started with Bitwarden visit the Learning Center and Help Center'" }, "gettingStartedWithBitwardenPart2": { - "message": "Learning Center", + "message": "Öğrenim Merkezi", "description": "This will be displayed as part of a larger sentence. The whole sentence reads: 'For tips on getting started with Bitwarden visit the Learning Center and Help Center'" }, "gettingStartedWithBitwardenPart3": { - "message": "Help Center", + "message": "Yardım Merkezi", "description": "This will be displayed as part of a larger sentence. The whole sentence reads: 'For tips on getting started with Bitwarden visit the Learning Center and Help Center'" }, "setupExtensionContentAlt": { @@ -11052,7 +11067,7 @@ "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 provider's subscription page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." }, "clickPayWithPayPal": { - "message": "Please click the Pay with PayPal button to add your payment method." + "message": "Ödeme yönteminizi eklemek için lütfen PayPal ile Öde düğmesine tıklayın." }, "revokeActiveSponsorshipConfirmation": { "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end. A seat within your organization will become available for members or sponsorships after the sponsored organization renewal date on $DATE$.", @@ -11068,9 +11083,15 @@ } }, "billingAddressRequiredToAddCredit": { - "message": "Billing address required to add credit.", + "message": "Kredi eklemek için fatura adresi gereklidir.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Fatura adresi" }, @@ -11084,25 +11105,25 @@ "message": "Kayıtlı adres yok." }, "billingAddressUpdated": { - "message": "Your billing address has been updated." + "message": "Fatura adresiniz güncellendi." }, "paymentDetails": { "message": "Ödeme bilgileri" }, "paymentMethodUpdated": { - "message": "Your payment method has been updated." + "message": "Ödeme yönteminiz güncellendi." }, "bankAccountVerified": { - "message": "Your bank account has been verified." + "message": "Banka hesabınız doğrulandı." }, "availableCreditAppliedToInvoice": { "message": "Any available credit will be automatically applied towards invoices generated for this account." }, "mustBePositiveNumber": { - "message": "Must be a positive number" + "message": "Pozitif bir sayı olmalıdır" }, "cardSecurityCode": { - "message": "Card security code" + "message": "Kart güvenlik kodu" }, "cardSecurityCodeDescription": { "message": "Card security code, also known as CVV or CVC, is typically a 3 digit number printed on the back of your credit card or 4 digit number printed on the front above your card number." @@ -11111,7 +11132,7 @@ "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 Payment Details page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." }, "taxId": { - "message": "Tax ID: $TAX_ID$", + "message": "Vergi Kimliği: $TAX_ID$", "placeholders": { "tax_id": { "content": "$1", @@ -11127,7 +11148,7 @@ "description": "A message shown in a non-dismissible dialog to service users of unpaid providers." }, "providerSuspended": { - "message": "$PROVIDER$ is suspended", + "message": "$PROVIDER$ sağlayıcısı askıya alındı", "placeholders": { "provider": { "content": "$1", @@ -11150,7 +11171,7 @@ "description": "A message shown in a non-dismissible dialog to admins of unpaid providers." }, "subscribetoEnterprise": { - "message": "Subscribe to $PLAN$", + "message": "$PLAN$ planına abone ol", "placeholders": { "plan": { "content": "$1", @@ -11159,7 +11180,7 @@ } }, "subscribeEnterpriseSubtitle": { - "message": "Your 7-day $PLAN$ trial starts today. Add a payment method now to continue using these features after your trial ends: ", + "message": "7 günlük $PLAN$ denemeniz bugün başlıyor. Deneme süreniz sona erdikten sonra bu özellikleri kullanmaya devam etmek için şimdi bir ödeme yöntemi ekleyin: ", "placeholders": { "plan": { "content": "$1", @@ -11168,13 +11189,13 @@ } }, "unlimitedSecretsAndProjects": { - "message": "Unlimited secrets and projects" + "message": "Sınırsız sırlar ve projeler" }, "providersubscriptionCanceled": { "message": "Abonelik iptal edildi" }, "providersubCanceledmessage": { - "message": "To resubscribe, contact Bitwarden Customer Support." + "message": "Yeniden abone olmak için Bitwarden Müşteri Desteği ile iletişime geçin." }, "showMore": { "message": "Daha fazla göster" @@ -11183,44 +11204,44 @@ "message": "Daha az göster" }, "missingTaxId": { - "message": "Missing Tax ID" + "message": "Vergi Kimliği Eksik" }, "missingTaxIdWarning": { "message": "Action required: You're missing a Tax ID number in payment details. If a Tax ID is not added, your invoices may include additional tax." }, "moreBreadcrumbs": { - "message": "More breadcrumbs", + "message": "Daha fazla gezinme izi", "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." }, "addTaxId": { - "message": "Add a Tax ID" + "message": "Vergi Kimliği Ekle" }, "missingTaxIdCalloutTitle": { - "message": "Action required: Missing Tax ID" + "message": "Bir şey yapılması gerekiyor: Vergi Kimliği Eksik" }, "missingTaxIdCalloutDescription": { - "message": "If a Tax ID is not added, your invoices may include additional tax." + "message": "Bir Vergi Kimliği eklenmezse, faturalarınız ek vergi içerebilir." }, "unverifiedTaxIdWarning": { - "message": "Action required: Your Tax ID number is unverified. If your Tax ID is left unverified, your invoices may include additional tax." + "message": "Bir şey yapılması gerekiyor: Vergi Kimlik numaranız doğrulanmamış. Vergi Kimliğiniz doğrulanmamışsa, faturalarınız ek vergi içerebilir." }, "editTaxId": { - "message": "Edit your Tax ID" + "message": "Vergi Kimliğini düzenle" }, "unverifiedTaxIdCalloutTitle": { - "message": "Tax ID unverified" + "message": "Vergi Kimliği doğrulanmadı" }, "unverifiedTaxIdCalloutDescription": { - "message": "Check your Tax ID to verify the format is correct and there are no typos." + "message": "Formatın doğru olduğunu ve yazım hatası olmadığını doğrulamak için Vergi Kimliğinizi kontrol edin." }, "pendingVerification": { - "message": "Pending verification" + "message": "Doğrulama bekleniyor" }, "checkInputFormat": { - "message": "Check input format for typos." + "message": "Yazım hataları için giriş formatını kontrol edin." }, "exampleTaxIdFormat": { - "message": "Example $CODE$ format: $EXAMPLE$", + "message": "Örnek $CODE$ biçimi: $EXAMPLE$", "placeholders": { "code": { "content": "$1", @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Key Connector alan adını doğrulayın" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Şimdi doğrulayın." } } - diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index cc3c31570a3..8bf5c83cc96 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Коли користувачі зберігатимуть записи, тут з'являтимуться програми з ризикованими паролями. Позначте критичні програми та сповіщайте користувачів про необхідність зміни паролів." }, - "noCriticalAppsTitle": { - "message": "Ви не позначили жодної критичної програми" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "Виберіть найбільш критичні програми, для яких виявлятимуться ризиковані паролі, та сповіщайте користувачів про необхідність їх заміни." + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "Позначити критичні програми" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "Позначити програму критичною" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Позначку критичної програми знято" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "Який це тип запису?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Змінити мову інтерфейсу вебсховища." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Типово" @@ -7433,6 +7430,9 @@ "off": { "message": "Вимк" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Учасники" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Відкрити посібник із впровадження $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Змінити ризикований пароль" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Вилучити розблокування з PIN-кодом" }, @@ -11071,6 +11086,12 @@ "message": "Щоб додати кредит, необхідно ввести платіжну адресу.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Платіжна адреса" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 7ff869e5a3b..12331ed86bf 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "Khi người dùng lưu thông tin đăng nhập, các ứng dụng sẽ hiển thị tại đây, bao gồm cả các mật khẩu có nguy cơ bị lộ. Đánh dấu các ứng dụng quan trọng và thông báo cho người dùng cập nhật mật khẩu." }, - "noCriticalAppsTitle": { - "message": "Bạn chưa đánh dấu bất kỳ ứng dụng nào là Quan trọng" + "noCriticalApplicationsTitle": { + "message": "Bạn chưa đánh dấu ứng dụng nào là quan trọng" }, - "noCriticalAppsDescription": { - "message": "Chọn các ứng dụng quan trọng nhất của bạn để phát hiện các mật khẩu có nguy cơ bị lộ, và thông báo cho người dùng thay đổi các mật khẩu đó." + "noCriticalApplicationsDescription": { + "message": "Chọn các ứng dụng quan trọng nhất để ưu tiên các hành động bảo mật, giúp người dùng xử lý mật khẩu có nguy cơ bị lộ." }, - "markCriticalApps": { - "message": "Đánh dấu các ứng dụng quan trọng" + "markCriticalApplications": { + "message": "Chọn các ứng dụng quan trọng" }, "markAppAsCritical": { "message": "Đánh dấu các ứng dụng quan trọng" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Bỏ đánh dấu là nghiêm trọng" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Ứng dụng quan trọng đã được gỡ bỏ dấu hiệu thành công" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Đã bỏ đánh dấu ứng dụng là quan trọng thành công" }, "whatTypeOfItem": { "message": "Mục này là gì?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "Thay đổi ngôn ngữ của kho trên web." }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "Mặc định" @@ -7433,6 +7430,9 @@ "off": { "message": "Tắt" }, + "connected": { + "message": "Connected" + }, "members": { "message": "Thành viên" }, @@ -8939,23 +8939,23 @@ "message": "Quản lý bộ sưu tập" }, "collectionManagementDescription": { - "message": "Configure the collection behavior for the organization" + "message": "Cấu hình hành vi bộ sưu tập cho tổ chức" }, "allowAdminAccessToAllCollectionItemsDescription": { - "message": "Allow owners and admins to manage all collections and items from the Admin Console" + "message": "Cho phép chủ sở hữu và quản trị viên quản lý tất cả các bộ sưu tập và mục từ Bảng điều khiển quản trị" }, "restrictCollectionCreationDescription": { - "message": "Restrict collection creation to owners and admins" + "message": "Hạn chế tạo bộ sưu tập cho chủ sở hữu và quản trị viên" }, "restrictCollectionDeletionDescription": { - "message": "Restrict collection deletion to owners and admins" + "message": "Hạn chế xóa bộ sưu tập cho chủ sở hữu và quản trị viên" }, "restrictItemDeletionDescriptionStart": { - "message": "Restrict item deletion to members with the ", + "message": "Hạn chế xóa mục cho thành viên có ", "description": "This will be used as part of a larger sentence, broken up to allow styling of the middle portion. Full sentence: 'Restrict item deletion to members with the [Manage collection] permission'" }, "restrictItemDeletionDescriptionEnd": { - "message": " permission", + "message": " quyền", "description": "This will be used as part of a larger sentence, broken up to allow styling of the middle portion. Full sentence: 'Restrict item deletion to members with the [Manage collection] permission'" }, "updatedCollectionManagement": { @@ -9035,7 +9035,7 @@ } }, "limitCollectionCreationEnabled": { - "message": "Turned on Restrict collection creation setting $ID$.", + "message": "Đã bật cài đặt Hạn chế tạo bộ sưu tập $ID$.", "placeholders": { "id": { "content": "$1", @@ -9044,7 +9044,7 @@ } }, "limitCollectionCreationDisabled": { - "message": "Turned off Restrict collection creation setting $ID$.", + "message": "Đã tắt cài đặt Hạn chế tạo bộ sưu tập $ID$.", "placeholders": { "id": { "content": "$1", @@ -9053,7 +9053,7 @@ } }, "limitCollectionDeletionEnabled": { - "message": "Turned on Restrict collection deletion setting $ID$.", + "message": "Đã bật cài đặt Hạn chế xóa bộ sưu tập $ID$.", "placeholders": { "id": { "content": "$1", @@ -9062,7 +9062,7 @@ } }, "limitCollectionDeletionDisabled": { - "message": "Turned off Restrict collection deletion setting $ID$.", + "message": "Đã tắt cài đặt Hạn chế xóa bộ sưu tập $ID$.", "placeholders": { "id": { "content": "$1", @@ -9071,7 +9071,7 @@ } }, "limitItemDeletionEnabled": { - "message": "Turned on Restrict item deletion setting $ID$.", + "message": "Đã bật cài đặt Hạn chế xóa mục $ID$.", "placeholders": { "id": { "content": "$1", @@ -9080,7 +9080,7 @@ } }, "limitItemDeletionDisabled": { - "message": "Turned off Restrict item deletion setting $ID$.", + "message": "Đã tắt cài đặt Hạn chế xóa mục $ID$.", "placeholders": { "id": { "content": "$1", @@ -9089,7 +9089,7 @@ } }, "allowAdminAccessToAllCollectionItemsEnabled": { - "message": "Turned on Allow owners and admins to manage all collections and items setting $ID$.", + "message": "Đã bật cài đặt Cho phép chủ sở hữu và quản trị viên quản lý tất cả các bộ sưu tập và mục $ID$.", "placeholders": { "id": { "content": "$1", @@ -9098,7 +9098,7 @@ } }, "allowAdminAccessToAllCollectionItemsDisabled": { - "message": "Turned off Allow owners and admins to manage all collections and items setting $ID$.", + "message": "Đã tắt cài đặt Cho phép chủ sở hữu và quản trị viên quản lý tất cả các bộ sưu tập và mục $ID$.", "placeholders": { "id": { "content": "$1", @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Mở hướng dẫn triển khai $INTEGRATION$.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Thay đổi mật khẩu có rủi ro" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Mục đăng nhập này có nguy cơ bị lộ và thiếu trang web. Thêm trang web và thay đổi mật khẩu để tăng cường bảo mật." + }, + "missingWebsite": { + "message": "Thiếu trang web" + }, "removeUnlockWithPinPolicyTitle": { "message": "Xóa Mở khóa bằng mã PIN" }, @@ -11071,6 +11086,12 @@ "message": "Cần có địa chỉ thanh toán để thêm tín dụng.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Địa chỉ thanh toán" }, @@ -11233,7 +11254,15 @@ } }, "confirmKeyConnectorDomain": { - "message": "Confirm Key Connector domain" + "message": "Xác nhận tên miền Key Connector" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "Thanh toán bằng tài khoản ngân hàng chỉ khả dụng với khách hàng ở Hoa Kỳ. Bạn sẽ phải xác minh tài khoản ngân hàng của mình. Chúng tôi sẽ thực hiện một khoản tiền gửi nhỏ trong vòng 1-2 ngày làm việc tới. Việc không xác minh tài khoản ngân hàng sẽ dẫn đến lỡ kỳ thanh toán và đăng ký của bạn sẽ bị tạm ngưng." + }, + "verifyBankAccountWithStripe": { + "message": "Chúng tôi đã thực hiện một khoản tiền gửi nhỏ vào tài khoản ngân hàng của bạn. Việc này có thể mất 1-2 ngày làm việc. Khi bạn thấy khoản tiền gửi trong tài khoản, bạn có thể xác minh tài khoản ngân hàng của mình. Việc không xác minh tài khoản ngân hàng sẽ dẫn đến lỡ kỳ thanh toán và đăng ký của bạn sẽ bị tạm ngưng." + }, + "verifyNow": { + "message": "Xác minh ngay." } } - diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index 322a60cc2b7..f5d736b8f5a 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -21,7 +21,7 @@ "message": "密码风险" }, "reviewAtRiskPasswords": { - "message": "审查各个应用程序中存在风险的密码(弱、暴露或重复使用)。选择最关键的应用程序,优先为用户采取安全措施,以解决存在风险的密码问题。" + "message": "审查各个应用程序中存在风险的密码(弱、暴露或重复使用)。选择最关键的应用程序,优先为您的用户采取安全措施,以处理存在风险的密码。" }, "dataLastUpdated": { "message": "数据最后更新于:$DATE$", @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "当用户保存登录信息时,应用程序会出现在这里,显示所有存在风险的密码。标记关键应用程序并通知用户更新密码。" }, - "noCriticalAppsTitle": { - "message": "您未将任何应用程序标记为关键" + "noCriticalApplicationsTitle": { + "message": "您还没有将任何应用程序标记为关键" }, - "noCriticalAppsDescription": { - "message": "选择最关键的应用程序来发现存在风险的密码,并通知用户更改这些密码。" + "noCriticalApplicationsDescription": { + "message": "选择最关键的应用程序,优先为您的用户采取安全措施,以处理存在风险的密码。" }, - "markCriticalApps": { - "message": "标记关键应用程序" + "markCriticalApplications": { + "message": "选择关键应用程序" }, "markAppAsCritical": { "message": "标记应用程序为关键" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "取消标记为关键" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "关键应用程序已成功取消标记" + "criticalApplicationUnmarkedSuccessfully": { + "message": "成功将应用程序取消标记为关键" }, "whatTypeOfItem": { "message": "这是什么类型的项目?" @@ -1799,7 +1799,7 @@ "message": "更改电子邮箱" }, "changeEmailTwoFactorWarning": { - "message": "继续操作将更改您的账户电子邮箱地址。这不会更改用于双重身份验证的电子邮箱地址。您可以在两步登录设置中更改它。" + "message": "继续操作将更改您的账户电子邮箱地址。但不会更改用于双重身份验证的电子邮箱地址,您可以在两步登录设置中更改它。" }, "newEmail": { "message": "新电子邮箱" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "更改网页密码库的语言。" }, - "enableFavicon": { - "message": "显示网站图标" - }, - "faviconDesc": { - "message": "在每个登录项目旁边显示一个可识别的图像。" + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "默认" @@ -4349,7 +4346,7 @@ "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行两笔小额转账,请在组织的计费页面输入这些金额以验证银行账户。" }, "verifyBankAccountFailureWarning": { - "message": "验证银行账户失败将会错过支付,您的订阅将失效。" + "message": "验证银行账户失败将会错过支付,您的订阅将暂停。" }, "verifiedBankAccount": { "message": "银行账户已验证" @@ -4700,22 +4697,22 @@ "description": "ex. Date this password was updated" }, "organizationIsDisabled": { - "message": "组织已停用" + "message": "组织已暂停" }, "secretsAccessSuspended": { - "message": "无法访问已停用的组织。请联系您的组织所有者寻求帮助。" + "message": "无法访问已暂停的组织。请联系您的组织所有者寻求帮助。" }, "secretsCannotCreate": { - "message": "无法在已停用的组织中创建机密。请联系您的组织所有者寻求帮助。" + "message": "无法在已暂停的组织中创建机密。请联系您的组织所有者寻求帮助。" }, "projectsCannotCreate": { - "message": "无法在已停用的组织中创建工程。请联系您的组织所有者寻求帮助。" + "message": "无法在已暂停的组织中创建工程。请联系您的组织所有者寻求帮助。" }, "serviceAccountsCannotCreate": { - "message": "无法在已停用的组织中创建服务账户。请联系您的组织所有者寻求帮助。" + "message": "无法在已暂停的组织中创建服务账户。请联系您的组织所有者寻求帮助。" }, "disabledOrganizationFilterError": { - "message": "无法访问已停用组织中的项目。请联系您的组织所有者寻求帮助。" + "message": "无法访问已暂停组织中的项目。请联系您的组织所有者寻求帮助。" }, "licenseIsExpired": { "message": "授权已过期" @@ -6120,7 +6117,7 @@ } }, "providerIsDisabled": { - "message": "提供商已停用" + "message": "提供商已暂停" }, "providerUpdated": { "message": "提供商已保存" @@ -7433,6 +7430,9 @@ "off": { "message": "关闭" }, + "connected": { + "message": "Connected" + }, "members": { "message": "成员" }, @@ -8945,13 +8945,13 @@ "message": "允许所有者和管理员从管理控制台管理所有集合和项目" }, "restrictCollectionCreationDescription": { - "message": "仅限所有者和管理员可以创建集合" + "message": "限制为所有者和管理员可以创建集合" }, "restrictCollectionDeletionDescription": { - "message": "仅限所有者和管理员可以删除集合" + "message": "限制为所有者和管理员可以删除集合" }, "restrictItemDeletionDescriptionStart": { - "message": "仅限具有以下权限的成员可以删除项目:", + "message": "限制为具有以下权限的成员可以删除项目:", "description": "This will be used as part of a larger sentence, broken up to allow styling of the middle portion. Full sentence: 'Restrict item deletion to members with the [Manage collection] permission'" }, "restrictItemDeletionDescriptionEnd": { @@ -9397,7 +9397,7 @@ "description": "The date header used when a subscription is cancelled." }, "machineAccountsCannotCreate": { - "message": "无法在已停用的组织中创建机器账户。请联系您的组织所有者寻求帮助。" + "message": "无法在已暂停的组织中创建机器账户。请联系您的组织所有者寻求帮助。" }, "machineAccount": { "message": "机器账户", @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "更新 $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "打开 $INTEGRATION$ 实施指南。", "placeholders": { @@ -10337,7 +10346,7 @@ "message": "6 个高级账户" }, "unlimitedSharing": { - "message": "无限制的共享" + "message": "不限数量的共享" }, "unlimitedCollections": { "message": "不限数量的集合" @@ -10361,7 +10370,7 @@ "message": "自定义角色" }, "unlimitedSecretsStorage": { - "message": "无限制的机密存储" + "message": "不限数量的机密存储" }, "unlimitedUsers": { "message": "不限数量的用户" @@ -10523,7 +10532,7 @@ } }, "suspendedOrganizationTitle": { - "message": "$ORGANIZATION$ 已停用", + "message": "$ORGANIZATION$ 已暂停", "placeholders": { "organization": { "content": "$1", @@ -10553,10 +10562,10 @@ "message": "不允许成员通过此组织兑换家庭计划。" }, "verifyBankAccountWithStatementDescriptorWarning": { - "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在组织的计费页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将失效。" + "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在组织的计费页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将暂停。" }, "verifyBankAccountWithStatementDescriptorInstructions": { - "message": "我们已向您的银行账户存入了一笔小额转账(可能需要 1-2 个工作日到账)。请输入转账描述中以「SM」开头的六位数代码。验证银行账户失败将会错过支付,您的订阅将失效。" + "message": "我们已向您的银行账户存入了一笔小额转账(可能需要 1-2 个工作日到账)。请输入转账描述中以「SM」开头的六位数代码。验证银行账户失败将会错过支付,您的订阅将暂停。" }, "descriptorCode": { "message": "描述符代码" @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "更改有风险的密码" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "此登录存在风险且缺少网站。请添加网站并更改密码以增强安全性。" + }, + "missingWebsite": { + "message": "缺少网站" + }, "removeUnlockWithPinPolicyTitle": { "message": "禁用 PIN 码解锁" }, @@ -11049,7 +11064,7 @@ "message": "重启" }, "verifyProviderBankAccountWithStatementDescriptorWarning": { - "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在提供商的订阅页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将失效。" + "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在提供商的订阅页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将暂停。" }, "clickPayWithPayPal": { "message": "请点击「使用 PayPal 付款」按钮以添加您的付款方式。" @@ -11071,6 +11086,12 @@ "message": "添加信用额度需要计费地址。", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "计费地址" }, @@ -11108,7 +11129,7 @@ "message": "卡安全码,又称 CVV 或 CVC,通常是印在信用卡背面的 3 位数字,或是印在信用卡正面卡号上方的 4 位数字。" }, "verifyBankAccountWarning": { - "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在付款详细信息页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将失效。" + "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在付款详细信息页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将暂停。" }, "taxId": { "message": "税务 ID:$TAX_ID$", @@ -11127,7 +11148,7 @@ "description": "A message shown in a non-dismissible dialog to service users of unpaid providers." }, "providerSuspended": { - "message": "$PROVIDER$ 已停用", + "message": "$PROVIDER$ 已暂停", "placeholders": { "provider": { "content": "$1", @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "确认 Key Connector 域名" + }, + "requiredToVerifyBankAccountWithStripe": { + "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账。验证银行账户失败将会错过支付,您的订阅将暂停。" + }, + "verifyBankAccountWithStripe": { + "message": "我们已向您的银行账户做了一笔小额转账,可能需要 1-2 个工作日到账。请在到账后验证您的银行账户。验证银行账户失败将会错过支付,您的订阅将暂停。" + }, + "verifyNow": { + "message": " 立即验证。" } } - diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 4438d49f757..e640ef1de9b 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -86,14 +86,14 @@ "noAppsInOrgDescription": { "message": "在使用者儲存登入後,應用程式將會顯示在這裡,並同時顯示具有風險的密碼。標註重要應用程式並通知使用者以更新密碼。" }, - "noCriticalAppsTitle": { - "message": "你並未將任何應用程式標註為重要" + "noCriticalApplicationsTitle": { + "message": "You haven’t marked any applications as critical" }, - "noCriticalAppsDescription": { - "message": "選擇你最重要的應用程式以查找具有風險的密碼,並通知使用者以更改這些密碼。" + "noCriticalApplicationsDescription": { + "message": "Select your most critical applications to prioritize security actions for your users to address at-risk passwords." }, - "markCriticalApps": { - "message": "標註重要應用程式" + "markCriticalApplications": { + "message": "Select critical applications" }, "markAppAsCritical": { "message": "標註應用程式為重要" @@ -179,8 +179,8 @@ "unmarkAsCritical": { "message": "Unmark as critical" }, - "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "criticalApplicationUnmarkedSuccessfully": { + "message": "Successfully unmarked application as critical" }, "whatTypeOfItem": { "message": "這是什麼類型的項目?" @@ -2114,11 +2114,8 @@ "languageDesc": { "message": "變更網頁版密碼庫使用的語言。" }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "default": { "message": "預設" @@ -7433,6 +7430,9 @@ "off": { "message": "關閉" }, + "connected": { + "message": "Connected" + }, "members": { "message": "成員" }, @@ -9690,6 +9690,15 @@ } } }, + "updateIntegrationButtonDesc": { + "message": "Update $INTEGRATION$", + "placeholders": { + "integration": { + "content": "$1", + "example": "Crowdstrike" + } + } + }, "integrationCardTooltip": { "message": "Launch $INTEGRATION$ implementation guide.", "placeholders": { @@ -10896,6 +10905,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, @@ -11071,6 +11086,12 @@ "message": "Billing address required to add credit.", "description": "Error message shown when trying to add credit to a trialing organization without a billing address." }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "billingAddress": { "message": "Billing address" }, @@ -11234,6 +11255,14 @@ }, "confirmKeyConnectorDomain": { "message": "Confirm Key Connector domain" + }, + "requiredToVerifyBankAccountWithStripe": { + "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. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + }, + "verifyBankAccountWithStripe": { + "message": "We have made a micro-deposit to your bank account. This may take 1-2 business days. When you see the deposit in your account, you can verify your bank account. Failure to verify your bank account will result in a missed payment and your subscription will be suspended." + }, + "verifyNow": { + "message": "Verify now." } } - From 7ac75a6c5269e703263954dfb0f0f1989f311ce0 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 12 Sep 2025 07:04:13 -0400 Subject: [PATCH 023/249] refactor(libs): consolidate messaging-internal into messaging library (#16386) This change eliminates the circular dependency between messaging and messaging-internal libraries by merging them into a single messaging library. Previously, messaging-internal imported from @bitwarden/messaging while messaging tried to import from @bitwarden/messaging-internal, creating an unresolvable circular dependency. This also violated Nx best practices by using cross-library file includes in tsconfig.lib.json. Changes made: - Moved all messaging-internal code (SubjectMessageSender, helpers, tests) into libs/messaging/src/ - Updated all imports to use relative paths instead of @bitwarden/messaging imports - Removed the entire messaging-internal library and its configuration files - Updated external references in apps/browser to import from @bitwarden/messaging - Fixed libs/messaging/tsconfig.lib.json to use standard src/**/*.ts pattern - Updated libs/common internal.ts to re-export from messaging instead of messaging-internal The messaging library now exports both public APIs and internal implementations, which is a cleaner architecture than maintaining two separate libraries with circular dependencies. Fixes rootDir configuration issues identified in the Nx library systematic fix project. --- .github/CODEOWNERS | 1 - .../sync/sync-service.listener.spec.ts | 2 +- jest.config.js | 1 - .../common/src/platform/messaging/internal.ts | 2 +- libs/messaging-internal/README.md | 5 --- libs/messaging-internal/eslint.config.mjs | 3 -- libs/messaging-internal/jest.config.js | 10 ------ libs/messaging-internal/package.json | 11 ------- libs/messaging-internal/project.json | 33 ------------------- libs/messaging-internal/src/index.ts | 5 --- .../src/messaging-internal.spec.ts | 8 ----- libs/messaging-internal/tsconfig.eslint.json | 6 ---- libs/messaging-internal/tsconfig.json | 13 -------- libs/messaging-internal/tsconfig.lib.json | 10 ------ libs/messaging-internal/tsconfig.spec.json | 10 ------ .../src/helpers.spec.ts | 4 +-- .../src/helpers.ts | 3 +- libs/messaging/src/index.ts | 4 +++ .../src/subject-message.sender.spec.ts | 3 +- .../src/subject-message.sender.ts | 4 +-- libs/messaging/tsconfig.lib.json | 8 +---- tsconfig.base.json | 1 - 22 files changed, 14 insertions(+), 133 deletions(-) delete mode 100644 libs/messaging-internal/README.md delete mode 100644 libs/messaging-internal/eslint.config.mjs delete mode 100644 libs/messaging-internal/jest.config.js delete mode 100644 libs/messaging-internal/package.json delete mode 100644 libs/messaging-internal/project.json delete mode 100644 libs/messaging-internal/src/index.ts delete mode 100644 libs/messaging-internal/src/messaging-internal.spec.ts delete mode 100644 libs/messaging-internal/tsconfig.eslint.json delete mode 100644 libs/messaging-internal/tsconfig.json delete mode 100644 libs/messaging-internal/tsconfig.lib.json delete mode 100644 libs/messaging-internal/tsconfig.spec.json rename libs/{messaging-internal => messaging}/src/helpers.spec.ts (92%) rename libs/{messaging-internal => messaging}/src/helpers.ts (81%) rename libs/{messaging-internal => messaging}/src/subject-message.sender.spec.ts (96%) rename libs/{messaging-internal => messaging}/src/subject-message.sender.ts (83%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 30d84547b11..0adead2928c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -96,7 +96,6 @@ libs/storage-core @bitwarden/team-platform-dev libs/logging @bitwarden/team-platform-dev libs/storage-test-utils @bitwarden/team-platform-dev libs/messaging @bitwarden/team-platform-dev -libs/messaging-internal @bitwarden/team-platform-dev libs/serialization @bitwarden/team-platform-dev libs/guid @bitwarden/team-platform-dev libs/client-type @bitwarden/team-platform-dev diff --git a/apps/browser/src/platform/sync/sync-service.listener.spec.ts b/apps/browser/src/platform/sync/sync-service.listener.spec.ts index 383586c0cd0..ed0af15415b 100644 --- a/apps/browser/src/platform/sync/sync-service.listener.spec.ts +++ b/apps/browser/src/platform/sync/sync-service.listener.spec.ts @@ -4,7 +4,7 @@ import { Subject, firstValueFrom } from "rxjs"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessageListener, MessageSender } from "@bitwarden/common/platform/messaging"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { tagAsExternal } from "@bitwarden/messaging-internal"; +import { tagAsExternal } from "@bitwarden/messaging"; import { FullSyncMessage } from "./foreground-sync.service"; import { FULL_SYNC_FINISHED, SyncServiceListener } from "./sync-service.listener"; diff --git a/jest.config.js b/jest.config.js index 9be54e99995..e5aeb536172 100644 --- a/jest.config.js +++ b/jest.config.js @@ -41,7 +41,6 @@ module.exports = { "/libs/key-management/jest.config.js", "/libs/key-management-ui/jest.config.js", "/libs/logging/jest.config.js", - "/libs/messaging-internal/jest.config.js", "/libs/messaging/jest.config.js", "/libs/node/jest.config.js", "/libs/platform/jest.config.js", diff --git a/libs/common/src/platform/messaging/internal.ts b/libs/common/src/platform/messaging/internal.ts index 9fe261f2264..0d7abe256e6 100644 --- a/libs/common/src/platform/messaging/internal.ts +++ b/libs/common/src/platform/messaging/internal.ts @@ -1 +1 @@ -export * from "@bitwarden/messaging-internal"; +export { SubjectMessageSender, tagAsExternal, getCommand } from "@bitwarden/messaging"; diff --git a/libs/messaging-internal/README.md b/libs/messaging-internal/README.md deleted file mode 100644 index a2f36138ad7..00000000000 --- a/libs/messaging-internal/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# messaging-internal - -Owned by: platform - -Internal details to accompany @bitwarden/messaging this library should not be consumed in non-platform code. diff --git a/libs/messaging-internal/eslint.config.mjs b/libs/messaging-internal/eslint.config.mjs deleted file mode 100644 index 9c37d10e3ff..00000000000 --- a/libs/messaging-internal/eslint.config.mjs +++ /dev/null @@ -1,3 +0,0 @@ -import baseConfig from "../../eslint.config.mjs"; - -export default [...baseConfig]; diff --git a/libs/messaging-internal/jest.config.js b/libs/messaging-internal/jest.config.js deleted file mode 100644 index 152244f6603..00000000000 --- a/libs/messaging-internal/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - displayName: "messaging-internal", - preset: "../../jest.preset.js", - testEnvironment: "node", - transform: { - "^.+\\.[tj]s$": ["ts-jest", { tsconfig: "/tsconfig.spec.json" }], - }, - moduleFileExtensions: ["ts", "js", "html"], - coverageDirectory: "../../coverage/libs/messaging-internal", -}; diff --git a/libs/messaging-internal/package.json b/libs/messaging-internal/package.json deleted file mode 100644 index 7a0a13d2d67..00000000000 --- a/libs/messaging-internal/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@bitwarden/messaging-internal", - "version": "0.0.1", - "description": "Internal details to accompany @bitwarden/messaging this library should not be consumed in non-platform code.", - "private": true, - "type": "commonjs", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "license": "GPL-3.0", - "author": "platform" -} diff --git a/libs/messaging-internal/project.json b/libs/messaging-internal/project.json deleted file mode 100644 index ad55cde5c20..00000000000 --- a/libs/messaging-internal/project.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "messaging-internal", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/messaging-internal/src", - "projectType": "library", - "tags": [], - "targets": { - "build": { - "executor": "@nx/js:tsc", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/libs/messaging-internal", - "main": "libs/messaging-internal/src/index.ts", - "tsConfig": "libs/messaging-internal/tsconfig.lib.json", - "assets": ["libs/messaging-internal/*.md"] - } - }, - "lint": { - "executor": "@nx/eslint:lint", - "outputs": ["{options.outputFile}"], - "options": { - "lintFilePatterns": ["libs/messaging-internal/**/*.ts"] - } - }, - "test": { - "executor": "@nx/jest:jest", - "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], - "options": { - "jestConfig": "libs/messaging-internal/jest.config.js" - } - } - } -} diff --git a/libs/messaging-internal/src/index.ts b/libs/messaging-internal/src/index.ts deleted file mode 100644 index 08763d48bc5..00000000000 --- a/libs/messaging-internal/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Built in implementations -export { SubjectMessageSender } from "./subject-message.sender"; - -// Helpers meant to be used only by other implementations -export { tagAsExternal, getCommand } from "./helpers"; diff --git a/libs/messaging-internal/src/messaging-internal.spec.ts b/libs/messaging-internal/src/messaging-internal.spec.ts deleted file mode 100644 index b2b50a218bd..00000000000 --- a/libs/messaging-internal/src/messaging-internal.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as lib from "./index"; - -describe("messaging-internal", () => { - // This test will fail until something is exported from index.ts - it("should work", () => { - expect(lib).toBeDefined(); - }); -}); diff --git a/libs/messaging-internal/tsconfig.eslint.json b/libs/messaging-internal/tsconfig.eslint.json deleted file mode 100644 index 3daf120441a..00000000000 --- a/libs/messaging-internal/tsconfig.eslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "files": [], - "include": ["src/**/*.ts", "src/**/*.js"], - "exclude": ["**/build", "**/dist"] -} diff --git a/libs/messaging-internal/tsconfig.json b/libs/messaging-internal/tsconfig.json deleted file mode 100644 index 62ebbd94647..00000000000 --- a/libs/messaging-internal/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.lib.json" - }, - { - "path": "./tsconfig.spec.json" - } - ] -} diff --git a/libs/messaging-internal/tsconfig.lib.json b/libs/messaging-internal/tsconfig.lib.json deleted file mode 100644 index 9cbf6736007..00000000000 --- a/libs/messaging-internal/tsconfig.lib.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "declaration": true, - "types": ["node"] - }, - "include": ["src/**/*.ts"], - "exclude": ["jest.config.js", "src/**/*.spec.ts"] -} diff --git a/libs/messaging-internal/tsconfig.spec.json b/libs/messaging-internal/tsconfig.spec.json deleted file mode 100644 index 1275f148a18..00000000000 --- a/libs/messaging-internal/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "moduleResolution": "node10", - "types": ["jest", "node"] - }, - "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] -} diff --git a/libs/messaging-internal/src/helpers.spec.ts b/libs/messaging/src/helpers.spec.ts similarity index 92% rename from libs/messaging-internal/src/helpers.spec.ts rename to libs/messaging/src/helpers.spec.ts index 5a97ff959cc..35bc07b8caf 100644 --- a/libs/messaging-internal/src/helpers.spec.ts +++ b/libs/messaging/src/helpers.spec.ts @@ -1,8 +1,8 @@ import { Subject, firstValueFrom } from "rxjs"; -import { CommandDefinition, isExternalMessage, Message } from "@bitwarden/messaging"; - import { getCommand, tagAsExternal } from "./helpers"; +import { isExternalMessage } from "./is-external-message"; +import { CommandDefinition, Message } from "./types"; describe("helpers", () => { describe("getCommand", () => { diff --git a/libs/messaging-internal/src/helpers.ts b/libs/messaging/src/helpers.ts similarity index 81% rename from libs/messaging-internal/src/helpers.ts rename to libs/messaging/src/helpers.ts index 00231b455b7..e505f558522 100644 --- a/libs/messaging-internal/src/helpers.ts +++ b/libs/messaging/src/helpers.ts @@ -1,6 +1,7 @@ import { map } from "rxjs"; -import { CommandDefinition, EXTERNAL_SOURCE_TAG } from "@bitwarden/messaging"; +import { EXTERNAL_SOURCE_TAG } from "./is-external-message"; +import { CommandDefinition } from "./types"; export const getCommand = ( commandDefinition: CommandDefinition> | string, diff --git a/libs/messaging/src/index.ts b/libs/messaging/src/index.ts index 9090ff581c1..8bb8212e660 100644 --- a/libs/messaging/src/index.ts +++ b/libs/messaging/src/index.ts @@ -2,3 +2,7 @@ export { MessageListener } from "./message.listener"; export { MessageSender } from "./message.sender"; export { Message, CommandDefinition } from "./types"; export { isExternalMessage, EXTERNAL_SOURCE_TAG } from "./is-external-message"; + +// Internal implementations +export { SubjectMessageSender } from "./subject-message.sender"; +export { tagAsExternal, getCommand } from "./helpers"; diff --git a/libs/messaging-internal/src/subject-message.sender.spec.ts b/libs/messaging/src/subject-message.sender.spec.ts similarity index 96% rename from libs/messaging-internal/src/subject-message.sender.spec.ts rename to libs/messaging/src/subject-message.sender.spec.ts index e3e5305d1b2..04c7eaa59c8 100644 --- a/libs/messaging-internal/src/subject-message.sender.spec.ts +++ b/libs/messaging/src/subject-message.sender.spec.ts @@ -1,8 +1,7 @@ import { bufferCount, firstValueFrom, Subject } from "rxjs"; -import { CommandDefinition, Message } from "@bitwarden/messaging"; - import { SubjectMessageSender } from "./subject-message.sender"; +import { CommandDefinition, Message } from "./types"; describe("SubjectMessageSender", () => { const subject = new Subject>(); diff --git a/libs/messaging-internal/src/subject-message.sender.ts b/libs/messaging/src/subject-message.sender.ts similarity index 83% rename from libs/messaging-internal/src/subject-message.sender.ts rename to libs/messaging/src/subject-message.sender.ts index e8df5913b01..ebbd821dcb0 100644 --- a/libs/messaging-internal/src/subject-message.sender.ts +++ b/libs/messaging/src/subject-message.sender.ts @@ -1,8 +1,8 @@ import { Subject } from "rxjs"; -import { CommandDefinition, Message, MessageSender } from "@bitwarden/messaging"; - import { getCommand } from "./helpers"; +import { MessageSender } from "./message.sender"; +import { CommandDefinition, Message } from "./types"; export class SubjectMessageSender implements MessageSender { constructor(private readonly messagesSubject: Subject>>) {} diff --git a/libs/messaging/tsconfig.lib.json b/libs/messaging/tsconfig.lib.json index 1f3b89d988e..9cbf6736007 100644 --- a/libs/messaging/tsconfig.lib.json +++ b/libs/messaging/tsconfig.lib.json @@ -5,12 +5,6 @@ "declaration": true, "types": ["node"] }, - "include": [ - "src/**/*.ts", - "../messaging-internal/src/subject-message.sender.spec.ts", - "../messaging-internal/src/subject-message.sender.ts", - "../messaging-internal/src/helpers.spec.ts", - "../messaging-internal/src/helpers.ts" - ], + "include": ["src/**/*.ts"], "exclude": ["jest.config.js", "src/**/*.spec.ts"] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 3f903558f70..2d105d4263d 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -45,7 +45,6 @@ "@bitwarden/key-management-ui": ["./libs/key-management-ui/src"], "@bitwarden/logging": ["libs/logging/src"], "@bitwarden/messaging": ["libs/messaging/src/index.ts"], - "@bitwarden/messaging-internal": ["libs/messaging-internal/src/index.ts"], "@bitwarden/node/*": ["./libs/node/src/*"], "@bitwarden/nx-plugin": ["libs/nx-plugin/src/index.ts"], "@bitwarden/platform": ["./libs/platform/src"], From f20ed9f0e9088de7c58aa452ec37fe83604e9a9f Mon Sep 17 00:00:00 2001 From: Tom <144813356+ttalty@users.noreply.github.com> Date: Fri, 12 Sep 2025 10:09:12 -0400 Subject: [PATCH 024/249] [PM- 25678] Applications api endpoints (#16387) * Adding the applications api endpoints and test cases * Changing observable names --- .../risk-insights-api.service.spec.ts | 72 ++++++++++++++----- .../services/risk-insights-api.service.ts | 43 +++++++++-- .../risk-insights-report.service.spec.ts | 10 +-- .../services/risk-insights-report.service.ts | 4 +- 4 files changed, 101 insertions(+), 28 deletions(-) diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts index 19172d2e7fb..50051c39861 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.spec.ts @@ -44,10 +44,10 @@ describe("RiskInsightsApiService", () => { expect(service).toBeTruthy(); }); - it("should call apiService.send with correct parameters and return the response for getRiskInsightsReport ", (done) => { + it("Get Report: should call apiService.send with correct parameters and return the response for getRiskInsightsReport ", (done) => { mockApiService.send.mockReturnValue(Promise.resolve(getRiskInsightsReportResponse)); - service.getRiskInsightsReport(orgId).subscribe((result) => { + service.getRiskInsightsReport$(orgId).subscribe((result) => { expect(result).toEqual(getRiskInsightsReportResponse); expect(mockApiService.send).toHaveBeenCalledWith( "GET", @@ -60,21 +60,21 @@ describe("RiskInsightsApiService", () => { }); }); - it("should return null if apiService.send rejects with 404 error for getRiskInsightsReport", (done) => { + it("Get Report: should return null if apiService.send rejects with 404 error for getRiskInsightsReport", (done) => { const error = { statusCode: 404 }; mockApiService.send.mockReturnValue(Promise.reject(error)); - service.getRiskInsightsReport(orgId).subscribe((result) => { + service.getRiskInsightsReport$(orgId).subscribe((result) => { expect(result).toBeNull(); done(); }); }); - it("should throw error if apiService.send rejects with non-404 error for getRiskInsightsReport", (done) => { + it("Get Report: should throw error if apiService.send rejects with non-404 error for getRiskInsightsReport", (done) => { const error = { statusCode: 500, message: "Server error" }; mockApiService.send.mockReturnValue(Promise.reject(error)); - service.getRiskInsightsReport(orgId).subscribe({ + service.getRiskInsightsReport$(orgId).subscribe({ next: () => { // Should not reach here fail("Expected error to be thrown"); @@ -95,10 +95,10 @@ describe("RiskInsightsApiService", () => { }); }); - it("should call apiService.send with correct parameters for saveRiskInsightsReport", (done) => { + it("Save Report: should call apiService.send with correct parameters for saveRiskInsightsReport", (done) => { mockApiService.send.mockReturnValue(Promise.resolve(saveRiskInsightsReportResponse)); - service.saveRiskInsightsReport(saveRiskInsightsReportRequest, orgId).subscribe((result) => { + service.saveRiskInsightsReport$(saveRiskInsightsReportRequest, orgId).subscribe((result) => { expect(result).toEqual(saveRiskInsightsReportResponse); expect(mockApiService.send).toHaveBeenCalledWith( "POST", @@ -111,11 +111,11 @@ describe("RiskInsightsApiService", () => { }); }); - it("should propagate errors from apiService.send for saveRiskInsightsReport - 1", (done) => { + it("Save Report: should propagate errors from apiService.send for saveRiskInsightsReport - 1", (done) => { const error = { statusCode: 500, message: "Internal Server Error" }; mockApiService.send.mockReturnValue(Promise.reject(error)); - service.saveRiskInsightsReport(saveRiskInsightsReportRequest, orgId).subscribe({ + service.saveRiskInsightsReport$(saveRiskInsightsReportRequest, orgId).subscribe({ next: () => { fail("Expected error to be thrown"); }, @@ -135,11 +135,11 @@ describe("RiskInsightsApiService", () => { }); }); - it("should propagate network errors from apiService.send for saveRiskInsightsReport - 2", (done) => { + it("Save Report: should propagate network errors from apiService.send for saveRiskInsightsReport - 2", (done) => { const error = new Error("Network error"); mockApiService.send.mockReturnValue(Promise.reject(error)); - service.saveRiskInsightsReport(saveRiskInsightsReportRequest, orgId).subscribe({ + service.saveRiskInsightsReport$(saveRiskInsightsReportRequest, orgId).subscribe({ next: () => { fail("Expected error to be thrown"); }, @@ -159,14 +159,14 @@ describe("RiskInsightsApiService", () => { }); }); - it("should call apiService.send with correct parameters and return an Observable", (done) => { + it("Get Summary: should call apiService.send with correct parameters and return an Observable", (done) => { const minDate = new Date("2024-01-01"); const maxDate = new Date("2024-01-31"); const mockResponse: EncryptedDataModel[] = [{ encryptedData: "abc" } as EncryptedDataModel]; mockApiService.send.mockResolvedValueOnce(mockResponse); - service.getRiskInsightsSummary(orgId, minDate, maxDate).subscribe((result) => { + service.getRiskInsightsSummary$(orgId, minDate, maxDate).subscribe((result) => { expect(mockApiService.send).toHaveBeenCalledWith( "GET", `/reports/organizations/${orgId.toString()}/data/summary?startDate=${minDate.toISOString().split("T")[0]}&endDate=${maxDate.toISOString().split("T")[0]}`, @@ -179,13 +179,13 @@ describe("RiskInsightsApiService", () => { }); }); - it("should call apiService.send with correct parameters and return an Observable", (done) => { + it("Update Summary: should call apiService.send with correct parameters and return an Observable", (done) => { const data: EncryptedDataModel = { encryptedData: "xyz" } as EncryptedDataModel; const reportId = "report123" as OrganizationReportId; mockApiService.send.mockResolvedValueOnce(undefined); - service.updateRiskInsightsSummary(data, orgId, reportId).subscribe((result) => { + service.updateRiskInsightsSummary$(data, orgId, reportId).subscribe((result) => { expect(mockApiService.send).toHaveBeenCalledWith( "PATCH", `/reports/organizations/${orgId.toString()}/data/summary/${reportId.toString()}`, @@ -197,4 +197,44 @@ describe("RiskInsightsApiService", () => { done(); }); }); + + it("Get Applications: should call apiService.send with correct parameters and return an Observable", (done) => { + const reportId = "report123" as OrganizationReportId; + const mockResponse: EncryptedDataModel | null = { encryptedData: "abc" } as EncryptedDataModel; + + mockApiService.send.mockResolvedValueOnce(mockResponse); + + service.getRiskInsightsApplicationData$(orgId, reportId).subscribe((result) => { + expect(mockApiService.send).toHaveBeenCalledWith( + "GET", + `/reports/organizations/${orgId.toString()}/data/application/${reportId.toString()}`, + null, + true, + true, + ); + expect(result).toEqual(mockResponse); + done(); + }); + }); + + it("Update Applications: should call apiService.send with correct parameters and return an Observable", (done) => { + const applicationData: EncryptedDataModel = { encryptedData: "xyz" } as EncryptedDataModel; + const reportId = "report123" as OrganizationReportId; + + mockApiService.send.mockResolvedValueOnce(undefined); + + service + .updateRiskInsightsApplicationData$(applicationData, orgId, reportId) + .subscribe((result) => { + expect(mockApiService.send).toHaveBeenCalledWith( + "PATCH", + `/reports/organizations/${orgId.toString()}/data/application/${reportId.toString()}`, + applicationData, + true, + true, + ); + expect(result).toBeUndefined(); + done(); + }); + }); }); diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts index 6beef8d1401..29df485da03 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-api.service.ts @@ -13,7 +13,7 @@ import { export class RiskInsightsApiService { constructor(private apiService: ApiService) {} - getRiskInsightsReport(orgId: OrganizationId): Observable { + getRiskInsightsReport$(orgId: OrganizationId): Observable { const dbResponse = this.apiService .send("GET", `/reports/organizations/${orgId.toString()}/latest`, null, true, true) .catch((error: any): any => { @@ -26,7 +26,7 @@ export class RiskInsightsApiService { return from(dbResponse as Promise); } - saveRiskInsightsReport( + saveRiskInsightsReport$( request: SaveRiskInsightsReportRequest, organizationId: OrganizationId, ): Observable { @@ -41,7 +41,7 @@ export class RiskInsightsApiService { return from(dbResponse as Promise); } - getRiskInsightsSummary( + getRiskInsightsSummary$( orgId: string, minDate: Date, maxDate: Date, @@ -59,15 +59,46 @@ export class RiskInsightsApiService { return from(dbResponse as Promise); } - updateRiskInsightsSummary( - data: EncryptedDataModel, + updateRiskInsightsSummary$( + summaryData: EncryptedDataModel, organizationId: OrganizationId, reportId: OrganizationReportId, ): Observable { const dbResponse = this.apiService.send( "PATCH", `/reports/organizations/${organizationId.toString()}/data/summary/${reportId.toString()}`, - data, + summaryData, + true, + true, + ); + + return from(dbResponse as Promise); + } + + getRiskInsightsApplicationData$( + orgId: OrganizationId, + reportId: OrganizationReportId, + ): Observable { + const dbResponse = this.apiService.send( + "GET", + `/reports/organizations/${orgId.toString()}/data/application/${reportId.toString()}`, + null, + true, + true, + ); + + return from(dbResponse as Promise); + } + + updateRiskInsightsApplicationData$( + applicationData: EncryptedDataModel, + orgId: OrganizationId, + reportId: OrganizationReportId, + ): Observable { + const dbResponse = this.apiService.send( + "PATCH", + `/reports/organizations/${orgId.toString()}/data/application/${reportId.toString()}`, + applicationData, true, true, ); diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts index b066bc7c16c..1d090f52299 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.spec.ts @@ -171,7 +171,7 @@ describe("RiskInsightsReportService", () => { ); const saveResponse = { id: "" }; // Simulating no ID in response - mockRiskInsightsApiService.saveRiskInsightsReport.mockReturnValue(of(saveResponse)); + mockRiskInsightsApiService.saveRiskInsightsReport$.mockReturnValue(of(saveResponse)); const reportSubjectSpy = jest.spyOn((service as any).riskInsightsReportSubject, "next"); const summarySubjectSpy = jest.spyOn((service as any).riskInsightsSummarySubject, "next"); @@ -202,9 +202,11 @@ describe("RiskInsightsReportService", () => { const organizationId = "orgId" as OrganizationId; const userId = "userId" as UserId; - mockRiskInsightsApiService.getRiskInsightsReport.mockReturnValue(of(apiResponse)); + mockRiskInsightsApiService.getRiskInsightsReport$.mockReturnValue(of(apiResponse)); service.getRiskInsightsReport(organizationId, userId); - expect(mockRiskInsightsApiService.getRiskInsightsReport).toHaveBeenCalledWith(organizationId); + expect(mockRiskInsightsApiService.getRiskInsightsReport$).toHaveBeenCalledWith( + organizationId, + ); expect(mockRiskInsightsEncryptionService.decryptRiskInsightsReport).toHaveBeenCalledWith( organizationId, userId, @@ -231,7 +233,7 @@ describe("RiskInsightsReportService", () => { const decryptedReport = { data: [{ foo: "bar" }], }; - mockRiskInsightsApiService.getRiskInsightsReport.mockReturnValue(of(mockResponse)); + mockRiskInsightsApiService.getRiskInsightsReport$.mockReturnValue(of(mockResponse)); mockRiskInsightsEncryptionService.decryptRiskInsightsReport.mockResolvedValue( decryptedReport, ); diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts index 23471327fe0..1d63d34762f 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/risk-insights-report.service.ts @@ -216,7 +216,7 @@ export class RiskInsightsReportService { getRiskInsightsReport(organizationId: OrganizationId, userId: UserId): void { this.riskInsightsApiService - .getRiskInsightsReport(organizationId) + .getRiskInsightsReport$(organizationId) .pipe( switchMap((response) => { if (!response) { @@ -275,7 +275,7 @@ export class RiskInsightsReportService { }; const response = await firstValueFrom( - this.riskInsightsApiService.saveRiskInsightsReport(saveRequest, organizationId), + this.riskInsightsApiService.saveRiskInsightsReport$(saveRequest, organizationId), ); if (response && response.id) { From 279d16999a7fd83ae3e6a6a60ed0df003c75cd9b Mon Sep 17 00:00:00 2001 From: Bryan Cunningham Date: Fri, 12 Sep 2025 12:05:28 -0400 Subject: [PATCH 025/249] [CL-834] Use intersection observer to determine if content scrolls (#16099) * use intersection observer to fix dynamic content load issue * set up mock intersection observer * Create reusable hasScrollable content util * return null from resize to fix type error * remove Observer mock * return observable * refactor util and remove resize * use async pipe for observable in template * remove comment left in error --- .../src/dialog/dialog/dialog.component.html | 3 +- .../src/dialog/dialog/dialog.component.ts | 32 +++++++++++-------- libs/components/src/utils/dom-observables.ts | 17 ++++++++++ .../src/utils/has-scrollable-content.ts | 26 +++++++++++++++ libs/components/src/utils/index.ts | 1 + 5 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 libs/components/src/utils/dom-observables.ts create mode 100644 libs/components/src/utils/has-scrollable-content.ts diff --git a/libs/components/src/dialog/dialog/dialog.component.html b/libs/components/src/dialog/dialog/dialog.component.html index 9f140ca7624..159944dcc1f 100644 --- a/libs/components/src/dialog/dialog/dialog.component.html +++ b/libs/components/src/dialog/dialog/dialog.component.html @@ -65,9 +65,10 @@ }" > +
- + @let isScrollable = isScrollable$ | async; @let showFooterBorder = (!bodyHasScrolledFrom().top && isScrollable) || bodyHasScrolledFrom().bottom;