From 6351fc0e69e46e91da8182bed7be1b15e66d19c4 Mon Sep 17 00:00:00 2001 From: rr-bw <102181210+rr-bw@users.noreply.github.com> Date: Wed, 28 May 2025 13:36:46 -0700 Subject: [PATCH 01/33] fix(tailwind): [Auth/PM-22140] Use Tailwind for Password Settings header (#14978) `PM16117_ChangeExistingPasswordRefactor` flag ON --- .../password-settings/password-settings.component.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.html b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.html index 94cf08b5871..fc6620762f9 100644 --- a/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.html +++ b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.html @@ -1,6 +1,4 @@ -
-

{{ "changeMasterPassword" | i18n }}

-
+

{{ "changeMasterPassword" | i18n }}

{{ "loggedOutWarning" | i18n }} From 798acc7cba58fed70e55190534d60be14653d333 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Thu, 29 May 2025 15:17:04 +0200 Subject: [PATCH 02/33] [PM-21884] Fix DuckDuckGo integration when SDK is enabled for decrypt (#14884) * Fix ddg integration when sdk is enabled for decryption * Fix comments --- .../duckduckgo-message-handler.service.ts | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/apps/desktop/src/services/duckduckgo-message-handler.service.ts b/apps/desktop/src/services/duckduckgo-message-handler.service.ts index 6fb91231be1..7bddaba499c 100644 --- a/apps/desktop/src/services/duckduckgo-message-handler.service.ts +++ b/apps/desktop/src/services/duckduckgo-message-handler.service.ts @@ -188,13 +188,10 @@ export class DuckDuckGoMessageHandlerService { } try { - let decryptedResult = await this.encryptService.decryptString( + const decryptedResult = await this.decryptDuckDuckGoEncString( message.encryptedCommand as EncString, this.duckduckgoSharedSecret, ); - - decryptedResult = this.trimNullCharsFromMessage(decryptedResult); - return JSON.parse(decryptedResult); } catch { this.sendResponse({ @@ -237,7 +234,46 @@ export class DuckDuckGoMessageHandlerService { ipc.platform.nativeMessaging.sendReply(response); } - // Trim all null bytes padded at the end of messages. This happens with C encryption libraries. + /* + * Bitwarden type 2 (AES256-CBC-HMAC256) uses PKCS7 padding. + * DuckDuckGo does not use PKCS7 padding; and instead fills the last CBC block with null bytes. + * ref: https://github.com/duckduckgo/apple-browsers/blob/04d678b447869c3a640714718a466b36407db8b6/macOS/DuckDuckGo/PasswordManager/Bitwarden/Services/BWEncryption.m#L141 + * + * This is incompatible which means the default encryptService cannot be used to decrypt the message, + * a custom EncString decrypt operation is needed. + * + * This function also trims null characters that are a result of the null-padding from the end of the message. + */ + private async decryptDuckDuckGoEncString( + encString: EncString, + key: SymmetricCryptoKey, + ): Promise { + const fastParams = this.cryptoFunctionService.aesDecryptFastParameters( + encString.data, + encString.iv, + encString.mac, + key, + ); + + const computedMac = await this.cryptoFunctionService.hmacFast( + fastParams.macData, + fastParams.macKey, + "sha256", + ); + const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac); + if (!macsEqual) { + return null; + } + const decryptedPaddedString = await this.cryptoFunctionService.aesDecryptFast({ + mode: "cbc", + parameters: fastParams, + }); + return this.trimNullCharsFromMessage(decryptedPaddedString); + } + + // DuckDuckGo does not use PKCS7 padding, but instead leaves the values as null, + // so null characters need to be trimmed from the end of the message for the last + // CBC-block. private trimNullCharsFromMessage(message: string): string { const charNull = 0; const charRightCurlyBrace = 125; From b48356228c5ca1437f5ede48f34aa0c79e877d79 Mon Sep 17 00:00:00 2001 From: Leslie Tilton <23057410+Banrion@users.noreply.github.com> Date: Thu, 29 May 2025 08:45:40 -0500 Subject: [PATCH 03/33] Update risk insights report to default an invalid uri to the original uri (#14800) --- .../reports/risk-insights/services/ciphers.mock.ts | 3 +++ .../services/risk-insights-report.service.spec.ts | 14 +++++++++----- .../services/risk-insights-report.service.ts | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/ciphers.mock.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/ciphers.mock.ts index ca5cdc35b8a..f697d24f208 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/ciphers.mock.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/services/ciphers.mock.ts @@ -27,6 +27,9 @@ export const mockCiphers: any[] = [ createLoginUriView("accounts.google.com"), createLoginUriView("https://www.google.com"), createLoginUriView("https://www.google.com/login"), + createLoginUriView("www.invalid@uri@.com"), + createLoginUriView("www.invaliduri!.com"), + createLoginUriView("this_is-not|a-valid-uri123@+"), ], }, edit: false, 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 f9177bf1bf7..3aa624f1e59 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 @@ -50,7 +50,7 @@ describe("RiskInsightsReportService", () => { let testCase = testCaseResults[0]; expect(testCase).toBeTruthy(); expect(testCase.cipherMembers).toHaveLength(2); - expect(testCase.trimmedUris).toHaveLength(2); + expect(testCase.trimmedUris).toHaveLength(5); expect(testCase.weakPasswordDetail).toBeTruthy(); expect(testCase.exposedPasswordDetail).toBeTruthy(); expect(testCase.reusedPasswordCount).toEqual(2); @@ -69,12 +69,16 @@ describe("RiskInsightsReportService", () => { it("should generate the raw data + uri report correctly", async () => { const result = await firstValueFrom(service.generateRawDataUriReport$("orgId")); - expect(result).toHaveLength(8); + expect(result).toHaveLength(11); // Two ciphers that have google.com as their uri. There should be 2 results const googleResults = result.filter((x) => x.trimmedUri === "google.com"); expect(googleResults).toHaveLength(2); + // There is an invalid uri and it should not be trimmed + const invalidUriResults = result.filter((x) => x.trimmedUri === "this_is-not|a-valid-uri123@+"); + expect(invalidUriResults).toHaveLength(1); + // Verify the details for one of the googles matches the password health info // expected const firstGoogle = googleResults.filter( @@ -88,7 +92,7 @@ describe("RiskInsightsReportService", () => { it("should generate applications health report data correctly", async () => { const result = await firstValueFrom(service.generateApplicationsReport$("orgId")); - expect(result).toHaveLength(5); + expect(result).toHaveLength(8); // Two ciphers have google.com associated with them. The first cipher // has 2 members and the second has 4. However, the 2 members in the first @@ -132,7 +136,7 @@ describe("RiskInsightsReportService", () => { expect(reportSummary.totalMemberCount).toEqual(7); expect(reportSummary.totalAtRiskMemberCount).toEqual(6); - expect(reportSummary.totalApplicationCount).toEqual(5); - expect(reportSummary.totalAtRiskApplicationCount).toEqual(4); + expect(reportSummary.totalApplicationCount).toEqual(8); + expect(reportSummary.totalAtRiskApplicationCount).toEqual(7); }); }); 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 e4fece801b6..6fdab58115d 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 @@ -433,7 +433,7 @@ export class RiskInsightsReportService { const cipherUris: string[] = []; const uris = cipher.login?.uris ?? []; uris.map((u: { uri: string }) => { - const uri = Utils.getDomain(u.uri); + const uri = Utils.getDomain(u.uri) ?? u.uri; if (!cipherUris.includes(uri)) { cipherUris.push(uri); } From c48e4be14b546d53bf77d837df6d7b0bc737ead6 Mon Sep 17 00:00:00 2001 From: Andreas Coroiu Date: Thu, 29 May 2025 16:05:28 +0200 Subject: [PATCH 04/33] Pin @types/lowdb to v1 (#14957) --- .github/renovate.json5 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index f30bc06e4a2..453e5e29c44 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -413,6 +413,12 @@ allowedVersions: "1.0.0", description: "Higher versions of lowdb are not compatible with CommonJS", }, + { + // Pin types as well since we are not upgrading past v1 (and also v2+ does not need separate types). + matchPackageNames: ["@types/lowdb"], + allowedVersions: "< 2.0.0", + description: "Higher versions of lowdb do not need separate types", + }, ], ignoreDeps: ["@types/koa-bodyparser", "bootstrap", "node-ipc", "@bitwarden/sdk-internal"], } From 0715597e8e059e22e232df376054a01baf6610c5 Mon Sep 17 00:00:00 2001 From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com> Date: Thu, 29 May 2025 15:06:07 +0100 Subject: [PATCH 05/33] [PM-21603]Invite Member sub text seat count does not account for sponsorships (#14954) * Resolve the membership count * Get the occupied Seat count from metadata --- .../admin-console/organizations/members/members.component.ts | 5 ++++- .../response/organization-billing-metadata.response.ts | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/admin-console/organizations/members/members.component.ts b/apps/web/src/app/admin-console/organizations/members/members.component.ts index e5a94bc4b4f..4f453762b5d 100644 --- a/apps/web/src/app/admin-console/organizations/members/members.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/members.component.ts @@ -110,8 +110,10 @@ export class MembersComponent extends BaseMembersComponent protected rowHeight = 69; protected rowHeightClass = `tw-h-[69px]`; + private organizationUsersCount = 0; + get occupiedSeatCount(): number { - return this.dataSource.activeUserCount; + return this.organizationUsersCount; } constructor( @@ -218,6 +220,7 @@ export class MembersComponent extends BaseMembersComponent ); this.orgIsOnSecretsManagerStandalone = billingMetadata.isOnSecretsManagerStandalone; + this.organizationUsersCount = billingMetadata.organizationOccupiedSeats; await this.load(); diff --git a/libs/common/src/billing/models/response/organization-billing-metadata.response.ts b/libs/common/src/billing/models/response/organization-billing-metadata.response.ts index d30ad76a147..aa34c37bd1d 100644 --- a/libs/common/src/billing/models/response/organization-billing-metadata.response.ts +++ b/libs/common/src/billing/models/response/organization-billing-metadata.response.ts @@ -11,6 +11,7 @@ export class OrganizationBillingMetadataResponse extends BaseResponse { invoiceCreatedDate: Date | null; subPeriodEndDate: Date | null; isSubscriptionCanceled: boolean; + organizationOccupiedSeats: number; constructor(response: any) { super(response); @@ -25,6 +26,7 @@ export class OrganizationBillingMetadataResponse extends BaseResponse { this.invoiceCreatedDate = this.parseDate(this.getResponseProperty("InvoiceCreatedDate")); this.subPeriodEndDate = this.parseDate(this.getResponseProperty("SubPeriodEndDate")); this.isSubscriptionCanceled = this.getResponseProperty("IsSubscriptionCanceled"); + this.organizationOccupiedSeats = this.getResponseProperty("OrganizationOccupiedSeats"); } private parseDate(dateString: any): Date | null { From 058eb9a04be3b7d422694bfb4519a84d477aad25 Mon Sep 17 00:00:00 2001 From: Jared McCannon Date: Thu, 29 May 2025 11:17:30 -0400 Subject: [PATCH 06/33] [PM-19127] - Nested Traverse Optimization (#14881) * Draft optimization of getNestedCollectionTree * Added feature flag to wrap nestedTraverse_vNext. added the old implementation back in for feature flagging. * Correction from CR * Copied tests over for the vNext method. --------- Co-authored-by: Thomas Rittson --- .../collections/utils/collection-utils.ts | 25 ++++++ .../collections/vault.component.ts | 19 ++++- .../vault/individual-vault/vault.component.ts | 15 +++- libs/common/src/enums/feature-flag.enum.ts | 2 + libs/common/src/vault/service-utils.spec.ts | 18 +++++ libs/common/src/vault/service-utils.ts | 81 ++++++++++++++++--- 6 files changed, 141 insertions(+), 19 deletions(-) diff --git a/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts b/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts index 95ae911bbf6..f19c3f64530 100644 --- a/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts +++ b/apps/web/src/app/admin-console/organizations/collections/utils/collection-utils.ts @@ -37,6 +37,31 @@ export function getNestedCollectionTree( return nodes; } +export function getNestedCollectionTree_vNext( + collections: (CollectionView | CollectionAdminView)[], +): TreeNode[] { + if (!collections) { + return []; + } + + // Collections need to be cloned because ServiceUtils.nestedTraverse actively + // modifies the names of collections. + // These changes risk affecting collections store in StateService. + const clonedCollections = collections + .sort((a, b) => a.name.localeCompare(b.name)) + .map(cloneCollection); + + const nodes: TreeNode[] = []; + clonedCollections.forEach((collection) => { + const parts = + collection.name != null + ? collection.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) + : []; + ServiceUtils.nestedTraverse_vNext(nodes, 0, parts, collection, null, NestingDelimiter); + }); + return nodes; +} + export function getFlatCollectionTree( nodes: TreeNode[], ): CollectionAdminView[]; 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 a3b62838d6a..19373f193d9 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 @@ -125,7 +125,11 @@ import { BulkCollectionsDialogResult, } from "./bulk-collections-dialog"; import { CollectionAccessRestrictedComponent } from "./collection-access-restricted.component"; -import { getNestedCollectionTree, getFlatCollectionTree } from "./utils"; +import { + getNestedCollectionTree, + getFlatCollectionTree, + getNestedCollectionTree_vNext, +} from "./utils"; import { VaultFilterModule } from "./vault-filter/vault-filter.module"; import { VaultHeaderComponent } from "./vault-header/vault-header.component"; @@ -420,9 +424,16 @@ export class VaultComponent implements OnInit, OnDestroy { }), ); - const nestedCollections$ = allCollections$.pipe( - map((collections) => getNestedCollectionTree(collections)), - shareReplay({ refCount: true, bufferSize: 1 }), + const nestedCollections$ = combineLatest([ + this.allCollectionsWithoutUnassigned$, + this.configService.getFeatureFlag$(FeatureFlag.OptimizeNestedTraverseTypescript), + ]).pipe( + map( + ([collections, shouldOptimize]) => + (shouldOptimize + ? getNestedCollectionTree_vNext(collections) + : getNestedCollectionTree(collections)) as TreeNode[], + ), ); const collections$ = combineLatest([ 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 6e751f600dc..0dfaa1ac589 100644 --- a/apps/web/src/app/vault/individual-vault/vault.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault.component.ts @@ -49,7 +49,9 @@ import { OrganizationBillingServiceAbstraction } from "@bitwarden/common/billing import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billing-api.service.abstraction"; import { EventType } from "@bitwarden/common/enums"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; @@ -82,6 +84,7 @@ import { import { getNestedCollectionTree, getFlatCollectionTree, + getNestedCollectionTree_vNext, } from "../../admin-console/organizations/collections"; import { CollectionDialogAction, @@ -270,6 +273,7 @@ export class VaultComponent implements OnInit, OnDestroy { private trialFlowService: TrialFlowService, private organizationBillingService: OrganizationBillingServiceAbstraction, private billingNotificationService: BillingNotificationService, + private configService: ConfigService, ) {} async ngOnInit() { @@ -326,8 +330,15 @@ export class VaultComponent implements OnInit, OnDestroy { const filter$ = this.routedVaultFilterService.filter$; const allCollections$ = this.collectionService.decryptedCollections$; - const nestedCollections$ = allCollections$.pipe( - map((collections) => getNestedCollectionTree(collections)), + const nestedCollections$ = combineLatest([ + allCollections$, + this.configService.getFeatureFlag$(FeatureFlag.OptimizeNestedTraverseTypescript), + ]).pipe( + map(([collections, shouldOptimize]) => + shouldOptimize + ? getNestedCollectionTree_vNext(collections) + : getNestedCollectionTree(collections), + ), ); this.searchText$ diff --git a/libs/common/src/enums/feature-flag.enum.ts b/libs/common/src/enums/feature-flag.enum.ts index 43b36c5692f..696f7028159 100644 --- a/libs/common/src/enums/feature-flag.enum.ts +++ b/libs/common/src/enums/feature-flag.enum.ts @@ -13,6 +13,7 @@ export enum FeatureFlag { /* Admin Console Team */ LimitItemDeletion = "pm-15493-restrict-item-deletion-to-can-manage-permission", SeparateCustomRolePermissions = "pm-19917-separate-custom-role-permissions", + OptimizeNestedTraverseTypescript = "pm-21695-optimize-nested-traverse-typescript", /* Auth */ PM16117_ChangeExistingPasswordRefactor = "pm-16117-change-existing-password-refactor", @@ -82,6 +83,7 @@ export const DefaultFeatureFlagValue = { /* Admin Console Team */ [FeatureFlag.LimitItemDeletion]: FALSE, [FeatureFlag.SeparateCustomRolePermissions]: FALSE, + [FeatureFlag.OptimizeNestedTraverseTypescript]: FALSE, /* Autofill */ [FeatureFlag.BlockBrowserInjectionsByDomain]: FALSE, diff --git a/libs/common/src/vault/service-utils.spec.ts b/libs/common/src/vault/service-utils.spec.ts index db414da76d7..619d3d72ee6 100644 --- a/libs/common/src/vault/service-utils.spec.ts +++ b/libs/common/src/vault/service-utils.spec.ts @@ -36,6 +36,24 @@ describe("serviceUtils", () => { }); }); + describe("nestedTraverse_vNext", () => { + it("should traverse a tree and add a node at the correct position given a valid path", () => { + const nodeToBeAdded: FakeObject = { id: "1.2.1", name: "1.2.1" }; + const path = ["1", "1.2", "1.2.1"]; + + ServiceUtils.nestedTraverse_vNext(nodeTree, 0, path, nodeToBeAdded, null, "/"); + expect(nodeTree[0].children[1].children[0].node).toEqual(nodeToBeAdded); + }); + + it("should combine the path for missing nodes and use as the added node name given an invalid path", () => { + const nodeToBeAdded: FakeObject = { id: "blank", name: "blank" }; + const path = ["3", "3.1", "3.1.1"]; + + ServiceUtils.nestedTraverse_vNext(nodeTree, 0, path, nodeToBeAdded, null, "/"); + expect(nodeTree[2].children[0].node.name).toEqual("3.1/3.1.1"); + }); + }); + describe("getTreeNodeObject", () => { it("should return a matching node given a single tree branch and a valid id", () => { const id = "1.1.1"; diff --git a/libs/common/src/vault/service-utils.ts b/libs/common/src/vault/service-utils.ts index 5fbc550d6af..96ae406fae4 100644 --- a/libs/common/src/vault/service-utils.ts +++ b/libs/common/src/vault/service-utils.ts @@ -3,15 +3,6 @@ import { ITreeNodeObject, TreeNode } from "./models/domain/tree-node"; export class ServiceUtils { - /** - * Recursively adds a node to nodeTree - * @param {TreeNode[]} nodeTree - An array of TreeNodes that the node will be added to - * @param {number} partIndex - Index of the `parts` array that is being processed - * @param {string[]} parts - Array of strings that represent the path to the `obj` node - * @param {ITreeNodeObject} obj - The node to be added to the tree - * @param {ITreeNodeObject} parent - The parent node of the `obj` node - * @param {string} delimiter - The delimiter used to split the path string, will be used to combine the path for missing nodes - */ static nestedTraverse( nodeTree: TreeNode[], partIndex: number, @@ -70,11 +61,75 @@ export class ServiceUtils { } } + /** + * Recursively adds a node to nodeTree + * @param {TreeNode[]} nodeTree - An array of TreeNodes that the node will be added to + * @param {number} partIndex - Index of the `parts` array that is being processed + * @param {string[]} parts - Array of strings that represent the path to the `obj` node + * @param {ITreeNodeObject} obj - The node to be added to the tree + * @param {ITreeNodeObject} parent - The parent node of the `obj` node + * @param {string} delimiter - The delimiter used to split the path string, will be used to combine the path for missing nodes + */ + static nestedTraverse_vNext( + nodeTree: TreeNode[], + partIndex: number, + parts: string[], + obj: ITreeNodeObject, + parent: TreeNode | undefined, + delimiter: string, + ) { + if (parts.length <= partIndex) { + return; + } + + // 'end' indicates we've traversed as far as we can based on the object name + const end: boolean = partIndex === parts.length - 1; + const partName: string = parts[partIndex]; + + // If we're at the end, just add the node - it doesn't matter what else is here + if (end) { + nodeTree.push(new TreeNode(obj, parent, partName)); + return; + } + + // Get matching nodes at this level by name + // NOTE: this is effectively a loop so we only want to do it once + const matchingNodes = nodeTree.filter((n) => n.node.name === partName); + + // If there are no matching nodes... + if (matchingNodes.length === 0) { + // And we're not at the end of the path (because we didn't trigger the early return above), + // combine the current name with the next name. + // 1, *1.2, 1.2.1 becomes + // 1, *1.2/1.2.1 + const newPartName = partName + delimiter + parts[partIndex + 1]; + ServiceUtils.nestedTraverse_vNext( + nodeTree, + 0, + [newPartName, ...parts.slice(partIndex + 2)], + obj, + parent, + delimiter, + ); + } else { + // There is a node here with the same name, descend into it + ServiceUtils.nestedTraverse_vNext( + matchingNodes[0].children, + partIndex + 1, + parts, + obj, + matchingNodes[0], + delimiter, + ); + return; + } + } + /** * Searches a tree for a node with a matching `id` - * @param {TreeNode} nodeTree - A single TreeNode branch that will be searched + * @param {TreeNode} nodeTree - A single TreeNode branch that will be searched * @param {string} id - The id of the node to be found - * @returns {TreeNode} The node with a matching `id` + * @returns {TreeNode} The node with a matching `id` */ static getTreeNodeObject( nodeTree: TreeNode, @@ -96,9 +151,9 @@ export class ServiceUtils { /** * Searches an array of tree nodes for a node with a matching `id` - * @param {TreeNode} nodeTree - An array of TreeNode branches that will be searched + * @param {TreeNode} nodeTree - An array of TreeNode branches that will be searched * @param {string} id - The id of the node to be found - * @returns {TreeNode} The node with a matching `id` + * @returns {TreeNode} The node with a matching `id` */ static getTreeNodeObjectFromList( nodeTree: TreeNode[], From 8966b4fb50c7dff9a02cfbb22f9cfa8b26ee1553 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Thu, 29 May 2025 20:48:03 +0200 Subject: [PATCH 07/33] Fix flatpak autostart disabling (#14920) --- apps/desktop/src/main/messaging.main.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/main/messaging.main.ts b/apps/desktop/src/main/messaging.main.ts index 556fa293108..bc8d9ae4685 100644 --- a/apps/desktop/src/main/messaging.main.ts +++ b/apps/desktop/src/main/messaging.main.ts @@ -10,7 +10,7 @@ import { autostart } from "@bitwarden/desktop-napi"; import { Main } from "../main"; import { DesktopSettingsService } from "../platform/services/desktop-settings.service"; -import { isFlatpak } from "../utils"; +import { isFlatpak, isLinux, isSnapStore } from "../utils"; import { MenuUpdateRequest } from "./menu/menu.updater"; @@ -26,8 +26,11 @@ export class MessagingMain { async init() { this.scheduleNextSync(); - if (process.platform === "linux") { - await this.desktopSettingsService.setOpenAtLogin(fs.existsSync(this.linuxStartupFile())); + if (isLinux()) { + // Flatpak and snap don't have access to or use the startup file. On flatpak, the autostart portal is used + if (!isFlatpak() && !isSnapStore()) { + await this.desktopSettingsService.setOpenAtLogin(fs.existsSync(this.linuxStartupFile())); + } } else { const loginSettings = app.getLoginItemSettings(); await this.desktopSettingsService.setOpenAtLogin(loginSettings.openAtLogin); From bb9006e6e4b0260b1552ac230b86420bf3696504 Mon Sep 17 00:00:00 2001 From: Github Actions Date: Thu, 29 May 2025 19:15:34 +0000 Subject: [PATCH 08/33] Bumped Desktop client to 2025.5.1 --- apps/desktop/package.json | 2 +- apps/desktop/src/package-lock.json | 4 ++-- apps/desktop/src/package.json | 2 +- package-lock.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 21892cd1df8..64f2b188d72 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@bitwarden/desktop", "description": "A secure and free password manager for all of your devices.", - "version": "2025.5.0", + "version": "2025.5.1", "keywords": [ "bitwarden", "password", diff --git a/apps/desktop/src/package-lock.json b/apps/desktop/src/package-lock.json index b3a33dc75e3..7b48c4af1d5 100644 --- a/apps/desktop/src/package-lock.json +++ b/apps/desktop/src/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bitwarden/desktop", - "version": "2025.5.0", + "version": "2025.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bitwarden/desktop", - "version": "2025.5.0", + "version": "2025.5.1", "license": "GPL-3.0", "dependencies": { "@bitwarden/desktop-napi": "file:../desktop_native/napi" diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json index c180ed8c744..e2bc869f9f3 100644 --- a/apps/desktop/src/package.json +++ b/apps/desktop/src/package.json @@ -2,7 +2,7 @@ "name": "@bitwarden/desktop", "productName": "Bitwarden", "description": "A secure and free password manager for all of your devices.", - "version": "2025.5.0", + "version": "2025.5.1", "author": "Bitwarden Inc. (https://bitwarden.com)", "homepage": "https://bitwarden.com", "license": "GPL-3.0", diff --git a/package-lock.json b/package-lock.json index 691705cc280..071f42c94c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -232,7 +232,7 @@ }, "apps/desktop": { "name": "@bitwarden/desktop", - "version": "2025.5.0", + "version": "2025.5.1", "hasInstallScript": true, "license": "GPL-3.0" }, From eed288d79731393b753f7ee638dabb645d62fba0 Mon Sep 17 00:00:00 2001 From: Jordan Aasen <166539328+jaasen-livefront@users.noreply.github.com> Date: Thu, 29 May 2025 13:01:07 -0700 Subject: [PATCH 09/33] [PM-21724] - add safari and firefox to list of potential browser vendors (#14857) * add safari and firefox to list of potential browser vendors * use browserClientVendorExtended * handle unknown browser client vendor --- .../popup/settings/autofill.component.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/browser/src/autofill/popup/settings/autofill.component.ts b/apps/browser/src/autofill/popup/settings/autofill.component.ts index e1a5a2fc218..8c5c8e600a0 100644 --- a/apps/browser/src/autofill/popup/settings/autofill.component.ts +++ b/apps/browser/src/autofill/popup/settings/autofill.component.ts @@ -334,11 +334,24 @@ export class AutofillComponent implements OnInit { return null; } + get browserClientVendorExtended() { + if (this.browserClientVendor !== BrowserClientVendors.Unknown) { + return this.browserClientVendor; + } + if (this.platformUtilsService.isFirefox()) { + return "Firefox"; + } + if (this.platformUtilsService.isSafari()) { + return "Safari"; + } + return BrowserClientVendors.Unknown; + } + get spotlightButtonText() { - if (this.browserClientVendor === BrowserClientVendors.Unknown) { + if (this.browserClientVendorExtended === BrowserClientVendors.Unknown) { return this.i18nService.t("turnOffAutofill"); } - return this.i18nService.t("turnOffBrowserAutofill", this.browserClientVendor); + return this.i18nService.t("turnOffBrowserAutofill", this.browserClientVendorExtended); } async dismissSpotlight() { From 21dfcfeadaaf61462aed1cd7dcc45cdf58015d58 Mon Sep 17 00:00:00 2001 From: aj-bw <81774843+aj-bw@users.noreply.github.com> Date: Thu, 29 May 2025 17:18:59 -0400 Subject: [PATCH 10/33] fix chromatic linter failure (#14972) --- .github/workflows/chromatic.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 47f3b310504..78733bc5a8b 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -7,7 +7,9 @@ on: - "rc" - "hotfix-rc" pull_request_target: - types: [opened, synchronize] + types: [opened, synchronize, reopened] + branches: + - "main" jobs: check-run: From 949e9b14ab6bacd5c18b06b4ad8b32ba4a655918 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:14:36 +0200 Subject: [PATCH 11/33] Autosync the updated translations (#14997) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/ar/messages.json | 3 + apps/browser/src/_locales/az/messages.json | 3 + apps/browser/src/_locales/be/messages.json | 3 + apps/browser/src/_locales/bg/messages.json | 3 + apps/browser/src/_locales/bn/messages.json | 3 + apps/browser/src/_locales/bs/messages.json | 3 + apps/browser/src/_locales/ca/messages.json | 11 +- apps/browser/src/_locales/cs/messages.json | 3 + apps/browser/src/_locales/cy/messages.json | 3 + apps/browser/src/_locales/da/messages.json | 3 + apps/browser/src/_locales/de/messages.json | 11 +- apps/browser/src/_locales/el/messages.json | 3 + apps/browser/src/_locales/en_GB/messages.json | 3 + apps/browser/src/_locales/en_IN/messages.json | 3 + apps/browser/src/_locales/es/messages.json | 5 +- apps/browser/src/_locales/et/messages.json | 3 + apps/browser/src/_locales/eu/messages.json | 3 + apps/browser/src/_locales/fa/messages.json | 3 + apps/browser/src/_locales/fi/messages.json | 5 +- apps/browser/src/_locales/fil/messages.json | 3 + apps/browser/src/_locales/fr/messages.json | 25 +-- apps/browser/src/_locales/gl/messages.json | 3 + apps/browser/src/_locales/he/messages.json | 3 + apps/browser/src/_locales/hi/messages.json | 3 + apps/browser/src/_locales/hr/messages.json | 3 + apps/browser/src/_locales/hu/messages.json | 3 + apps/browser/src/_locales/id/messages.json | 3 + apps/browser/src/_locales/it/messages.json | 113 ++++++------- apps/browser/src/_locales/ja/messages.json | 3 + apps/browser/src/_locales/ka/messages.json | 3 + apps/browser/src/_locales/km/messages.json | 3 + apps/browser/src/_locales/kn/messages.json | 3 + apps/browser/src/_locales/ko/messages.json | 3 + apps/browser/src/_locales/lt/messages.json | 3 + apps/browser/src/_locales/lv/messages.json | 5 +- apps/browser/src/_locales/ml/messages.json | 3 + apps/browser/src/_locales/mr/messages.json | 3 + apps/browser/src/_locales/my/messages.json | 3 + apps/browser/src/_locales/nb/messages.json | 3 + apps/browser/src/_locales/ne/messages.json | 3 + apps/browser/src/_locales/nl/messages.json | 5 +- apps/browser/src/_locales/nn/messages.json | 3 + apps/browser/src/_locales/or/messages.json | 3 + apps/browser/src/_locales/pl/messages.json | 3 + apps/browser/src/_locales/pt_BR/messages.json | 3 + apps/browser/src/_locales/pt_PT/messages.json | 3 + apps/browser/src/_locales/ro/messages.json | 3 + apps/browser/src/_locales/ru/messages.json | 3 + apps/browser/src/_locales/si/messages.json | 3 + apps/browser/src/_locales/sk/messages.json | 7 +- apps/browser/src/_locales/sl/messages.json | 3 + apps/browser/src/_locales/sr/messages.json | 21 +-- apps/browser/src/_locales/sv/messages.json | 153 +++++++++--------- apps/browser/src/_locales/te/messages.json | 3 + apps/browser/src/_locales/th/messages.json | 3 + apps/browser/src/_locales/tr/messages.json | 3 + apps/browser/src/_locales/uk/messages.json | 47 +++--- apps/browser/src/_locales/vi/messages.json | 3 + apps/browser/src/_locales/zh_CN/messages.json | 15 +- apps/browser/src/_locales/zh_TW/messages.json | 3 + 60 files changed, 372 insertions(+), 192 deletions(-) diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 48ae14fc1ce..426dba6ae2c 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "استخدم كلمة المرور هذه" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "استخدم اسم المستخدم هذا" }, diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index c9096bce0d6..03a2aa103c6 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Bu parolu istifadə et" }, + "useThisPassphrase": { + "message": "Bu keçid ifadəsini istifadə et" + }, "useThisUsername": { "message": "Bu istifadəçi adını istifadə et" }, diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 0dd5ff4163f..4a6c11763af 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Выкарыстоўваць гэты пароль" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Выкарыстоўваць гэта імя карыстальніка" }, diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 0bf8dbce2b0..b6bb159b354 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Използване на тази парола" }, + "useThisPassphrase": { + "message": "Използване на тази парола-фраза" + }, "useThisUsername": { "message": "Използване на това потребителско име" }, diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index f7f28115faa..f58a878f83c 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 1dc35addd8e..0f064076440 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 9517257ac3a..3ea0c595916 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -1621,10 +1621,10 @@ "message": "Mostra suggeriments d'emplenament automàtic als camps del formulari" }, "showInlineMenuIdentitiesLabel": { - "message": "Display identities as suggestions" + "message": "Mostra identitats com a suggeriments" }, "showInlineMenuCardsLabel": { - "message": "Display cards as suggestions" + "message": "Mostra targetes com a suggeriments" }, "showInlineMenuOnIconSelectionLabel": { "message": "Mostra suggeriments quan la icona està seleccionada" @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Utilitzeu aquesta contrasenya" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Utilitzeu aquest nom d'usuari" }, @@ -2219,7 +2222,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Personalització de la caixa forta" }, "vaultTimeoutAction": { "message": "Acció quan acabe el temps d'espera de la caixa forta" @@ -5253,7 +5256,7 @@ "message": "Change at-risk password" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Opcions de la caixa forta" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index b213e0aee7d..354f37268de 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Použít toto heslo" }, + "useThisPassphrase": { + "message": "Použít tuto heslovou frázi" + }, "useThisUsername": { "message": "Použít toto uživatelské jméno" }, diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index ee74d1e45e2..b26cbf21019 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Defnyddio'r cyfrinair hwn" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Defnyddio'r enw defnyddiwr hwn" }, diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index da24e1bcfb9..b64655ab399 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Anvend denne adgangskode" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Anvend dette brugernavn" }, diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index f7303885551..34fecaadb72 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Dieses Passwort verwenden" }, + "useThisPassphrase": { + "message": "Diese Passphrase verwenden" + }, "useThisUsername": { "message": "Diesen Benutzernamen verwenden" }, @@ -3620,7 +3623,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-Verschlüsselt, während die Verbreitung begrenzt wird.", + "message": "Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-verschlüsselt, während die Verbreitung begrenzt wird.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -5256,7 +5259,7 @@ "message": "Tresoroptionen" }, "emptyVaultDescription": { - "message": "Der Tresor schützt mehr als nur deine Passwörter. Speicher hier sicher Zugangsdaten, Ausweise, Karten und Notizen." + "message": "Der Tresor schützt mehr als nur deine Passwörter. Speicher hier sicher Zugangsdaten, Identitäten, Karten und Notizen." }, "introCarouselLabel": { "message": "Willkommen bei Bitwarden" @@ -5367,12 +5370,12 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": ", um deine Zugangsdaten sicher aufzubewahren.", + "message": ", um dir zu helfen, deine Zugangsdaten sicher zu halten.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den \"Passwort generieren\"-Button klickst, um deine Zugangsdaten sicher aufzubewahren.", + "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" }, "noPermissionsViewPage": { diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index ed81dfa744e..3d67010a32d 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Χρήση αυτού του κωδικού πρόσβασης" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Χρήση αυτού του ονόματος χρήστη" }, diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 5eecf989894..af82196d643 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index adb3cf6ec32..d0fc2af6f9b 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 94d02848b5f..536131b6b78 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -884,7 +884,7 @@ "message": "Se requiere inicio de sesión en dos pasos para tu cuenta. Sigue los pasos siguientes para terminar de iniciar sesión." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Sigue los pasos de abajo para terminar de iniciar sesión." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { "message": "Follow the steps below to finish logging in with your security key." @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Usar esta contraseña" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Usar este nombre de usuario" }, diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 26b4bf69fb4..1c09897c53b 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Kasuta seda parooli" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Kasuta seda kasutajanime" }, diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index b3f525d7be5..cb855a077bc 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 33a779a7909..190af9225a3 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "از این کلمه عبور استفاده کن" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "از این نام کاربری استفاده کن" }, diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 8e5eede202a..318b80997c9 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Käytä tätä salasanaa" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Käytä tätä käyttäjätunnusta" }, @@ -3018,7 +3021,7 @@ "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." }, "organizationName": { - "message": "Organization name" + "message": "Organisaation nimi" }, "keyConnectorDomain": { "message": "Key Connector domain" diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index e8e45249773..e4c2c746f80 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 736fd21349e..5ee6102b550 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -1121,11 +1121,11 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Déverrouiller pour enregistrer l'identifiant", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Enregistrer l'identifiant", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { @@ -1615,7 +1615,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Désactiver la saisie automatique" }, "showInlineMenuLabel": { "message": "Afficher les suggestions de saisie automatique dans les champs d'un formulaire" @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Utiliser ce mot de passe" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Utiliser ce nom d'utilisateur" }, @@ -2374,7 +2377,7 @@ "message": "Politique de confidentialité" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Votre nouveau mot de passe ne peut être le même que votre mot de passe actuel." }, "hintEqualsPassword": { "message": "Votre indice de mot de passe ne peut pas être identique à votre mot de passe." @@ -3018,7 +3021,7 @@ "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." }, "organizationName": { - "message": "Organization name" + "message": "Nom de l'organisation" }, "keyConnectorDomain": { "message": "Key Connector domain" @@ -3587,10 +3590,10 @@ "message": "Trust organization" }, "trust": { - "message": "Trust" + "message": "Faire confiance" }, "doNotTrust": { - "message": "Do not trust" + "message": "Ne pas faire confiance" }, "organizationNotTrusted": { "message": "Organization is not trusted" @@ -4540,19 +4543,19 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Télécharger Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Télécharger Bitwarden sur tous les appareils" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Télécharger l'application mobile" }, "getTheMobileAppDesc": { "message": "Access your passwords on the go with the Bitwarden mobile app." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Télécharger l'application de bureau" }, "getTheDesktopAppDesc": { "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index e10287f3e7b..fbe708b1b08 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Usar este contrasinal" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Usar este nome de usuario" }, diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 1b264d9a70a..b8f5ec0b0b1 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "השתמש בסיסמה זו" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "השתמש בשם משתמש זה" }, diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 61c0fbe9963..a283bd6f438 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index ad32937c740..bac097fe112 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Koristi ovu lozinku" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Koristi ovo korisničko ime" }, diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 50607787cd7..0572fc77789 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Jelszó használata" }, + "useThisPassphrase": { + "message": "Jelmondat használata" + }, "useThisUsername": { "message": "Felhasználónév használata" }, diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index a12137d696a..7f8fea33a2e 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Gunakan kata sandi ini" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Gunakan nama pengguna ini" }, diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 9a5d2c65bb6..c733192493a 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logo di Bitwarden" }, "extName": { "message": "Bitwarden Password Manager", @@ -23,7 +23,7 @@ "message": "Crea account" }, "newToBitwarden": { - "message": "Sei un nuovo utente?" + "message": "Sei nuovo su Bitwarden?" }, "logInWithPasskey": { "message": "Accedi con passkey" @@ -32,7 +32,7 @@ "message": "Usa il Single Sign-On" }, "welcomeBack": { - "message": "Bentornat*" + "message": "Bentornato/a" }, "setAStrongPassword": { "message": "Imposta una password robusta" @@ -887,7 +887,7 @@ "message": "Segui i passaggi qui sotto per completare l'accesso." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Segui i passaggi seguenti per finire di accedere con la tua chiave di sicurezza." }, "restartRegistration": { "message": "Ricomincia la registrazione" @@ -1063,7 +1063,7 @@ "message": "Salva" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Visualizza $ITEMNAME$, si apre in una nuova finestra", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1072,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Nuovo elemento, si apre in una nuova finestra", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Modifica prima di salvare", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Nuova notifica" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Nuova notifica", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "salvato in Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "aggiornato in Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Seleziona $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,15 +1121,15 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Sblocca per salvare questo login", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Salva il login", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Aggiorna login esistente", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -1141,7 +1141,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Congratulazioni! Hai reso $ORGANIZATION$ e te stesso più sicuri.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Grazie per aver reso $ORGANIZATION$ più sicuro. Hai altre $TASK_COUNT$ password da aggiornare.", "placeholders": { "organization": { "content": "$1" @@ -1162,7 +1162,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Cambia la prossima password", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1600,13 +1600,13 @@ "message": "Suggerimenti per il riempimento automatico" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Trova facilmente suggerimenti di riempimento automatico" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Disattiva le impostazioni di riempimento automatico del tuo browser, in modo da non entrare in conflitto con Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Disattiva il riempimento automatico di $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1615,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Disattiva il riempimento automatico" }, "showInlineMenuLabel": { "message": "Mostra suggerimenti di riempimento automatico nei campi del modulo" @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Usa questa password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Usa questo nome utente" }, @@ -2374,7 +2377,7 @@ "message": "Informativa sulla Privacy" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "La tua nuova password non può essere la stessa della tua password attuale." }, "hintEqualsPassword": { "message": "Il suggerimento della password non può essere uguale alla password." @@ -2584,14 +2587,14 @@ "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Illustrazione di una lista di login a rischio." }, "generatePasswordSlideDesc": { "message": "Genera rapidamente una parola d'accesso forte e unica con il menu' di riempimento automatico Bitwarden nel sito a rischio.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Illustrazione del menu di riempimento automatico Bitwarden che mostra una password generata." }, "updateInBitwarden": { "message": "Aggiorna in Bitwarden" @@ -2601,7 +2604,7 @@ "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Illustrazione di una notifica Bitwarden che richiede all'utente di aggiornare il login." }, "turnOnAutofill": { "message": "Attiva riempimento automatico" @@ -3015,13 +3018,13 @@ "message": "Nessun identificatore univoco trovato." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "La password principale non è più richiesta per i membri dell'organizzazione. Per favore, conferma il dominio qui sotto con l'amministratore." }, "organizationName": { - "message": "Organization name" + "message": "Nome organizzazione" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Dominio Key Connector" }, "leaveOrganization": { "message": "Lascia organizzazione" @@ -3057,7 +3060,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "Solo gli elementi della cassaforte personale associati a $EMAIL$, includendo gli allegati, saranno esportati. Gli elementi della cassaforte dell'organizzazione non saranno inclusi", "placeholders": { "email": { "content": "$1", @@ -3584,28 +3587,28 @@ "message": "Dispositivo fidato" }, "trustOrganization": { - "message": "Trust organization" + "message": "Fidati dell'organizzazione" }, "trust": { - "message": "Trust" + "message": "Fidati" }, "doNotTrust": { - "message": "Do not trust" + "message": "Non fidarti" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "L'organizzazione non è fidata" }, "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": "Per la sicurezza del tuo account, conferma solo se hai concesso l'accesso di emergenza a questo utente e le loro impronte digitali corrispondono a quelle contenute nel loro account" }, "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": "Per la sicurezza del tuo account, procedi solo se sei un membro di questa organizzazione, il recupero dell'account è abilitato e l'impronta digitale visualizzata di seguito corrisponde all'impronta digitale dell'organizzazione." }, "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": "Questa organizzazione ha una politica Enterprise che ti iscriverà al recupero dell'account. La registrazione consentirà agli amministratori dell'organizzazione di modificare la password. Procedi solo se riconosci questa organizzazione e la frase di impronta digitale mostrata di seguito corrisponde all'impronta digitale dell'organizzazione." }, "trustUser": { - "message": "Trust user" + "message": "Fidati dell'utente" }, "sendsNoItemsTitle": { "message": "Nessun Send attivo", @@ -3616,11 +3619,11 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Invia informazioni sensibili in modo sicuro", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Condividi file e dati in modo sicuro con chiunque, su qualsiasi piattaforma. Le tue informazioni saranno crittografate end-to-end.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -4355,7 +4358,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Visualizza elemento - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4379,7 +4382,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Riempimento automatico - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4540,31 +4543,31 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Scarica Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Scarica Bitwarden su tutti i dispositivi" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Scarica l'app mobile" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Accedi alle tue password ovunque con l'app Bitwarden per dispositivi mobili." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Scarica l'app desktop" }, "getTheDesktopAppDesc": { "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Scarica ora da bitwarden.com" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Disponible su Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Scarica dall'App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Sei sicuro di voler eliminare definitivamente questo allegato?" @@ -5028,13 +5031,13 @@ "message": "Lo sblocco biometrico non è attualmente disponibile per un motivo sconosciuto." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Sblocca la cassaforte in secondi" }, "unlockVaultDesc": { "message": "You can customize your unlock and timeout settings to more quickly access your vault." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Sblocca PIN impostato" }, "authenticating": { "message": "Autenticazione" @@ -5048,7 +5051,7 @@ "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Salva su Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { @@ -5253,13 +5256,13 @@ "message": "Cambia parola d'accesso a rischio" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Opzioni cassaforte" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Benvenuto su Bitwarden" }, "securityPrioritized": { "message": "Security, prioritized" diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 5c235bdea43..b4f1fa0132e 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "このパスワードを使用する" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "このユーザー名を使用する" }, diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 7f36bb3568f..21ff426dfc5 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 4775d1f7af0..feb5a7706f3 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index ac36d911e89..2fa7ea8013e 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 5a496cde98a..2655ef688e7 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "이 비밀번호 사용" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "이 사용자 이름 사용" }, diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index f790c226437..07e26a862b3 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index f47b5f7645e..5a8a82c16ed 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Izmantot šo paroli" }, + "useThisPassphrase": { + "message": "Izmantot šo paroles vārdkopu" + }, "useThisUsername": { "message": "Izmantot šo lietotājvārdu" }, @@ -5362,7 +5365,7 @@ "message": "Ātra paroļu izveidošana" }, "generatorNudgeBodyOne": { - "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar pogu", + "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index ab0120a40e2..a56fb396435 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 625bf093ba9..416862859c9 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 4775d1f7af0..feb5a7706f3 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index a11d5de6e2a..504f98fe44a 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Bruk dette passordet" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Bruk dette brukernavnet" }, diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 4775d1f7af0..feb5a7706f3 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 67a784459b2..4d60287a78e 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -468,7 +468,7 @@ "message": "Wachtwoord gegenereerd" }, "passphraseGenerated": { - "message": "Wachtwoorden gegenereerd" + "message": "Wachtwoordzin gegenereerd" }, "usernameGenerated": { "message": "Gebruikersnaam gegenereerd" @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Dit wachtwoord gebruiken" }, + "useThisPassphrase": { + "message": "Deze wachtwoordzin gebruiken" + }, "useThisUsername": { "message": "Deze gebruikersnaam gebruiken" }, diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 4775d1f7af0..feb5a7706f3 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 4775d1f7af0..feb5a7706f3 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index eb391f5e34b..32d6799493e 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Użyj tego hasła" }, + "useThisPassphrase": { + "message": "Użyj tego hasła wyrazowego" + }, "useThisUsername": { "message": "Użyj tej nazwy użytkownika" }, diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index c0b83248edf..7d70debf128 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use esta senha" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use este nome de usuário" }, diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index a144f5767d4..67db6178ace 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Utilizar esta palavra-passe" }, + "useThisPassphrase": { + "message": "Utilizar esta frase de acesso" + }, "useThisUsername": { "message": "Utilizar este nome de utilizador" }, diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 2aabf825399..3ed8e876d6f 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index a23ab4172f8..d7f901bf04f 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Использовать этот пароль" }, + "useThisPassphrase": { + "message": "Использовать эту парольную фразу" + }, "useThisUsername": { "message": "Использовать это имя пользователя" }, diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index eafbf9c584e..2e20f5dc4ce 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 016f4ca1f5a..8d6f193168e 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -474,7 +474,7 @@ "message": "Používateľské meno vygenerované" }, "emailGenerated": { - "message": "E-mail vygenoravný" + "message": "E-mail vygenerovaný" }, "regeneratePassword": { "message": "Vygenerovať nové heslo" @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Použiť toto heslo" }, + "useThisPassphrase": { + "message": "Použiť túto prístupovú frázu" + }, "useThisUsername": { "message": "Použiť toto používateľské meno" }, @@ -5372,7 +5375,7 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Jednoducho vytvorte silné a jedinečné heslá kliknutím na tlačidlo Generovať heslo, aby zabezpečili prihlasovacie údaje.", + "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" }, "noPermissionsViewPage": { diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 3f84455be88..224f31076b8 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index dae425fcfd3..54371488c0d 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Употреби ову лозинку" }, + "useThisPassphrase": { + "message": "Употреби ову приступну фразу" + }, "useThisUsername": { "message": "Употреби ово корисничко име" }, @@ -3616,11 +3619,11 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Шаљите безбедно осетљиве информације", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Делите датотеке и податке безбедно са било ким, на било којој платформи. Ваше информације ће остати шифроване од почетка-до-краја уз ограничење изложености.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -5028,13 +5031,13 @@ "message": "Биометријско откључавање није доступно из непознатог разлога." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Откључајте сеф у секунди" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Можете да прилагодите своје поставке за откључавање и истек времена да бисте брзо приступили сефу." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Постављен ПИН деблокирања" }, "authenticating": { "message": "Аутентификација" @@ -5359,20 +5362,20 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Брзо креирајте лозинке" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Лако креирајте снажне и јединствене лозинке кликом на", "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": "да вам помогне да задржите своје пријаве сигурно.", "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": "Лако креирајте снажне и јединствене лозинке кликом на дугме „Генерирате лозинку“ да вам помогне да чувате своје пријаве на сигурно.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index f57209122ef..10b9d965cc8 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -246,7 +246,7 @@ "message": "Logga in i ditt valv" }, "autoFillInfo": { - "message": "Det finns inga inloggningar tillgängliga för automatisk ifyllnad på den nuvarande fliken." + "message": "Det finns inga inloggningar tillgängliga för autofyll på den nuvarande fliken." }, "addLogin": { "message": "Lägg till en inloggning" @@ -383,7 +383,7 @@ "message": "Redigera mapp" }, "editFolderWithName": { - "message": "Edit folder: $FOLDERNAME$", + "message": "Redigera mapp: $FOLDERNAME$", "placeholders": { "foldername": { "content": "$1", @@ -575,7 +575,7 @@ "message": "Favorit" }, "unfavorite": { - "message": "Unfavorite" + "message": "Ta bort favorit" }, "itemAddedToFavorites": { "message": "Objekt tillagt i favoriter" @@ -842,7 +842,7 @@ "message": "Scan authenticator QR code from current webpage" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "Gör tvåstegsverifiering sömlös" }, "totpHelper": { "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." @@ -872,13 +872,13 @@ "message": "Logga in på Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Ange koden som skickats till din e-post" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Ange koden från din autentiseringsapp" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Tryck på din YubiKey för att autentisera" }, "duoTwoFactorRequiredPageSubtitle": { "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." @@ -890,16 +890,16 @@ "message": "Follow the steps below to finish logging in with your security key." }, "restartRegistration": { - "message": "Restart registration" + "message": "Starta om registrering" }, "expiredLink": { - "message": "Expired link" + "message": "Utgången länk" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Please restart registration or try logging in." + "message": "Starta om registreringen eller försök logga in." }, "youMayAlreadyHaveAnAccount": { - "message": "You may already have an account" + "message": "Du kanske redan har ett konto" }, "logOutConfirmation": { "message": "Är du säker på att du vill logga ut?" @@ -911,7 +911,7 @@ "message": "Nej" }, "location": { - "message": "Location" + "message": "Plats" }, "unexpectedError": { "message": "Ett okänt fel har inträffat." @@ -926,10 +926,10 @@ "message": "Tvåstegsverifiering gör ditt konto säkrare genom att kräva att du verifierar din inloggning med en annan enhet, t.ex. en säkerhetsnyckel, autentiseringsapp, SMS, telefonsamtal eller e-post. Tvåstegsverifiering kan aktiveras i Bitwardens webbvalv. Vill du besöka webbplatsen nu?" }, "twoStepLoginConfirmationContent": { - "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + "message": "Gör ditt konto säkrare genom att konfigurera tvåstegsverifiering i Bitwardens webbapp." }, "twoStepLoginConfirmationTitle": { - "message": "Continue to web app?" + "message": "Fortsätt till webbapp?" }, "editedFolder": { "message": "Mapp sparad" @@ -1031,7 +1031,7 @@ "message": "Visa kort på fliksida" }, "showCardsCurrentTabDesc": { - "message": "Lista kortobjekt på fliksidan för enkel automatisk fyllning." + "message": "Lista kortobjekt på fliksidan för enkel autofyll." }, "showIdentitiesInVaultViewV2": { "message": "Always show identities as Autofill suggestions on Vault view" @@ -1040,7 +1040,7 @@ "message": "Visa identiteter på fliksidan" }, "showIdentitiesCurrentTabDesc": { - "message": "Lista identitetsobjekt på fliksidan för enkel automatisk fyllning." + "message": "Lista identitetsobjekt på fliksidan för enkel autofyll." }, "clickToAutofillOnVault": { "message": "Click items to autofill on Vault view" @@ -1125,7 +1125,7 @@ "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Spara inloggning", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { @@ -1133,11 +1133,11 @@ "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Login saved", + "message": "Inloggning sparad", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { - "message": "Login updated", + "message": "Inloggning uppdaterad", "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { @@ -1195,7 +1195,7 @@ "message": "Uppdatera" }, "notificationUnlockDesc": { - "message": "Lås upp ditt Bitwarden-valv för att slutföra begäran om automatisk ifyllnad." + "message": "Lås upp ditt Bitwarden-valv för att slutföra begäran om autofyll." }, "notificationUnlock": { "message": "Lås upp" @@ -1217,7 +1217,7 @@ "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Välj standardalternativet för hur matchning av URI är hanterat för inloggningar när du utför operationer såsom automatisk ifyllnad." + "message": "Välj standardalternativet för hur matchning av URI är hanterat för inloggningar när du utför operationer såsom autofyll." }, "theme": { "message": "Tema" @@ -1274,7 +1274,7 @@ "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { - "message": "Warning", + "message": "Varning", "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { @@ -1474,29 +1474,29 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "Fråga inte igen på den här enheten i 30 dagar" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "Välj en annan metod", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "Använd din återställningskod" }, "insertU2f": { "message": "Sätt i din säkerhetsnyckel i en av datorns USB-portar. Om nyckeln har en knapp, sätt fingret på den." }, "openInNewTab": { - "message": "Open in new tab" + "message": "Öppna i ny flik" }, "webAuthnAuthenticate": { "message": "Autentisera WebAuthn" }, "readSecurityKey": { - "message": "Read security key" + "message": "Läs säkerhetsnyckel" }, "awaitingSecurityKeyInteraction": { - "message": "Awaiting security key interaction..." + "message": "Väntar på interaktion med säkerhetsnyckel..." }, "loginUnavailable": { "message": "Inloggning ej tillgänglig" @@ -1511,7 +1511,7 @@ "message": "Alternativ för tvåstegsverifiering" }, "selectTwoStepLoginMethod": { - "message": "Select two-step login method" + "message": "Välj metod för tvåstegsverifiering" }, "recoveryCodeDesc": { "message": "Förlorat åtkomst till alla dina metoder för tvåstegsverifiering? Använd din återställningskod för att inaktivera tvåstegsverifiering på ditt konto." @@ -1523,7 +1523,7 @@ "message": "Autentiseringsapp" }, "authenticatorAppDescV2": { - "message": "Enter a code generated by an authenticator app like Bitwarden Authenticator.", + "message": "Ange en kod som genererats av en autentiseringsapp som Bitwarden Authenticator.", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { @@ -1556,13 +1556,13 @@ "message": "Egen-hostad miljö" }, "selfHostedBaseUrlHint": { - "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + "message": "Ange bas-URL:en för din självhostade Bitwarden-installation. Exempel: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { - "message": "For advanced configuration, you can specify the base URL of each service independently." + "message": "För avancerad konfiguration kan du ange bas-URL för varje tjänst separat." }, "selfHostedEnvFormInvalid": { - "message": "You must add either the base Server URL or at least one custom environment." + "message": "Du måste lägga till antingen serverns bas-URL eller minst en anpassad miljö." }, "customEnvironment": { "message": "Anpassad miljö" @@ -1571,7 +1571,7 @@ "message": "Server-URL" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "Självhostad server-URL", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1593,20 +1593,20 @@ "message": "Miljö-URL:erna har sparats" }, "showAutoFillMenuOnFormFields": { - "message": "Visa menyn för automatisk ifyllnad på formulärfält", + "message": "Visa menyn för autofyll på formulärfält", "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { "message": "Förslag för autofyll" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Hitta förslag på autofyll enkelt" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Stäng av webbläsarens autofyllinställningar så att de inte orsakar konflikt med Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Stäng av $BROWSER$ autofyll", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1615,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Stäng av autofyll" }, "showInlineMenuLabel": { "message": "Visa förslag för autofyll i formulärfält" @@ -1627,13 +1627,13 @@ "message": "Visa kort som förslag" }, "showInlineMenuOnIconSelectionLabel": { - "message": "Display suggestions when icon is selected" + "message": "Visa förslag när ikonen markerats" }, "showInlineMenuOnFormFieldsDescAlt": { - "message": "Applies to all logged in accounts." + "message": "Gäller för alla inloggade konton." }, "turnOffBrowserBuiltInPasswordManagerSettings": { - "message": "Turn off your browser's built in password manager settings to avoid conflicts." + "message": "Stäng av webbläsarens inbyggda lösenordshanterarinställningar för att undvika konflikter." }, "turnOffBrowserBuiltInPasswordManagerSettingsLink": { "message": "Redigera webbläsarinställningar." @@ -1643,11 +1643,11 @@ "description": "Overlay setting select option for disabling autofill overlay" }, "autofillOverlayVisibilityOnFieldFocus": { - "message": "When field is selected (on focus)", + "message": "När fältet är markerat (i fokus)", "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { - "message": "När ikonen för automatisk ifyllnad är vald", + "message": "När ikonen för autofyll är vald", "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { @@ -1693,13 +1693,13 @@ "message": "Öppna valvet i sidofältet" }, "commandAutofillLoginDesc": { - "message": "Autofill the last used login for the current website" + "message": "Autofyll den senast använda inloggningen för den aktuella webbplatsen" }, "commandAutofillCardDesc": { - "message": "Autofill the last used card for the current website" + "message": "Autofyll det senast använda kortet för den aktuella webbplatsen" }, "commandAutofillIdentityDesc": { - "message": "Autofill the last used identity for the current website" + "message": "Autofyll den senast använda identiteten för den aktuella webbplatsen" }, "commandGeneratePasswordDesc": { "message": "Skapa och kopiera ett nytt slumpmässigt lösenord till urklipp." @@ -1723,7 +1723,7 @@ "message": "Dra för att sortera" }, "dragToReorder": { - "message": "Drag to reorder" + "message": "Dra för att ändra ordning" }, "cfTypeText": { "message": "Text" @@ -1758,7 +1758,7 @@ "message": "Visa en identifierbar bild bredvid varje inloggning." }, "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "message": "Visa en igenkännbar bild bredvid varje inloggning. Gäller för alla inloggade konton." }, "enableBadgeCounter": { "message": "Visa aktivitetsräknaren" @@ -1959,7 +1959,7 @@ "message": "Rensa generatorhistorik" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Om du fortsätter kommer alla poster att raderas permanent från generatorns historik. Är du säker på att du vill fortsätta?" }, "back": { "message": "Tillbaka" @@ -1998,7 +1998,7 @@ "message": "Säkra anteckningar" }, "sshKeys": { - "message": "SSH Keys" + "message": "SSH-nycklar" }, "clear": { "message": "Rensa", @@ -2081,10 +2081,10 @@ "message": "Rensa historik" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Inget tillgängligt innehåll" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Du har inte genererat något nyligen" }, "remove": { "message": "Ta bort" @@ -2154,7 +2154,7 @@ "message": "Ange en PIN-kod för att låsa upp Bitwarden. Dina PIN-inställningar återställs om du någonsin loggar ut helt från programmet." }, "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "message": "Din PIN-kod kommer att användas för att låsa upp Bitwarden istället för ditt huvudlösenord. Din PIN-kod kommer att återställas om du någonsin helt loggar ut från Bitwarden." }, "pinRequired": { "message": "PIN-kod krävs." @@ -2181,7 +2181,7 @@ "message": "Lås med huvudlösenordet vid omstart av webbläsaren" }, "lockWithMasterPassOnRestart1": { - "message": "Require master password on browser restart" + "message": "Kräv huvudlösenord vid omstart av webbläsaren" }, "selectOneCollection": { "message": "Du måste markera minst en samling." @@ -2196,36 +2196,39 @@ "message": "Lösenordsgenerator" }, "usernameGenerator": { - "message": "Username generator" + "message": "Användarnamnsgenerator" }, "useThisEmail": { - "message": "Use this email" + "message": "Använd denna e-post" }, "useThisPassword": { - "message": "Use this password" + "message": "Använd detta lösenord" + }, + "useThisPassphrase": { + "message": "Use this passphrase" }, "useThisUsername": { - "message": "Use this username" + "message": "Använd detta användarnamn" }, "securePasswordGenerated": { - "message": "Secure password generated! Don't forget to also update your password on the website." + "message": "Säkert lösenord genererat! Glöm inte att även uppdatera ditt lösenord på webbplatsen." }, "useGeneratorHelpTextPartOne": { - "message": "Use the generator", + "message": "Använd generatorn", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "useGeneratorHelpTextPartTwo": { - "message": "to create a strong unique password", + "message": "för att skapa ett starkt unikt lösenord", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Anpassning av valv" }, "vaultTimeoutAction": { "message": "Åtgärd när valvets tidsgräns överskrids" }, "vaultTimeoutAction1": { - "message": "Timeout action" + "message": "Åtgärd vid timeout" }, "lock": { "message": "Lås", @@ -2347,16 +2350,16 @@ "message": "Ditt nya huvudlösenord uppfyller inte kraven i policyn." }, "receiveMarketingEmailsV2": { - "message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox." + "message": "Få råd, nyheter och forskningsmöjligheter från Bitwarden i din inkorg." }, "unsubscribe": { - "message": "Unsubscribe" + "message": "Avprenumerera" }, "atAnyTime": { "message": "när som helst." }, "byContinuingYouAgreeToThe": { - "message": "By continuing, you agree to the" + "message": "Genom att fortsätta godkänner du" }, "and": { "message": "och" @@ -2871,7 +2874,7 @@ "message": "E-postverifiering krävs" }, "emailVerifiedV2": { - "message": "Email verified" + "message": "E-post verifierad" }, "emailVerificationRequiredDesc": { "message": "Du måste verifiera din e-postadress för att använda den här funktionen. Du kan verifiera din e-postadress i webbvalvet." @@ -3018,7 +3021,7 @@ "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." }, "organizationName": { - "message": "Organization name" + "message": "Organisationsnamn" }, "keyConnectorDomain": { "message": "Key Connector domain" @@ -3777,7 +3780,7 @@ "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { - "message": "Unlock your account to view autofill suggestions", + "message": "Lås upp ditt konto för att visa förslag för autofyll", "description": "Text to display in overlay when the account is locked." }, "unlockAccount": { @@ -4238,7 +4241,7 @@ "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutofillDescription": { - "message": "Ignoring this option may cause conflicts between Bitwarden autofill suggestions and your browser's.", + "message": "Att ignorera det här alternativet kan orsaka konflikter mellan Bitwardens autofyllförslag och webbläsarens.", "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutoFillSettings": { @@ -4287,13 +4290,13 @@ "message": "Passkey borttagen" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Förslag för autofyll" }, "itemSuggestions": { "message": "Suggested items" }, "autofillSuggestionsTip": { - "message": "Save a login item for this site to autofill" + "message": "Spara ett inloggningsobjekt för den här webbplatsen för autofyll" }, "yourVaultIsEmpty": { "message": "Ditt valv är tomt" @@ -4926,7 +4929,7 @@ "message": "Kontoåtgärder" }, "showNumberOfAutofillSuggestions": { - "message": "Show number of login autofill suggestions on extension icon" + "message": "Visa antal autofyllförslag för inloggning på tilläggsikonen" }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" @@ -5323,7 +5326,7 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "så att den här inloggningen visas som ett förslag för autofyll.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 4775d1f7af0..feb5a7706f3 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index fd9bac62391..f18f2ac9ba9 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 02d7d15b8a2..ded4568adaa 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Bu parolayı kullan" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Bu kullanıcı adını kullan" }, diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 9406aabe088..952c223f262 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -1072,7 +1072,7 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Новий запис, відкривається у новому вікні", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "збережено до Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "оновлено в Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Вибрати $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Розблокуйте, щоб зберегти цей запис", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Використати цей пароль" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Використати це ім'я користувача" }, @@ -3015,13 +3018,13 @@ "message": "Не знайдено унікальний ідентифікатор." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Головний пароль більше не є обов'язковим для учасників зазначеної організації. Підтвердьте вказаний нижче домен з адміністратором вашої організації." }, "organizationName": { - "message": "Organization name" + "message": "Назва організації" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Домен Key Connector" }, "leaveOrganization": { "message": "Покинути організацію" @@ -3616,11 +3619,11 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Безпечно надсилайте конфіденційну інформацію", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Безпечно діліться файлами й даними з ким завгодно, на будь-якій платформі. Ваша інформація наскрізно зашифрована та має обмежений доступ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -5028,13 +5031,13 @@ "message": "Біометричне розблокування зараз недоступне з невідомої причини." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Розблоковуйте сховище за секунди" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Ви можете налаштувати розблокування і час очікування для швидшого доступу до сховища." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Розблокування PIN-кодом встановлено" }, "authenticating": { "message": "Аутентифікація" @@ -5286,7 +5289,7 @@ "message": "Зберігайте скільки завгодно паролів на необмеженій кількості пристроїв, використовуючи Bitwarden для мобільних пристроїв, браузерів та комп'ютерів." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 сповіщення" }, "emptyVaultNudgeTitle": { "message": "Імпортуйте наявні паролі" @@ -5301,13 +5304,13 @@ "message": "Вітаємо у вашому сховищі!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Автозаповнення записів для поточної сторінки" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Обрані записи для швидкого доступу" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Пошук інших елементів у сховищі" }, "newLoginNudgeTitle": { "message": "Заощаджуйте час з автозаповненням" @@ -5359,23 +5362,23 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Швидко створюйте паролі" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Легко створюйте надійні та унікальні паролі, натиснувши на", "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": "щоб зберегти свої записи в безпеці.", "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": "Легко створюйте надійні та унікальні паролі, натиснувши кнопку Генерувати пароль, щоб зберегти свої записи в безпеці.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "У вас немає дозволу переглядати цю сторінку. Спробуйте ввійти з іншим обліковим записом." } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 29a7b7109e7..4db1394023d 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 8a537be08f2..18cbc9c10d3 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "使用此密码" }, + "useThisPassphrase": { + "message": "使用此密码短语" + }, "useThisUsername": { "message": "使用此用户名" }, @@ -4555,7 +4558,7 @@ "message": "获取桌面 App" }, "getTheDesktopAppDesc": { - "message": "无需浏览器也可访问您的密码库。在桌面 App 和浏览器扩展中设置生物识别解锁,以实现快速解锁。" + "message": "无需使用浏览器访问您的密码库,在桌面 App 和浏览器扩展中同时设置生物识别解锁,即可实现快速解锁。" }, "downloadFromBitwardenNow": { "message": "立即从 bitwarden.com 下载" @@ -5031,7 +5034,7 @@ "message": "数秒内解锁您的密码库" }, "unlockVaultDesc": { - "message": "您可以自定义解锁和超时设置,以便更快地访问您的密码库。" + "message": "您可以自定义解锁和超时设置,以便更快速地访问您的密码库。" }, "unlockPinSet": { "message": "解锁 PIN 设置" @@ -5235,7 +5238,7 @@ "message": "SSH 密钥导入成功" }, "cannotRemoveViewOnlyCollections": { - "message": "您无法删除仅具有「查看」权限的集合:$COLLECTIONS$", + "message": "您无法移除仅具有「查看」权限的集合:$COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5304,7 +5307,7 @@ "message": "为当前页面自动填充项目" }, "hasItemsVaultNudgeBodyTwo": { - "message": "收藏项目以便快速访问" + "message": "收藏项目以便轻松访问" }, "hasItemsVaultNudgeBodyThree": { "message": "在密码库中搜索其他内容" @@ -5323,7 +5326,7 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "以便将此登录显示为自动填充建议。", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5372,7 +5375,7 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "一键创建强大且唯一的密码,帮助您保持登录安全。", + "message": "点击「生成密码」按钮,轻松创建强大且唯一的密码,帮助您保持登录安全。", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 9d4eabb1b49..639469b7cd4 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -2204,6 +2204,9 @@ "useThisPassword": { "message": "使用此密碼" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "使用此使用者名稱" }, From 0f6d4a92d7d269873d06b67029bedf87d4267614 Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Fri, 30 May 2025 09:37:08 +0200 Subject: [PATCH 12/33] Migrate libs/tools/card to be owned by DIRT (#14987) Co-authored-by: Daniel James Smith --- .github/CODEOWNERS | 1 + .storybook/main.ts | 4 ++-- apps/browser/tsconfig.json | 2 +- apps/desktop/tsconfig.json | 2 +- apps/web/tsconfig.json | 2 +- bitwarden_license/bit-common/tsconfig.json | 2 +- .../all-applications.component.html | 8 ++++---- .../all-applications.component.ts | 2 +- .../critical-applications.component.html | 8 ++++---- .../critical-applications.component.ts | 2 +- bitwarden_license/bit-web/tsconfig.json | 2 +- libs/dirt/card/README.md | 5 +++++ libs/{tools => dirt}/card/jest.config.js | 0 libs/{tools => dirt}/card/package.json | 2 +- .../card/src/card.component.html | 0 .../{tools => dirt}/card/src/card.component.ts | 2 +- libs/{tools => dirt}/card/src/card.stories.ts | 4 ++-- libs/{tools => dirt}/card/src/index.ts | 0 libs/{tools => dirt}/card/test.setup.ts | 0 libs/{tools => dirt}/card/tsconfig.json | 0 libs/{tools => dirt}/card/tsconfig.spec.json | 0 libs/shared/tsconfig.spec.json | 2 +- libs/tools/card/README.md | 5 ----- package-lock.json | 18 +++++++++--------- tsconfig.eslint.json | 2 +- tsconfig.json | 4 ++-- 26 files changed, 40 insertions(+), 39 deletions(-) create mode 100644 libs/dirt/card/README.md rename libs/{tools => dirt}/card/jest.config.js (100%) rename libs/{tools => dirt}/card/package.json (92%) rename libs/{tools => dirt}/card/src/card.component.html (100%) rename libs/{tools => dirt}/card/src/card.component.ts (97%) rename libs/{tools => dirt}/card/src/card.stories.ts (87%) rename libs/{tools => dirt}/card/src/index.ts (100%) rename libs/{tools => dirt}/card/test.setup.ts (100%) rename libs/{tools => dirt}/card/tsconfig.json (100%) rename libs/{tools => dirt}/card/tsconfig.spec.json (100%) delete mode 100644 libs/tools/card/README.md diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 38a1597848e..def03c714d7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -39,6 +39,7 @@ libs/tools @bitwarden/team-tools-dev apps/web/src/app/dirt @bitwarden/team-data-insights-and-reporting-dev bitwarden_license/bit-common/src/dirt @bitwarden/team-data-insights-and-reporting-dev bitwarden_license/bit-web/src/app/dirt @bitwarden/team-data-insights-and-reporting-dev +libs/dirt @bitwarden/team-data-insights-and-reporting-dev ## Localization/Crowdin (Platform and Tools team) apps/browser/src/_locales @bitwarden/team-tools-dev @bitwarden/team-platform-dev diff --git a/.storybook/main.ts b/.storybook/main.ts index d5d116e99be..879e87fe376 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -8,6 +8,8 @@ const config: StorybookConfig = { stories: [ "../libs/auth/src/**/*.mdx", "../libs/auth/src/**/*.stories.@(js|jsx|ts|tsx)", + "../libs/dirt/card/src/**/*.mdx", + "../libs/dirt/card/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/tools/send/send-ui/src/**/*.mdx", "../libs/tools/send/send-ui/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/vault/src/**/*.mdx", @@ -20,8 +22,6 @@ const config: StorybookConfig = { "../apps/browser/src/**/*.stories.@(js|jsx|ts|tsx)", "../bitwarden_license/bit-web/src/**/*.mdx", "../bitwarden_license/bit-web/src/**/*.stories.@(js|jsx|ts|tsx)", - "../libs/tools/card/src/**/*.mdx", - "../libs/tools/card/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/angular/src/**/*.stories.@(js|jsx|ts|tsx)", ], addons: [ diff --git a/apps/browser/tsconfig.json b/apps/browser/tsconfig.json index e24985f58af..ff4ac340219 100644 --- a/apps/browser/tsconfig.json +++ b/apps/browser/tsconfig.json @@ -19,6 +19,7 @@ "@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], + "@bitwarden/dirt-card": ["../../libs/dirt/card/src"], "@bitwarden/generator-components": ["../../libs/tools/generator/components/src"], "@bitwarden/generator-core": ["../../libs/tools/generator/core/src"], "@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"], @@ -31,7 +32,6 @@ "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/platform/*": ["../../libs/platform/src/*"], "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], - "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json index 78b3512405e..27e38757e97 100644 --- a/apps/desktop/tsconfig.json +++ b/apps/desktop/tsconfig.json @@ -17,6 +17,7 @@ "@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], + "@bitwarden/dirt-card": ["../../libs/dirt/card/src"], "@bitwarden/generator-components": ["../../libs/tools/generator/components/src"], "@bitwarden/generator-core": ["../../libs/tools/generator/core/src"], "@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"], @@ -29,7 +30,6 @@ "@bitwarden/node/*": ["../../libs/node/src/*"], "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], - "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 3d62a30bc01..0cc988ea722 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -13,6 +13,7 @@ "@bitwarden/bit-common/*": ["../../bitwarden_license/bit-common/src/*"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], + "@bitwarden/dirt-card": ["../../libs/dirt/card/src"], "@bitwarden/generator-components": ["../../libs/tools/generator/components/src"], "@bitwarden/generator-core": ["../../libs/tools/generator/core/src"], "@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"], @@ -24,7 +25,6 @@ "@bitwarden/key-management-ui": ["../../libs/key-management-ui/src"], "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], - "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ diff --git a/bitwarden_license/bit-common/tsconfig.json b/bitwarden_license/bit-common/tsconfig.json index 641b0ac6aa9..c92167bb919 100644 --- a/bitwarden_license/bit-common/tsconfig.json +++ b/bitwarden_license/bit-common/tsconfig.json @@ -12,6 +12,7 @@ "@bitwarden/bit-common/*": ["../bit-common/src/*"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], + "@bitwarden/dirt-card": ["../../libs/dirt/card/src"], "@bitwarden/generator-components": ["../../libs/tools/generator/components/src"], "@bitwarden/generator-core": ["../../libs/tools/generator/core/src"], "@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"], @@ -20,7 +21,6 @@ "@bitwarden/key-management": ["../../libs/key-management/src"], "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], - "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.html b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.html index 6f8e738fdc3..0dfe55bed48 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.html +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/all-applications.component.html @@ -26,7 +26,7 @@

{{ "allApplications" | i18n }}

- - - + - +
- - - + - +
({ props: args, template: /*html*/ ` - `, + `, }), }; diff --git a/libs/tools/card/src/index.ts b/libs/dirt/card/src/index.ts similarity index 100% rename from libs/tools/card/src/index.ts rename to libs/dirt/card/src/index.ts diff --git a/libs/tools/card/test.setup.ts b/libs/dirt/card/test.setup.ts similarity index 100% rename from libs/tools/card/test.setup.ts rename to libs/dirt/card/test.setup.ts diff --git a/libs/tools/card/tsconfig.json b/libs/dirt/card/tsconfig.json similarity index 100% rename from libs/tools/card/tsconfig.json rename to libs/dirt/card/tsconfig.json diff --git a/libs/tools/card/tsconfig.spec.json b/libs/dirt/card/tsconfig.spec.json similarity index 100% rename from libs/tools/card/tsconfig.spec.json rename to libs/dirt/card/tsconfig.spec.json diff --git a/libs/shared/tsconfig.spec.json b/libs/shared/tsconfig.spec.json index 6d2c7498129..5402594e5ab 100644 --- a/libs/shared/tsconfig.spec.json +++ b/libs/shared/tsconfig.spec.json @@ -10,6 +10,7 @@ "@bitwarden/billing": ["../billing/src"], "@bitwarden/common/*": ["../common/src/*"], "@bitwarden/components": ["../components/src"], + "@bitwarden/dirt-card": ["../dirt/card/src"], "@bitwarden/generator-components": ["../tools/generator/components/src"], "@bitwarden/generator-core": ["../tools/generator/core/src"], "@bitwarden/generator-history": ["../tools/generator/extensions/history/src"], @@ -22,7 +23,6 @@ "@bitwarden/node/*": ["../node/src/*"], "@bitwarden/platform": ["../platform/src"], "@bitwarden/send-ui": ["../tools/send/send-ui/src"], - "@bitwarden/tools-card": ["../tools/card/src"], "@bitwarden/ui-common": ["../ui/common/src"], "@bitwarden/ui-common/setup-jest": ["../ui/common/src/setup-jest"], "@bitwarden/vault-export-core": ["../tools/export/vault-export/vault-export-core/src"], diff --git a/libs/tools/card/README.md b/libs/tools/card/README.md deleted file mode 100644 index 5e28e62d154..00000000000 --- a/libs/tools/card/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## Tools Card - -Package name: `@bitwarden/tools-card` - -Generic Tools Card Component diff --git a/package-lock.json b/package-lock.json index 071f42c94c9..d4009fff06d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -277,6 +277,11 @@ "name": "@bitwarden/components", "version": "0.0.0" }, + "libs/dirt/card": { + "name": "@bitwarden/dirt-card", + "version": "0.0.0", + "license": "GPL-3.0" + }, "libs/importer": { "name": "@bitwarden/importer", "version": "0.0.0", @@ -302,11 +307,6 @@ "version": "0.0.0", "license": "GPL-3.0" }, - "libs/tools/card": { - "name": "@bitwarden/tools-card", - "version": "0.0.0", - "license": "GPL-3.0" - }, "libs/tools/export/vault-export/vault-export-core": { "name": "@bitwarden/vault-export-core", "version": "0.0.0", @@ -5169,6 +5169,10 @@ "resolved": "apps/desktop/desktop_native/napi", "link": true }, + "node_modules/@bitwarden/dirt-card": { + "resolved": "libs/dirt/card", + "link": true + }, "node_modules/@bitwarden/generator-components": { "resolved": "libs/tools/generator/components", "link": true @@ -5219,10 +5223,6 @@ "resolved": "libs/tools/send/send-ui", "link": true }, - "node_modules/@bitwarden/tools-card": { - "resolved": "libs/tools/card", - "link": true - }, "node_modules/@bitwarden/ui-common": { "resolved": "libs/ui/common", "link": true diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index e8c3f669c0c..90b95ff54bf 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -23,6 +23,7 @@ "@bitwarden/bit-common/*": ["./bitwarden_license/bit-common/src/*"], "@bitwarden/common/*": ["./libs/common/src/*"], "@bitwarden/components": ["./libs/components/src"], + "@bitwarden/dirt-card": [".libs/dirt/card/src"], "@bitwarden/generator-components": ["./libs/tools/generator/components/src"], "@bitwarden/generator-core": ["./libs/tools/generator/core/src"], "@bitwarden/generator-history": ["./libs/tools/generator/extensions/history/src"], @@ -35,7 +36,6 @@ "@bitwarden/node/*": ["./libs/node/src/*"], "@bitwarden/platform": ["./libs/platform/src"], "@bitwarden/send-ui": [".libs/tools/send/send-ui/src"], - "@bitwarden/tools-card": [".libs/tools/card/src"], "@bitwarden/ui-common": ["./libs/ui/common/src"], "@bitwarden/vault-export-core": [".libs/tools/export/vault-export/vault-export-core/src"], "@bitwarden/vault-export-ui": [".libs/tools/export/vault-export/vault-export-ui/src"], diff --git a/tsconfig.json b/tsconfig.json index c82851d50c8..525af0ac3b7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,6 +24,7 @@ "@bitwarden/bit-common/*": ["./bitwarden_license/bit-common/src/*"], "@bitwarden/common/*": ["./libs/common/src/*"], "@bitwarden/components": ["./libs/components/src"], + "@bitwarden/dirt-card": ["./libs/dirt/card/src"], "@bitwarden/generator-components": ["./libs/tools/generator/components/src"], "@bitwarden/generator-core": ["./libs/tools/generator/core/src"], "@bitwarden/generator-history": ["./libs/tools/generator/extensions/history/src"], @@ -37,7 +38,6 @@ "@bitwarden/platform": ["./libs/platform/src"], "@bitwarden/platform/*": ["./libs/platform/src/*"], "@bitwarden/send-ui": ["./libs/tools/send/send-ui/src"], - "@bitwarden/tools-card": ["./libs/tools/card/src"], "@bitwarden/ui-common": ["./libs/ui/common/src"], "@bitwarden/ui-common/setup-jest": ["./libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": ["./libs/tools/export/vault-export/vault-export-core/src"], @@ -57,7 +57,7 @@ "apps/browser/src/**/*", "libs/*/src/**/*", "libs/tools/send/**/src/**/*", - "libs/tools/card/src/**/*", + "libs/dirt/card/src/**/*", "bitwarden_license/bit-web/src/**/*", "bitwarden_license/bit-common/src/**/*" ], From da9aa07e4bde28fb6ec13d98417c64381a78501d Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 10:08:28 +0200 Subject: [PATCH 13/33] Autosync the updated translations (#14996) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/desktop/src/locales/af/messages.json | 64 ++++++-- apps/desktop/src/locales/ar/messages.json | 64 ++++++-- apps/desktop/src/locales/az/messages.json | 66 ++++++-- apps/desktop/src/locales/be/messages.json | 64 ++++++-- apps/desktop/src/locales/bg/messages.json | 66 ++++++-- apps/desktop/src/locales/bn/messages.json | 64 ++++++-- apps/desktop/src/locales/bs/messages.json | 64 ++++++-- apps/desktop/src/locales/ca/messages.json | 64 ++++++-- apps/desktop/src/locales/cs/messages.json | 64 ++++++-- apps/desktop/src/locales/cy/messages.json | 64 ++++++-- apps/desktop/src/locales/da/messages.json | 64 ++++++-- apps/desktop/src/locales/de/messages.json | 66 ++++++-- apps/desktop/src/locales/el/messages.json | 64 ++++++-- apps/desktop/src/locales/en_GB/messages.json | 64 ++++++-- apps/desktop/src/locales/en_IN/messages.json | 64 ++++++-- apps/desktop/src/locales/eo/messages.json | 162 ++++++++++++------- apps/desktop/src/locales/es/messages.json | 64 ++++++-- apps/desktop/src/locales/et/messages.json | 64 ++++++-- apps/desktop/src/locales/eu/messages.json | 64 ++++++-- apps/desktop/src/locales/fa/messages.json | 66 ++++++-- apps/desktop/src/locales/fi/messages.json | 64 ++++++-- apps/desktop/src/locales/fil/messages.json | 64 ++++++-- apps/desktop/src/locales/fr/messages.json | 64 ++++++-- apps/desktop/src/locales/gl/messages.json | 64 ++++++-- apps/desktop/src/locales/he/messages.json | 64 ++++++-- apps/desktop/src/locales/hi/messages.json | 64 ++++++-- apps/desktop/src/locales/hr/messages.json | 64 ++++++-- apps/desktop/src/locales/hu/messages.json | 64 ++++++-- apps/desktop/src/locales/id/messages.json | 64 ++++++-- apps/desktop/src/locales/it/messages.json | 64 ++++++-- apps/desktop/src/locales/ja/messages.json | 64 ++++++-- apps/desktop/src/locales/ka/messages.json | 64 ++++++-- apps/desktop/src/locales/km/messages.json | 64 ++++++-- apps/desktop/src/locales/kn/messages.json | 64 ++++++-- apps/desktop/src/locales/ko/messages.json | 64 ++++++-- apps/desktop/src/locales/lt/messages.json | 64 ++++++-- apps/desktop/src/locales/lv/messages.json | 66 ++++++-- apps/desktop/src/locales/me/messages.json | 64 ++++++-- apps/desktop/src/locales/ml/messages.json | 64 ++++++-- apps/desktop/src/locales/mr/messages.json | 64 ++++++-- apps/desktop/src/locales/my/messages.json | 64 ++++++-- apps/desktop/src/locales/nb/messages.json | 64 ++++++-- apps/desktop/src/locales/ne/messages.json | 64 ++++++-- apps/desktop/src/locales/nl/messages.json | 64 ++++++-- apps/desktop/src/locales/nn/messages.json | 64 ++++++-- apps/desktop/src/locales/or/messages.json | 64 ++++++-- apps/desktop/src/locales/pl/messages.json | 64 ++++++-- apps/desktop/src/locales/pt_BR/messages.json | 64 ++++++-- apps/desktop/src/locales/pt_PT/messages.json | 64 ++++++-- apps/desktop/src/locales/ro/messages.json | 64 ++++++-- apps/desktop/src/locales/ru/messages.json | 64 ++++++-- apps/desktop/src/locales/si/messages.json | 64 ++++++-- apps/desktop/src/locales/sk/messages.json | 64 ++++++-- apps/desktop/src/locales/sl/messages.json | 64 ++++++-- apps/desktop/src/locales/sr/messages.json | 66 ++++++-- apps/desktop/src/locales/sv/messages.json | 64 ++++++-- apps/desktop/src/locales/te/messages.json | 64 ++++++-- apps/desktop/src/locales/th/messages.json | 64 ++++++-- apps/desktop/src/locales/tr/messages.json | 64 ++++++-- apps/desktop/src/locales/uk/messages.json | 78 ++++++--- apps/desktop/src/locales/vi/messages.json | 64 ++++++-- apps/desktop/src/locales/zh_CN/messages.json | 72 +++++++-- apps/desktop/src/locales/zh_TW/messages.json | 64 ++++++-- 63 files changed, 3342 insertions(+), 822 deletions(-) diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index 28cff8cae13..2467eb0194a 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Ander" }, - "generatePassword": { - "message": "Wek 'n Wagwoord op" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tipe" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Wek 'n Wagwoord op" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Lukraak" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Swak wagwoord geidentifiseer en gevind in 'n data lekkasie. Gebruik 'n sterk en unieke wagwoord om jou rekening te beskerm. Is jy seker dat jy hierdie wagwoord wil gebruik?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Kontroleer bekende data lekkasies vir hierdie wagwoord" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ar/messages.json b/apps/desktop/src/locales/ar/messages.json index d9dfb7cdff5..7bd410330a6 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -351,12 +351,6 @@ "other": { "message": "أخرى" }, - "generatePassword": { - "message": "توليد كلمة المرور" - }, - "generatePassphrase": { - "message": "توليد عبارة المرور" - }, "type": { "message": "نوع" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "توليد كلمة المرور" + }, + "generatePassphrase": { + "message": "توليد عبارة المرور" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "يجب أن تكون القيمة بين $MIN$ و $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "عشوائي" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "كلمة مرور ضعيفة محددة وموجودة في خرق البيانات. استخدم كلمة مرور قوية وفريدة لحماية حسابك. هل أنت متأكد من أنك تريد استخدام كلمة المرور هذه؟" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "تحقق من خروقات البيانات المعروفة لكلمة المرور هذه" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index 5c1f49cbfff..5e882c8f3cc 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Digər" }, - "generatePassword": { - "message": "Parol yarat" - }, - "generatePassphrase": { - "message": "Keçid ifadələri yarat" - }, "type": { "message": "Növ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "İstifadəçi adı yaradıcı" }, + "generatePassword": { + "message": "Parol yarat" + }, + "generatePassphrase": { + "message": "Keçid ifadələri yarat" + }, + "passwordGenerated": { + "message": "Parol yaradıldı" + }, + "passphraseGenerated": { + "message": "Keçid ifadəsi yaradıldı" + }, + "usernameGenerated": { + "message": "İstifadəçi adı yaradıldı" + }, + "emailGenerated": { + "message": "E-poçt yaradıldı" + }, "spinboxBoundariesHint": { "message": "Dəyər, $MIN$-$MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Bu e-poçtu istifadə et" }, + "useThisPassword": { + "message": "Bu parolu istifadə et" + }, + "useThisPassphrase": { + "message": "Bu keçid ifadəsini istifadə et" + }, + "useThisUsername": { + "message": "Bu istifadəçi adını istifadə et" + }, "random": { "message": "Təsadüfi" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Zəif parol məlumat pozuntusunda aşkarlandı və tapıldı. Hesabınızı qorumaq üçün güclü və unikal bir parol istifadə edin. Bu parolu istifadə etmək istədiyinizə əminsiniz?" }, - "useThisPassword": { - "message": "Bu parolu istifadə et" - }, - "useThisUsername": { - "message": "Bu istifadəçi adını istifadə et" - }, "checkForBreaches": { "message": "Bu parol üçün bilinən məlumat pozuntularını yoxlayın" }, @@ -3704,7 +3719,7 @@ "message": "Riskli parolları dəyişdir" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "\"Yalnız baxma\" icazələrinə sahib kolleksiyaları silə bilməzsiniz: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Ana qovluğun adından sonra \"/\" əlavə edərək qovluğu ardıcıl yerləşdirin. Nümunə: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send, həssas məlumatlar təhlükəsizdir", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "İstənilən platformada faylları və dataları hər kəslə paylaşın. İfşa olunmağı məhdudlaşdıraraq məlumatlarınız ucdan-uca şifrələnmiş qalacaq.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Cəld parol yaradın" + }, + "generatorNudgeBodyOne": { + "message": "Klikləyərək güclü və unikal parolları asanlıqla yaradın", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "və girişlərinizi güvənli şəkildə saxlayın.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" }, diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 9284f683e58..0192ae8977c 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Iншае" }, - "generatePassword": { - "message": "Генерыраваць пароль" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Тып" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Генерыраваць пароль" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Выпадкова" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Вызначаны ненадзейны пароль, які знойдзены ва ўцечках даных. Выкарыстоўвайце надзейныя і ўнікальныя паролі для абароны свайго ўліковага запісу. Вы сапраўды хочаце выкарыстоўваць гэты пароль?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Праверыць у вядомых уцечках даных для гэтага пароля" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index 18a1d8cf2f0..5ea63c8ce79 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Други" }, - "generatePassword": { - "message": "Нова парола" - }, - "generatePassphrase": { - "message": "Генериране на парола-фраза" - }, "type": { "message": "Вид" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Генератор на потребителски имена" }, + "generatePassword": { + "message": "Нова парола" + }, + "generatePassphrase": { + "message": "Генериране на парола-фраза" + }, + "passwordGenerated": { + "message": "Паролата е генерирана" + }, + "passphraseGenerated": { + "message": "Паролата-фраза е генерирана" + }, + "usernameGenerated": { + "message": "Потребителското име е генерирано" + }, + "emailGenerated": { + "message": "Е-пощата е генерирана" + }, "spinboxBoundariesHint": { "message": "Стойността трябва да бъде между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Използване на тази е-поща" }, + "useThisPassword": { + "message": "Използване на тази парола" + }, + "useThisPassphrase": { + "message": "Използване на тази парола-фраза" + }, + "useThisUsername": { + "message": "Използване на това потребителско име" + }, "random": { "message": "Произволно" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Разпозната е слаба парола. Използвайте силна парола, за да защитете данните си. Наистина ли искате да използвате слаба парола?" }, - "useThisPassword": { - "message": "Използване на тази парола" - }, - "useThisUsername": { - "message": "Използване на това потребителско име" - }, "checkForBreaches": { "message": "Проверяване в известните случаи на изтекли данни за тази парола" }, @@ -3704,7 +3719,7 @@ "message": "Промяна на парола в риск" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Не можете да премахвате колекции с права „Само за преглед“: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Можете да вложите една папка в друга като въведете името на горната папка, а след това „/“. Пример: Социални/Форуми" }, + "sendsTitleNoItems": { + "message": "Изпращайте чувствителна информация сигурно", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Споделяйте сигурно файлове и данни с всекиго, през всяка система. Информацията Ви ще бъде защитена с шифроване от край до край, а видимостта ѝ ще бъде ограничена.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Създавайте пароли бързо" + }, + "generatorNudgeBodyOne": { + "message": "Създавайте лесно сложни и уникални пароли като щракнете върху", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "за да защитите данните си за вписване.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Създавайте лесно сложни и уникални пароли като щракнете върху бутона за генериране на парола, за да защитите данните си за вписване.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" }, diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index b3a2b6e21ee..0626b7c5496 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -351,12 +351,6 @@ "other": { "message": "অন্যান্য" }, - "generatePassword": { - "message": "পাসওয়ার্ড তৈরি করুন" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "ধরন" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "পাসওয়ার্ড তৈরি করুন" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/bs/messages.json b/apps/desktop/src/locales/bs/messages.json index 89015368c11..44b6704a4a2 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Ostalo" }, - "generatePassword": { - "message": "Generiraj lozinku" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Vrsta" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generiraj lozinku" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ca/messages.json b/apps/desktop/src/locales/ca/messages.json index 5550e2d0c62..65c766dc3f7 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Altres" }, - "generatePassword": { - "message": "Genera contrasenya" - }, - "generatePassphrase": { - "message": "Genera frase de pas" - }, "type": { "message": "Tipus" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Genera contrasenya" + }, + "generatePassphrase": { + "message": "Genera frase de pas" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "El valor ha d'estar entre $MIN$ i $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Utilitza aquest correu" }, + "useThisPassword": { + "message": "Utilitzeu aquesta contrasenya" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Utilitzeu aquest nom d'usuari" + }, "random": { "message": "Aleatori" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Contrasenya feble identificada i trobada en una filtració de dades. Utilitzeu una contrasenya única i segura per protegir el vostre compte. Esteu segur que voleu utilitzar aquesta contrasenya?" }, - "useThisPassword": { - "message": "Utilitzeu aquesta contrasenya" - }, - "useThisUsername": { - "message": "Utilitzeu aquest nom d'usuari" - }, "checkForBreaches": { "message": "Comproveu les filtracions de dades conegudes per a aquesta contrasenya" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index b6c3edd783a..2e0a8b7db57 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Ostatní" }, - "generatePassword": { - "message": "Vygenerovat heslo" - }, - "generatePassphrase": { - "message": "Vygenerovat heslovou frázi" - }, "type": { "message": "Typ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Generátor uživatelského jména" }, + "generatePassword": { + "message": "Vygenerovat heslo" + }, + "generatePassphrase": { + "message": "Vygenerovat heslovou frázi" + }, + "passwordGenerated": { + "message": "Heslo bylo vygenerováno" + }, + "passphraseGenerated": { + "message": "Heslová fráze byla vygenerována" + }, + "usernameGenerated": { + "message": "Uživatelské jméno bylo vygenerováno" + }, + "emailGenerated": { + "message": "E-mail byl vygenerován" + }, "spinboxBoundariesHint": { "message": "Hodnota musí být mezi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Použít tento e-mail" }, + "useThisPassword": { + "message": "Použít toto heslo" + }, + "useThisPassphrase": { + "message": "Použít tuto heslovou frázi" + }, + "useThisUsername": { + "message": "Použít toto uživatelské jméno" + }, "random": { "message": "Náhodný" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Slabé heslo bylo nalezeno mezi odhalenými hesly. K zabezpečení Vašeho účtu používejte silné a jedinečné heslo. Opravdu chcete používat toto heslo?" }, - "useThisPassword": { - "message": "Použít toto heslo" - }, - "useThisUsername": { - "message": "Použít toto uživatelské jméno" - }, "checkForBreaches": { "message": "Zkontrolovat heslo, zda nebylo odhaleno" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Vnořte složku přidáním názvu nadřazené složky následovaného znakem \"/\". Příklad: Sociální/Fóra" }, + "sendsTitleNoItems": { + "message": "Posílejte citlivé informace bezpečně", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Sdílejte bezpečně soubory a data s kýmkoli na libovolné platformě. Vaše informace zůstanou šifrovány a zároveň omezují expozici.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Rychlé vytvoření hesla" + }, + "generatorNudgeBodyOne": { + "message": "Jednoduše vytvořte silná a unikátní hesla klepnutím na", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "aby Vám pomohlo udržet Vaše přihlašovací údaje v bezpečí.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Ušetřete čas s automatickým vyplňováním" }, diff --git a/apps/desktop/src/locales/cy/messages.json b/apps/desktop/src/locales/cy/messages.json index 28ed661423d..b16311ac05a 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/da/messages.json b/apps/desktop/src/locales/da/messages.json index f547eea69a0..1227798ed7e 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Andre" }, - "generatePassword": { - "message": "Generér adgangskode" - }, - "generatePassphrase": { - "message": "Generér adgangssætning" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generér adgangskode" + }, + "generatePassphrase": { + "message": "Generér adgangssætning" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Værdi skal være mellem $MIN$ og $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Anvend denne adgangskode" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Anvend dette brugernavn" + }, "random": { "message": "Tilfældig" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Svag adgangskode identificeret og fundet i datalæk. Brug en unik adgangskode til at beskytte din konto. Sikker på, at at denne adgangskode skal bruges?" }, - "useThisPassword": { - "message": "Anvend denne adgangskode" - }, - "useThisUsername": { - "message": "Anvend dette brugernavn" - }, "checkForBreaches": { "message": "Tjek kendte datalæk for denne adgangskode" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index de39eba6f99..29a98d66ba6 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Sonstige" }, - "generatePassword": { - "message": "Passwort generieren" - }, - "generatePassphrase": { - "message": "Passphrase generieren" - }, "type": { "message": "Typ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Benutzernamen-Generator" }, + "generatePassword": { + "message": "Passwort generieren" + }, + "generatePassphrase": { + "message": "Passphrase generieren" + }, + "passwordGenerated": { + "message": "Passwort generiert" + }, + "passphraseGenerated": { + "message": "Passphrase generiert" + }, + "usernameGenerated": { + "message": "Benutzername generiert" + }, + "emailGenerated": { + "message": "E-Mail-Adresse generiert" + }, "spinboxBoundariesHint": { "message": "Wert muss zwischen $MIN$ und $MAX$ liegen.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Diese E-Mail-Adresse verwenden" }, + "useThisPassword": { + "message": "Dieses Passwort verwenden" + }, + "useThisPassphrase": { + "message": "Diese Passphrase verwenden" + }, + "useThisUsername": { + "message": "Diesen Benutzernamen verwenden" + }, "random": { "message": "Zufällig" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Schwaches Passwort erkannt und in einem Datendiebstahl gefunden. Verwende ein starkes und einzigartiges Passwort, um dein Konto zu schützen. Bist du sicher, dass du dieses Passwort verwenden möchtest?" }, - "useThisPassword": { - "message": "Dieses Passwort verwenden" - }, - "useThisUsername": { - "message": "Diesen Benutzernamen verwenden" - }, "checkForBreaches": { "message": "Bekannte Datendiebstähle auf dieses Passwort überprüfen" }, @@ -3704,7 +3719,7 @@ "message": "Gefährdetes Passwort ändern" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Du kannst Sammlungen mit Leseberechtigung nicht entfernen: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Verschachtel einen Ordner, indem du den Namen des übergeordneten Ordners hinzufügst, gefolgt von einem „/“. Beispiel: Sozial/Foren" }, + "sendsTitleNoItems": { + "message": "Sensible Informationen sicher versenden", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-verschlüsselt, während die Verbreitung begrenzt wird.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Passwörter schnell erstellen" + }, + "generatorNudgeBodyOne": { + "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": ", um dir zu helfen, deine Zugangsdaten sicher zu halten.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" }, diff --git a/apps/desktop/src/locales/el/messages.json b/apps/desktop/src/locales/el/messages.json index 3133488f805..c77ba102135 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Άλλες" }, - "generatePassword": { - "message": "Γέννηση κωδικού πρόσβασης" - }, - "generatePassphrase": { - "message": "Δημιουργία φράσης πρόσβασης" - }, "type": { "message": "Τύπος" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Γέννηση κωδικού πρόσβασης" + }, + "generatePassphrase": { + "message": "Δημιουργία φράσης πρόσβασης" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Η τιμή πρέπει να είναι μεταξύ $MIN$ και $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Χρήση αυτού του email" }, + "useThisPassword": { + "message": "Χρήση αυτού του κωδικού πρόσβασης" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Χρήση αυτού του ονόματος χρήστη" + }, "random": { "message": "Τυχαίο" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Βρέθηκε και ταυτοποιήθηκε αδύναμος κωδικός σε μια διαρροή δεδομένων. Χρησιμοποιήστε ένα ισχυρό και μοναδικό κωδικό πρόσβασης για την προστασία του λογαριασμού σας. Είστε σίγουροι ότι θέλετε να χρησιμοποιήσετε αυτόν τον κωδικό πρόσβασης;" }, - "useThisPassword": { - "message": "Χρήση αυτού του κωδικού πρόσβασης" - }, - "useThisUsername": { - "message": "Χρήση αυτού του ονόματος χρήστη" - }, "checkForBreaches": { "message": "Ελέγξτε γνωστές διαρροές δεδομένων για αυτόν τον κωδικό" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index cf4d0986e1f..b2166468380 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/en_IN/messages.json b/apps/desktop/src/locales/en_IN/messages.json index d82cb566a98..153387f7b00 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/eo/messages.json b/apps/desktop/src/locales/eo/messages.json index 8e8cc09341f..7ebfc4955e9 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -27,7 +27,7 @@ "message": "Sekura noto" }, "typeSshKey": { - "message": "SSH key" + "message": "SSH-ŝlosilo" }, "folders": { "message": "Dosierujoj" @@ -64,7 +64,7 @@ } }, "welcomeBack": { - "message": "Welcome back" + "message": "Bonrevenon!" }, "moveToOrgDesc": { "message": "Elektu organizaĵon, al kiu vi volas movi ĉi tiun eron. Movado al organizaĵo transdonas la posedon de la ero al tiu organizaĵo. Vi ne plu estos la rekta posedanto de la ero post kiam ĝi estos movita." @@ -351,12 +351,6 @@ "other": { "message": "Alia" }, - "generatePassword": { - "message": "Generi pasvorton" - }, - "generatePassphrase": { - "message": "Generi pasfrazon" - }, "type": { "message": "Tipo" }, @@ -421,7 +415,7 @@ "message": "Website (URI)" }, "websiteUriCount": { - "message": "Website (URI) $COUNT$", + "message": "Retejo (URI) $COUNT$", "description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.", "placeholders": { "count": { @@ -431,7 +425,7 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Retejo aldoniĝos" }, "addWebsite": { "message": "Add website" @@ -440,10 +434,10 @@ "message": "Delete website" }, "owner": { - "message": "Owner" + "message": "Posedanto" }, "addField": { - "message": "Add field" + "message": "Aldoni kampon" }, "editField": { "message": "Edit field" @@ -551,10 +545,10 @@ "message": "Add folder" }, "editFolder": { - "message": "Edit folder" + "message": "Redakti la dosierujon" }, "regeneratePassword": { - "message": "Regenerate password" + "message": "Regeneri la pasvorton" }, "copyPassword": { "message": "Copy password" @@ -566,7 +560,7 @@ "message": "Copy SSH private key" }, "copyPassphrase": { - "message": "Copy passphrase", + "message": "Kopii la pasfrazon", "description": "Copy passphrase to clipboard" }, "copyUri": { @@ -670,7 +664,7 @@ "message": "Dosierujo por serĉi" }, "searchFavorites": { - "message": "Search favorites" + "message": "Serĉi favoratojn" }, "searchType": { "message": "Tipo por serĉi", @@ -734,7 +728,7 @@ "message": "Saluti en Bitwarden'on" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Enmetu la kodon senditan al via retpoŝto" }, "enterTheCodeFromYourAuthenticatorApp": { "message": "Enter the code from your authenticator app" @@ -761,7 +755,7 @@ "message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it." }, "masterPassHintDesc": { - "message": "A master password hint can help you remember your password if you forget it." + "message": "Aludo de ĉefa pasvorto povas helpi vin rememorigi vian pasvorton, se vi forgesas ĝin." }, "reTypeMasterPass": { "message": "Re-entajpu la ĉefan pasvorton" @@ -792,7 +786,7 @@ "message": "Konfirmi la ĉefan pasvorton" }, "masterPassHintLabel": { - "message": "Master password hint" + "message": "Aludo de la ĉefa pasvorto" }, "passwordStrengthScore": { "message": "Password strength score $SCORE$", @@ -837,19 +831,19 @@ "message": "Get master password hint" }, "emailRequired": { - "message": "Email address is required." + "message": "Retpoŝtadreso estas postulata." }, "invalidEmail": { "message": "Invalid email address." }, "masterPasswordRequired": { - "message": "Master password is required." + "message": "Ĉefa pasvorto estas postulata" }, "confirmMasterPasswordRequired": { - "message": "Master password retype is required." + "message": "Reentajpi la ĉefan pasvorton estas postulata" }, "masterPasswordMinlength": { - "message": "Master password must be at least $VALUE$ characters long.", + "message": "La ĉefa pasvorto devas esti apenaŭ $VALUE$ signojn longa.", "description": "The Master Password must be at least a specific number of characters long.", "placeholders": { "value": { @@ -868,7 +862,7 @@ "message": "Master password confirmation does not match." }, "newAccountCreated": { - "message": "Via nova konto estas kreita! Vi eble ĵus salutis," + "message": "Via nova konto estas kreita! Vi eble nun salutas," }, "newAccountCreated2": { "message": "Via nova konto estas kreita!" @@ -877,13 +871,13 @@ "message": "Vi estas en salutaĵo!" }, "masterPassSent": { - "message": "We've sent you an email with your master password hint." + "message": "Ni sendis al vi retleteron kun la aludo de via ĉefa pasvorto." }, "unexpectedError": { "message": "An unexpected error has occurred." }, "itemInformation": { - "message": "Item information" + "message": "Informo de ero" }, "noItemsInList": { "message": "There are no items to list." @@ -919,7 +913,7 @@ "message": "Daŭrigi" }, "verificationCodeEmailSent": { - "message": "Verification email sent to $EMAIL$.", + "message": "Konfirmiga retletero sendiĝis al $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -928,7 +922,7 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "Ne demandu denove ĉe tiu ĉi aparato por 30 tagoj" }, "selectAnotherMethod": { "message": "Elekti alian metodon", @@ -947,10 +941,10 @@ "message": "Restariga kodo" }, "authenticatorAppTitle": { - "message": "Authenticator app" + "message": "Aŭtentiga apo" }, "authenticatorAppDescV2": { - "message": "Enter a code generated by an authenticator app like Bitwarden Authenticator.", + "message": "Enmetu kodon generitan de aŭtentiga apo, kiel Bitwarden-Aŭtentigilo.", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { @@ -960,7 +954,7 @@ "message": "Use a YubiKey to access your account. Works with YubiKey 4, 4 Nano, 4C, and NEO devices." }, "duoDescV2": { - "message": "Enter a code generated by Duo Security.", + "message": "Enmetu kodon generitan de Duo Security.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { @@ -983,13 +977,13 @@ "message": "Use any WebAuthn compatible security key to access your account." }, "emailTitle": { - "message": "Email" + "message": "Retpoŝto" }, "emailDescV2": { - "message": "Enter a code sent to your email." + "message": "Enmetu kodon sendiĝis al via retpoŝto." }, "loginUnavailable": { - "message": "Login unavailable" + "message": "Saluto nedisponeblas" }, "noTwoStepProviders": { "message": "This account has two-step login set up, however, none of the configured two-step providers are supported by this device." @@ -1032,7 +1026,7 @@ "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { - "message": "API server URL" + "message": "URL de API-servilo" }, "webVaultUrl": { "message": "Web vault server URL" @@ -1140,13 +1134,13 @@ "message": "Samhavigi la trezorujon" }, "changeMasterPass": { - "message": "Change master password" + "message": "Ŝanĝi la ĉefan pasvorton" }, "continueToWebApp": { "message": "Daŭrigu en la retumilan apon?" }, "changeMasterPasswordOnWebConfirmation": { - "message": "Vi povas ŝanĝi vian ĉefan pasvorton en la retumila apo de Bitwarden" + "message": "Vi povas ŝanĝi vian ĉefan pasvorton en la reteja apo de Bitwarden" }, "fingerprintPhrase": { "message": "Fingerprint phrase", @@ -1175,7 +1169,7 @@ "message": "Via trezorejo estas ŝlosita. Kontrolu vian identecon por daŭrigi." }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "Via konto estas ŝlosita" }, "or": { "message": "aŭ" @@ -1184,7 +1178,7 @@ "message": "Unlock with biometrics" }, "unlockWithMasterPassword": { - "message": "Unlock with master password" + "message": "Malŝlosi per la ĉefa pasvorto" }, "unlock": { "message": "Malŝlosi" @@ -1209,7 +1203,7 @@ "message": "Two-step login makes your account more secure by requiring you to verify your login with another device such as a security key, authenticator app, SMS, phone call, or email. Two-step login can be set up on the bitwarden.com web vault. Do you want to visit the website now?" }, "twoStepLogin": { - "message": "Two-step login" + "message": "Duŝtupa salutado" }, "vaultTimeout": { "message": "Vault timeout" @@ -1263,7 +1257,7 @@ "message": "On system lock" }, "onRestart": { - "message": "On restart" + "message": "Ĉe relanĉo" }, "never": { "message": "Neniam" @@ -1394,7 +1388,7 @@ } }, "updateAvailable": { - "message": "Update available" + "message": "Disponeblas ĝisdatigo" }, "updateAvailableDesc": { "message": "An update was found. Do you want to download it now?" @@ -1546,7 +1540,7 @@ "message": "Toggle full screen" }, "reload": { - "message": "Reload" + "message": "Reŝargi" }, "toggleDevTools": { "message": "Toggle developer tools" @@ -1572,7 +1566,7 @@ "message": "Hide Bitwarden" }, "hideOthers": { - "message": "Hide others" + "message": "Kaŝi la aliajn" }, "showAll": { "message": "Montri ĉiujn" @@ -1675,7 +1669,7 @@ "description": "Application window should always stay on top of other windows" }, "dateUpdated": { - "message": "Updated", + "message": "Ĝisdatigita", "description": "ex. Date this item was updated" }, "dateCreated": { @@ -1683,11 +1677,11 @@ "description": "ex. Date this item was created" }, "datePasswordUpdated": { - "message": "Password updated", + "message": "Pasvorto ĝisdatiĝis", "description": "ex. Date this password was updated" }, "exportFrom": { - "message": "Export from" + "message": "Elporti el" }, "exportVault": { "message": "Export vault" @@ -1696,31 +1690,31 @@ "message": "File format" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Tiu ĉi dosieriga elporto estos pasvorte protektata kaj postulas la pasvorton de la dosiero por malĉifri." }, "filePassword": { - "message": "File password" + "message": "Pasvorto de la dosiero" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Tiu pasvorto estos uzata por elporti kaj enporti tiun dosieron" }, "accountRestrictedOptionDescription": { "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." }, "passwordProtected": { - "message": "Password protected" + "message": "Pasvorte protektata" }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "Ŝargi pasvorton al la dosiero por ĉifri la elporton kaj ĝin enporti al ajna konto ĉe Bitwarden uzante la pasvorton por malĉifri." }, "exportTypeHeading": { - "message": "Export type" + "message": "Tipo de elporto" }, "accountRestricted": { "message": "Account restricted" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "Ne akordas la «Pasvorto de la dosiero» kaj «Konfirmu la pasvorton de la dosiero»." }, "done": { "message": "Preta" @@ -2134,7 +2128,7 @@ "message": "Use hardware acceleration" }, "enableHardwareAccelerationDesc": { - "message": "Implicite tiu ĉi agordo estas ŝaltita. Malŝaltu nur se vi spertas grafikajn problemojn. Postulata estas relanĉo." + "message": "Tiu ĉi agordo estas implicite ŝaltita. Malŝaltu nur se vi spertas grafikajn problemojn. Necesas relanĉi." }, "approve": { "message": "Aprobi" @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generi pasvorton" + }, + "generatePassphrase": { + "message": "Generi pasfrazon" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Uzi ĉi tiun retpoŝton" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Hazarda" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/es/messages.json b/apps/desktop/src/locales/es/messages.json index 154bb327689..89447c73765 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Otro" }, - "generatePassword": { - "message": "Generar contraseña" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tipo" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generar contraseña" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Usar este correo electrónico" }, + "useThisPassword": { + "message": "Usar esta contraseña" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Usar este nombre de usuario" + }, "random": { "message": "Aleatorio" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Contraseña débil encontrada en una filtración de datos. Utilice una contraseña única para proteger su cuenta. ¿Está seguro de que desea utilizar una contraseña comprometida?" }, - "useThisPassword": { - "message": "Usar esta contraseña" - }, - "useThisUsername": { - "message": "Usar este nombre de usuario" - }, "checkForBreaches": { "message": "Comprobar filtración de datos conocidos para esta contraseña" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/et/messages.json b/apps/desktop/src/locales/et/messages.json index 1cc526ecfba..f8605d9d4db 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Muu" }, - "generatePassword": { - "message": "Loo parool" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tüüp" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Loo parool" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Juhuslik" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Tuvastati nõrk ning andmelekkes lekkinud ülemparool. Kasuta konto paremaks turvamiseks tugevamat parooli. Oled kindel, et soovid nõrga parooliga jätkata?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Otsi seda parooli teadaolevatest andmeleketest" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/eu/messages.json b/apps/desktop/src/locales/eu/messages.json index ff8d91873b7..d2838dc22a1 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Bestelakoak" }, - "generatePassword": { - "message": "Sortu pasahitza" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Mota" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Sortu pasahitza" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Ausazkoa" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/fa/messages.json b/apps/desktop/src/locales/fa/messages.json index e0050ea092a..3720eb1d6fa 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -351,12 +351,6 @@ "other": { "message": "ساير" }, - "generatePassword": { - "message": "تولید کلمه عبور" - }, - "generatePassphrase": { - "message": "تولید عبارت عبور" - }, "type": { "message": "نوع" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "تولید کننده نام کاربری" }, + "generatePassword": { + "message": "تولید کلمه عبور" + }, + "generatePassphrase": { + "message": "تولید عبارت عبور" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "مقدار باید بین $MIN$ و $MAX$ باشد.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "از این ایمیل استفاده شود" }, + "useThisPassword": { + "message": "از این کلمه عبور استفاده کن" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "از این نام کاربری استفاده کن" + }, "random": { "message": "تصادفی" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "کلمه عبور ضعیف شناسایی و در یک نقض داده پیدا شد. از یک کلمه عبور قوی و منحصر به فرد برای محافظت از حساب خود استفاده کنید. آیا مطمئنید که می‌خواهید از این کلمه عبور استفاده کنید؟" }, - "useThisPassword": { - "message": "از این کلمه عبور استفاده کن" - }, - "useThisUsername": { - "message": "از این نام کاربری استفاده کن" - }, "checkForBreaches": { "message": "نقض اطلاعات شناخته شده برای این کلمه عبور را بررسی کنید" }, @@ -3704,7 +3719,7 @@ "message": "تغییر کلمه عبور در معرض خطر" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "نمی‌توانید مجموعه‌هایی را که فقط دسترسی مشاهده دارند حذف کنید: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "برای تو در تو کردن یک پوشه، نام پوشه والد را وارد کرده و سپس یک “/” اضافه کنید. مثال: Social/Forums" }, + "sendsTitleNoItems": { + "message": "اطلاعات حساس را به‌صورت ایمن ارسال کنید", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "پرونده‌ها و داده‌های خود را به‌صورت امن با هر کسی، در هر پلتفرمی به اشتراک بگذارید. اطلاعات شما در حین اشتراک‌گذاری به‌طور کامل رمزگذاری انتها به انتها باقی خواهد ماند و میزان افشا محدود می‌شود.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "ساخت سریع کلمات عبور" + }, + "generatorNudgeBodyOne": { + "message": "به‌راحتی کلمات عبور قوی و منحصر به فرد ایجاد کنید با کلیک روی", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "برای کمک به حفظ امنیت ورودهای شما.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "با کلیک روی دکمه تولید رمز عبور، به‌راحتی کلمات عبور قوی و منحصر به‌ فرد ایجاد کنید تا ورودهای شما ایمن باقی بمانند.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "با پر کردن خودکار در وقت خود صرفه جویی کنید" }, diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index bffa90c8a17..3c34c7b3a38 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Muut" }, - "generatePassword": { - "message": "Luo salasana" - }, - "generatePassphrase": { - "message": "Luo salalause" - }, "type": { "message": "Tyyppi" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Käyttäjätunnusgeneraattori" }, + "generatePassword": { + "message": "Luo salasana" + }, + "generatePassphrase": { + "message": "Luo salalause" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Arvon tulee olla väliltä $MIN$—$MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Käytä tätä sähköpostia" }, + "useThisPassword": { + "message": "Käytä tätä salasanaa" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Käytä tätä käyttäjätunnusta" + }, "random": { "message": "Satunnainen" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Havaittiin heikko ja tietovuodosta löytynyt salasana. Sinun tulisi suojata tilisi vahvalla ja ainutlaatuisella salasanalla. Haluatko varmasti käyttää tätä salasanaa?" }, - "useThisPassword": { - "message": "Käytä tätä salasanaa" - }, - "useThisUsername": { - "message": "Käytä tätä käyttäjätunnusta" - }, "checkForBreaches": { "message": "Tarkasta esiintyykö salasanaa tunnetuissa tietovuodoissa" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Säästä aikaa automaattitäytöllä" }, diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index 74c886a98b6..99209148ace 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Iba pa" }, - "generatePassword": { - "message": "Magtatag ng Password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Uri" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Magtatag ng Password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Mahinang password na nakilala at nakita sa data breach. Gamitin ang malakas at natatanging password upang makaproteksyon sa iyong account. Sigurado ka ba na gusto mong gamitin ang password na ito?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Tingnan ang kilalang breaches ng data para sa password na ito" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/fr/messages.json b/apps/desktop/src/locales/fr/messages.json index 2c53c0652bd..555286419c1 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Autre" }, - "generatePassword": { - "message": "Générer un mot de passe" - }, - "generatePassphrase": { - "message": "Générer une phrase de passe" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Générer un mot de passe" + }, + "generatePassphrase": { + "message": "Générer une phrase de passe" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "La valeur doit être comprise entre $MIN$ et $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Utiliser ce courriel" }, + "useThisPassword": { + "message": "Utiliser ce mot de passe" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Utiliser ce nom d'utilisateur" + }, "random": { "message": "Aléatoire" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Mot de passe faible identifié et trouvé dans une brèche de données. Utilisez un mot de passe robuste et unique pour protéger votre compte. Êtes-vous sûr de vouloir utiliser ce mot de passe ?" }, - "useThisPassword": { - "message": "Utiliser ce mot de passe" - }, - "useThisUsername": { - "message": "Utiliser ce nom d'utilisateur" - }, "checkForBreaches": { "message": "Vérifier les brèches de données connues pour ce mot de passe" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/gl/messages.json b/apps/desktop/src/locales/gl/messages.json index 17495f96785..d8173b1026a 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/he/messages.json b/apps/desktop/src/locales/he/messages.json index 3999caa1bbd..ea117cb41a1 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -351,12 +351,6 @@ "other": { "message": "אחר" }, - "generatePassword": { - "message": "צור סיסמה" - }, - "generatePassphrase": { - "message": "צור ביטוי סיסמה" - }, "type": { "message": "סוג" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "צור סיסמה" + }, + "generatePassphrase": { + "message": "צור ביטוי סיסמה" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "הערך חייב להיות בין $MIN$ ל־$MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "השתמש בדוא\"ל זה" }, + "useThisPassword": { + "message": "השתמש בסיסמה זו" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "השתמש בשם משתמש זה" + }, "random": { "message": "אקראי" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "סיסמה חלשה זוהתה ונמצאה בפרצת נתונים. השתמש בסיסמה חזקה וייחודית כדי להגן על חשבונך. האם אתה בטוח שאתה רוצה להשתמש בסיסמה זו?" }, - "useThisPassword": { - "message": "השתמש בסיסמה זו" - }, - "useThisUsername": { - "message": "השתמש בשם משתמש זה" - }, "checkForBreaches": { "message": "בדוק פרצות נתונים ידועות עבור סיסמה זו" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/hi/messages.json b/apps/desktop/src/locales/hi/messages.json index 292e1c4b7d2..b6c6c7d2bcf 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/hr/messages.json b/apps/desktop/src/locales/hr/messages.json index cf90703a438..f03d52e0123 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Ostalo" }, - "generatePassword": { - "message": "Generiraj lozinku" - }, - "generatePassphrase": { - "message": "Generiraj fraznu lozinku" - }, "type": { "message": "Vrsta" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generiraj lozinku" + }, + "generatePassphrase": { + "message": "Generiraj fraznu lozinku" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Vrijednost mora biti u rasponu $MIN$ - $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Koristi ovu e-poštu" }, + "useThisPassword": { + "message": "Koristi ovu lozinku" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Koristi ovo korisničko ime" + }, "random": { "message": "Nasumično" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Slaba lozinka je nađena među ukradenima tijekom krađa podataka. Za zaštitu svog računa koristi jaku i jedinstvenu lozinku. Želiš li svejedno korisiti slabu, ukradenu lozinku?" }, - "useThisPassword": { - "message": "Koristi ovu lozinku" - }, - "useThisUsername": { - "message": "Koristi ovo korisničko ime" - }, "checkForBreaches": { "message": "Provjeri je li lozinka ukradena prilikom krađe podataka" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index f7eb77766c1..cfbc9856260 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Egyéb" }, - "generatePassword": { - "message": "Jelszó generálása" - }, - "generatePassphrase": { - "message": "Jelmondat generálás" - }, "type": { "message": "Típus" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Felhasználónév generátor" }, + "generatePassword": { + "message": "Jelszó generálása" + }, + "generatePassphrase": { + "message": "Jelmondat generálás" + }, + "passwordGenerated": { + "message": "A jelszó generálásra került." + }, + "passphraseGenerated": { + "message": "A jelmondat generálásra került." + }, + "usernameGenerated": { + "message": "A felhasználónév generálásra került." + }, + "emailGenerated": { + "message": "Az email generálásra került." + }, "spinboxBoundariesHint": { "message": "Az érték legyen $MIN$ és $MAX$ között.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Ezen email használata" }, + "useThisPassword": { + "message": "Jelszó használata" + }, + "useThisPassphrase": { + "message": "Jelmondat használata" + }, + "useThisUsername": { + "message": "Felhasználónév használata" + }, "random": { "message": "Véletlen" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Gyenge jelszó lett azonosítva és megtalálva egy adatvédelmi incidens során. A fók védelme érdekében használjunk erős és egyedi jelszót. Biztosan használni szeretnénk ezt a jelszót?" }, - "useThisPassword": { - "message": "Jelszó használata" - }, - "useThisUsername": { - "message": "Felhasználónév használata" - }, "checkForBreaches": { "message": "Az ehhez a jelszóhoz tartozó ismert adatvédelmi incidensek ellenőrzése" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Mappa beágyazása a szülőmappa nevének hozzáadásával, majd egy “/” karakterrel. Példa: Közösségi/Fórumok" }, + "sendsTitleNoItems": { + "message": "Érzékeny információt küldése biztonságosan", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Fájlok vagy adatok megosztása biztonságosan bárkivel, bármilyen platformon. Az információk titkosítva maradnak a végpontokon, korlátozva a kitettséget.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Jelszavak gyors létrehozása" + }, + "generatorNudgeBodyOne": { + "message": "Könnyen létrehozhatunk erős és egyedi jelszavakat a gombra kattintva", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "a bejelentkezések biztonságának megőrzéséhez.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Idő megtakarítás automatikus kitöltéssel" }, diff --git a/apps/desktop/src/locales/id/messages.json b/apps/desktop/src/locales/id/messages.json index 70be61f4bf3..129e9fa87fa 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Lainnya" }, - "generatePassword": { - "message": "Buat Kata Sandi" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tipe" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Buat Kata Sandi" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Acak" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Periksa pelanggaran data yang diketahui untuk kata sandi ini" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/it/messages.json b/apps/desktop/src/locales/it/messages.json index a3dcb13fa76..bfd3163ded4 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Altro" }, - "generatePassword": { - "message": "Genera password" - }, - "generatePassphrase": { - "message": "Genera passphrase" - }, "type": { "message": "Tipo" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Genera password" + }, + "generatePassphrase": { + "message": "Genera passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Il valore deve essere compreso tra $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Usa questa e-mail" }, + "useThisPassword": { + "message": "Usa questa parola d'accesso" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Usa questo nome utente" + }, "random": { "message": "Casuale" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Password debole e trovata in una violazione dei dati. Usa una password forte e unica per proteggere il tuo account. Sei sicuro di voler usare questa password?" }, - "useThisPassword": { - "message": "Usa questa parola d'accesso" - }, - "useThisUsername": { - "message": "Usa questo nome utente" - }, "checkForBreaches": { "message": "Controlla se la tua password è presente in una violazione dei dati" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ja/messages.json b/apps/desktop/src/locales/ja/messages.json index 624a296f32b..57ce174358d 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -351,12 +351,6 @@ "other": { "message": "その他" }, - "generatePassword": { - "message": "パスワードの自動生成" - }, - "generatePassphrase": { - "message": "パスフレーズを生成" - }, "type": { "message": "タイプ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "パスワードの自動生成" + }, + "generatePassphrase": { + "message": "パスフレーズを生成" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "値は $MIN$ から $MAX$ の間でなければなりません。", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "このメールアドレスを使う" }, + "useThisPassword": { + "message": "このパスワードを使用する" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "このユーザー名を使用する" + }, "random": { "message": "ランダム" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "入力されたパスワードは脆弱かつすでに流出済みです。アカウントを守るためより強力で一意なパスワードを使用してください。本当にこの脆弱なパスワードを使用しますか?" }, - "useThisPassword": { - "message": "このパスワードを使用する" - }, - "useThisUsername": { - "message": "このユーザー名を使用する" - }, "checkForBreaches": { "message": "このパスワードの既知のデータ流出を確認" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ka/messages.json b/apps/desktop/src/locales/ka/messages.json index 45047cd678f..4cdd0b39165 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -351,12 +351,6 @@ "other": { "message": "სხვა" }, - "generatePassword": { - "message": "პაროლის გენერირება" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "ტიპი" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "პაროლის გენერირება" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "შემთხვევითი" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/km/messages.json b/apps/desktop/src/locales/km/messages.json index 17495f96785..d8173b1026a 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/kn/messages.json b/apps/desktop/src/locales/kn/messages.json index e74fc479016..f15da49403c 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -351,12 +351,6 @@ "other": { "message": "ಇತರೆ" }, - "generatePassword": { - "message": "ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "ಪ್ರಕಾರ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ko/messages.json b/apps/desktop/src/locales/ko/messages.json index 371f4cae1c8..81b57410d6b 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -351,12 +351,6 @@ "other": { "message": "기타" }, - "generatePassword": { - "message": "비밀번호 생성" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "유형" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "비밀번호 생성" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "무작위" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/lt/messages.json b/apps/desktop/src/locales/lt/messages.json index f98a5dba2e1..c4a75ddb68d 100644 --- a/apps/desktop/src/locales/lt/messages.json +++ b/apps/desktop/src/locales/lt/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Kita" }, - "generatePassword": { - "message": "Sugeneruoti slaptažodį" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tipas" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Sugeneruoti slaptažodį" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Atsitiktinis" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Silpnas slaptažodis nustatytas ir rastas per duomenų pažeidimą. Norėdami apsaugoti paskyrą, naudokite stiprų ir unikalų slaptažodį. Ar tikrai norite naudoti šį slaptažodį?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Patikrinti žinomus šio slaptažodžio duomenų pažeidimus" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index 6c35520605d..c9e87e1aae9 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Cits" }, - "generatePassword": { - "message": "Veidot paroli" - }, - "generatePassphrase": { - "message": "Izveidot paroles vārdkopu" - }, "type": { "message": "Veids" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Lietotājvārdu veidotājs" }, + "generatePassword": { + "message": "Veidot paroli" + }, + "generatePassphrase": { + "message": "Izveidot paroles vārdkopu" + }, + "passwordGenerated": { + "message": "Parole izveidota" + }, + "passphraseGenerated": { + "message": "Paroles vārdkopa izveidota" + }, + "usernameGenerated": { + "message": "Lietotājvārds izveidots" + }, + "emailGenerated": { + "message": "E-pasta adrese izveidota" + }, "spinboxBoundariesHint": { "message": "Vērtībai jābūt starp $MIN$ un $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Izmantot šo e-pasta adresi" }, + "useThisPassword": { + "message": "Izmantot šo paroli" + }, + "useThisPassphrase": { + "message": "Izmantot šo paroles vārdkopu" + }, + "useThisUsername": { + "message": "Izmantot šo lietotājvārdu" + }, "random": { "message": "Nejauši" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Noteikta vāja parole, un tā ir atrasta datu noplūdē. Jāizmanto spēcīga un neatkārtojama parole, lai aizsargātu savu kontu. Vai tiešām izmantot šo paroli?" }, - "useThisPassword": { - "message": "Izmantot šo paroli" - }, - "useThisUsername": { - "message": "Izmantot šo lietotājvārdu" - }, "checkForBreaches": { "message": "Meklēt šo paroli zināmās datu noplūdēs" }, @@ -3704,7 +3719,7 @@ "message": "Mainīt riskam pakļautu paroli" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Nevar noņemt krājumus ar tiesībām \"Tikai skatīt\": $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Apakšmapes var izveidot, ja pievieno iekļaujošās mapes nosaukumu, aiz kura ir \"/\". Piemēram: Tīklošanās/Forumi" }, + "sendsTitleNoItems": { + "message": "Drošā veidā nosūti jūtīgu informāciju", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Kopīgo datnes un datus drošā veidā ar ikvienu jebkurā platformā! Tava informācija paliks pilnībā šifrēta, vienlaikus ierobežojot riskantumu.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Ātra paroļu izveidošana" + }, + "generatorNudgeBodyOne": { + "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": ", lai palīdzētu uzturērt pieteikšanās vienumus drošus.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Laika ietaupīšana ar automātisko aizpildi" }, diff --git a/apps/desktop/src/locales/me/messages.json b/apps/desktop/src/locales/me/messages.json index 51310719f0a..4a8e7af8d92 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Drugo" }, - "generatePassword": { - "message": "Generiši lozinku" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tip" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generiši lozinku" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ml/messages.json b/apps/desktop/src/locales/ml/messages.json index a760acb86ec..00e0e52db49 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -351,12 +351,6 @@ "other": { "message": "മറ്റുള്ളവ" }, - "generatePassword": { - "message": "പാസ്‌വേഡ് സൃഷ്ടിക്കുക" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "തരം" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "പാസ്‌വേഡ് സൃഷ്ടിക്കുക" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/mr/messages.json b/apps/desktop/src/locales/mr/messages.json index 17495f96785..d8173b1026a 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/my/messages.json b/apps/desktop/src/locales/my/messages.json index 2179311c501..10105784c4a 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/nb/messages.json b/apps/desktop/src/locales/nb/messages.json index 3ddf3e44e5f..27b99440b01 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Annet" }, - "generatePassword": { - "message": "Generer et passord" - }, - "generatePassphrase": { - "message": "Generér passordfrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Brukernavngenerator" }, + "generatePassword": { + "message": "Generer et passord" + }, + "generatePassphrase": { + "message": "Generér passordfrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Verdien må være mellom $MIN$ og $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Bruk denne E-postadressen" }, + "useThisPassword": { + "message": "Bruk dette passordet" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Bruk dette brukernavnet" + }, "random": { "message": "Tilfeldig" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Bruk dette passordet" - }, - "useThisUsername": { - "message": "Bruk dette brukernavnet" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Spar tid med auto-utfylling" }, diff --git a/apps/desktop/src/locales/ne/messages.json b/apps/desktop/src/locales/ne/messages.json index 9ae7b7af955..608a01c34da 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/nl/messages.json b/apps/desktop/src/locales/nl/messages.json index b1e04600908..5843392d342 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Overig" }, - "generatePassword": { - "message": "Genereer wachtwoord" - }, - "generatePassphrase": { - "message": "Wachtwoordzin genereren" - }, "type": { "message": "Categorie" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Gebruikersnaamgenerator" }, + "generatePassword": { + "message": "Genereer wachtwoord" + }, + "generatePassphrase": { + "message": "Wachtwoordzin genereren" + }, + "passwordGenerated": { + "message": "Wachtwoord gegenereerd" + }, + "passphraseGenerated": { + "message": "Wachtwoordzin gegenereerd" + }, + "usernameGenerated": { + "message": "Gebruikersnaam gegenereerd" + }, + "emailGenerated": { + "message": "E-mail gegenereerd" + }, "spinboxBoundariesHint": { "message": "Waarde moet tussen $MIN$ en $MAX$ liggen.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Dit e-mailadres gebruiken" }, + "useThisPassword": { + "message": "Dit wachtwoord gebruiken" + }, + "useThisPassphrase": { + "message": "Deze wachtwoordzin gebruiken" + }, + "useThisUsername": { + "message": "Deze gebruikersnaam gebruiken" + }, "random": { "message": "Willekeurig" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Zwak wachtwoord geïdentificeerd en gevonden in een datalek. Gebruik een sterk en uniek wachtwoord om je account te beschermen. Weet je zeker dat je dit wachtwoord wilt gebruiken?" }, - "useThisPassword": { - "message": "Dit wachtwoord gebruiken" - }, - "useThisUsername": { - "message": "Deze gebruikersnaam gebruiken" - }, "checkForBreaches": { "message": "Bekende datalekken voor dit wachtwoord controleren" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Je kunt een map onderbrengen door het toevoegen van de naam van de bovenliggende map gevolgd door een \"/\". Voorbeeld: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Gevoelige informatie veilig versturen", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Deel bestanden en gegevens veilig met iedereen, op elk platform. Je informatie blijft end-to-end versleuteld terwijl en blootstelling beperkt.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Snel wachtwoorden maken" + }, + "generatorNudgeBodyOne": { + "message": "Maak eenvoudig sterke en unieke wachtwoorden door te klikken op", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "om je te helpen je inloggegevens veilig te houden.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Tijd besparen met automatisch aanvullen" }, diff --git a/apps/desktop/src/locales/nn/messages.json b/apps/desktop/src/locales/nn/messages.json index 097da5886a6..632b556c53c 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Andre" }, - "generatePassword": { - "message": "Generer passord" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generer passord" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/or/messages.json b/apps/desktop/src/locales/or/messages.json index a71275e64ac..e5fd6b10bb9 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -351,12 +351,6 @@ "other": { "message": "ଅନ୍ୟ" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "ପ୍ରକାର" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/pl/messages.json b/apps/desktop/src/locales/pl/messages.json index 84ef8f0ca9a..769e63c4ef9 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Inne" }, - "generatePassword": { - "message": "Wygeneruj hasło" - }, - "generatePassphrase": { - "message": "Wygeneruj hasło wyrazowe" - }, "type": { "message": "Rodzaj" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Wygeneruj hasło" + }, + "generatePassphrase": { + "message": "Wygeneruj hasło wyrazowe" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Wartość musi być pomiędzy $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Użyj tego adresu e-mail" }, + "useThisPassword": { + "message": "Użyj tego hasła" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Użyj tej nazwy użytkownika" + }, "random": { "message": "Losowa" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Słabe hasło ujawnione w wyniku naruszenia ochrony danych. Użyj silnego i unikalnego hasła, aby chronić swoje konto. Czy na pewno chcesz użyć tego hasła?" }, - "useThisPassword": { - "message": "Użyj tego hasła" - }, - "useThisUsername": { - "message": "Użyj tej nazwy użytkownika" - }, "checkForBreaches": { "message": "Sprawdź znane naruszenia ochrony danych tego hasła" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/pt_BR/messages.json b/apps/desktop/src/locales/pt_BR/messages.json index 43fa1087988..73f73b06f0b 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Outros" }, - "generatePassword": { - "message": "Gerar Senha" - }, - "generatePassphrase": { - "message": "Gerar frase secreta" - }, "type": { "message": "Tipo" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Gerar Senha" + }, + "generatePassphrase": { + "message": "Gerar frase secreta" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Valor deve ser entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Usar este e-mail" }, + "useThisPassword": { + "message": "Use esta senha" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use este nome de usuário" + }, "random": { "message": "Aleatório" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Senha fraca identificada e encontrada em um vazamento de dados. Use uma senha forte e única para proteger a sua conta. Tem certeza de que deseja usar essa senha?" }, - "useThisPassword": { - "message": "Use esta senha" - }, - "useThisUsername": { - "message": "Use este nome de usuário" - }, "checkForBreaches": { "message": "Verificar vazamentos de dados conhecidos para esta senha" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/pt_PT/messages.json b/apps/desktop/src/locales/pt_PT/messages.json index dc40c91960e..bd878110e17 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Outros" }, - "generatePassword": { - "message": "Gerar palavra-passe" - }, - "generatePassphrase": { - "message": "Gerar frase de acesso" - }, "type": { "message": "Tipo" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Gerador de nomes de utilizador" }, + "generatePassword": { + "message": "Gerar palavra-passe" + }, + "generatePassphrase": { + "message": "Gerar frase de acesso" + }, + "passwordGenerated": { + "message": "Palavra-passe gerada" + }, + "passphraseGenerated": { + "message": "Frase de acesso gerada" + }, + "usernameGenerated": { + "message": "Nome de utilizador gerado" + }, + "emailGenerated": { + "message": "E-mail gerado" + }, "spinboxBoundariesHint": { "message": "O valor deve estar entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Utilizar este e-mail" }, + "useThisPassword": { + "message": "Utilizar esta palavra-passe" + }, + "useThisPassphrase": { + "message": "Utilizar esta frase de acesso" + }, + "useThisUsername": { + "message": "Utilizar este nome de utilizador" + }, "random": { "message": "Aleatório" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Palavra-passe fraca identificada e encontrada numa violação de dados. Utilize uma palavra-passe forte e única para proteger a sua conta. Tem a certeza de que pretende utilizar esta palavra-passe?" }, - "useThisPassword": { - "message": "Utilizar esta palavra-passe" - }, - "useThisUsername": { - "message": "Utilizar este nome de utilizador" - }, "checkForBreaches": { "message": "Verificar violações de dados conhecidas para esta palavra-passe" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Crie uma subpasta adicionando o nome da pasta principal seguido de um \"/\". Exemplo: Redes Sociais/Fóruns" }, + "sendsTitleNoItems": { + "message": "Envie informações sensíveis com segurança", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Partilhe ficheiros e dados de forma segura com qualquer pessoa, em qualquer plataforma. As suas informações permanecerão encriptadas ponto a ponto, limitando a exposição.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Criar rapidamente palavras-passe" + }, + "generatorNudgeBodyOne": { + "message": "Crie facilmente palavras-passe fortes e únicas clicando em", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "para o ajudar a manter as suas credenciais seguras.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Poupe tempo com o preenchimento automático" }, diff --git a/apps/desktop/src/locales/ro/messages.json b/apps/desktop/src/locales/ro/messages.json index f108d420829..b678e4cc3a2 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Altele" }, - "generatePassword": { - "message": "Generare parolă" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tip" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generare parolă" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Aleatoriu" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index 52dea4d205c..ed19ee79cf0 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Прочее" }, - "generatePassword": { - "message": "Сгенерировать пароль" - }, - "generatePassphrase": { - "message": "Создать парольную фразу" - }, "type": { "message": "Тип" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Генератор имени пользователя" }, + "generatePassword": { + "message": "Сгенерировать пароль" + }, + "generatePassphrase": { + "message": "Создать парольную фразу" + }, + "passwordGenerated": { + "message": "Пароль создан" + }, + "passphraseGenerated": { + "message": "Парольная фраза создана" + }, + "usernameGenerated": { + "message": "Имя пользователя создано" + }, + "emailGenerated": { + "message": "Email создан" + }, "spinboxBoundariesHint": { "message": "Значение должно быть между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Использовать этот email" }, + "useThisPassword": { + "message": "Использовать этот пароль" + }, + "useThisPassphrase": { + "message": "Использовать эту парольную фразу" + }, + "useThisUsername": { + "message": "Использовать это имя пользователя" + }, "random": { "message": "Случайно" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Обнаружен слабый пароль, найденный в утечке данных. Используйте надежный и уникальный пароль для защиты вашего аккаунта. Вы уверены, что хотите использовать этот пароль?" }, - "useThisPassword": { - "message": "Использовать этот пароль" - }, - "useThisUsername": { - "message": "Использовать это имя пользователя" - }, "checkForBreaches": { "message": "Проверять известные случаи утечки данных для этого пароля" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Создайте вложенную папку, добавив название родительской папки и символ \"/\". Пример: Сообщества/Форумы" }, + "sendsTitleNoItems": { + "message": "Безопасная отправка конфиденциальной информации", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Безопасно обменивайтесь файлами и данными с кем угодно на любой платформе. Ваша информация надежно шифруется и доступ к ней ограничен.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Быстрое создание паролей" + }, + "generatorNudgeBodyOne": { + "message": "Легко создавайте надежные и уникальные пароли, нажатием на кнопку,", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "чтобы обеспечить безопасность ваших логинов.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Легко создавайте надежные и уникальные пароли, нажатием на кнопку 'Сгенерировать пароль', чтобы обеспечить безопасность ваших логинов.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" }, diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index 03124c345da..b7e37bf4484 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index 3ee4a800a61..112839176f7 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Ostatné" }, - "generatePassword": { - "message": "Generovať heslo" - }, - "generatePassphrase": { - "message": "Generovať prístupovú frázu" - }, "type": { "message": "Typ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Generátor používateľského mena" }, + "generatePassword": { + "message": "Generovať heslo" + }, + "generatePassphrase": { + "message": "Generovať prístupovú frázu" + }, + "passwordGenerated": { + "message": "Heslo vygenerované" + }, + "passphraseGenerated": { + "message": "Prístupová fráza vygenerovaná" + }, + "usernameGenerated": { + "message": "Používateľské meno vygenerované" + }, + "emailGenerated": { + "message": "E-mail vygenerovaný" + }, "spinboxBoundariesHint": { "message": "Hodnota musí byť medzi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Použiť tento e-mail" }, + "useThisPassword": { + "message": "Použiť toto heslo" + }, + "useThisPassphrase": { + "message": "Použiť túto prístupovú frázu" + }, + "useThisUsername": { + "message": "Použiť toto používateľské meno" + }, "random": { "message": "Náhodné" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Nájdené slabé heslo v uniknuných údajoch. Na ochranu svojho účtu používajte silné a jedinečné heslo. Naozaj chcete používať toto heslo?" }, - "useThisPassword": { - "message": "Použiť toto heslo" - }, - "useThisUsername": { - "message": "Použiť toto používateľské meno" - }, "checkForBreaches": { "message": "Skontrolovať známe úniky údajov pre toto heslo" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Vnorte priečinok pridaním názvu nadradeného priečinka a znaku \"/\". Príklad: Sociálne siete/Fóra" }, + "sendsTitleNoItems": { + "message": "Send, citlivé informácie bezpečne", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Bezpečne zdieľajte súbory a údaje s kýmkoľvek a na akejkoľvek platforme. Vaše informácie zostanú end-to-end zašifrované a zároveň sa obmedzí ich odhalenie.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Rýchle vytváranie hesiel" + }, + "generatorNudgeBodyOne": { + "message": "Jednoducho vytvorte silné a jedinečné heslá kliknutím na", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "aby ste mohli ochrániť prihlasovacie údaje.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Ušetrite čas s automatickým vypĺňaním" }, diff --git a/apps/desktop/src/locales/sl/messages.json b/apps/desktop/src/locales/sl/messages.json index e1f7dcd578b..d7c2d0e90df 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Drugo" }, - "generatePassword": { - "message": "Generiraj geslo" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Tip" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generiraj geslo" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/sr/messages.json b/apps/desktop/src/locales/sr/messages.json index d13c28ae4da..29294115a43 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Остало" }, - "generatePassword": { - "message": "Генерисање лозинке" - }, - "generatePassphrase": { - "message": "Генеришите приступну фразу" - }, "type": { "message": "Тип" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Генератор корисничког имена" }, + "generatePassword": { + "message": "Генерисање лозинке" + }, + "generatePassphrase": { + "message": "Генеришите приступну фразу" + }, + "passwordGenerated": { + "message": "Лозинка генерисана" + }, + "passphraseGenerated": { + "message": "Приступна фраза је генерисана" + }, + "usernameGenerated": { + "message": "Корисничко име генерисано" + }, + "emailGenerated": { + "message": "Имејл генерисан" + }, "spinboxBoundariesHint": { "message": "Вредност мора бити између $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Користи овај имејл" }, + "useThisPassword": { + "message": "Употреби ову лозинку" + }, + "useThisPassphrase": { + "message": "Употреби ову приступну фразу" + }, + "useThisUsername": { + "message": "Употреби ово корисничко име" + }, "random": { "message": "Случајно" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Идентификована је слаба лозинка и пронађена у упаду података. Користите јаку и јединствену лозинку да заштитите свој налог. Да ли сте сигурни да желите да користите ову лозинку?" }, - "useThisPassword": { - "message": "Употреби ову лозинку" - }, - "useThisUsername": { - "message": "Употреби ово корисничко име" - }, "checkForBreaches": { "message": "Проверите познате упада података за ову лозинку" }, @@ -3704,7 +3719,7 @@ "message": "Променити ризичну лозинку" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Не можете уклонити колекције са дозволама само за приказ: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Угнездите фасциклу додавањем имена надређене фасцкле праћеног знаком „/“. Пример: Друштвени/Форуми" }, + "sendsTitleNoItems": { + "message": "Шаљите бзбедно осетљиве информације", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Делите датотеке и податке безбедно са било ким, на било којој платформи. Ваше информације ће остати шифроване од почетка-до-краја уз ограничење изложености.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Брзо креирајте лозинке" + }, + "generatorNudgeBodyOne": { + "message": "Лако креирајте снажне и јединствене лозинке кликом на", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "да вам помогне да задржите своје пријаве сигурно.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Лако креирајте снажне и јединствене лозинке кликом на дугме „Генерирате лозинку“ да вам помогне да чувате своје пријаве на сигурно.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Уштедите време са ауто-пуњењем" }, diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index e4fbc6f5773..f9f60575613 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Annat" }, - "generatePassword": { - "message": "Generera lösenord" - }, - "generatePassphrase": { - "message": "Generera lösenfras" - }, "type": { "message": "Typ" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generera lösenord" + }, + "generatePassphrase": { + "message": "Generera lösenfras" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Slumpmässig" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Lösenordet är svagt och avslöjades vid ett dataintrång. Använd ett starkt och unikt lösenord för att skydda ditt konto. Är det säkert att du vill använda detta lösenord?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Kontrollera kända dataintrång för detta lösenord" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/te/messages.json b/apps/desktop/src/locales/te/messages.json index 17495f96785..d8173b1026a 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Other" }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "Type" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/th/messages.json b/apps/desktop/src/locales/th/messages.json index 34669ba21c4..c64ff409b19 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -351,12 +351,6 @@ "other": { "message": "อื่น ๆ" }, - "generatePassword": { - "message": "สร้างรหัสผ่าน" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "type": { "message": "ประเภท" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "สร้างรหัสผ่าน" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Random" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Check known data breaches for this password" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 43a134abfb0..65e5676258d 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Diğer" }, - "generatePassword": { - "message": "Parola oluştur" - }, - "generatePassphrase": { - "message": "Parola üret" - }, "type": { "message": "Tür" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Kullanıcı adı üreteci" }, + "generatePassword": { + "message": "Parola oluştur" + }, + "generatePassphrase": { + "message": "Parola üret" + }, + "passwordGenerated": { + "message": "Parola üretildi" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Kullanıcı adı üretildi" + }, + "emailGenerated": { + "message": "E-posta üretildi" + }, "spinboxBoundariesHint": { "message": "Değer $MIN$ ile $MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Bu e-postayı kullan" }, + "useThisPassword": { + "message": "Bu parolayı kullan" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Bu kullanıcı adını kullan" + }, "random": { "message": "Rasgele" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Hem zayıf hem de veri ihlalinde yer alan bir tespit edildi. Hesabınızı korumak için güçlü bir parola seçin ve o parolayı başka yerlerde kullanmayın. Bu parolayı kullanmak istediğinizden emin misiniz?" }, - "useThisPassword": { - "message": "Bu parolayı kullan" - }, - "useThisUsername": { - "message": "Bu kullanıcı adını kullan" - }, "checkForBreaches": { "message": "Bilinen veri ihlallerinde bu parolayı kontrol et" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Üst klasörün adının sonuna “/” ekleyerek klasörleri iç içe koyabilirsiniz. Örnek: Sosyal/Forumlar" }, + "sendsTitleNoItems": { + "message": "Hassas bilgileri güvenle paylaşın", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Dosyaları ve verileri istediğiniz kişilerle, istediğiniz platformda paylaşın. Bilgileriniz başkalarının eline geçmemesi için uçtan şifrelenecektir.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Hızlıca parola oluşturun" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" }, diff --git a/apps/desktop/src/locales/uk/messages.json b/apps/desktop/src/locales/uk/messages.json index a4a63da8089..f6fa1d7a6ee 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Інше" }, - "generatePassword": { - "message": "Генерувати пароль" - }, - "generatePassphrase": { - "message": "Генерувати парольну фразу" - }, "type": { "message": "Тип" }, @@ -2513,13 +2507,13 @@ "message": "Головний пароль вилучено" }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Головний пароль більше не є обов'язковим для учасників зазначеної організації. Підтвердьте вказаний нижче домен з адміністратором вашої організації." }, "organizationName": { - "message": "Organization name" + "message": "Назва організації" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Домен Key Connector" }, "leaveOrganization": { "message": "Покинути організацію" @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Генератор імені користувача" }, + "generatePassword": { + "message": "Генерувати пароль" + }, + "generatePassphrase": { + "message": "Генерувати парольну фразу" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Значення має бути між $MIN$ та $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Використати цю е-пошту" }, + "useThisPassword": { + "message": "Використати цей пароль" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Використати це ім'я користувача" + }, "random": { "message": "Випадково" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Виявлено слабкий пароль, який знайдено у витоку даних. Використовуйте надійний та унікальний пароль для захисту свого облікового запису. Ви дійсно хочете використати цей пароль?" }, - "useThisPassword": { - "message": "Використати цей пароль" - }, - "useThisUsername": { - "message": "Використати це ім'я користувача" - }, "checkForBreaches": { "message": "Перевірити відомі витоки даних для цього пароля" }, @@ -3704,7 +3719,7 @@ "message": "Змінити ризикований пароль" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Ви не можете вилучати збірки, маючи дозвіл лише на перегляд: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3716,13 +3731,38 @@ "message": "Перемістити" }, "newFolder": { - "message": "New folder" + "message": "Нова тека" }, "folderName": { - "message": "Folder Name" + "message": "Назва теки" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Зробіть теку вкладеною, вказавши після основної теки \"/\". Наприклад: Обговорення/Форуми" + }, + "sendsTitleNoItems": { + "message": "Безпечно надсилайте конфіденційну інформацію", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Безпечно діліться файлами й даними з ким завгодно, на будь-якій платформі. Ваша інформація наскрізно зашифрована та має обмежений доступ.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Швидко створюйте паролі" + }, + "generatorNudgeBodyOne": { + "message": "Легко створюйте надійні та унікальні паролі, натиснувши на", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "щоб зберегти свої записи в безпеці.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Легко створюйте надійні та унікальні паролі, натиснувши кнопку Генерувати пароль, щоб зберегти свої записи в безпеці.", + "description": "Aria label for the body content of the generator nudge" }, "newLoginNudgeTitle": { "message": "Заощаджуйте час з автозаповненням" diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index 4ab9257691c..a880f7338d7 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -351,12 +351,6 @@ "other": { "message": "Khác" }, - "generatePassword": { - "message": "Tạo mật khẩu" - }, - "generatePassphrase": { - "message": "Tạo cụm mật khẩu" - }, "type": { "message": "Loại" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "Tạo mật khẩu" + }, + "generatePassphrase": { + "message": "Tạo cụm mật khẩu" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "Use this password" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "Use this username" + }, "random": { "message": "Ngẫu nhiên" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "Mật khẩu yếu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Dùng mật khẩu mới và an toàn để bảo vệ tài khoản bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?" }, - "useThisPassword": { - "message": "Use this password" - }, - "useThisUsername": { - "message": "Use this username" - }, "checkForBreaches": { "message": "Kiểm tra mật khẩu có lộ trong các vụ rò rỉ dữ liệu hay không" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index 69d5faa5fb7..4a001fc3b05 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -351,12 +351,6 @@ "other": { "message": "其他" }, - "generatePassword": { - "message": "生成密码" - }, - "generatePassphrase": { - "message": "生成密码短语" - }, "type": { "message": "类型" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "用户名生成器" }, + "generatePassword": { + "message": "生成密码" + }, + "generatePassphrase": { + "message": "生成密码短语" + }, + "passwordGenerated": { + "message": "密码已生成" + }, + "passphraseGenerated": { + "message": "密码短语已生成" + }, + "usernameGenerated": { + "message": "用户名已生成" + }, + "emailGenerated": { + "message": "电子邮箱已生成" + }, "spinboxBoundariesHint": { "message": "值必须在 $MIN$ 和 $MAX$ 之间。", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "使用此电子邮箱" }, + "useThisPassword": { + "message": "使用此密码" + }, + "useThisPassphrase": { + "message": "使用此密码短语" + }, + "useThisUsername": { + "message": "使用此用户名" + }, "random": { "message": "随机" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "识别到弱密码且其出现在数据泄露中。请使用一个强且唯一的密码以保护您的账户。确定要使用这个密码吗?" }, - "useThisPassword": { - "message": "使用此密码" - }, - "useThisUsername": { - "message": "使用此用户名" - }, "checkForBreaches": { "message": "检查已知的数据泄露是否包含此密码" }, @@ -3704,7 +3719,7 @@ "message": "更改有风险的密码" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "您无法移除仅具有「查看」权限的集合:$COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -3724,21 +3739,46 @@ "folderHintText": { "message": "通过在父文件夹名后面添加「/」来嵌套文件夹。示例:Social/Forums" }, + "sendsTitleNoItems": { + "message": "安全地发送敏感信息", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "在任何平台上安全地与任何人共享文件和数据。您的信息将在限制曝光的同时保持端到端加密。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "快速创建密码" + }, + "generatorNudgeBodyOne": { + "message": "一键创建强大且唯一的密码", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "帮助您保持登录安全。", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "点击「生成密码」按钮,轻松创建强大且唯一的密码,帮助您保持登录安全。", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "使用自动填充节省时间" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "包含", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "网站", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "以便将此登录显示为自动填充建议。", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index 6080c3ee0f8..f39eee97118 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -351,12 +351,6 @@ "other": { "message": "其他" }, - "generatePassword": { - "message": "產生密碼" - }, - "generatePassphrase": { - "message": "產生密碼片語" - }, "type": { "message": "類型" }, @@ -2633,6 +2627,24 @@ "usernameGenerator": { "message": "Username generator" }, + "generatePassword": { + "message": "產生密碼" + }, + "generatePassphrase": { + "message": "產生密碼片語" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -2686,6 +2698,15 @@ "useThisEmail": { "message": "Use this email" }, + "useThisPassword": { + "message": "使用此密碼" + }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, + "useThisUsername": { + "message": "使用此使用者名稱" + }, "random": { "message": "隨機" }, @@ -3051,12 +3072,6 @@ "weakAndBreachedMasterPasswordDesc": { "message": "密碼強度不足,且該密碼已洩露。請使用一個強度足夠和獨特的密碼來保護您的帳戶。您確定要使用這個密碼嗎?" }, - "useThisPassword": { - "message": "使用此密碼" - }, - "useThisUsername": { - "message": "使用此使用者名稱" - }, "checkForBreaches": { "message": "檢查外洩的密碼資料庫中是否包含此密碼" }, @@ -3724,6 +3739,31 @@ "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, From cdee9169721a206cc73d374138d845aa930e75f9 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:14:55 +0000 Subject: [PATCH 14/33] Autosync the updated translations (#14998) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/af/messages.json | 52 +- apps/web/src/locales/ar/messages.json | 52 +- apps/web/src/locales/az/messages.json | 52 +- apps/web/src/locales/be/messages.json | 52 +- apps/web/src/locales/bg/messages.json | 52 +- apps/web/src/locales/bn/messages.json | 52 +- apps/web/src/locales/bs/messages.json | 52 +- apps/web/src/locales/ca/messages.json | 52 +- apps/web/src/locales/cs/messages.json | 52 +- apps/web/src/locales/cy/messages.json | 52 +- apps/web/src/locales/da/messages.json | 52 +- apps/web/src/locales/de/messages.json | 52 +- apps/web/src/locales/el/messages.json | 52 +- apps/web/src/locales/en_GB/messages.json | 52 +- apps/web/src/locales/en_IN/messages.json | 52 +- apps/web/src/locales/eo/messages.json | 56 +- apps/web/src/locales/es/messages.json | 52 +- apps/web/src/locales/et/messages.json | 196 ++- apps/web/src/locales/eu/messages.json | 52 +- apps/web/src/locales/fa/messages.json | 1784 +++++++++++----------- apps/web/src/locales/fi/messages.json | 52 +- apps/web/src/locales/fil/messages.json | 52 +- apps/web/src/locales/fr/messages.json | 52 +- apps/web/src/locales/gl/messages.json | 52 +- apps/web/src/locales/he/messages.json | 52 +- apps/web/src/locales/hi/messages.json | 52 +- apps/web/src/locales/hr/messages.json | 52 +- apps/web/src/locales/hu/messages.json | 52 +- apps/web/src/locales/id/messages.json | 52 +- apps/web/src/locales/it/messages.json | 52 +- apps/web/src/locales/ja/messages.json | 52 +- apps/web/src/locales/ka/messages.json | 52 +- apps/web/src/locales/km/messages.json | 52 +- apps/web/src/locales/kn/messages.json | 52 +- apps/web/src/locales/ko/messages.json | 52 +- apps/web/src/locales/lv/messages.json | 52 +- apps/web/src/locales/ml/messages.json | 52 +- apps/web/src/locales/mr/messages.json | 154 +- apps/web/src/locales/my/messages.json | 52 +- apps/web/src/locales/nb/messages.json | 52 +- apps/web/src/locales/ne/messages.json | 52 +- apps/web/src/locales/nl/messages.json | 52 +- apps/web/src/locales/nn/messages.json | 52 +- apps/web/src/locales/or/messages.json | 52 +- apps/web/src/locales/pl/messages.json | 52 +- apps/web/src/locales/pt_BR/messages.json | 52 +- apps/web/src/locales/pt_PT/messages.json | 52 +- apps/web/src/locales/ro/messages.json | 52 +- apps/web/src/locales/ru/messages.json | 52 +- apps/web/src/locales/si/messages.json | 52 +- apps/web/src/locales/sk/messages.json | 52 +- apps/web/src/locales/sl/messages.json | 52 +- apps/web/src/locales/sr/messages.json | 52 +- apps/web/src/locales/sr_CS/messages.json | 52 +- apps/web/src/locales/sv/messages.json | 52 +- apps/web/src/locales/te/messages.json | 52 +- apps/web/src/locales/th/messages.json | 52 +- apps/web/src/locales/tr/messages.json | 52 +- apps/web/src/locales/uk/messages.json | 68 +- apps/web/src/locales/vi/messages.json | 52 +- apps/web/src/locales/zh_CN/messages.json | 58 +- apps/web/src/locales/zh_TW/messages.json | 52 +- 62 files changed, 3854 insertions(+), 1374 deletions(-) diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 3d2c04f6673..d1fac1d1357 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -547,12 +547,6 @@ "message": "Tokkel invou", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Genereer Wagwoord" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Gaan na of wagwoord blootgestel is." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Genereer Wagwoord" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index 82907ed4df0..e27a87efa31 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -547,12 +547,6 @@ "message": "تبديل الطي", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "توليد كلمة مرور" - }, - "generatePassphrase": { - "message": "توليد عبارة مرور" - }, "checkPassword": { "message": "تحقق مما إذا تم الكشف عن كلمة المرور." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "توليد كلمة مرور" + }, + "generatePassphrase": { + "message": "توليد عبارة مرور" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index 121f50f0e00..2faf2cb7e12 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -547,12 +547,6 @@ "message": "Yığcamlaşdırmanı aç/bağla", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Parol yarat" - }, - "generatePassphrase": { - "message": "Keçid ifadələri yarat" - }, "checkPassword": { "message": "Parolun ifşalanıb ifşalanmadığını yoxlayın." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "E-poçt yarat" }, + "generatePassword": { + "message": "Parol yarat" + }, + "generatePassphrase": { + "message": "Keçid ifadələri yarat" + }, + "passwordGenerated": { + "message": "Parol yaradıldı" + }, + "passphraseGenerated": { + "message": "Keçid ifadəsi yaradıldı" + }, + "usernameGenerated": { + "message": "İstifadəçi adı yaradıldı" + }, + "emailGenerated": { + "message": "E-poçt yaradıldı" + }, "spinboxBoundariesHint": { "message": "Dəyər, $MIN$-$MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Bu parolu istifadə et" }, + "useThisPassphrase": { + "message": "Bu keçid ifadəsini istifadə et" + }, "useThisUsername": { "message": "Bu istifadəçi adını istifadə et" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Yeni biznes vahidi" }, + "sendsTitleNoItems": { + "message": "Send, həssas məlumatlar təhlükəsizdir", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "İstənilən platformada faylları və dataları hər kəslə paylaşın. İfşa olunmağı məhdudlaşdıraraq məlumatlarınız ucdan-uca şifrələnmiş qalacaq.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Cəld parol yaradın" + }, + "generatorNudgeBodyOne": { + "message": "Klikləyərək güclü və unikal parolları asanlıqla yaradın", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "və girişlərinizi güvənli şəkildə saxlayın.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" }, diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 7409df6baff..c62928d4bdc 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -547,12 +547,6 @@ "message": "Згарнуць/Разгарнуць", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Генерыраваць пароль" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Праверце, ці не скампраметаваны пароль." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Генерыраваць пароль" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index a8bd9d51e8f..436388652f4 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -547,12 +547,6 @@ "message": "Превключване на свиването", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Нова парола" - }, - "generatePassphrase": { - "message": "Генериране на парола-фраза" - }, "checkPassword": { "message": "Проверка дали паролата е разкрита." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Генериране на електронна поща" }, + "generatePassword": { + "message": "Нова парола" + }, + "generatePassphrase": { + "message": "Генериране на парола-фраза" + }, + "passwordGenerated": { + "message": "Паролата е генерирана" + }, + "passphraseGenerated": { + "message": "Паролата-фраза е генерирана" + }, + "usernameGenerated": { + "message": "Потребителското име е генерирано" + }, + "emailGenerated": { + "message": "Е-пощата е генерирана" + }, "spinboxBoundariesHint": { "message": "Стойността трябва да бъде между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Използване на тази парола" }, + "useThisPassphrase": { + "message": "Използване на тази парола-фраза" + }, "useThisUsername": { "message": "Използване на това потребителско име" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Нова бизнес единица" }, + "sendsTitleNoItems": { + "message": "Изпращайте чувствителна информация сигурно", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Споделяйте сигурно файлове и данни с всекиго, през всяка система. Информацията Ви ще бъде защитена с шифроване от край до край, а видимостта ѝ ще бъде ограничена.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Създавайте пароли бързо" + }, + "generatorNudgeBodyOne": { + "message": "Създавайте лесно сложни и уникални пароли като щракнете върху", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "за да защитите данните си за вписване.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Създавайте лесно сложни и уникални пароли като щракнете върху бутона за генериране на парола, за да защитите данните си за вписване.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" }, diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 1419d580837..1a8352a6dbf 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "পাসওয়ার্ড তৈরি করুন" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "পাসওয়ার্ড তৈরি করুন" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 31174ebbe5a..9295e7e5610 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -547,12 +547,6 @@ "message": "Sažmi/Proširi", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index 49aadd7951a..d5001893490 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -547,12 +547,6 @@ "message": "Redueix/Amplia", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Genera contrasenya" - }, - "generatePassphrase": { - "message": "Genera frase de pas" - }, "checkPassword": { "message": "Comprova si la contrasenya ha estat exposada." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Genera contrasenya" + }, + "generatePassphrase": { + "message": "Genera frase de pas" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Unitat de negoci nova" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 615bfa4f09b..9db811ff776 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -547,12 +547,6 @@ "message": "Přepnout sbalení", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Vygenerovat heslo" - }, - "generatePassphrase": { - "message": "Vygenerovat heslovou frázi" - }, "checkPassword": { "message": "Zkontrolujte, zda nedošlo k úniku hesla." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Vygenerovat e-mail" }, + "generatePassword": { + "message": "Vygenerovat heslo" + }, + "generatePassphrase": { + "message": "Vygenerovat heslovou frázi" + }, + "passwordGenerated": { + "message": "Heslo bylo vygenerováno" + }, + "passphraseGenerated": { + "message": "Heslová fráze byla vygenerována" + }, + "usernameGenerated": { + "message": "Uživatelské jméno bylo vygenerováno" + }, + "emailGenerated": { + "message": "E-mail byl vygenerován" + }, "spinboxBoundariesHint": { "message": "Hodnota musí být mezi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Použít toto heslo" }, + "useThisPassphrase": { + "message": "Použít tuto heslovou frázi" + }, "useThisUsername": { "message": "Použít toto uživatelské jméno" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nová obchodní jednotka" }, + "sendsTitleNoItems": { + "message": "Posílejte citlivé informace bezpečně", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Sdílejte bezpečně soubory a data s kýmkoli na libovolné platformě. Vaše informace zůstanou šifrovány a zároveň omezují expozici.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Rychlé vytvoření hesla" + }, + "generatorNudgeBodyOne": { + "message": "Jednoduše vytvořte silná a unikátní hesla klepnutím na", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "aby Vám pomohlo udržet Vaše přihlašovací údaje v bezpečí.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Ušetřete čas s automatickým vyplňováním" }, diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 87c852a8869..78d1c04a3c9 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index ee2dc4d570c..db73ea4784c 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -547,12 +547,6 @@ "message": "Fold sammen/ud", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generér adgangskode" - }, - "generatePassphrase": { - "message": "Generér adgangssætning" - }, "checkPassword": { "message": "Tjek, om adgangskode er blevet kompromitteret." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generér e-mail" }, + "generatePassword": { + "message": "Generér adgangskode" + }, + "generatePassphrase": { + "message": "Generér adgangssætning" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Værdi skal være mellem $MIN$ og $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Anvend denne adgangskode" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Anvend dette brugernavn" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index 58b4c568c61..bcf308bedd5 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -547,12 +547,6 @@ "message": "Ein-/ausklappen", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Passwort generieren" - }, - "generatePassphrase": { - "message": "Passphrase generieren" - }, "checkPassword": { "message": "Überprüfen ob ihr Kennwort kompromittiert ist." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "E-Mail generieren" }, + "generatePassword": { + "message": "Passwort generieren" + }, + "generatePassphrase": { + "message": "Passphrase generieren" + }, + "passwordGenerated": { + "message": "Passwort generiert" + }, + "passphraseGenerated": { + "message": "Passphrase generiert" + }, + "usernameGenerated": { + "message": "Benutzername generiert" + }, + "emailGenerated": { + "message": "E-Mail-Adresse generiert" + }, "spinboxBoundariesHint": { "message": "Wert muss zwischen $MIN$ und $MAX$ liegen.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Dieses Passwort verwenden" }, + "useThisPassphrase": { + "message": "Diese Passphrase verwenden" + }, "useThisUsername": { "message": "Diesen Benutzernamen verwenden" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Neuer Geschäftsbereich" }, + "sendsTitleNoItems": { + "message": "Sensible Informationen sicher versenden", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-verschlüsselt, während die Verbreitung begrenzt wird.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Passwörter schnell erstellen" + }, + "generatorNudgeBodyOne": { + "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": ", um dir zu helfen, deine Zugangsdaten sicher zu halten.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" }, diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 3790920f883..60aa8db716c 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -547,12 +547,6 @@ "message": "Εναλλαγή Σύμπτυξης", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Δημιουργία Κωδικού" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Ελέγξτε εάν ο κωδικός έχει εκτεθεί." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Δημιουργία Κωδικού" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Χρήση αυτού του κωδικού πρόσβασης" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Χρήση αυτού του ονόματος χρήστη" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index ab7bf3a1197..7dd11351f89 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index 736cece1de3..5b8f0f521fb 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 0a4acdc5739..14a15e2965c 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -534,7 +534,7 @@ "description": "URI match detection for auto-fill." }, "defaultMatchDetection": { - "message": "Implicita eltrovo en akordo", + "message": "Implicita eltrovado en akordo", "description": "Default URI match detection for auto-fill." }, "never": { @@ -547,12 +547,6 @@ "message": "Baskuli Fali", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generi pasvorton" - }, - "generatePassphrase": { - "message": "Generi pasfrazon" - }, "checkPassword": { "message": "Kontrolu ĉu pasvorto estis elmontrita." }, @@ -1873,7 +1867,7 @@ "message": "Ĉu vi zorgas pri tio, ke via konto estas ensalutinta sur alia aparato? Sekvu sube por senrajtigi ĉiujn komputilojn aŭ aparatojn, kiujn vi antaŭe uzis. Ĉi tiu sekureca paŝo rekomendas se vi antaŭe uzis publikan komputilon aŭ hazarde konservis vian pasvorton sur aparato, kiu ne estas via. Ĉi tiu paŝo ankaŭ malplenigos ĉiujn antaŭe memoritajn du-paŝajn ensalutajn sesiojn. " }, "deauthorizeSessionsWarning": { - "message": "Se vi daŭrigos vian adiaŭadon de la nuna seanco, necesos vin saluti denove. Oni ankaŭ demandos de vi du-faktoran aŭtentigon, se tiu elekteblo estas ebligita. La seancoj aktivaj sur aliaj aparatoj povas resti daŭre aktivaj ankoraŭ unu horon." + "message": "La daŭrigo ankaŭ elsalutos vin de via nuna sesio, postulante vin denove ensaluti. Oni ankaŭ petos vin du-ŝtupa ensaluto, se ĝi estas ebligita. Aktivaj sesioj sur aliaj aparatoj povas daŭre resti aktivaj ĝis ĝis unu horo. " }, "newDeviceLoginProtection": { "message": "Saluto per nova aparato" @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generi pasvorton" + }, + "generatePassphrase": { + "message": "Generi pasfrazon" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 1660429f7f4..b8a11b5e543 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -547,12 +547,6 @@ "message": "Colapsar/Expandir", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generar contraseña" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Comprobar si la contraseña está comprometida." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generar contraseña" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 19608e1fd82..85afcc55be1 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -420,7 +420,7 @@ "message": "Aegumise aasta" }, "authenticatorKeyTotp": { - "message": "Autentiseerimise võti (TOTP)" + "message": "Autentimise võti (TOTP)" }, "totpHelperTitle": { "message": "Muuda 2-astmeline kinnitamine sujuvaks" @@ -547,12 +547,6 @@ "message": "Näita vähem", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Loo parool" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Kontrolli, kas parool on lekkinud." }, @@ -838,13 +832,13 @@ } }, "copyWebsite": { - "message": "Copy website" + "message": "Kopeeri veebilehe aadress" }, "copyNotes": { - "message": "Copy notes" + "message": "Kopeeri märkused" }, "copyAddress": { - "message": "Copy address" + "message": "Kopeeri aadress" }, "copyPhone": { "message": "Kopeeri telefoninumber" @@ -1058,7 +1052,7 @@ "message": "Bitwardeni rakenduse seadistuses peab olema konfigureeritud sisselogimine läbi seadme. Soovid teist valikut?" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Soovid teist valikut kasutada?" }, "loginWithMasterPassword": { "message": "Logi sisse ülemparooliga" @@ -1193,10 +1187,10 @@ "message": "Autentimiseks vajuta nuppu oma YubiKey'l" }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Sisselogimise ajalõpp" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "Sisselogimise sessioon on aegunud. Palun alusta uuesti sisse logimist." }, "verifyYourIdentity": { "message": "Kinnitage oma Identiteet" @@ -1376,7 +1370,7 @@ "message": "Sul ei ole õigust vaadata kõiki asju selles kogus." }, "youDoNotHavePermissions": { - "message": "You do not have permissions to this collection" + "message": "Sul ei ole õigusi sellele kogumikule" }, "noCollectionsInList": { "message": "Puuduvad kollektsioonid, mida kuvada." @@ -1403,13 +1397,13 @@ "message": "Sinu seadmesse saadeti teavitus." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the " + "message": "Ava Bitwarden oma seadmes või avades " }, "areYouTryingToAccessYourAccount": { "message": "Kas sa püüad praegu oma kontole sisse logida?" }, "accessAttemptBy": { - "message": "Access attempt by $EMAIL$", + "message": "$EMAIL$ proovis juurdepääsu saada", "placeholders": { "email": { "content": "$1", @@ -1427,10 +1421,10 @@ "message": "veebirakendus" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Enne kinnitamist kontrolli, et unikaalne sõnajada ühtib allolevaga." }, "notificationSentDeviceComplete": { - "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving." + "message": "Ava Bitwarden oma seadmes. Enne kinnitamist kontrolli, et unikaalne sõnajada vastab allolevaga." }, "aNotificationWasSentToYourDevice": { "message": "Sinu seadmele saadeti teavitus" @@ -1736,25 +1730,25 @@ "message": "Paroolide ajalugu" }, "generatorHistory": { - "message": "Generator history" + "message": "Genereerija ajalugu" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "Tühjenda genereerija ajalugu" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Jätkates kustutatakse kõik kirjed genereerija ajaloost. Kas sa oled kindel, et soovid jätkata?" }, "noPasswordsInList": { "message": "Puuduvad paroolid, mida kuvada." }, "clearHistory": { - "message": "Clear history" + "message": "Tühjenda ajalugu" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Siin ei ole midagi näidata" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Sa ei ole midagi viimat genereerinud" }, "clear": { "message": "Tühjenda", @@ -1794,10 +1788,10 @@ "message": "Palun logi uuesti sisse." }, "currentSession": { - "message": "Current session" + "message": "Praegune sessioon" }, "requestPending": { - "message": "Request pending" + "message": "Taotlus on ootel" }, "logBackInOthersToo": { "message": "Palun logi uuesti sisse. Kui kasutad teisi Bitwardeni rakendusi, pead ka nendes uuesti sisse logima." @@ -1876,31 +1870,31 @@ "message": "Jätkatest logitakse sind ka käimasolevast sessioonist välja, mistõttu pead kontosse uuesti sisse logima. Lisaks võidakse küsida kaheastmelist kinnitust, kui see on sisse lülitatud. Teised kontoga ühendatud seadmed võivad jääda sisselogituks kuni üheks tunniks." }, "newDeviceLoginProtection": { - "message": "New device login" + "message": "Uuest seadmest logiti sisse" }, "turnOffNewDeviceLoginProtection": { - "message": "Turn off new device login protection" + "message": "Lülita välja uuest seadmest sisse logimise kaitse" }, "turnOnNewDeviceLoginProtection": { - "message": "Turn on new device login protection" + "message": "Lülita sisse uuest seadmest sisse logimise kaitse" }, "turnOffNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device." + "message": "Jätka allpool, et lülitada välja kinnituskirjad, mis Bitwarden saadab iga kord, kui sa logid uue seadme kaudu." }, "turnOnNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to have bitwarden send you verification emails when you login from a new device." + "message": "Jätka allpool, et lülitada sisse kinnituskirjad, mis Bitwarden saadab iga kord, kui sa logid sisse uuest seadmest." }, "turnOffNewDeviceLoginProtectionWarning": { - "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login." + "message": "Ilma uue seadme logimise kaitseta saab igaüks igast seadmest sinu ülemparooliga sisse logida. Oma konto kaitsmiseks ilma kinnituskirjadeta, sea sisse kahe-astmeline kinnitamine." }, "accountNewDeviceLoginProtectionSaved": { - "message": "New device login protection changes saved" + "message": "Uue seadme sisselogimise kaitse muudatused salvestatud" }, "sessionsDeauthorized": { "message": "Kõikidest seadmetest on välja logitud" }, "accountIsOwnedMessage": { - "message": "This account is owned by $ORGANIZATIONNAME$", + "message": "Selle konto omanik on $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -2160,7 +2154,7 @@ "message": "Kaheastmelise kinnitamine aktiveerimine võib luua olukorra, kus sul on võimatu oma Bitwardeni kontosse sisse logida. Näiteks kui kaotad oma nutiseadme. Taastamise kood võimaldab aga kontole ligi pääseda ka olukorras, kus kaheastmelist kinnitamist ei ole võimalik läbi viia. Sellistel juhtudel ei saa ka Bitwardeni klienditugi sinu kontole ligipääsu taastada. Selle tõttu soovitame taastekoodi välja printida ja seda turvalises kohas hoida." }, "yourSingleUseRecoveryCode": { - "message": "Your single-use recovery code can be used to turn off two-step login in the event that you lose access to your two-step login provider. Bitwarden recommends you write down the recovery code and keep it in a safe place." + "message": "Sinu ühekordseid taastamise koode saab kasutada selleks, et lülitada kahe-astmeline sisselogimine välja juhul, kui sa oled kaotanud juurdepääsu oma kahe-astmelise sisselogimise viisidele. Bitwarden soovitab sul kirjutada üles taastamise koodid ja hoiustada neid ohutus kohas." }, "viewRecoveryCode": { "message": "Vaata taastamise koodi" @@ -2201,16 +2195,16 @@ "message": "Haldus" }, "manageCollection": { - "message": "Manage collection" + "message": "Halda kogumikku" }, "viewItems": { - "message": "View items" + "message": "Vaata kirjeid" }, "viewItemsHidePass": { "message": "View items, hidden passwords" }, "editItems": { - "message": "Edit items" + "message": "Muuda kirjeid" }, "editItemsHidePass": { "message": "Edit items, hidden passwords" @@ -2414,7 +2408,7 @@ "message": "Turvavõtme lugemisel tekkis tõrge. Proovi uuesti." }, "twoFactorWebAuthnWarning1": { - "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used." + "message": "Platvormide piirangute tõttu ei saa WebAuthn'i kõikide Bitwardeni rakendustega kasutada. Võiksid seada sisse teise kahe-astmelise kinnitamise meetodi juhuks, kui WebAuthn'i ei saa kasutada." }, "twoFactorRecoveryYourCode": { "message": "Bitwardeni kaheastmelise logimise varukood" @@ -2540,7 +2534,7 @@ "message": "Avastatud on nõrgad paroolid" }, "weakPasswordsFoundReportDesc": { - "message": "Me leidsime $COUNT$ eset sinu $VAULT$ nõrkade paroolidega. Sa peaksid vahetama need tugevamate vastu.", + "message": "Me leidsime $COUNT$ eset sinu $VAULT$st nõrkade paroolidega. Sa peaksid vahetama need tugevamate vastu.", "placeholders": { "count": { "content": "$1", @@ -2556,7 +2550,7 @@ "message": "Hoidlas olevatest kirjetest ei leitud nõrku paroole." }, "weakness": { - "message": "Weakness" + "message": "Nõrkusaste" }, "reusedPasswordsReport": { "message": "Korduvate paroolide raport" @@ -4094,7 +4088,7 @@ "message": "Review login request" }, "freeTrialEndPromptCount": { - "message": "Your free trial ends in $COUNT$ days.", + "message": "Sinu tasuta prooviaeg lõppeb $COUNT$ päeva pärast.", "placeholders": { "count": { "content": "$1", @@ -4103,7 +4097,7 @@ } }, "freeTrialEndPromptMultipleDays": { - "message": "$ORGANIZATION$, your free trial ends in $COUNT$ days.", + "message": "$ORGANIZATION$, sinu tasuta prooviaeg lõppeb $COUNT$ päeva pärast.", "placeholders": { "count": { "content": "$2", @@ -4116,7 +4110,7 @@ } }, "freeTrialEndPromptTomorrow": { - "message": "$ORGANIZATION$, your free trial ends tomorrow.", + "message": "$ORGANIZATION$, sinu tasuta prooviaeg lõppeb homme.", "placeholders": { "organization": { "content": "$1", @@ -4125,10 +4119,10 @@ } }, "freeTrialEndPromptTomorrowNoOrgName": { - "message": "Your free trial ends tomorrow." + "message": "Sinu tasuta prooviaeg lõppeb homme." }, "freeTrialEndPromptToday": { - "message": "$ORGANIZATION$, your free trial ends today.", + "message": "$ORGANIZATION$, sinu tasuta prooviaeg lõppeb homme.", "placeholders": { "organization": { "content": "$1", @@ -4137,16 +4131,16 @@ } }, "freeTrialEndingTodayWithoutOrgName": { - "message": "Your free trial ends today." + "message": "Sinu tasuta prooviaeg lõppeb täna." }, "clickHereToAddPaymentMethod": { - "message": "Click here to add a payment method." + "message": "Maksemeetodi lisamiseks vajuta siia." }, "joinOrganization": { "message": "Liitu organisatsiooniga" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "Liitu $ORGANIZATIONNAME$ organisatsiooniga", "placeholders": { "organizationName": { "content": "$1", @@ -4188,7 +4182,7 @@ "message": "Kui sa ei pääse oma kontole ühegi kaheastmeliste kinnitamise meetodi abiga ligi, saad selle välja lülitada. Selleks kasuta kaheastmelise kinnitamise tühistamise koodi." }, "logInBelowUsingYourSingleUseRecoveryCode": { - "message": "Log in below using your single-use recovery code. This will turn off all two-step providers on your account." + "message": "Logi allpool sisse kasutades ühekordset taastamise koodi. See lülitab sinu kontol välja kõik kahe-astmelise kinnitamise meetodid." }, "recoverAccountTwoStep": { "message": "Taasta kaheastmelise kinnitamise ligipääs" @@ -4479,10 +4473,10 @@ } }, "encryptionKeyUpdateCannotProceed": { - "message": "Encryption key update cannot proceed" + "message": "Krüpteerimise võtme uuendamisega ei õnnestunud jätkata" }, "editFieldLabel": { - "message": "Edit $LABEL$", + "message": "Muuda $LABEL$ lahtrit", "placeholders": { "label": { "content": "$1", @@ -4491,7 +4485,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "Paiguta $LABEL$ ümber. Kasuta nooli, et liigutada lahtrit üles või alla.", "placeholders": { "label": { "content": "$1", @@ -4500,7 +4494,7 @@ } }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ üles liigutatud, $INDEX$. kohale $LENGTH$-st", "placeholders": { "label": { "content": "$1", @@ -4517,7 +4511,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ alla liigutatud, $INDEX$. kohale $LENGTH$-st", "placeholders": { "label": { "content": "$1", @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Loo parool" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -7286,16 +7301,16 @@ "message": "Launch Duo" }, "turnOn": { - "message": "Turn on" + "message": "Lülita sisse" }, "on": { - "message": "On" + "message": "Sees" }, "off": { - "message": "Off" + "message": "Väljas" }, "members": { - "message": "Members" + "message": "Liikmed" }, "reporting": { "message": "Reporting" @@ -7316,46 +7331,46 @@ "message": "Bright Blue" }, "green": { - "message": "Green" + "message": "Roheline" }, "orange": { - "message": "Orange" + "message": "Oranž" }, "lavender": { - "message": "Lavender" + "message": "Lavendel" }, "yellow": { - "message": "Yellow" + "message": "Kollane" }, "indigo": { "message": "Indigo" }, "teal": { - "message": "Teal" + "message": "Sinakasroheline" }, "salmon": { - "message": "Salmon" + "message": "Lõhe" }, "pink": { - "message": "Pink" + "message": "Roosa" }, "customColor": { - "message": "Custom Color" + "message": "Kohandatud Värv" }, "selectPlaceholder": { - "message": "-- Select --" + "message": "-- Vali --" }, "multiSelectPlaceholder": { - "message": "-- Type to filter --" + "message": "-- Filtreerimiseks trüki siia --" }, "multiSelectLoading": { - "message": "Retrieving options..." + "message": "Valikute hankimine..." }, "multiSelectNotFound": { - "message": "No items found" + "message": "Ühtki kirjet ei leitud" }, "multiSelectClearAll": { - "message": "Clear all" + "message": "Tühjenda kõik" }, "toggleCharacterCount": { "message": "Toggle character count", @@ -7366,14 +7381,14 @@ "description": "'Character count' describes a feature that displays a number next to each character of the password." }, "hide": { - "message": "Hide" + "message": "Peida" }, "projects": { - "message": "Projects", + "message": "Projektid", "description": "Description for the Projects field." }, "lastEdited": { - "message": "Last edited", + "message": "Viimati muudetud", "description": "The label for the date and time when a item was last edited." }, "editSecret": { @@ -7870,7 +7885,7 @@ } }, "domainNameTh": { - "message": "Name" + "message": "Nimi" }, "domainStatusTh": { "message": "Status" @@ -7978,7 +7993,7 @@ "message": "Switch products" }, "freeOrgInvLimitReachedManageBilling": { - "message": "Free organizations may have up to $SEATCOUNT$ members. Upgrade to a paid plan to invite more members.", + "message": "Tasuta organisatsioonidel võib olla kuni $SEATCOUNT$ liiget. Hangi tasuline plaan, et kutsuda rohkem liikmeid.", "placeholders": { "seatcount": { "content": "$1", @@ -7987,7 +8002,7 @@ } }, "freeOrgInvLimitReachedNoManageBilling": { - "message": "Free organizations may have up to $SEATCOUNT$ members. Contact your organization owner to upgrade.", + "message": "Tasuta organisatsioonidel võib olla kuni $SEATCOUNT$ liiget. Selle arvu tõstmiseks kontakteeru selle organisatsiooni omanikuga.", "placeholders": { "seatcount": { "content": "$1", @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index b587e7f1611..5668d987b69 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -547,12 +547,6 @@ "message": "Hondoa jo", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Sortu pasahitza" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Egiaztatu pasahitza konprometituta dagoen." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Sortu pasahitza" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index a7c07192acc..b8a71e7b971 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -24,7 +24,7 @@ "message": "کلمات عبور در معرض خطر (ضعیف، افشا شده یا تکراری) را در برنامه‌ها بررسی کنید. برنامه‌های حیاتی خود را انتخاب کنید تا اقدامات امنیتی را برای کاربران‌تان اولویت‌بندی کنید و به کلمات عبور در معرض خطر رسیدگی کنید." }, "dataLastUpdated": { - "message": "آخرین به‌روزرسانی داده‌ها: \\$DATE\\$", + "message": "آخرین به‌روزرسانی داده‌ها: $DATE$", "placeholders": { "date": { "content": "$1", @@ -66,7 +66,7 @@ } }, "notifiedMembersWithCount": { - "message": "Notified members ($COUNT$)", + "message": "اعضا مطلع شدند ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -84,25 +84,25 @@ } }, "noAppsInOrgDescription": { - "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." + "message": "با ذخیره‌ی اطلاعات ورود توسط کاربران، برنامه‌ها در اینجا نمایش داده می‌شوند و کلمات عبور در معرض خطر مشخص می‌گردند. برنامه‌های حیاتی را علامت‌گذاری کرده و کاربران را برای به‌روزرسانی کلمات عبور مطلع کنید." }, "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "message": "شما هیچ برنامه‌ای را به عنوان حیاتی علامت‌گذاری نکرده‌اید" }, "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "message": "مهم‌ترین برنامه‌های خود را انتخاب کنید تا کلمات عبور در معرض خطر شناسایی شوند و کاربران برای تغییر آن‌ها مطلع شوند." }, "markCriticalApps": { - "message": "Mark critical apps" + "message": "برنامه‌های حیاتی را علامت‌گذاری کنید" }, "markAppAsCritical": { - "message": "Mark app as critical" + "message": "برنامه را به عنوان حیاتی علامت‌گذاری کنید" }, "applicationsMarkedAsCriticalSuccess": { - "message": "Applications marked as critical" + "message": "برنامه‌های علامت گذاری شده به عنوان حیاتی" }, "application": { - "message": "اپلیکیشن" + "message": "برنامه" }, "atRiskPasswords": { "message": "کلمات عبور در معرض خطر" @@ -111,16 +111,16 @@ "message": "درخواست تغییر کلمه عبور" }, "totalPasswords": { - "message": "Total passwords" + "message": "تمام کلمات عبور" }, "searchApps": { - "message": "Search applications" + "message": "برنامه‌ها را جستجو کنید" }, "atRiskMembers": { - "message": "At-risk members" + "message": "اعضای در معرض خطر" }, "atRiskMembersWithCount": { - "message": "At-risk members ($COUNT$)", + "message": "اعضای در معرض خطر ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -129,7 +129,7 @@ } }, "atRiskApplicationsWithCount": { - "message": "At-risk applications ($COUNT$)", + "message": "برنامه‌های در معرض خطر ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -138,19 +138,19 @@ } }, "atRiskMembersDescription": { - "message": "These members are logging into applications with weak, exposed, or reused passwords." + "message": "این اعضا با کلمات عبور ضعیف، افشا شده یا تکراری وارد برنامه‌ها می‌شوند." }, "atRiskMembersDescriptionNone": { - "message": "These are no members logging into applications with weak, exposed, or reused passwords." + "message": "هیچ عضوی با کلمات عبور ضعیف، افشا شده یا تکراری وارد برنامه‌ها نمی‌شود." }, "atRiskApplicationsDescription": { - "message": "These applications have weak, exposed, or reused passwords." + "message": "این برنامه‌ها دارای کلمات عبور ضعیف، افشا شده یا تکراری هستند." }, "atRiskApplicationsDescriptionNone": { - "message": "These are no applications with weak, exposed, or reused passwords." + "message": "هیچ برنامه‌ای با کلمات عبور ضعیف، افشا شده یا تکراری وجود ندارد." }, "atRiskMembersDescriptionWithApp": { - "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.", + "message": "این اعضا با کلمات عبور ضعیف، افشا شده یا تکراری وارد برنامه‌ی $APPNAME$ می‌شوند.", "placeholders": { "appname": { "content": "$1", @@ -159,7 +159,7 @@ } }, "atRiskMembersDescriptionWithAppNone": { - "message": "There are no at risk members for $APPNAME$.", + "message": "هیچ عضو در معرض خطری برای $APPNAME$ وجود ندارد.", "placeholders": { "appname": { "content": "$1", @@ -168,19 +168,19 @@ } }, "totalMembers": { - "message": "Total members" + "message": "کل اعضا" }, "atRiskApplications": { - "message": "At-risk applications" + "message": "برنامه‌های در معرض خطر" }, "totalApplications": { - "message": "Total applications" + "message": "کل برنامه‌ها" }, "unmarkAsCriticalApp": { - "message": "Unmark as critical app" + "message": "لغو علامت حیاتی بودن برنامه" }, "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "message": "برنامه حیاتی با موفقیت لغو علامت شد" }, "whatTypeOfItem": { "message": "این چه نوع موردی است؟" @@ -247,7 +247,7 @@ "message": "جزئیات کارت" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "$BRAND$ جزئیات", "placeholders": { "brand": { "content": "$1", @@ -256,19 +256,19 @@ } }, "itemHistory": { - "message": "Item history" + "message": "تاریخچه مورد" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "کلید احراز هویت" }, "autofillOptions": { - "message": "Autofill options" + "message": "گزینه‌های پر کردن خودکار" }, "websiteUri": { - "message": "Website (URI)" + "message": "وب‌سایت (نشانی اینترنتی)" }, "websiteUriCount": { - "message": "Website (URI) $COUNT$", + "message": "وب‌سایت (نشانی اینترنتی) $COUNT$", "description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.", "placeholders": { "count": { @@ -278,16 +278,16 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "وب‌سایت اضافه شد" }, "addWebsite": { - "message": "Add website" + "message": "افزودن وب‌سایت" }, "deleteWebsite": { - "message": "Delete website" + "message": "حذف وب‌سایت" }, "defaultLabel": { - "message": "Default ($VALUE$)", + "message": "پیش‌فرض ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -297,7 +297,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "نمایش تطبیق سایت $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -306,7 +306,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "مخفی کردن تطبیق سایت $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -315,7 +315,7 @@ } }, "autoFillOnPageLoad": { - "message": "Autofill on page load?" + "message": "پر کردن خودکار هنگام بارگذاری صفحه؟" }, "number": { "message": "شماره" @@ -330,7 +330,7 @@ "message": "کد امنیتی (cvv)" }, "securityCodeSlashCVV": { - "message": "Security code / CVV" + "message": "کد امنیتی / CVV" }, "identityName": { "message": "نام هویت" @@ -408,10 +408,10 @@ "message": "دکتر" }, "cardExpiredTitle": { - "message": "Expired card" + "message": "تاریخ کارت منقضی شده است" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "اگر تمدید کرده‌اید، اطلاعات کارت را به‌روزرسانی کنید" }, "expirationMonth": { "message": "ماه انقضاء" @@ -423,16 +423,16 @@ "message": "کلید احراز هویت (TOTP)" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "تأیید دو مرحله‌ای را بدون دردسر کنید" }, "totpHelper": { - "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." + "message": "Bitwarden می‌تواند کدهای تأیید دو مرحله‌ای را ذخیره و پر کند. کلید را کپی کرده و در این فیلد قرار دهید." }, "totpHelperWithCapture": { - "message": "Bitwarden can store and fill 2-step verification codes. Select the camera icon to take a screenshot of this website's authenticator QR code, or copy and paste the key into this field." + "message": "Bitwarden می‌تواند کدهای تأیید دو مرحله‌ای را ذخیره و پر کند. برای اسکن کد QR احراز هویت کننده این وب‌سایت، روی آیکون دوربین کلیک کنید یا کلید را کپی کرده و در این فیلد قرار دهید." }, "learnMoreAboutAuthenticators": { - "message": "Learn more about authenticators" + "message": "درباره احراز هویت کننده‌ها بیشتر بدانید" }, "folder": { "message": "پوشه" @@ -483,7 +483,7 @@ "message": "ويرايش پوشه" }, "editWithName": { - "message": "Edit $ITEM$: $NAME$", + "message": "ویرایش $ITEM$: $NAME$", "placeholders": { "item": { "content": "$1", @@ -499,13 +499,13 @@ "message": "پوشه جدید" }, "folderName": { - "message": "Folder name" + "message": "نام پوشه" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "برای تو در تو کردن یک پوشه، نام پوشه والد را وارد کرده و سپس یک “/” اضافه کنید. مثال: Social/Forums" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "مطمئنید می‌خواهید این پوشه را برای همیشه پاک کنید؟" }, "baseDomain": { "message": "دامنه پایه", @@ -547,12 +547,6 @@ "message": "باز و بسته کردن", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "تولید کلمه عبور" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "بررسی کنید که آیا کلمه عبور افشا شده است." }, @@ -654,7 +648,7 @@ "message": "یادداشت امن" }, "typeSshKey": { - "message": "SSH key" + "message": "کلید SSH" }, "typeLoginPlural": { "message": "ورودها" @@ -1013,7 +1007,7 @@ "message": "خارج شد" }, "loggedOutDesc": { - "message": "شما از اکانت خود خارج شده‌اید." + "message": "شما از حساب خود خارج شده‌اید." }, "loginExpired": { "message": "نشست ورود شما منقضی شده است." @@ -1064,13 +1058,13 @@ "message": "با کلمه عبور اصلی وارد شوید" }, "readingPasskeyLoading": { - "message": "خواندن کلید عبور..." + "message": "در حال خواندن کلید عبور..." }, "readingPasskeyLoadingInfo": { "message": "این پنجره را باز نگه دارید و دستورهای مرورگر خود را دنبال کنید." }, "useADifferentLogInMethod": { - "message": "Use a different log in method" + "message": "از روش ورود متفاوتی استفاده کنید" }, "logInWithPasskey": { "message": "با کلید عبور وارد شوید" @@ -1082,10 +1076,10 @@ "message": "خوش آمدید" }, "invalidPasskeyPleaseTryAgain": { - "message": "Invalid Passkey. Please try again." + "message": "کلید عبور نامعتبر است. لطفاً دوباره تلاش کنید." }, "twoFactorForPasskeysNotSupportedOnClientUpdateToLogIn": { - "message": "2FA for passkeys is not supported. Update the app to log in." + "message": "احراز هویت دو مرحله‌ای برای کلیدهای عبور پشتیبانی نمی‌شود. برای ورود، برنامه را به‌روزرسانی کنید." }, "loginWithPasskeyInfo": { "message": "از یک کلمه عبور ایجاد شده استفاده کنید که به طور خودکار بدون کلمه عبور شما را وارد می‌کند. بیومتریک‌ها، مانند تشخیص چهره یا اثر انگشت، یا سایر روش‌های امنیتی FIDO2 هویت شما را تأیید می‌کنند." @@ -1115,22 +1109,22 @@ "message": "کلید عبور خود را برای کمک به شناسایی آن نام ببرید." }, "useForVaultEncryption": { - "message": "Use for vault encryption" + "message": "برای رمزگذاری گاوصندوق استفاده شود" }, "useForVaultEncryptionInfo": { - "message": "Log in and unlock on supported devices without your master password. Follow the prompts from your browser to finalize setup." + "message": "بدون نیاز به کلمه عبور اصلی، در دستگاه‌های پشتیبانی‌شده وارد شوید و قفل را باز کنید. برای تکمیل تنظیمات، دستورالعمل‌های مرورگر خود را دنبال کنید." }, "useForVaultEncryptionErrorReadingPasskey": { - "message": "Error reading passkey. Try again or uncheck this option." + "message": "خطا در خواندن کلید عبور. دوباره تلاش کنید یا این گزینه را غیرفعال کنید." }, "encryptionNotSupported": { "message": "رمزگذاری پشتیبانی نمی‌شود" }, "enablePasskeyEncryption": { - "message": "Set up encryption" + "message": "راه‌اندازی رمزگذاری" }, "usedForEncryption": { - "message": "Used for encryption" + "message": "برای رمزنگاری استفاده شد" }, "loginWithPasskeyEnabled": { "message": "با فعال بودن کلید ورود وارد شوید" @@ -1187,7 +1181,7 @@ "message": "کدی را که به ایمیل شما ارسال شده وارد کنید" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "کد سامانه تأیید کننده را وارد نمایید" + "message": "کد را از برنامه احراز هویت خود وارد کنید" }, "pressYourYubiKeyToAuthenticate": { "message": "برای احراز هویت، کلید YubiKey خود را فشار دهید" @@ -1199,25 +1193,25 @@ "message": "نشست احراز هویت منقضی شد. لطفاً فرایند ورود را دوباره شروع کنید." }, "verifyYourIdentity": { - "message": "Verify your Identity" + "message": "هویت خود را تأیید کنید" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "ما این دستگاه را نمی‌شناسیم. برای تأیید هویت خود، کدی را که به ایمیلتان ارسال شده وارد کنید." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "ادامه ورود" }, "whatIsADevice": { - "message": "What is a device?" + "message": "دستگاه چیست؟" }, "aDeviceIs": { - "message": "A device is a unique installation of the Bitwarden app where you have logged in. Reinstalling, clearing app data, or clearing your cookies could result in a device appearing multiple times." + "message": "دستگاه، یک نصب منحصربه‌فرد از اپلیکیشن Bitwarden است که در آن وارد حساب کاربری خود شده‌اید. نصب مجدد، پاک کردن داده‌های برنامه یا پاک کردن کوکی‌ها ممکن است باعث شود یک دستگاه چند بار ظاهر شود." }, "logInInitiated": { "message": "ورود به سیستم آغاز شد" }, "logInRequestSent": { - "message": "Request sent" + "message": "درخواست ارسال شد" }, "submit": { "message": "ثبت" @@ -1250,13 +1244,13 @@ "message": "یادآور کلمه عبور اصلی (اختیاری)" }, "newMasterPassHint": { - "message": "New master password hint (optional)" + "message": "راهنمای کلمه عبور اصلی جدید (اختیاری)" }, "masterPassHintLabel": { "message": "یادآور کلمه عبور اصلی" }, "masterPassHintText": { - "message": "If you forget your password, the password hint can be sent to your email. $CURRENT$/$MAXIMUM$ character maximum.", + "message": "اگر کلمه عبور خود را فراموش کنید، یادآور کلمه عبور می‌تواند به ایمیل شما ارسال شود. حداکثر $CURRENT$/$MAXIMUM$ کاراکتر.", "placeholders": { "current": { "content": "$1", @@ -1272,16 +1266,16 @@ "message": "تنظیمات" }, "accountEmail": { - "message": "Account email" + "message": "حساب ایمیل" }, "requestHint": { - "message": "Request hint" + "message": "درخواست راهنمایی" }, "requestPasswordHint": { - "message": "Request password hint" + "message": "درخواست یادآور کلمه عبور" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Enter your account email address and your password hint will be sent to you" + "message": "نشانی ایمیل حساب کاربری خود را وارد کنید تا راهنمای کلمه عبور برای شما ارسال شود" }, "getMasterPasswordHint": { "message": "دریافت یادآور کلمه عبور اصلی" @@ -1315,10 +1309,10 @@ "message": "حساب کاربری جدید شما ساخته شد! حالا می‌توانید وارد شوید." }, "newAccountCreated2": { - "message": "Your new account has been created!" + "message": "حساب کاربری جدید شما ایجاد شده است!" }, "youHaveBeenLoggedIn": { - "message": "You have been logged in!" + "message": "شما با موفقیت وارد شدید!" }, "trialAccountCreated": { "message": "حساب کاربری با موفقیت ساخته شد." @@ -1336,10 +1330,10 @@ "message": "نشانی ایمیل" }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "گاوصندوق‌تان قفل شد" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "حساب کاربری شما قفل شده است" }, "uuid": { "message": "UUID" @@ -1376,7 +1370,7 @@ "message": "شما اجازه مشاهده همه موارد در این مجموعه را ندارید." }, "youDoNotHavePermissions": { - "message": "You do not have permissions to this collection" + "message": "شما اجازه دسترسی به این مجموعه را ندارید" }, "noCollectionsInList": { "message": "هیچ مجموعه ای برای لیست کردن وجود ندارد." @@ -1403,13 +1397,13 @@ "message": "یک اعلان به دستگاه شما ارسال شده است." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the " + "message": "قفل Bitwarden را روی دستگاه خود باز کنید یا روی " }, "areYouTryingToAccessYourAccount": { - "message": "Are you trying to access your account?" + "message": "آیا در تلاش برای دسترسی به حساب کاربری خود هستید؟" }, "accessAttemptBy": { - "message": "Access attempt by $EMAIL$", + "message": "تلاش برای دسترسی به سیستم توسط $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -1418,22 +1412,22 @@ } }, "confirmAccess": { - "message": "Confirm access" + "message": "تأیید دسترسی" }, "denyAccess": { - "message": "Deny access" + "message": "دسترسی را رد کن" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "برنامه وب" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "اطمینان حاصل کنید که عبارت اثر انگشت با عبارت زیر مطابقت دارد قبل از تأیید." }, "notificationSentDeviceComplete": { - "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving." + "message": "Bitwarden را در دستگاه خود باز کنید. پیش از تأیید، اطمینان حاصل کنید که عبارت اثر انگشت با عبارت زیر مطابقت دارد." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "یک اعلان به دستگاه شما ارسال شده است" }, "versionNumber": { "message": "نسخه $VERSION_NUMBER$", @@ -1454,14 +1448,14 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "در این دستگاه به مدت ۳۰ روز دوباره نپرس" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "انتخاب روش دیگر", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "از کد بازیابی‌تان استفاده کنید" }, "insertU2f": { "message": "کلید امنیتی خود را وارد پورت USB رایانه کنید، اگر دکمه ای دارد آن را بفشارید." @@ -1479,7 +1473,7 @@ "message": "گزینه‌های ورود دو مرحله‌ای" }, "selectTwoStepLoginMethod": { - "message": "Select two-step login method" + "message": "انتخاب ورود دو مرحله‌ای" }, "recoveryCodeDesc": { "message": "دسترسی به تمامی ارائه‌دهندگان دو مرحله‌ای را از دست داده‌اید؟ از کد بازیابی خود برای غیرفعال‌سازی ارائه‌دهندگان دو مرحله‌ای از حسابتان استفاده کنید." @@ -1491,17 +1485,17 @@ "message": "برنامه احراز هویت" }, "authenticatorAppDescV2": { - "message": "Enter a code generated by an authenticator app like Bitwarden Authenticator.", + "message": "کدی را وارد کنید که توسط یک برنامه احراز هویت مانند Bitwarden Authenticator تولید شده است.", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "Yubico OTP security key" + "message": "کلید امنیت Yubico OTP" }, "yubiKeyDesc": { "message": "از یک YubiKey برای دسترسی به حسابتان استفاده کنید. با دستگاه های YubiKey سری 4، سری 5 و NEO کار می‌کند." }, "duoDescV2": { - "message": "Enter a code generated by Duo Security.", + "message": "کدی را وارد کنید که توسط Duo Security تولید شده است.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { @@ -1515,22 +1509,22 @@ "message": "کلید امنیتی FIDO U2F" }, "webAuthnTitle": { - "message": "FIDO2 WebAuthn" + "message": "کلید عبور" }, "webAuthnDesc": { - "message": "برای دسترسی به حساب خود از هر کلید امنیتی فعال شده WebAuthn استفاده کنید." + "message": "برای دسترسی به حساب کاربری خود از هر کلید امنیتی فعال شده WebAuthn استفاده کنید." }, "webAuthnMigrated": { "message": "(مهاجرت از FIDO)" }, "openInNewTab": { - "message": "Open in new tab" + "message": "گشودن در زبانهٔ جدید" }, "emailTitle": { "message": "ایمیل" }, "emailDescV2": { - "message": "Enter a code sent to your email." + "message": "کدی را که به ایمیل شما ارسال شده وارد کنید." }, "continue": { "message": "ادامه" @@ -1569,7 +1563,7 @@ "message": "آیا اطمینان دارید که می‌خواهید ادامه دهید؟" }, "moveSelectedItemsDesc": { - "message": "Choose a folder that you would like to add the $COUNT$ selected item(s) to.", + "message": "پوشه ای را انتخاب کنید که می‌خواهید $COUNT$ مورد انتخاب شده را به آن اضافه کنید.", "placeholders": { "count": { "content": "$1", @@ -1587,10 +1581,10 @@ "message": "کپی UUID" }, "errorRefreshingAccessToken": { - "message": "Access Token Refresh Error" + "message": "خطای به‌روزرسانی توکن دسترسی" }, "errorRefreshingAccessTokenDesc": { - "message": "No refresh token or API keys found. Please try logging out and logging back in." + "message": "هیچ توکن به‌روزرسانی یا کلید API یافت نشد. لطفاً از حساب کاربری خود خارج شده و دوباره وارد شوید." }, "warning": { "message": "هشدار" @@ -1617,7 +1611,7 @@ "message": "برون ریزی" }, "exportFrom": { - "message": "Export from" + "message": "برون ریزی از" }, "exportVault": { "message": "برون ریزی گاوصندوق" @@ -1691,14 +1685,14 @@ "description": "deprecated. Use avoidAmbiguous instead." }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "از کاراکترهای مبهم خودداری کن", "description": "Label for the avoid ambiguous characters checkbox." }, "length": { "message": "طول" }, "passwordMinLength": { - "message": "Minimum password length" + "message": "حداقل طول کلمه عبور" }, "uppercase": { "message": "حروف بزرگ (A-Z)", @@ -1729,7 +1723,7 @@ "message": "شامل عدد" }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "نیازمندی‌های سیاست سازمانی بر گزینه‌های تولید کننده شما اعمال شده‌اند.", "description": "Indicates that a policy limits the credential generator screen." }, "passwordHistory": { @@ -1876,31 +1870,31 @@ "message": "ادامه دادن همچنین شما را از نشست فعلی خود خارج می‌کند و باید دوباره وارد سیستم شوید. در صورت راه اندازی مجدداً از شما خواسته می‌شود تا دوباره به سیستم دو مرحله ای بپردازید. جلسات فعال در دستگاه‌های دیگر ممکن است تا یک ساعت فعال بمانند." }, "newDeviceLoginProtection": { - "message": "New device login" + "message": "ورود از دستگاه جدید" }, "turnOffNewDeviceLoginProtection": { - "message": "Turn off new device login protection" + "message": "محافظت از ورود دستگاه جدید را غیرفعال کنید" }, "turnOnNewDeviceLoginProtection": { - "message": "Turn on new device login protection" + "message": "محافظت از ورود دستگاه جدید را فعال کنید" }, "turnOffNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device." + "message": "برای غیرفعال‌سازی ایمیل‌های تأییدیه‌ای که Bitwarden هنگام ورود از دستگاه جدید ارسال می‌کند، از بخش زیر ادامه دهید." }, "turnOnNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to have bitwarden send you verification emails when you login from a new device." + "message": "برای فعال‌سازی ارسال ایمیل‌های تأیید هنگام ورود از دستگاه جدید توسط Bitwarden، از بخش زیر ادامه دهید." }, "turnOffNewDeviceLoginProtectionWarning": { - "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login." + "message": "با غیرفعال بودن محافظت از ورود دستگاه جدید، هر کسی که کلمه عبور اصلی شما را داشته باشد می‌تواند از هر دستگاهی به حسابتان دسترسی پیدا کند. برای محافظت از حساب کاربری بدون استفاده از ایمیل‌های تأیید، ورود دو مرحله‌ای را فعال کنید." }, "accountNewDeviceLoginProtectionSaved": { - "message": "New device login protection changes saved" + "message": "تغییرات مربوط به محافظت ورود دستگاه جدید ذخیره شد" }, "sessionsDeauthorized": { "message": "همه نشست‌ها غیرمجاز است" }, "accountIsOwnedMessage": { - "message": "This account is owned by $ORGANIZATIONNAME$", + "message": "این حساب کاربری متعلق به $ORGANIZATIONNAME$ است", "placeholders": { "organizationName": { "content": "$1", @@ -1945,7 +1939,7 @@ "message": "حساب شما بسته شد و تمام داده های مرتبط حذف شده است." }, "deleteOrganizationWarning": { - "message": "Deleting your organization is permanent. It cannot be undone." + "message": "حذف سازمان شما دائمی است و قابل بازگشت نیست." }, "myAccount": { "message": "حساب من" @@ -1957,7 +1951,7 @@ "message": "درون ریزی داده" }, "onboardingImportDataDetailsPartOne": { - "message": "If you don't have any data to import, you can create a ", + "message": "اگر داده‌ای برای وارد کردن ندارید، می‌توانید یک ", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)" }, "onboardingImportDataDetailsLink": { @@ -1969,11 +1963,11 @@ "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new login instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)" }, "onboardingImportDataDetailsPartTwoNoOrgs": { - "message": " instead.", + "message": " به جای آن ایجاد کنید.", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead." }, "onboardingImportDataDetailsPartTwoWithOrgs": { - "message": " instead. You may need to wait until your administrator confirms your organization membership.", + "message": " به جای آن. ممکن است لازم باشد تا مدیر شما عضویت‌تان در سازمان را تأیید کند.", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. You may need to wait until your administrator confirms your organization membership." }, "importError": { @@ -2160,7 +2154,7 @@ "message": "راه‌اندازی ورود دو مرحله‌ای می‌تواند برای همیشه حساب Bitwarden شما را قفل کند. یک کد بازیابی به شما امکان می‌دهد در صورتی که دیگر نمی‌توانید از ارائه‌دهنده‌ی ورود دو مرحله‌ای معمولی خود استفاده کنید (به عنوان مثال: دستگاه خود را گم می‌کنید) به حساب خود دسترسی پیدا کنید. اگر دسترسی به حساب خود را از دست بدهید، پشتیبانی Bitwarden نمی‌تواند به شما کمک کند. توصیه می‌کنیم کد بازیابی را یادداشت یا چاپ کنید و آن را در مکانی امن نگهداری کنید." }, "yourSingleUseRecoveryCode": { - "message": "Your single-use recovery code can be used to turn off two-step login in the event that you lose access to your two-step login provider. Bitwarden recommends you write down the recovery code and keep it in a safe place." + "message": "کد بازیابی یک‌بار مصرف شما می‌تواند در صورت از دست دادن دسترسی به سرویس ورود دو مرحله‌ای، برای غیرفعال کردن آن استفاده شود. Bitwarden توصیه می‌کند این کد را یادداشت کرده و در جای امنی نگهداری کنید." }, "viewRecoveryCode": { "message": "نمایش کد بازیابی" @@ -2207,13 +2201,13 @@ "message": "مشاهده موارد" }, "viewItemsHidePass": { - "message": "View items, hidden passwords" + "message": "مشاهده موارد، کلمه عبور مخفی" }, "editItems": { "message": "ویرایش موارد" }, "editItemsHidePass": { - "message": "Edit items, hidden passwords" + "message": "ویرایش موارد، کلمه عبور مخفی" }, "disable": { "message": "خاموش کردن" @@ -2231,10 +2225,10 @@ "message": "کلمه عبور اصلی خود را برای تغییر تنظیمات ورود به سیستم دو مرحله ای وارد کنید." }, "twoStepAuthenticatorInstructionPrefix": { - "message": "Download an authenticator app such as" + "message": "یک برنامه احراز هویت بارگیری کنید مانند" }, "twoStepAuthenticatorInstructionInfix1": { - "message": "," + "message": "،" }, "twoStepAuthenticatorInstructionInfix2": { "message": "یا" @@ -2243,7 +2237,7 @@ "message": "." }, "continueToExternalUrlTitle": { - "message": "Continue to $URL$?", + "message": "ادامه به $URL$؟", "placeholders": { "url": { "content": "$1", @@ -2252,7 +2246,7 @@ } }, "continueToExternalUrlDesc": { - "message": "You are leaving Bitwarden and launching an external website in a new window." + "message": "شما در حال ترک Bitwarden و باز کردن یک وب‌سایت خارجی در پنجره جدید هستید." }, "twoStepContinueToBitwardenUrlTitle": { "message": "به bitwarden.com ادامه می‌دهید؟" @@ -2261,10 +2255,10 @@ "message": "احراز هویت کننده Bitwarden به شما امکان می‌دهد کلیدهای احراز هویت را ذخیره کرده و کدهای TOTP را برای فرآیندهای تأیید دومرحله‌ای تولید کنید. برای اطلاعات بیشتر به وب‌سایت bitwarden.com مراجعه کنید." }, "twoStepAuthenticatorScanCodeV2": { - "message": "Scan the QR code below with your authenticator app or enter the key." + "message": "کد QR زیر را با برنامه احراز هویت خود اسکن کنید یا کلید را وارد کنید." }, "twoStepAuthenticatorQRCanvasError": { - "message": "Could not load QR code. Try again or use the key below." + "message": "بارگذاری کد QR امکان‌پذیر نیست. دوباره تلاش کنید یا از کلید زیر استفاده کنید." }, "key": { "message": "کلید" @@ -2354,7 +2348,7 @@ "message": "شناسه کاربر" }, "twoFactorDuoClientSecret": { - "message": "Client Secret" + "message": "رمز مخفی مشتری" }, "twoFactorDuoApiHostname": { "message": "نام میزبان API" @@ -2414,7 +2408,7 @@ "message": "مشکلی در خواندن کلید امنیتی وجود داشت. دوباره امتحان کنید." }, "twoFactorWebAuthnWarning1": { - "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used." + "message": "به‌دلیل محدودیت‌های پلتفرم، WebAuthn در تمام برنامه‌های Bitwarden قابل استفاده نیست. بهتر است یک روش ورود دو مرحله‌ای دیگر نیز تنظیم کنید تا در مواقعی که WebAuthn قابل استفاده نیست، بتوانید به حساب کاربرب خود دسترسی داشته باشید." }, "twoFactorRecoveryYourCode": { "message": "کد بازیابی ورود دو مرحله ای Bitwarden شما" @@ -2447,7 +2441,7 @@ "message": "وب‌سایت های نا امن پیدا شد" }, "unsecuredWebsitesFoundReportDesc": { - "message": "We found $COUNT$ items in your $VAULT$ with unsecured URIs. You should change their URI scheme to https:// if the website allows it.", + "message": "ما $COUNT$ مورد در $VAULT$ شما یافتیم که نشانی اینترنتی آن‌ها نا امن است. در صورت امکان، باید طرح نشانی اینترنتی آن‌ها را به https:// تغییر دهید.", "placeholders": { "count": { "content": "$1", @@ -2472,7 +2466,7 @@ "message": "ورود‌های بدون ورود دو مرحله ای یافت شد" }, "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": "ما $COUNT$ وب‌سایت در $VAULT$ شما یافتیم که ممکن است ورود دو مرحله‌ای برای آن‌ها فعال نباشد (بر اساس اطلاعات 2fa.directory). برای محافظت بیشتر از این حساب‌ها، بهتر است ورود دو مرحله‌ای را فعال کنید.", "placeholders": { "count": { "content": "$1", @@ -2500,7 +2494,7 @@ "message": "کلمه‌های عبور افشا شده یافت شد" }, "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": "ما $COUNT$ مورد در $VAULT$ شما یافتیم که کلمات عبور آن‌ها در رخنه‌های داده‌ای شناخته‌شده افشا شده‌اند. شما باید این کلمات عبور را به کلمات عبور جدیدی تغییر دهید.", "placeholders": { "count": { "content": "$1", @@ -2519,7 +2513,7 @@ "message": "کلمه‌های عبور افشا شده را بررسی کنید" }, "timesExposed": { - "message": "Times exposed" + "message": "تعداد دفعات افشا" }, "exposedXTimes": { "message": "$COUNT$ بار در معرض نمایش قرار گرفت", @@ -2540,7 +2534,7 @@ "message": "کلمه‌های عبور ضعیف پیدا شد" }, "weakPasswordsFoundReportDesc": { - "message": "We found $COUNT$ items in your $VAULT$ with passwords that are not strong. You should update them to use stronger passwords.", + "message": "ما $COUNT$ مورد در $VAULT$ شما یافتیم که کلمات عبور آن‌ها قوی نیستند. بهتر است آن‌ها را با کلمات عبور قوی‌تری به‌روزرسانی کنید.", "placeholders": { "count": { "content": "$1", @@ -2556,7 +2550,7 @@ "message": "هیچ موردی در گاوصندوق شما کلمه‌ی عبور ضعیفی ندارد." }, "weakness": { - "message": "Weakness" + "message": "ضعف" }, "reusedPasswordsReport": { "message": "کلمه‌های عبور مجدد استفاده شده" @@ -2568,7 +2562,7 @@ "message": "کلمه‌های عبور مجدد استفاده شده یافت شد" }, "reusedPasswordsFoundReportDesc": { - "message": "We found $COUNT$ passwords that are being reused in your $VAULT$. You should change them to a unique value.", + "message": "ما $COUNT$ کلمه عبور در $VAULT$ شما یافتیم که به‌صورت تکراری استفاده شده‌اند. بهتر است آن‌ها را به مقادیر منحصربه‌فردی تغییر دهید.", "placeholders": { "count": { "content": "$1", @@ -2584,7 +2578,7 @@ "message": "هیچ ورودی در گاوصندوق شما کلمه عبوری ندارد که مجدداً مورد استفاده قرار می‌گیرد." }, "timesReused": { - "message": "Times reused" + "message": "تعداد دفعات استفاده مجدد" }, "reusedXTimes": { "message": "$COUNT$ بار دوباره استفاده شد", @@ -2745,7 +2739,7 @@ "message": "طرح خانواده Bitwarden." }, "addons": { - "message": "افزودنی ها" + "message": "افزونه‌ها" }, "premiumAccess": { "message": "دسترسی پرمیوم" @@ -2884,7 +2878,7 @@ "message": "دانلود مجوز" }, "viewBillingToken": { - "message": "View Billing Token" + "message": "مشاهده توکن صورتحساب" }, "updateLicense": { "message": "به‌روزرسانی مجوز" @@ -2933,10 +2927,10 @@ "message": "صورت حساب‌ها" }, "noUnpaidInvoices": { - "message": "No unpaid invoices." + "message": "هیچ صورتحساب پرداخت‌نشده‌ای وجود ندارد." }, "noPaidInvoices": { - "message": "No paid invoices." + "message": "هیچ صورتحساب پرداخت‌شده‌ای وجود ندارد." }, "paid": { "message": "پرداخت شد", @@ -2995,7 +2989,7 @@ "message": "با پشتیبانی مشتری تماس بگیرید" }, "contactSupportShort": { - "message": "Contact Support" + "message": "تماس با پشتیبانی" }, "updatedPaymentMethod": { "message": "روش پرداخت به‌روز شده." @@ -3099,7 +3093,7 @@ "message": "برای مشاغل و سایر سازمان های تیمی." }, "planNameTeamsStarter": { - "message": "Teams Starter" + "message": "طرح ابتدایی تیم‌ها" }, "planNameEnterprise": { "message": "سازمانی" @@ -3174,7 +3168,7 @@ } }, "onPremHostingOptional": { - "message": "میزبانی داخلی (اختیاری)" + "message": "میزبانی در محل (اختیاری)" }, "usersGetPremium": { "message": "کاربران به ویژگی‌های پرمیوم دسترسی پیدا می‌کنند" @@ -3213,7 +3207,7 @@ } }, "trialSecretsManagerThankYou": { - "message": "Thanks for signing up for Bitwarden Secrets Manager for $PLAN$!", + "message": "از ثبت‌نام شما برای بتا مدیر اسرار Bitwarden در طرح $PLAN$ سپاسگزاریم!", "placeholders": { "plan": { "content": "$1", @@ -3333,10 +3327,10 @@ "message": "شناسه خارجی می‌تواند به عنوان یک مرجع یا برای پیوند دادن این منبع به یک سیستم خارجی مانند فهرست کاربری استفاده شود." }, "ssoExternalId": { - "message": "SSO External ID" + "message": "شناسه خارجی SSO" }, "ssoExternalIdDesc": { - "message": "SSO External ID is an unencrypted reference between Bitwarden and your configured SSO provider." + "message": "شناسه خارجی SSO یک مرجع بدون رمزگذاری بین Bitwarden و ارائه‌دهنده SSO تنظیم‌شده شما است." }, "nestCollectionUnder": { "message": "مجموعه لانه زیر" @@ -3387,10 +3381,10 @@ } }, "inviteSingleEmailDesc": { - "message": "You have 1 invite remaining." + "message": "شما یک دعوت‌نامه باقی‌مانده دارید." }, "inviteZeroEmailDesc": { - "message": "You have 0 invites remaining." + "message": "شما هیچ دعوت‌نامه باقی‌مانده‌ای ندارید." }, "userUsingTwoStep": { "message": "این کاربر از ورود دو مرحله ای برای محافظت از حساب خود استفاده می‌کند." @@ -3432,10 +3426,10 @@ "message": "همه" }, "addAccess": { - "message": "Add Access" + "message": "افزودن دسترسی" }, "addAccessFilter": { - "message": "Add Access Filter" + "message": "افزودن فیلتر دسترسی" }, "refresh": { "message": "تازه کردن" @@ -3504,10 +3498,10 @@ "message": "کد اشتباه" }, "incorrectPin": { - "message": "Incorrect PIN" + "message": "کد پین نادرست است" }, "pin": { - "message": "PIN", + "message": "پین", "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." }, "exportedVault": { @@ -3556,7 +3550,7 @@ } }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "مشاهده همه گزینه‌های ورود به سیستم" }, "viewAllLoginOptions": { "message": "مشاهده همه گزینه‌های ورود به سیستم" @@ -3844,7 +3838,7 @@ } }, "unlinkedSso": { - "message": "Unlinked SSO." + "message": "SSO جدا شده است." }, "unlinkedSsoUser": { "message": "SSO برای کاربر $ID$ پیوند نخورده است.", @@ -3895,22 +3889,22 @@ "message": "دستگاه" }, "loginStatus": { - "message": "Login status" + "message": "وضیعت ورود" }, "firstLogin": { - "message": "First login" + "message": "اولین ورود" }, "trusted": { - "message": "Trusted" + "message": "مورد اعتماد" }, "needsApproval": { - "message": "Needs approval" + "message": "نیاز به تأیید دارد" }, "areYouTryingtoLogin": { - "message": "Are you trying to log in?" + "message": "آیا در تلاش برای ورود به سیستم هستید؟" }, "logInAttemptBy": { - "message": "Login attempt by $EMAIL$", + "message": "تلاش برای ورود به سیستم توسط $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -3919,22 +3913,22 @@ } }, "deviceType": { - "message": "Device Type" + "message": "نوع دستگاه" }, "ipAddress": { - "message": "IP Address" + "message": "نشانی IP" }, "confirmLogIn": { - "message": "Confirm login" + "message": "تأیید ورود" }, "denyLogIn": { - "message": "Deny login" + "message": "رد ورود" }, "thisRequestIsNoLongerValid": { - "message": "This request is no longer valid." + "message": "این درخواست دیگر معتبر نیست." }, "logInConfirmedForEmailOnDevice": { - "message": "Login confirmed for $EMAIL$ on $DEVICE$", + "message": "ورود به سیستم برای $EMAIL$ در $DEVICE$ تأیید شد", "placeholders": { "email": { "content": "$1", @@ -3947,16 +3941,16 @@ } }, "youDeniedALogInAttemptFromAnotherDevice": { - "message": "You denied a login attempt from another device. If this really was you, try to log in with the device again." + "message": "شما تلاش برای ورود به سیستم از دستگاه دیگری را رد کردید. اگر واقعاً این شما بودید، سعی کنید دوباره با دستگاه وارد شوید." }, "loginRequestHasAlreadyExpired": { - "message": "Login request has already expired." + "message": "درخواست ورود قبلاً منقضی شده است." }, "justNow": { - "message": "Just now" + "message": "همین الان" }, "requestedXMinutesAgo": { - "message": "Requested $MINUTES$ minutes ago", + "message": "$MINUTES$ دقیقه قبل درخواست شد", "placeholders": { "minutes": { "content": "$1", @@ -3965,25 +3959,25 @@ } }, "creatingAccountOn": { - "message": "Creating account on" + "message": "در حال ساخت حساب کاربری روی" }, "checkYourEmail": { - "message": "Check your email" + "message": "ایمیل خود را چک کنید" }, "followTheLinkInTheEmailSentTo": { - "message": "Follow the link in the email sent to" + "message": "دنبال کنید لینکی را که در ایمیل فرستاده شده به" }, "andContinueCreatingYourAccount": { - "message": "and continue creating your account." + "message": "و به ساختن حساب‌تان ادامه دهید." }, "noEmail": { - "message": "No email?" + "message": "ایمیلی دریافت نکردید؟" }, "goBack": { - "message": "Go back" + "message": "بازگشت به عقب" }, "toEditYourEmailAddress": { - "message": "to edit your email address." + "message": "برای ویرایش آدرس ایمیل خود." }, "view": { "message": "مشاهده" @@ -4067,7 +4061,7 @@ "message": "ایمیل حساب تأیید شد" }, "emailVerifiedV2": { - "message": "Email verified" + "message": "ایمیل تأیید شد" }, "emailVerifiedFailed": { "message": "تأیید ایمیل شما امکان پذیر نیست. سعی کنید یک ایمیل تأیید جدید ارسال کنید." @@ -4082,19 +4076,19 @@ "message": "به‌روزرسانی مرورگر" }, "generatingYourRiskInsights": { - "message": "Generating your Risk Insights..." + "message": "در حال تولید تحلیل‌های ریسک شما..." }, "updateBrowserDesc": { "message": "شما از یک مرورگر وب پشتیبانی نشده استفاده می‌کنید. گاوصندوق وب ممکن است به درستی کار نکند." }, "youHaveAPendingLoginRequest": { - "message": "You have a pending login request from another device." + "message": "شما یک درخواست ورود در انتظار از دستگاه دیگری دارید." }, "reviewLoginRequest": { - "message": "Review login request" + "message": "بررسی درخواست ورود" }, "freeTrialEndPromptCount": { - "message": "Your free trial ends in $COUNT$ days.", + "message": "دوره آزمایشی رایگان شما در $COUNT$ روز به پایان می‌رسد.", "placeholders": { "count": { "content": "$1", @@ -4103,7 +4097,7 @@ } }, "freeTrialEndPromptMultipleDays": { - "message": "$ORGANIZATION$, your free trial ends in $COUNT$ days.", + "message": "$ORGANIZATION$، دوره آزمایشی رایگان شما در $COUNT$ روز به پایان می‌رسد.", "placeholders": { "count": { "content": "$2", @@ -4116,7 +4110,7 @@ } }, "freeTrialEndPromptTomorrow": { - "message": "$ORGANIZATION$, your free trial ends tomorrow.", + "message": "$ORGANIZATION$، دوره آزمایشی رایگان شما فردا به پایان می‌رسد.", "placeholders": { "organization": { "content": "$1", @@ -4125,10 +4119,10 @@ } }, "freeTrialEndPromptTomorrowNoOrgName": { - "message": "Your free trial ends tomorrow." + "message": "دوره آزمایشی رایگان شما فردا به پایان می‌رسد." }, "freeTrialEndPromptToday": { - "message": "$ORGANIZATION$, your free trial ends today.", + "message": "$ORGANIZATION$، دوره آزمایشی رایگان شما امروز به پایان می‌رسد.", "placeholders": { "organization": { "content": "$1", @@ -4137,16 +4131,16 @@ } }, "freeTrialEndingTodayWithoutOrgName": { - "message": "Your free trial ends today." + "message": "دوره آزمایشی رایگان شما امروز به پایان می‌رسد." }, "clickHereToAddPaymentMethod": { - "message": "Click here to add a payment method." + "message": "برای افزودن روش پرداخت، اینجا کلیک کنید." }, "joinOrganization": { "message": "به سازمان بپیوندید" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "به $ORGANIZATIONNAME$ بپیوندید", "placeholders": { "organizationName": { "content": "$1", @@ -4158,7 +4152,7 @@ "message": "شما برای پیوستن به سازمان فهرست شده در بالا دعوت شده اید. برای پذیرش دعوت، باید وارد شوید یا یک حساب کاربری جدید در Bitwarden ایجاد کنید." }, "finishJoiningThisOrganizationBySettingAMasterPassword": { - "message": "Finish joining this organization by setting a master password." + "message": "با تعیین یک کلمه عبور اصلی، عضویت خود در این سازمان را کامل کنید." }, "inviteAccepted": { "message": "دعوتنامه پذیرفته شد" @@ -4188,7 +4182,7 @@ "message": "اگر نمی‌توانید از طریق روش‌های ورود دو مرحله‌ای معمولی به حساب خود دسترسی پیدا کنید، می‌توانید از کد بازیابی ورود به سیستم دو مرحله‌ای خود برای خاموش کردن همه ارائه‌دهندگان دو مرحله‌ای در حساب خود استفاده کنید." }, "logInBelowUsingYourSingleUseRecoveryCode": { - "message": "Log in below using your single-use recovery code. This will turn off all two-step providers on your account." + "message": "برای ورود، از کد بازیابی یک‌بار مصرف خود استفاده کنید. این کار تمام روش‌های ورود دو مرحله‌ای حساب کاربری شما را غیرفعال می‌کند." }, "recoverAccountTwoStep": { "message": "بازیابی حساب ورود دو مرحله ای" @@ -4209,7 +4203,7 @@ "message": "شما درخواست کرده اید که حساب Bitwarden خود را حذف کنید. برای تأیید از دکمه زیر استفاده کنید." }, "deleteRecoverOrgConfirmDesc": { - "message": "You have requested to delete your Bitwarden organization." + "message": "شما درخواست حذف سازمان Bitwarden خود را داده‌اید." }, "myOrganization": { "message": "سازمان من" @@ -4338,7 +4332,7 @@ "message": "برای اشتراک خود محدودیت جایگاه تعیین کنید. پس از رسیدن به این محدودیت، نمی‌توانید اعضای جدید را دعوت کنید." }, "limitSmSubscriptionDesc": { - "message": "برای اشتراک خود مدیر اسرار محدودیت جایگاه تعیین کنید. پس از رسیدن به این محدودیت، نمی‌توانید اعضای جدید را دعوت کنید." + "message": "برای اشتراک مدیر اسرار خود، محدودیت تعداد تعیین کنید. پس از رسیدن به این حد، قادر به دعوت اعضای جدید نخواهید بود." }, "maxSeatLimit": { "message": "محدودیت جایگاه (اختیاری)", @@ -4377,7 +4371,7 @@ "message": "اشتراک به‌روز شد" }, "subscribedToSecretsManager": { - "message": "Subscription updated. You now have access to Secrets Manager." + "message": "اشتراک به‌روزرسانی شد. اکنون به مدیر اسرار دسترسی دارید." }, "additionalOptions": { "message": "گزینه‌های اضافی" @@ -4389,10 +4383,10 @@ "message": "تنظیمات اشتراک شما منجر به تغییرات نسبتاً زیادی در مجموع صورتحساب شما می‌شود. اگر عضو‌هایی که به تازگی دعوت شده‌اند بیشتر از جایگاه‌های اشتراک شما باشند، بلافاصله هزینه‌ای متناسب برای عضو‌هایی اضافی دریافت خواهید کرد." }, "smStandaloneTrialSeatCountUpdateMessageFragment1": { - "message": "If you want to add additional" + "message": "اگر می‌خواهید موارد بیشتری اضافه کنید" }, "smStandaloneTrialSeatCountUpdateMessageFragment2": { - "message": "seats without the bundled offer, please contact" + "message": "برای صندلی‌های بدون پیشنهاد بسته‌ای، لطفا تماس بگیرید" }, "subscriptionUserSeatsLimitedAutoscale": { "message": "تنظیمات اشتراک شما منجر به تغییرات نسبتاً زیادی در مجموع صورتحساب شما می‌شود. اگر اعضای تازه دعوت شده از جایگاه‌های اشتراک شما بیشتر شوند، بلافاصله هزینه‌ای متناسب برای اعضای اضافی دریافت می‌کنید تا زمانی که به محدودیت جایگاه $MAX$ شما برسند.", @@ -4404,7 +4398,7 @@ } }, "subscriptionUserSeatsWithoutAdditionalSeatsOption": { - "message": "You can invite up to $COUNT$ members for no additional charge. Contact Customer Support to upgrade your plan and invite more members.", + "message": "شما می‌توانید تا سقف $COUNT$ عضو را بدون هزینه اضافی دعوت کنید. برای ارتقاء طرح خود و دعوت از اعضای بیشتر، با پشتیبانی مشتریان تماس بگیرید.", "placeholders": { "count": { "content": "$1", @@ -4422,7 +4416,7 @@ } }, "subscriptionUpgrade": { - "message": "You cannot invite more than $COUNT$ members without upgrading your plan.", + "message": "بدون ارتقای طرح خود نمی‌توانید بیش از $COUNT$ عضو دعوت کنید.", "placeholders": { "count": { "content": "$1", @@ -4449,7 +4443,7 @@ } }, "subscriptionSeatMaxReached": { - "message": "You cannot invite more than $COUNT$ members without increasing your subscription seats.", + "message": "شما نمی‌توانید بیش از $COUNT$ عضو دعوت کنید مگر اینکه تعداد صندلی‌های اشتراک خود را افزایش دهید.", "placeholders": { "count": { "content": "$1", @@ -4479,10 +4473,10 @@ } }, "encryptionKeyUpdateCannotProceed": { - "message": "Encryption key update cannot proceed" + "message": "به‌روزرسانی کلید رمزگذاری قابل انجام نیست" }, "editFieldLabel": { - "message": "Edit $LABEL$", + "message": "ویرایش $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4491,7 +4485,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "مرتب‌سازی مجدد $LABEL$. برای جابجایی مورد به بالا یا پایین از کلیدهای جهت‌نما استفاده کنید.", "placeholders": { "label": { "content": "$1", @@ -4500,7 +4494,7 @@ } }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ به بالا منتقل شد، موقعیت $INDEX$ از $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4517,7 +4511,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ به پایین منتقل شد، موقعیت $INDEX$ از $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4534,7 +4528,7 @@ } }, "keyUpdateFoldersFailed": { - "message": "When updating your encryption key, your folders could not be decrypted. To continue with the update, your folders must be deleted. No vault items will be deleted if you proceed." + "message": "هنگام به‌روزرسانی کلید رمزگذاری، پوشه‌های شما قابل رمزگشایی نبودند. برای ادامه به‌روزرسانی، باید این پوشه‌ها حذف شوند. در صورت ادامه، هیچ‌یک از موارد موجود در گاوصندوق شما حذف نخواهد شد." }, "keyUpdated": { "message": "کلیدها به‌روز شد" @@ -4549,7 +4543,7 @@ "message": "پس از به‌روزرسانی کلید رمزگذاری، باید از سیستم خارج شوید و دوباره به همه برنامه‌های Bitwarden که در حال حاضر استفاده می‌کنید (مانند برنامه تلفن همراه یا برنامه‌های افزودنی مرورگر) وارد شوید. عدم خروج و ورود مجدد (که کلید رمزگذاری جدید شما را دانلود می‌کند) ممکن است منجر به خراب شدن داده‌ها شود. ما سعی خواهیم کرد شما را به طور خودکار از سیستم خارج کنیم، اما ممکن است با تأخیر انجام شود." }, "updateEncryptionKeyAccountExportWarning": { - "message": "Any account restricted exports you have saved will become invalid." + "message": "هرگونه برون ریزی حساب کاربری با دسترسی محدود که ذخیره کرده‌اید، نامعتبر خواهد شد." }, "subscription": { "message": "اشتراک" @@ -4579,19 +4573,19 @@ "message": "شما چیزی را انتخاب نکرده اید." }, "receiveMarketingEmailsV2": { - "message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox." + "message": "پیشنهادها، اعلان‌ها و فرصت‌های تحقیقاتی Bitwarden را در صندوق ورودی خود دریافت کنید." }, "unsubscribe": { - "message": "Unsubscribe" + "message": "لغو اشتراک" }, "atAnyTime": { - "message": "at any time." + "message": "در هر زمان." }, "byContinuingYouAgreeToThe": { - "message": "By continuing, you agree to the" + "message": "با ادامه دادن، شما موافقت می‌کنید که" }, "and": { - "message": "and" + "message": "و" }, "acceptPolicies": { "message": "با علامت زدن این کادر با موارد زیر موافقت می‌کنید:" @@ -4612,7 +4606,7 @@ "message": "متوقف شدن گاو‌صندوق" }, "vaultTimeout1": { - "message": "Timeout" + "message": "پایان زمان" }, "vaultTimeoutDesc": { "message": "انتخاب کنید که گاو‌صندوق شما چه زمانی عمل توقف زمانی گاوصندوق را انجام دهد." @@ -4681,7 +4675,7 @@ "message": "انتخاب شده" }, "recommended": { - "message": "Recommended" + "message": "توصیه می‌شود" }, "ownership": { "message": "مالکیت" @@ -4752,7 +4746,7 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "به‌محض تأیید درخواست، به شما اطلاع داده خواهد شد" }, "free": { "message": "رايگان", @@ -4805,7 +4799,7 @@ "message": "الزامات را برای قدرت کلمه عبور اصلی تنظیم کنید." }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "امتیاز قدرت کلمه عبور $SCORE$", "placeholders": { "score": { "content": "$1", @@ -4874,7 +4868,7 @@ "message": "حداقل تعداد کلمات" }, "overridePasswordTypePolicy": { - "message": "Password Type", + "message": "نوع کلمه عبور", "description": "Name of the password generator policy that overrides the user's password/passphrase selection." }, "userPreference": { @@ -4991,10 +4985,10 @@ "message": "با استفاده از پورتال ورود واحد سازمان خود وارد شوید. لطفاً برای شروع، شناسه SSO سازمان خود را وارد کنید." }, "singleSignOnEnterOrgIdentifier": { - "message": "Enter your organization's SSO identifier to begin" + "message": "برای شروع، شناسه SSO سازمان خود را وارد کنید" }, "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 خود، ابتدا شناسه SSO سازمانتان را وارد کنید. ممکن است هنگام ورود از یک دستگاه جدید نیز نیاز به وارد کردن این شناسه داشته باشید." }, "enterpriseSingleSignOn": { "message": "ورود به سیستم پروژه" @@ -5003,25 +4997,25 @@ "message": "اکنون می‌توانید این برگه را ببندید و در افزونه ادامه دهید." }, "youSuccessfullyLoggedIn": { - "message": "You successfully logged in" + "message": "شما با موفقیت وارد شدید" }, "thisWindowWillCloseIn5Seconds": { - "message": "This window will automatically close in 5 seconds" + "message": "این پنجره به‌صورت خودکار طی ۵ ثانیه بسته خواهد شد" }, "youMayCloseThisWindow": { - "message": "You may close this window" + "message": "می‌توانید این پنجره را ببندید" }, "includeAllTeamsFeatures": { "message": "همه ویژگی های تیم، به علاوه:" }, "includeAllTeamsStarterFeatures": { - "message": "All Teams Starter features, plus:" + "message": "تمام ویژگی‌های طرح ابتدایی تیم‌ها، به‌علاوه:" }, "chooseMonthlyOrAnnualBilling": { - "message": "Choose monthly or annual billing" + "message": "انتخاب صورتحساب ماهانه یا سالانه" }, "abilityToAddMoreThanNMembers": { - "message": "Ability to add more than $COUNT$ members", + "message": "امکان افزودن بیش از $COUNT$ عضو", "placeholders": { "count": { "content": "$1", @@ -5064,13 +5058,13 @@ "message": "اعضا را از پیوستن به سازمان‌های دیگر محدود کنید." }, "singleOrgPolicyDesc": { - "message": "Restrict members from joining other organizations. This policy is required for organizations that have enabled domain verification." + "message": "محدود کردن اعضا از پیوستن به سازمان‌های دیگر. این سیاست برای سازمان‌هایی که اعتبارسنجی دامنه را فعال کرده‌اند، الزامی است." }, "singleOrgBlockCreateMessage": { "message": "سازمان فعلی شما سیاستی دارد که به شما اجازه نمی‌دهد به بیش از یک سازمان بپیوندید. لطفاً با مدیران سازمان خود تماس بگیرید یا از یک حساب Bitwarden دیگر ثبت نام کنید." }, "singleOrgPolicyMemberWarning": { - "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." + "message": "اعضای غیر مطابق در وضعیت لغو شده قرار می‌گیرند تا زمانی که از تمام سازمان‌های دیگر خارج شوند. مدیران مستثنی بوده و می‌توانند پس از برقراری انطباق، اعضا را بازیابی کنند." }, "requireSso": { "message": "نیاز به احراز هویت یکبار ورود به سیستم" @@ -5091,14 +5085,14 @@ "message": "مالکان و سرپرستان سازمان از اجرای این سیاست مستثنی هستند." }, "limitSendViews": { - "message": "Limit views" + "message": "محدود کردن نمایش‌ها" }, "limitSendViewsHint": { - "message": "No one can view this Send after the limit is reached.", + "message": "هیچ‌کس نمی‌تواند این را پس از رسیدن به محدودیت مشاهده کند.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { - "message": "$ACCESSCOUNT$ views left", + "message": "$ACCESSCOUNT$ بازدید باقی مانده", "description": "Displayed under the limit views field on Send", "placeholders": { "accessCount": { @@ -5108,11 +5102,11 @@ } }, "sendDetails": { - "message": "Send details", + "message": "جزئیات ارسال", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeTextToShare": { - "message": "Text to share" + "message": "متن برای اشتراک گذاری" }, "sendTypeFile": { "message": "پرونده" @@ -5121,7 +5115,7 @@ "message": "متن" }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "یک کلمه عبور اختیاری برای دریافت‌کنندگان اضافه کنید تا بتوانند به این ارسال دسترسی داشته باشند.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { @@ -5149,14 +5143,14 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "Are you sure you want to permanently delete this Send?", + "message": "مطمئن هستید می‌خواهید این ارسال را برای همیشه پاک کنید؟", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "تاریخ حذف" }, "deletionDateDescV2": { - "message": "The Send will be permanently deleted on this date.", + "message": "ارسال در این تاریخ به‌طور دائمی حذف خواهد شد.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5180,7 +5174,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copyLink": { - "message": "Copy link" + "message": "کپی پیوند" }, "copySendLink": { "message": "پیوند ارسال را کپی کن", @@ -5206,7 +5200,7 @@ "message": "در انتظار حذف" }, "hideTextByDefault": { - "message": "Hide text by default" + "message": "متن را به‌صورت پیش‌فرض مخفی کن" }, "expired": { "message": "منقضی شده" @@ -5228,7 +5222,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "downloadAttachments": { - "message": "Download attachments" + "message": "بارگیری پیوست‌ها" }, "sendAccessUnavailable": { "message": "ارسالی که می‌خواهید به آن دسترسی پیدا کنید وجود ندارد یا دیگر در دسترس نیست.", @@ -5560,73 +5554,73 @@ "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": "تیم‌های توسعه، DevOps و فناوری اطلاعات مدیر اسرار Bitwarden را برای مدیریت و استقرار امن زیرساخت‌ها و اسرار ماشین خود انتخاب می‌کنند." }, "centralizeSecretsManagement": { - "message": "Centralize secrets management." + "message": "مدیریت متمرکز اسرار." }, "centralizeSecretsManagementDescription": { - "message": "Securely store and manage secrets in one location to prevent secret sprawl across your organization." + "message": "اسرار خود را به‌صورت ایمن در یک مکان ذخیره و مدیریت کنید تا از پراکندگی اسرار در سراسر سازمان جلوگیری شود." }, "preventSecretLeaks": { - "message": "Prevent secret leaks." + "message": "جلوگیری از نشت اسرار." }, "preventSecretLeaksDescription": { - "message": "Protect secrets with end-to-end encryption. No more hard coding secrets or sharing through .env files." + "message": "حفاظت از اسرار با رمزگذاری سرتاسری. دیگر نیازی به کدنویسی مستقیم اسرار یا به اشتراک‌گذاری آن‌ها از طریق فایل‌های .env نیست." }, "enhanceDeveloperProductivity": { - "message": "Enhance developer productivity." + "message": "افزایش بهره‌وری توسعه‌دهندگان." }, "enhanceDeveloperProductivityDescription": { - "message": "Programmatically retrieve and deploy secrets at runtime so developers can focus on what matters most, like improving code quality." + "message": "به‌صورت برنامه‌نویسی شده اسرار را در زمان اجرا دریافت و استقرار دهید تا توسعه‌دهندگان بتوانند روی موارد مهم‌تر مانند بهبود کیفیت کد تمرکز کنند." }, "strengthenBusinessSecurity": { - "message": "Strengthen business security." + "message": "تقویت امنیت کسب‌وکار." }, "strengthenBusinessSecurityDescription": { - "message": "Maintain tight control over machine and human access to secrets with SSO integrations, event logs, and access rotation." + "message": "کنترل دقیق بر دسترسی ماشین‌ها و افراد به اسرار را با ادغام SSO، گزارش رویدادها و چرخش دسترسی حفظ کنید." }, "tryItNow": { - "message": "Try it now" + "message": "امتحان کنید" }, "sendRequest": { - "message": "Send request" + "message": "ارسال درخواست" }, "addANote": { - "message": "Add a note" + "message": "افزودن يادداشت" }, "bitwardenSecretsManager": { - "message": "Bitwarden Secrets Manager" + "message": "مدیر اسرار Bitwarden" }, "moreProductsFromBitwarden": { - "message": "More products from Bitwarden" + "message": "محصولات بیشتر از Bitwarden" }, "requestAccessToSecretsManager": { - "message": "Request access to Secrets Manager" + "message": "درخواست دسترسی به مدیر اسرار" }, "youNeedApprovalFromYourAdminToTrySecretsManager": { - "message": "You need approval from your administrator to try Secrets Manager." + "message": "برای استفاده از مدیر اسرار، به تأیید مدیر خود نیاز دارید." }, "smAccessRequestEmailSent": { - "message": "Access request for secrets manager email sent to admins." + "message": "درخواست دسترسی به مدیر اسرار از طریق ایمیل برای مدیران ارسال شد." }, "requestAccessSMDefaultEmailContent": { - "message": "Hi,\n\nI am requesting a subscription to Bitwarden Secrets Manager for our team. Your support would mean a great deal!\n\nBitwarden Secrets Manager is an end-to-end encrypted secrets management solution for securely storing, sharing, and deploying machine credentials like API keys, database passwords, and authentication certificates.\n\nSecrets Manager will help us to:\n\n- Improve security\n- Streamline operations\n- Prevent costly secret leaks\n\nTo request a free trial for our team, please reach out to Bitwarden.\n\nThank you for your help!" + "message": "سلام،\n\nمن درخواست اشتراک مدیر اسرار Bitwarden را برای تیم‌مان دارم. حمایت شما واقعاً برای ما ارزشمند خواهد بود!\n\nمدیر اسرار Bitwarden یک راه حل مدیریت اسرار با رمزگذاری سرتاسری است که برای ذخیره‌سازی، به اشتراک‌گذاری و استقرار ایمن اطلاعات حساس ماشین مانند کلیدهای API، کلمات عبور پایگاه داده و گواهی‌های احراز هویت طراحی شده است.\n\nمدیر اسرار به ما کمک خواهد کرد تا:\n\n- امنیت را افزایش دهیم\n- عملیات را ساده‌سازی کنیم\n- از نشت‌های پرهزینه اسرار جلوگیری کنیم\n\nبرای درخواست یک دوره آزمایشی رایگان برای تیم‌مان، لطفاً با Bitwarden تماس بگیرید.\n\nاز همکاری شما سپاسگزارم!" }, "giveMembersAccess": { - "message": "Give members access:" + "message": "اعطا کردن دسترسی به اعضا:" }, "viewAndSelectTheMembers": { - "message": "view and select the members you want to give access to Secrets Manager." + "message": "مشاهده و انتخاب اعضایی که می‌خواهید به مدیر اسرار دسترسی داشته باشند." }, "openYourOrganizations": { - "message": "Open your organization's" + "message": "سازمان خود را باز کنید" }, "usingTheMenuSelect": { - "message": "Using the menu, select" + "message": "از منو، انتخاب کنید" }, "toGrantAccessToSelectedMembers": { - "message": "to grant access to selected members." + "message": "برای اعطای دسترسی به اعضای انتخاب شده." }, "sendVaultCardTryItNow": { "message": "الان امتحان کنید", @@ -5645,7 +5639,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send or sign up to **try it today.**'" }, "sendAccessCreatorIdentifier": { - "message": "Bitwarden member $USER_IDENTIFIER$ shared the following with you", + "message": "عضو Bitwarden $USER_IDENTIFIER$ موارد زیر را با شما به اشتراک گذاشت", "placeholders": { "user_identifier": { "content": "$1", @@ -5654,7 +5648,7 @@ } }, "viewSend": { - "message": "View Send", + "message": "مشاهده ارسال", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "viewSendHiddenEmailWarning": { @@ -5677,7 +5671,7 @@ "message": "هنگام ذخیره حذف و تاریخ انقضاء شما خطایی روی داد." }, "hideYourEmail": { - "message": "Hide your email address from viewers." + "message": "آدرس ایمیل خود را از بینندگان مخفی کنید." }, "webAuthnFallbackMsg": { "message": "برای تأیید 2FA خود لطفاً روی دکمه زیر کلیک کنید." @@ -5686,10 +5680,10 @@ "message": "تأیید اعتبار در WebAuthn" }, "readSecurityKey": { - "message": "Read security key" + "message": "خواندن کلید امنیتی" }, "awaitingSecurityKeyInteraction": { - "message": "Awaiting security key interaction..." + "message": "در انتظار تعامل با کلید امنیتی..." }, "webAuthnNotSupported": { "message": "WebAuthn در این مرورگر پشتیبانی نمی‌شود." @@ -5698,7 +5692,7 @@ "message": "WebAuthn با موفقیت تأیید شد! می‌توانید این برگه را ببندید." }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "کلمه عبور جدید شما نمی‌تواند با کلمه عبور فعلی‌تان یکسان باشد." }, "hintEqualsPassword": { "message": "اشاره به کلمه عبور شما نمی‌تواند همان کلمه عبور شما باشد." @@ -5887,32 +5881,32 @@ "message": "مستثنی شده، برای این اقدام قابل اجرا نیست" }, "nonCompliantMembersTitle": { - "message": "Non-compliant members" + "message": "اعضای غیر مطابق" }, "nonCompliantMembersError": { - "message": "Members that are non-compliant with the Single organization or Two-step login policy cannot be restored until they adhere to the policy requirements" + "message": "اعضایی که با سیاست تک سازمانی یا ورود دومرحله‌ای مطابقت ندارند، تا زمانی که الزامات این سیاست‌ها را رعایت نکنند، قابل بازیابی نیستند" }, "fingerprint": { "message": "اثر انگشت" }, "fingerprintPhrase": { - "message": "Fingerprint phrase:" + "message": "عبارت اثر انگشت:" }, "error": { "message": "خطا" }, "decryptionError": { - "message": "Decryption error" + "message": "خطای رمزگشایی" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden نتوانست مورد(های) گاوصندوق فهرست شده زیر را رمزگشایی کند." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "با بخش پشتیبانی مشتریان تماس بگیرید", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { - "message": "to avoid additional data loss.", + "message": "برای جلوگیری از، از دست دادن داده‌های بیشتر.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "accountRecoveryManageUsers": { @@ -5980,13 +5974,13 @@ "message": "یک سازمان مشتری جدید ایجاد کنید که با شما به عنوان ارائه دهنده مرتبط باشد. شما می توانید به این سازمان دسترسی داشته باشید و آن را مدیریت کنید." }, "newClient": { - "message": "New client" + "message": "مشتری جدید" }, "addExistingOrganization": { "message": "سازمان موجود را اضافه کنید" }, "addNewOrganization": { - "message": "Add new organization" + "message": "افزودن سازمان جدید" }, "myProvider": { "message": "ارائه دهنده‌ی من" @@ -6062,19 +6056,19 @@ "message": "کلمه عبور اصلی شما با یک یا چند سیاست سازمان‌تان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را به‌روز کنید. در صورت ادامه، شما از نشست فعلی خود خارج می‌شوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند." }, "automaticAppLogin": { - "message": "Automatically log in users for allowed applications" + "message": "ورود خودکار کاربران به برنامه‌های مجاز" }, "automaticAppLoginDesc": { - "message": "Login forms will automatically be filled and submitted for apps launched from your configured identity provider." + "message": "فرم‌های ورود به‌صورت خودکار پر شده و برای برنامه‌هایی که از ارائه‌دهنده هویت پیکربندی شده شما اجرا می‌شوند، ارسال خواهند شد." }, "automaticAppLoginIdpHostLabel": { - "message": "Identity provider host" + "message": "میزبان ارائه دهنده هویت" }, "automaticAppLoginIdpHostDesc": { - "message": "Enter your identity provider host URL. Enter multiple URLs by separating with a comma." + "message": "نشانی اینترنتی میزبان ارائه دهنده هویت خود را وارد کنید. برای وارد کردن چند نشانی، آن‌ها را با کاما از هم جدا کنید." }, "tdeDisabledMasterPasswordRequired": { - "message": "Your organization has updated your decryption options. Please set a master password to access your vault." + "message": "سازمان شما گزینه‌های رمزگشایی را به‌روزرسانی کرده است. لطفاً برای دسترسی به گاوصندوق خود، یک کلمه عبور اصلی تنظیم کنید." }, "maximumVaultTimeout": { "message": "متوقف شدن گاو‌صندوق" @@ -6108,7 +6102,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "message": "حداکثر $HOURS$ ساعت و $MINUTES$ دقیقه.", "placeholders": { "hours": { "content": "$1", @@ -6264,10 +6258,10 @@ "message": "اعتبارسنجی گواهینامه‌ها" }, "spUniqueEntityId": { - "message": "Set a unique SP entity ID" + "message": "یک شناسه موجودیت SP منحصربه‌فرد تنظیم کنید" }, "spUniqueEntityIdDesc": { - "message": "Generate an identifier that is unique to your organization" + "message": "یک شناسه تولید کنید که منحصربه‌فرد برای سازمان شما باشد" }, "idpEntityId": { "message": "شناسه موجودیت" @@ -6303,19 +6297,19 @@ "message": "خانواده‌های Bitwarden رایگان" }, "sponsoredBitwardenFamilies": { - "message": "Sponsored families" + "message": "خانواده‌های تحت حمایت" }, "noSponsoredFamiliesMessage": { - "message": "No sponsored families" + "message": "خانواده‌های تحت حمایت وجود ندارند" }, "nosponsoredFamiliesDetails": { - "message": "Sponsored non-member families plans will display here" + "message": "طرح‌های خانواده‌های غیر عضو تحت حمایت در اینجا نمایش داده خواهند شد" }, "sponsorshipFreeBitwardenFamilies": { - "message": "Members of your organization are eligible for Free Bitwarden Families. You can sponsor Free Bitwarden Families for employees who are not a member of your Bitwarden organization. Sponsoring a non-member requires an available seat within your organization." + "message": "اعضای سازمان شما واجد شرایط استفاده از نسخه رایگان خانواده‌های Bitwarden هستند. شما می‌توانید نسخه رایگان خانواده‌های Bitwarden را برای کارمندانی که عضو سازمان Bitwarden شما نیستند، حمایت کنید. حمایت از یک فرد غیر عضو مستلزم وجود صندلی آزاد در سازمان شما است." }, "sponsoredFamiliesRemoveActiveSponsorship": { - "message": "When you remove an active sponsorship, a seat within your organization will be available after the renewal date of the sponsored organization." + "message": "زمانی که حمایت فعالی را حذف می‌کنید، پس از تاریخ تمدید سازمان تحت حمایت، یک صندلی در سازمان شما آزاد خواهد شد." }, "sponsoredFamiliesEligible": { "message": "شما و خانواده‌تان واجد شرایط دریافت خانواده‌های Bitwarden رایگان هستید. با ایمیل شخصی خود بازخرید کنید تا اطلاعات خود را حتی زمانی که در محل کار نیستید ایمن نگه دارید." @@ -6324,28 +6318,28 @@ "message": "امروز برنامه رایگان Bitwarden برای خانواده‌های خود را بازخرید کنید تا اطلاعات خود را حتی زمانی که در محل کار نیستید ایمن نگه دارید." }, "sponsoredFamiliesIncludeMessage": { - "message": "The Bitwarden for Families plan includes" + "message": "طرح Bitwarden برای خانواده‌ها شامل" }, "sponsoredFamiliesPremiumAccess": { "message": "دسترسی پرمیوم برای حداکثر 6 کاربر" }, "sponsoredFamiliesSharedCollectionsForFamilyMembers": { - "message": "Shared collections for family members" + "message": "مجموعه‌های مشترک برای اعضای خانواده" }, "memberFamilies": { - "message": "Member families" + "message": "خانواده‌های اعضا" }, "noMemberFamilies": { - "message": "No member families" + "message": "خانواده‌های اعضا وجود ندارد" }, "noMemberFamiliesDescription": { - "message": "Members who have redeemed family plans will display here" + "message": "اعضایی که طرح‌های خانوادگی را فعال کرده‌اند، در اینجا نمایش داده خواهند شد" }, "membersWithSponsoredFamilies": { - "message": "Members of your organization are eligible for Free Bitwarden Families. Here you can see members who have sponsored a Families organization." + "message": "اعضای سازمان شما واجد شرایط استفاده از نسخه رایگان خانواده‌های Bitwarden هستند. در اینجا می‌توانید اعضایی را ببینید که سازمان خانوادگی را حمایت کرده‌اند." }, "organizationHasMemberMessage": { - "message": "A sponsorship cannot be sent to $EMAIL$ because they are a member of your organization.", + "message": "حمایت مالی نمی‌تواند به $EMAIL$ ارسال شود زیرا او عضو سازمان شما است.", "placeholders": { "email": { "content": "$1", @@ -6405,7 +6399,7 @@ "message": "حساب بازخرید شد" }, "revokeAccountMessage": { - "message": "Revoke account $NAME$", + "message": "حساب $NAME$ را لغو کنید", "placeholders": { "name": { "content": "$1", @@ -6471,16 +6465,16 @@ "message": "کد تأیید مورد نیاز است." }, "webauthnCancelOrTimeout": { - "message": "The authentication was cancelled or took too long. Please try again." + "message": "احراز هویت لغو شد یا بیش از حد طول کشید. لطفاً دوباره تلاش کنید." }, "invalidVerificationCode": { "message": "کد تأیید نامعتبر است" }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "برای اعضای سازمان زیر، کلمه عبور اصلی دیگر لازم نیست. لطفاً دامنه زیر را با مدیر سازمان خود تأیید کنید." }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "دامنه رابط کلید" }, "leaveOrganization": { "message": "ترک سازمان" @@ -6585,7 +6579,7 @@ "message": "توکن همگام‌سازی صورتحساب را مشاهده کنید" }, "generateBillingToken": { - "message": "Generate billing token" + "message": "تولید توکن پرداخت" }, "copyPasteBillingSync": { "message": "این توکن را کپی کرده و در تنظیمات همگام‌سازی صورتحساب سازمان خود میزبان جای‌گذاری کنید." @@ -6594,7 +6588,7 @@ "message": "توکن همگام‌سازی صورتحساب شما می‌تواند به تنظیمات اشتراک این سازمان دسترسی داشته باشد و آن را ویرایش کند." }, "manageBillingTokenSync": { - "message": "Manage Billing Token" + "message": "مدیریت توکن پرداخت" }, "setUpBillingSync": { "message": "همگام‌سازی صورتحساب را تنظیم کنید" @@ -6612,37 +6606,37 @@ "message": "چرخاندن توکن همگام‌سازی صورتحساب، توکن قبلی را باطل می‌کند." }, "selfHostedServer": { - "message": "self-hosted" + "message": "خود میزبان" }, "customEnvironment": { - "message": "Custom environment" + "message": "محیط سفارشی" }, "selfHostedBaseUrlHint": { - "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + "message": "نشانی اینترنتی پایه نصب Bitwarden خود را که به‌صورت داخلی میزبانی شده مشخص کنید.\nمثال: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { - "message": "For advanced configuration, you can specify the base URL of each service independently." + "message": "برای پیکربندی پیشرفته، می‌توانید نشانی اینترنتی پایه هر سرویس را به‌صورت مستقل مشخص کنید." }, "selfHostedEnvFormInvalid": { - "message": "You must add either the base Server URL or at least one custom environment." + "message": "شما باید یا نشانی اینترنتی پایه سرور را اضافه کنید، یا حداقل یک محیط سفارشی تعریف کنید." }, "apiUrl": { - "message": "API server URL" + "message": "نشانی API سرور" }, "webVaultUrl": { - "message": "Web vault server URL" + "message": "نشانی اینترنتی سرور گاوصندوق وب" }, "identityUrl": { - "message": "Identity server URL" + "message": "نشانی سرور شناسایی" }, "notificationsUrl": { - "message": "Notifications server URL" + "message": "نشانی سرور اعلان‌ها" }, "iconsUrl": { - "message": "Icons server URL" + "message": "نشانی سرور آیکون ها" }, "environmentSaved": { - "message": "Environment URLs saved" + "message": "نشانی‌های اینترنتی محیط ذخیره شد" }, "selfHostingTitle": { "message": "خود میزبانی" @@ -6660,7 +6654,7 @@ "message": "توکن همگام‌سازی صورتحساب" }, "automaticBillingSyncDesc": { - "message": "Automatic sync unlocks Families sponsorships and allows you to sync your license without uploading a file. After making updates in the Bitwarden cloud server, select Sync License to apply changes." + "message": "همگام‌سازی خودکار، حمایت‌های خانواده‌ها را فعال می‌کند و به شما امکان می‌دهد بدون بارگذاری پرونده، مجوز خود را همگام‌سازی کنید. پس از انجام تغییرات در سرور ابری Bitwarden، گزینه «همگام‌سازی مجوز» را انتخاب کنید تا تغییرات اعمال شود." }, "active": { "message": "فعال" @@ -6730,7 +6724,7 @@ "message": "اگر شناسه موجودیت یک نشانی اینترنتی نباشد، الزامی است." }, "offerNoLongerValid": { - "message": "This offer is no longer valid. Contact your organization administrators for more information." + "message": "این پیشنهاد دیگر معتبر نیست. برای کسب اطلاعات بیشتر با مدیران سازمان خود تماس بگیرید." }, "openIdOptionalCustomizations": { "message": "سفارشی سازی اختیاری" @@ -6760,7 +6754,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "فقط موردهای فردی گاوصندوق شامل پیوست‌ها که به $EMAIL$ مرتبط هستند برون ریزی خواهند شد. موردهای گاوصندوق سازمانی شامل نمی‌شوند", "placeholders": { "email": { "content": "$1", @@ -6822,10 +6816,28 @@ "message": "ایجاد نام کاربری" }, "generateEmail": { - "message": "Generate email" + "message": "تولید ایمیل" + }, + "generatePassword": { + "message": "تولید کلمه عبور" + }, + "generatePassphrase": { + "message": "تولید عبارت عبور" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" }, "spinboxBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$.", + "message": "مقدار باید بین $MIN$ و $MAX$ باشد.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6839,7 +6851,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "message": " برای تولید یک کلمه عبور قوی، از $RECOMMENDED$ کاراکتر یا بیشتر استفاده کنید.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -6849,7 +6861,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": " برای تولید یک عبارت عبور قوی، از $RECOMMENDED$ واژه یا بیشتر استفاده کنید.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -6872,7 +6884,7 @@ "message": "از صندوق ورودی پیکربندی شده دامنه خود استفاده کنید." }, "useThisEmail": { - "message": "Use this email" + "message": "از این ایمیل استفاده شود" }, "random": { "message": "تصادفی", @@ -6882,23 +6894,26 @@ "message": "کلمه تصادفی" }, "usernameGenerator": { - "message": "Username generator" + "message": "تولید کننده نام کاربری" }, "useThisPassword": { - "message": "Use this password" + "message": "از این کلمه عبور استفاده کن" + }, + "useThisPassphrase": { + "message": "Use this passphrase" }, "useThisUsername": { - "message": "Use this username" + "message": "از این نام کاربری استفاده کن" }, "securePasswordGenerated": { - "message": "Secure password generated! Don't forget to also update your password on the website." + "message": "کلمه عبور ایمن ساخته شد! فراموش نکنید کلمه عبور خود را در وب‌سایت نیز به‌روزرسانی کنید." }, "useGeneratorHelpTextPartOne": { - "message": "Use the generator", + "message": "از تولید کننده استفاده کنید", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "useGeneratorHelpTextPartTwo": { - "message": "to create a strong unique password", + "message": "برای ایجاد یک کلمه عبور قوی و منحصر به فرد", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "service": { @@ -6964,15 +6979,15 @@ "message": "یک نام مستعار ایمیل با یک سرویس ارسال خارجی ایجاد کنید." }, "forwarderDomainName": { - "message": "Email domain", + "message": "دامنه ایمیل", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "دامنه‌ای را انتخاب کنید که توسط سرویس انتخاب شده پشتیبانی می‌شود", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { - "message": "$SERVICENAME$ error: $ERRORMESSAGE$", + "message": "$SERVICENAME$ خطا: $ERRORMESSAGE$", "description": "Reports an error returned by a forwarding service to the user.", "placeholders": { "servicename": { @@ -6986,11 +7001,11 @@ } }, "forwarderGeneratedBy": { - "message": "Generated by Bitwarden.", + "message": "تولید شده توسط Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen." }, "forwarderGeneratedByWithWebsite": { - "message": "Website: $WEBSITE$. Generated by Bitwarden.", + "message": "وب‌سایت: $WEBSITE$. تولید شده توسط Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen.", "placeholders": { "WEBSITE": { @@ -7000,7 +7015,7 @@ } }, "forwaderInvalidToken": { - "message": "Invalid $SERVICENAME$ API token", + "message": "توکن API نامعتبر برای $SERVICENAME$", "description": "Displayed when the user's API token is empty or rejected by the forwarding service.", "placeholders": { "servicename": { @@ -7010,7 +7025,7 @@ } }, "forwaderInvalidTokenWithMessage": { - "message": "Invalid $SERVICENAME$ API token: $ERRORMESSAGE$", + "message": "توکن API نامعتبر برای $SERVICENAME$: $ERRORMESSAGE$", "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -7024,7 +7039,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ درخواست شما را رد کرد. لطفاً برای دریافت کمک با ارائه‌دهنده سرویس خود تماس بگیرید.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -7034,7 +7049,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ درخواست شما را رد کرد: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -7048,7 +7063,7 @@ } }, "forwarderNoAccountId": { - "message": "Unable to obtain $SERVICENAME$ masked email account ID.", + "message": "دریافت شناسه حساب ایمیل ماسک شده از $SERVICENAME$ امکان‌پذیر نیست.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -7058,7 +7073,7 @@ } }, "forwarderNoDomain": { - "message": "Invalid $SERVICENAME$ domain.", + "message": "دامنه $SERVICENAME$ نامعتبر.", "description": "Displayed when the domain is empty or domain authorization failed at the forwarding service.", "placeholders": { "servicename": { @@ -7068,7 +7083,7 @@ } }, "forwarderNoUrl": { - "message": "Invalid $SERVICENAME$ url.", + "message": "نشانی $SERVICENAME$ نامعتبر.", "description": "Displayed when the url of the forwarding service wasn't supplied.", "placeholders": { "servicename": { @@ -7078,7 +7093,7 @@ } }, "forwarderUnknownError": { - "message": "Unknown $SERVICENAME$ error occurred.", + "message": "خطای $SERVICENAME$ نامعلومی رخ داد.", "description": "Displayed when the forwarding service failed due to an unknown error.", "placeholders": { "servicename": { @@ -7088,7 +7103,7 @@ } }, "forwarderUnknownForwarder": { - "message": "Unknown forwarder: '$SERVICENAME$'.", + "message": "فرواردکننده ناشناخته: $SERVICENAME$.", "description": "Displayed when the forwarding service is not supported.", "placeholders": { "servicename": { @@ -7134,7 +7149,7 @@ "description": "the text, 'SCIM', is an acronym and should not be translated." }, "scimIntegrationDescription": { - "message": "Automatically provision users and groups with your preferred identity provider via SCIM provisioning. Find supported integrations", + "message": "کاربران و گروه‌ها را به‌طور خودکار از طریق ارائه‌دهنده هویت مورد نظر خود با استفاده از تأمین‌کننده SCIM ایجاد کنید. ادغام‌های پشتیبانی‌شده را بیابید", "description": "the text, 'SCIM', is an acronym and should not be translated." }, "scimEnabledCheckboxDesc": { @@ -7256,10 +7271,10 @@ } }, "singleFieldNeedsAttention": { - "message": "1 field needs your attention." + "message": "۱ فیلد به توجه شما نیاز دارد." }, "multipleFieldsNeedAttention": { - "message": "$COUNT$ fields need your attention.", + "message": "فیلدهای $COUNT$ به توجه شما نیاز دارند.", "placeholders": { "count": { "content": "$1", @@ -7268,22 +7283,22 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance." + "message": "خطا در اتصال به سرویس Duo. از روش ورود دو مرحله‌ای دیگری استفاده کنید یا برای دریافت کمک با Duo تماس بگیرید." }, "duoRequiredByOrgForAccount": { - "message": "Duo two-step login is required for your account." + "message": "ورود دو مرحله ای Duo برای حساب کاربری شما لازم است." }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "برای حساب کاربری شما ورود دو مرحله‌ای Duo لازم است. مراحل زیر را دنبال کنید تا ورود خود را کامل کنید." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "مراحل زیر را دنبال کنید تا وارد سیستم شوید." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "مراحل زیر را برای کامل کردن ورود با کلید امنیتی خود دنبال کنید." }, "launchDuo": { - "message": "Launch Duo" + "message": "اجرای Duo" }, "turnOn": { "message": "روشن" @@ -7792,7 +7807,7 @@ "message": "با افزودن مجموعه‌ها به این گروه، اجازه دسترسی به مجموعه‌ها را بدهید." }, "restrictedCollectionAssignmentDesc": { - "message": "You can only assign collections you manage." + "message": "شما فقط می‌توانید مجموعه‌هایی را اختصاص دهید که مدیریت آن‌ها بر عهده شماست." }, "selectMembers": { "message": "انتخاب اعضا" @@ -7903,43 +7918,43 @@ } }, "verificationRequiredForActionSetPinToContinue": { - "message": "Verification required for this action. Set a PIN to continue." + "message": "برای این اقدام تأیید لازم است. یک کد پین تعیین کنید تا ادامه دهید." }, "setPin": { - "message": "Set PIN" + "message": "تنظیم کد پین" }, "verifyWithBiometrics": { - "message": "Verify with biometrics" + "message": "تأیید با استفاده از بیومتریک" }, "awaitingConfirmation": { - "message": "Awaiting confirmation" + "message": "در انتظار تأیید" }, "couldNotCompleteBiometrics": { - "message": "Could not complete biometrics." + "message": "تکمیل بیومتریک ممکن نشد." }, "needADifferentMethod": { - "message": "Need a different method?" + "message": "نیازمند روش دیگری هستید؟" }, "useMasterPassword": { - "message": "Use master password" + "message": "استفاده از کلمه عبور اصلی" }, "usePin": { - "message": "Use PIN" + "message": "استفاده از کد پین" }, "useBiometrics": { - "message": "Use biometrics" + "message": "استفاده از بیومتریک" }, "enterVerificationCodeSentToEmail": { - "message": "Enter the verification code that was sent to your email." + "message": "کد تأییدی را که به ایمیل شما ارسال شده است وارد کنید." }, "resendCode": { - "message": "Resend code" + "message": "ارسال دوباره کد" }, "memberColumnHeader": { - "message": "Member" + "message": "عضو" }, "groupSlashMemberColumnHeader": { - "message": "Group/Member" + "message": "گروه/عضو" }, "selectGroupsAndMembers": { "message": "گروه‌ها و اعضا را انتخاب کنید" @@ -7948,7 +7963,7 @@ "message": "انتخاب گروه‌ها" }, "userPermissionOverrideHelperDesc": { - "message": "Permissions set for a member will replace permissions set by that member's group." + "message": "مجوزهای تنظیم شده برای یک عضو، جایگزین مجوزهای تعیین شده توسط گروه آن عضو می‌شود." }, "noMembersOrGroupsAdded": { "message": "عضو یا گروهی اضافه نشد" @@ -7963,7 +7978,7 @@ "message": "دعوت از عضو" }, "addSponsorship": { - "message": "Add sponsorship" + "message": "افزودن حمایت مالی" }, "needsConfirmation": { "message": "نیاز به تأیید دارد" @@ -7996,7 +8011,7 @@ } }, "teamsStarterPlanInvLimitReachedManageBilling": { - "message": "Teams Starter plans may have up to $SEATCOUNT$ members. Upgrade to your plan to invite more members.", + "message": "طرح‌های شروع تیم‌ها ممکن است تا $SEATCOUNT$ عضو داشته باشند. برای دعوت اعضای بیشتر، طرح‌ خود را ارتقا دهید.", "placeholders": { "seatcount": { "content": "$1", @@ -8005,7 +8020,7 @@ } }, "teamsStarterPlanInvLimitReachedNoManageBilling": { - "message": "Teams Starter plans may have up to $SEATCOUNT$ members. Contact your organization owner to upgrade your plan and invite more members.", + "message": "طرح‌های شروع تیم‌ها ممکن است تا $SEATCOUNT$ عضو داشته باشند. برای ارتقا طرح و دعوت اعضای بیشتر با مالک سازمان خود تماس بگیرید.", "placeholders": { "seatcount": { "content": "$1", @@ -8053,7 +8068,7 @@ "message": "بارگذاری فایل" }, "upload": { - "message": "Upload" + "message": "بارگذاری" }, "acceptedFormats": { "message": "فرمت های پذیرفته شده:" @@ -8065,13 +8080,13 @@ "message": "یا" }, "unlockWithBiometrics": { - "message": "Unlock with biometrics" + "message": "با استفاده از بیومتریک باز کنید" }, "unlockWithPin": { - "message": "Unlock with PIN" + "message": "باز کردن با کد پین" }, "unlockWithMasterPassword": { - "message": "Unlock with master password" + "message": "باز کردن قفل با کلمه عبور اصلی" }, "licenseAndBillingManagement": { "message": "مدیریت مجوز و صورتحساب" @@ -8083,7 +8098,7 @@ "message": "آپلود دستی" }, "manualBillingTokenUploadDesc": { - "message": "If you do not want to opt into billing sync, manually upload your license here. This will not automatically unlock Families sponsorships." + "message": "اگر نمی‌خواهید همگام‌سازی صورتحساب را فعال کنید، می‌توانید مجوز خود را به‌صورت دستی در اینجا بارگذاری کنید. این کار به‌صورت خودکار حمایت‌های خانواده را فعال نخواهد کرد." }, "syncLicense": { "message": "مجوز همگام‌سازی" @@ -8155,7 +8170,7 @@ "message": "تنظیمات رمزگذاری خود را برای رعایت توصیه‌های امنیتی جدید و بهبود حفاظت از حساب به‌روزرسانی کنید." }, "kdfSettingsChangeLogoutWarning": { - "message": "Proceeding will log you out of all active sessions. You will need to log back in and complete two-step login, if any. We recommend exporting your vault before changing your encryption settings to prevent data loss." + "message": "ادامه دادن باعث خروج شما از تمام نشست‌های فعال خواهد شد. برای ادامه باید دوباره وارد شوید و در صورت فعال بودن، ورود دو مرحله‌ای را کامل کنید. توصیه می‌کنیم قبل از تغییر تنظیمات رمزنگاری، از گاوصندوق خود خروجی بگیرید تا از دست رفتن داده‌ها جلوگیری شود." }, "secretsManager": { "message": "مدیر رازها" @@ -8208,7 +8223,7 @@ "description": "Software Development Kit" }, "createAnAccount": { - "message": "Create an account" + "message": "ایجاد حساب کاربری" }, "createSecret": { "message": "ساختن یک راز" @@ -8352,16 +8367,16 @@ "message": "ورود به سیستم آغاز شد" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "این دستگاه را به خاطر بسپار تا ورودهای بعدی بدون مشکل انجام شود" }, "deviceApprovalRequired": { "message": "تأیید دستگاه لازم است. یک روش تأیید انتخاب کنید:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "تأیید دستگاه لازم است" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "یکی از گزینه‌های تأیید زیر را انتخاب کنید" }, "rememberThisDevice": { "message": "این دستگاه را به خاطر بسپار" @@ -8382,43 +8397,43 @@ "message": "دستگاه‌های مورد اعتماد" }, "memberDecryptionOptionTdeDescPart1": { - "message": "Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The", + "message": "اعضا هنگام ورود با SSO نیازی به وارد کردن کلمه عبور اصلی نخواهند داشت. کلمه عبور اصلی با یک کلید رمزنگاری ذخیره شده در دستگاه جایگزین می‌شود که باعث می‌شود آن دستگاه مورد اعتماد باشد. اولین دستگاهی که عضو با آن حساب کاربری خود را ایجاد کرده و وارد می‌شود، به عنوان دستگاه مورد اعتماد شناخته می‌شود. دستگاه‌های جدید باید توسط یک دستگاه مورد اعتماد موجود یا توسط مدیر تایید شوند. ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescLink1": { - "message": "single organization", + "message": "سازمان واحد", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescPart2": { - "message": "policy,", + "message": "سیاست‌ها", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescLink2": { - "message": "SSO required", + "message": "SSO الزامی است", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescPart3": { - "message": "policy, and", + "message": "سیاست‌ها و", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescLink3": { - "message": "account recovery administration", + "message": "مدیریت بازیابی حساب کاربری", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescPart4": { - "message": "policy will turn on when this option is used.", + "message": "این سیاست زمانی فعال می‌شود که این گزینه استفاده شود.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Members will not need a master password when logging in with SSO. Master password is replaced with an encryption key stored on the device, making that device trusted. The first device a member creates their account and logs into will be trusted. New devices will need to be approved by an existing trusted device or by an administrator. The single organization policy, SSO required policy, and account recovery administration policy will turn on when this option is used.'" }, "orgPermissionsUpdatedMustSetPassword": { - "message": "Your organization permissions were updated, requiring you to set a master password.", + "message": "مجوزهای سازمان شما به‌روزرسانی شد، باید یک کلمه عبور اصلی تنظیم کنید.", "description": "Used as a card title description on the set password page to explain why the user is there" }, "orgRequiresYouToSetPassword": { - "message": "Your organization requires you to set a master password.", + "message": "سازمانتان از شما می‌خواهد که یک کلمه عبور اصلی تنظیم کنید.", "description": "Used as a card title description on the set password page to explain why the user is there" }, "cardMetrics": { - "message": "out of $TOTAL$", + "message": "از میان $TOTAL$", "placeholders": { "total": { "content": "$1", @@ -8436,7 +8451,7 @@ } }, "verificationRequired": { - "message": "Verification required", + "message": "تأیید لازم است", "description": "Default title for the user verification dialog." }, "recoverAccount": { @@ -8485,16 +8500,16 @@ "message": "درخواست تأیید" }, "deviceApproved": { - "message": "Device approved" + "message": "دستگاه تایید شد" }, "deviceRemoved": { - "message": "Device removed" + "message": "دستگاه حذف شد" }, "removeDevice": { - "message": "Remove device" + "message": "حذف دستگاه" }, "removeDeviceConfirmation": { - "message": "Are you sure you want to remove this device?" + "message": "آیا مطمئن هستید که می‌خواهید این دستگاه را حذف کنید؟" }, "noDeviceRequests": { "message": "بدون درخواست دستگاه" @@ -8551,7 +8566,7 @@ "message": "تأیید دستگاه درخواست." }, "tdeOffboardingPasswordSet": { - "message": "User set a master password during TDE offboarding." + "message": "کاربر در هنگام خروج از TDE، یک کلمه عبور اصلی تنظیم کرده است." }, "startYour7DayFreeTrialOfBitwardenFor": { "message": "نسخه آزمایشی رایگان ۷ روزه Bitwarden را با $ORG$ شروع کنید", @@ -8563,7 +8578,7 @@ } }, "startYour7DayFreeTrialOfBitwardenSecretsManagerFor": { - "message": "Start your 7-Day free trial of Bitwarden Secrets Manager for $ORG$", + "message": "شروع دوره آزمایشی رایگان ۷ روزه مدیر اسرار Bitwarden برای $ORG$", "placeholders": { "org": { "content": "$1", @@ -8575,7 +8590,7 @@ "message": "بعدی" }, "ssoLoginIsRequired": { - "message": "SSO login is required" + "message": "ورود از طریق SSO الزامی است" }, "selectedRegionFlag": { "message": "پرچم منطقه انتخاب شد" @@ -8599,7 +8614,7 @@ "message": "ایمیل کاربر وجود ندارد" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "ایمیل کاربر فعال پیدا نشد. در حال خارج کردن شما از سیستم هستیم." }, "deviceTrusted": { "message": "دستگاه مورد اعتماد است" @@ -8691,25 +8706,25 @@ } }, "collectionManagement": { - "message": "Collection management" + "message": "مدیریت مجموعه" }, "collectionManagementDesc": { - "message": "Manage the collection behavior for the organization" + "message": "مدیریت رفتار مجموعه برای سازمان" }, "limitCollectionCreationDesc": { - "message": "Limit collection creation to owners and admins" + "message": "محدود کردن ایجاد مجموعه فقط به مالکان و مدیران" }, "limitCollectionDeletionDesc": { - "message": "Limit collection deletion to owners and admins" + "message": "محدود کردن حذف مجموعه فقط به مالکان و مدیران" }, "limitItemDeletionDescription": { - "message": "Limit item deletion to members with the Manage collection permissions" + "message": "حذف موارد را فقط به اعضایی که دارای مجوز مدیریت مجموعه هستند محدود کنید" }, "allowAdminAccessToAllCollectionItemsDesc": { - "message": "Owners and admins can manage all collections and items" + "message": "مالکان و مدیران می‌توانند تمام مجموعه‌ها و موارد را مدیریت کنند" }, "updatedCollectionManagement": { - "message": "Updated collection management setting" + "message": "تنظیم مدیریت مجموعه به‌روزرسانی شد" }, "passwordManagerPlanPrice": { "message": "قیمت طرح مدیریت کلمه عبور" @@ -8742,29 +8757,29 @@ "message": "آزمایشی" }, "assignCollectionAccess": { - "message": "Assign collection access" + "message": "اختصاص دسترسی به مجموعه" }, "editedCollections": { - "message": "Edited collections" + "message": "مجموعه‌های ویرایش شده" }, "baseUrl": { "message": "نشانی اینترنتی سرور" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "نشانی اینترنتی سرور خود میزبان", "description": "Label for field requesting a self-hosted integration service URL" }, "alreadyHaveAccount": { "message": "پیشتر حساب کاربری داشته اید؟" }, "toggleSideNavigation": { - "message": "Toggle side navigation" + "message": "تغییر وضعیت ناوبری کناری" }, "skipToContent": { - "message": "Skip to content" + "message": "پرش به محتوا" }, "managePermissionRequired": { - "message": "At least one member or group must have can manage permission." + "message": "حداقل یک عضو یا گروه باید دارای مجوز مدیریت کردن باشد." }, "typePasskey": { "message": "کلید عبور" @@ -8776,7 +8791,7 @@ "message": "کلید عبور در مورد شبیه سازی شده کپی نمی‌شود. آیا می‌خواهید به شبیه سازی این مورد ادامه دهید؟" }, "modifiedCollectionManagement": { - "message": "Modified collection management setting $ID$.", + "message": "تنظیم مدیریت مجموعه با شناسه $ID$ تغییر یافت.", "placeholders": { "id": { "content": "$1", @@ -8785,60 +8800,60 @@ } }, "seeDetailedInstructions": { - "message": "See detailed instructions on our help site at", + "message": "دستورالعمل‌های کامل را در سایت راهنمای ما مشاهده کنید در", "description": "This is followed a by a hyperlink to the help website." }, "installBrowserExtension": { - "message": "Install browser extension" + "message": "نصب افزونه مرورگر" }, "installBrowserExtensionDetails": { - "message": "Use the extension to quickly save logins and auto-fill forms without opening the web app." + "message": "برای ذخیره سریع ورودها و پر کردن خودکار فرم‌ها بدون باز کردن برنامه وب، از افزونه استفاده کنید." }, "projectAccessUpdated": { - "message": "Project access updated" + "message": "دسترسی پروژه به‌روزرسانی شد" }, "unexpectedErrorSend": { - "message": "An unexpected error has occurred while loading this Send. Try again later." + "message": "هنگام بارگذاری این ارسال، خطای غیرمنتظره‌ای رخ داده است. لطفاً بعداً دوباره تلاش کنید." }, "seatLimitReached": { - "message": "Seat limit has been reached" + "message": "حداکثر ظرفیت صندلی‌ها پر شده است" }, "contactYourProvider": { - "message": "Contact your provider to purchase additional seats." + "message": "برای خرید صندلی‌های بیشتر با ارائه‌دهنده خود تماس بگیرید." }, "seatLimitReachedContactYourProvider": { - "message": "Seat limit has been reached. Contact your provider to purchase additional seats." + "message": "حداکثر ظرفیت صندلی‌ها پر شده است. برای خرید صندلی‌های بیشتر با ارائه‌دهنده خود تماس بگیرید." }, "collectionAccessRestricted": { - "message": "Collection access is restricted" + "message": "دسترسی به مجموعه محدود شده است" }, "readOnlyCollectionAccess": { - "message": "You do not have access to manage this collection." + "message": "شما دسترسی مدیریت این مجموعه را ندارید." }, "grantManageCollectionWarningTitle": { - "message": "Missing Manage Collection Permissions" + "message": "مجوزهای مدیریت مجموعه وجود ندارد" }, "grantManageCollectionWarning": { - "message": "Grant Manage collection permissions to allow full collection management including deletion of collection." + "message": "برای اجازه مدیریت کامل مجموعه، از جمله حذف مجموعه، مجوزهای مدیریت مجموعه را اعطا کنید." }, "grantCollectionAccess": { - "message": "Grant groups or members access to this collection." + "message": "دسترسی گروه‌ها یا اعضا را به این مجموعه اعطا کنید." }, "grantCollectionAccessMembersOnly": { - "message": "Grant members access to this collection." + "message": "به اعضا دسترسی به این مجموعه بدهید." }, "adminCollectionAccess": { - "message": "Administrators can access and manage collections." + "message": "مدیران می‌توانند به مجموعه‌ها دسترسی داشته و آن‌ها را مدیریت کنند." }, "serviceAccountAccessUpdated": { - "message": "Service account access updated" + "message": "دسترسی حساب کاربری سرویس به‌روزرسانی شد" }, "commonImportFormats": { - "message": "Common formats", + "message": "فرمت‌های رایج", "description": "Label indicating the most common import formats" }, "maintainYourSubscription": { - "message": "To maintain your subscription for $ORG$, ", + "message": "برای حفظ اشتراک خود در $ORG$، ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To maintain your subscription for $ORG$, add a payment method.'", "placeholders": { "org": { @@ -8848,103 +8863,103 @@ } }, "addAPaymentMethod": { - "message": "add a payment method", + "message": "یک روش پرداخت اضافه کنید", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To maintain your subscription for $ORG$, add a payment method'" }, "organizationInformation": { - "message": "Organization information" + "message": "اطلاعات سازمان" }, "confirmationDetails": { - "message": "Confirmation details" + "message": "تأیید جزئیات" }, "smFreeTrialThankYou": { - "message": "Thank you for signing up for Bitwarden Secrets Manager!" + "message": "متشکریم که در مدیر اسرار Bitwarden ثبت‌نام کردید!" }, "smFreeTrialConfirmationEmail": { - "message": "We've sent a confirmation email to your email at " + "message": "ما یک ایمیل تأیید به نشانی ایمیل شما ارسال کرده‌ایم در " }, "sorryToSeeYouGo": { - "message": "Sorry to see you go! Help improve Bitwarden by sharing why you're canceling.", + "message": "متأسفیم که می‌روید! با به اشتراک‌گذاری دلیل لغو اشتراک، به بهبود Bitwarden کمک کنید.", "description": "A message shown to users as part of an offboarding survey asking them to provide more information on their subscription cancelation." }, "selectCancellationReason": { - "message": "Select a reason for canceling", + "message": "لطفاً دلیل لغو اشتراک را انتخاب کنید", "description": "Used as a form field label for a select input on the offboarding survey." }, "anyOtherFeedback": { - "message": "Is there any other feedback you'd like to share?", + "message": "آیا بازخورد دیگری هست که مایل باشید با ما در میان بگذارید؟", "description": "Used as a form field label for a textarea input on the offboarding survey." }, "missingFeatures": { - "message": "Missing features", + "message": "ویژگی‌ها وجود ندارد", "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "movingToAnotherTool": { - "message": "Moving to another tool", + "message": "در حال انتقال به ابزار دیگری هستم", "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "tooDifficultToUse": { - "message": "Too difficult to use", + "message": "استفاده از آن خیلی دشوار است", "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "notUsingEnough": { - "message": "Not using enough", + "message": "به اندازه کافی از آن استفاده نمی‌کنم", "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "tooExpensive": { - "message": "Too expensive", + "message": "خیلی گران است", "description": "An option for the offboarding survey shown when a user cancels their subscription." }, "freeForOneYear": { - "message": "Free for 1 year" + "message": "رایگان برای یک سال" }, "newWebApp": { - "message": "Welcome to the new and improved web app. Learn more about what’s changed." + "message": "به برنامه وب جدید و بهبود یافته خوش آمدید. برای آشنایی با تغییرات انجام شده بیشتر بدانید." }, "releaseBlog": { - "message": "Read release blog" + "message": "مطالعه‌ی بلاگ انتشار نسخه" }, "adminConsole": { - "message": "Admin Console" + "message": "کنسول مدیر" }, "providerPortal": { - "message": "Provider Portal" + "message": "درگاه ارائه‌دهنده" }, "success": { - "message": "Success" + "message": "موفقیت آمیز بود" }, "restrictedGroupAccess": { - "message": "You cannot add yourself to groups." + "message": "شما نمی‌توانید خودتان را به گروه‌ها اضافه کنید." }, "cannotAddYourselfToCollections": { - "message": "You cannot add yourself to collections." + "message": "شما نمی‌توانید خودتان را به مجموعه‌ها اضافه کنید." }, "assign": { - "message": "Assign" + "message": "اختصاص بدهید" }, "assignToCollections": { - "message": "Assign to collections" + "message": "اختصاص به مجموعه‌ها" }, "assignToTheseCollections": { - "message": "Assign to these collections" + "message": "اختصاص به این مجموعه‌ها" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Only organization members with access to these collections will be able to see the item." + "message": "فقط اعضای سازمانی که به این مجموعه‌ها دسترسی دارند قادر به مشاهده این مورد خواهند بود." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Only organization members with access to these collections will be able to see the items." + "message": "فقط اعضای سازمانی که به این مجموعه‌ها دسترسی دارند قادر به مشاهده این موارد خواهند بود." }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "مجموعه‌ها را برای اختصاص انتخاب کنید" }, "noCollectionsAssigned": { - "message": "No collections have been assigned" + "message": "هیچ مجموعه‌ای اختصاص داده نشده است" }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "مجموعه‌ها با موفقیت اختصاص داده شدند" }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "شما $TOTAL_COUNT$ مورد را انتخاب کرده‌اید. نمی‌توانید $READONLY_COUNT$ مورد را به‌روزرسانی کنید زیرا دسترسی ویرایش ندارید.", "placeholders": { "total_count": { "content": "$1", @@ -8957,61 +8972,61 @@ } }, "addField": { - "message": "Add field" + "message": "افزودن فیلد" }, "editField": { - "message": "Edit field" + "message": "ویرایش فیلد" }, "items": { - "message": "Items" + "message": "موارد" }, "assignedSeats": { - "message": "Assigned seats" + "message": "صندلی‌های اختصاص داده شده" }, "assigned": { - "message": "Assigned" + "message": "اختصاص یافته" }, "used": { - "message": "Used" + "message": "استفاده شده" }, "remaining": { - "message": "Remaining" + "message": "باقی مانده" }, "unlinkOrganization": { - "message": "Unlink organization" + "message": "قطع ارتباط با سازمان" }, "manageSeats": { - "message": "MANAGE SEATS" + "message": "مدیریت صندلی‌ها" }, "manageSeatsDescription": { - "message": "Adjustments to seats will be reflected in the next billing cycle." + "message": "تغییرات در تعداد صندلی‌ها در دوره صورتحساب بعدی اعمال خواهد شد." }, "unassignedSeatsDescription": { - "message": "Unassigned seats" + "message": "صندلی‌های تخصیص داده نشده" }, "purchaseSeatDescription": { - "message": "Additional seats purchased" + "message": "صندلی‌های اضافی خریداری شده" }, "assignedSeatCannotUpdate": { - "message": "Assigned Seats can not be updated. Please contact your organization owner for assistance." + "message": "صندلی‌های اختصاص داده شده قابل به‌روزرسانی نیستند. لطفاً برای دریافت کمک با مدیر سازمان خود تماس بگیرید." }, "subscriptionUpdateFailed": { - "message": "Subscription update failed" + "message": "به‌روزرسانی اشتراک ناموفق بود" }, "trial": { - "message": "Trial", + "message": "نسخه آزمایشی", "description": "A subscription status label." }, "pastDue": { - "message": "Past due", + "message": "بدهی معوق", "description": "A subscription status label" }, "subscriptionExpired": { - "message": "Subscription expired", + "message": "اشتراک به پایان رسیده است", "description": "The date header used when a subscription is past due." }, "pastDueWarningForChargeAutomatically": { - "message": "You have a grace period of $DAYS$ days from your subscription expiration date to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.", + "message": "شما یک دوره مهلت به مدت $DAYS$ روز از تاریخ انقضای اشتراک خود دارید تا اشتراک خود را حفظ کنید. لطفاً فاکتورهای معوق را تا تاریخ $SUSPENSION_DATE$ تسویه کنید.", "placeholders": { "days": { "content": "$1", @@ -9025,7 +9040,7 @@ "description": "A warning shown to the user when their subscription is past due and they are charged automatically." }, "pastDueWarningForSendInvoice": { - "message": "You have a grace period of $DAYS$ days from the date your first unpaid invoice is due to maintain your subscription. Please resolve the past due invoices by $SUSPENSION_DATE$.", + "message": "شما یک دوره مهلت به مدت $DAYS$ روز از تاریخ سررسید اولین فاکتور پرداخت نشده دارید تا اشتراک خود را حفظ کنید. لطفاً فاکتورهای معوق را تا تاریخ $SUSPENSION_DATE$ تسویه کنید.", "placeholders": { "days": { "content": "$1", @@ -9039,54 +9054,54 @@ "description": "A warning shown to the user when their subscription is past due and they pay via invoice." }, "unpaidInvoice": { - "message": "Unpaid invoice", + "message": "صورت حساب پرداخت نشده", "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": "برای فعال‌سازی مجدد اشتراک خود، لطفاً فاکتورهای معوق را تسویه کنید.", "description": "The body of a warning box shown to a user whose subscription is unpaid." }, "cancellationDate": { - "message": "Cancellation date", + "message": "تاریخ لغو", "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": "حساب‌های ماشین را نمی‌توان در سازمان‌های معلق ایجاد کرد. لطفاً برای کمک با مالک سازمان خود تماس بگیرید." }, "machineAccount": { - "message": "Machine account", + "message": "حساب کاربری دستگاه", "description": "A machine user which can be used to automate processes and access secrets in the system." }, "machineAccounts": { - "message": "Machine accounts", + "message": "حساب‌های کاربری دستگاه", "description": "The title for the section that deals with machine accounts." }, "newMachineAccount": { - "message": "New machine account", + "message": "حساب کاربری دستگاه جدید", "description": "Title for creating a new machine account." }, "machineAccountsNoItemsMessage": { - "message": "Create a new machine account to get started automating secret access.", + "message": "برای شروع خودکارسازی دسترسی مخفی، یک حساب دستگاه جدید ایجاد کنید.", "description": "Message to encourage the user to start creating machine accounts." }, "machineAccountsNoItemsTitle": { - "message": "Nothing to show yet", + "message": "هنوز چیزی برای نشان دادن موجود نیست", "description": "Title to indicate that there are no machine accounts to display." }, "deleteMachineAccounts": { - "message": "Delete machine accounts", + "message": "حذف حساب‌های دستگاه", "description": "Title for the action to delete one or multiple machine accounts." }, "deleteMachineAccount": { - "message": "Delete machine account", + "message": "حذف حساب دستگاه", "description": "Title for the action to delete a single machine account." }, "viewMachineAccount": { - "message": "View machine account", + "message": "مشاهده حساب دستگاه", "description": "Action to view the details of a machine account." }, "deleteMachineAccountDialogMessage": { - "message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.", + "message": "حذف حساب دستگاه $MACHINE_ACCOUNT$ دائمی و غیرقابل بازگشت است.", "placeholders": { "machine_account": { "content": "$1", @@ -9095,10 +9110,10 @@ } }, "deleteMachineAccountsDialogMessage": { - "message": "Deleting machine accounts is permanent and irreversible." + "message": "حذف حساب‌های ماشین، دائمی و غیرقابل برگشت است." }, "deleteMachineAccountsConfirmMessage": { - "message": "Delete $COUNT$ machine accounts", + "message": "حذف $COUNT$ حساب دستگاه", "placeholders": { "count": { "content": "$1", @@ -9107,60 +9122,60 @@ } }, "deleteMachineAccountToast": { - "message": "Machine account deleted" + "message": "حساب دستگاه حذف شد" }, "deleteMachineAccountsToast": { - "message": "Machine accounts deleted" + "message": "حساب‌های دستگاه حذف شد" }, "searchMachineAccounts": { - "message": "Search machine accounts", + "message": "جستجوی حساب‌های دستگاه", "description": "Placeholder text for searching machine accounts." }, "editMachineAccount": { - "message": "Edit machine account", + "message": "ویرایش حساب دستگاه", "description": "Title for editing a machine account." }, "machineAccountName": { - "message": "Machine account name", + "message": "نام حساب دستگاه", "description": "Label for the name of a machine account" }, "machineAccountCreated": { - "message": "Machine account created", + "message": "حساب دستگاه ایجاد شد", "description": "Notifies that a new machine account has been created" }, "machineAccountUpdated": { - "message": "Machine account updated", + "message": "حساب دستگاه به‌روزرسانی شد", "description": "Notifies that a machine account has been updated" }, "projectMachineAccountsDescription": { - "message": "Grant machine accounts access to this project." + "message": "دسترسی حساب‌های دستگاه به این پروژه را اعطا کنید." }, "projectMachineAccountsSelectHint": { - "message": "Type or select machine accounts" + "message": "حساب‌های دستگاه را وارد کنید یا انتخاب کنید" }, "projectEmptyMachineAccountAccessPolicies": { - "message": "Add machine accounts to grant access" + "message": "برای اعطای دسترسی، حساب‌های دستگاه را اضافه کنید" }, "machineAccountPeopleDescription": { - "message": "Grant groups or people access to this machine account." + "message": "به گروه‌ها یا افراد اجازه دسترسی به این حساب ماشین را بدهید." }, "machineAccountProjectsDescription": { - "message": "Assign projects to this machine account. " + "message": "پروژه‌ها را به این حساب دستگاه اختصاص دهید. " }, "createMachineAccount": { - "message": "Create a machine account" + "message": "ایجاد حساب دستگاه" }, "maPeopleWarningMessage": { - "message": "Removing people from a machine account does not remove the access tokens they created. For security best practice, it is recommended to revoke access tokens created by people removed from a machine account." + "message": "حذف افراد از حساب دستگاه، توکن‌های دسترسی ایجاد شده توسط آن‌ها را حذف نمی‌کند. برای بهترین عملکرد امنیتی، توصیه می‌شود توکن‌های دسترسی ایجاد شده توسط افرادی که از حساب دستگاه حذف شده‌اند لغو شود." }, "smAccessRemovalWarningMaTitle": { - "message": "Remove access to this machine account" + "message": "دسترسی به این حساب دستگاه را حذف کنید" }, "smAccessRemovalWarningMaMessage": { - "message": "This action will remove your access to the machine account." + "message": "این عمل دسترسی شما به حساب دستگاه را حذف می‌کند." }, "machineAccountsIncluded": { - "message": "$COUNT$ machine accounts included", + "message": "تعداد $COUNT$ حساب ماشین شامل شده است", "placeholders": { "count": { "content": "$1", @@ -9169,7 +9184,7 @@ } }, "additionalMachineAccountCost": { - "message": "$COST$ per month for additional machine accounts", + "message": "$COST$ در ماه برای هر حساب ماشین اضافی", "placeholders": { "cost": { "content": "$1", @@ -9178,10 +9193,10 @@ } }, "additionalMachineAccounts": { - "message": "Additional machine accounts" + "message": "حساب‌های ماشین اضافی" }, "includedMachineAccounts": { - "message": "Your plan comes with $COUNT$ machine accounts.", + "message": "طرح شما شامل $COUNT$ حساب ماشین است.", "placeholders": { "count": { "content": "$1", @@ -9190,7 +9205,7 @@ } }, "addAdditionalMachineAccounts": { - "message": "You can add additional machine accounts for $COST$ per month.", + "message": "می‌توانید دستگاه اضافی حساب‌ها را با $COST$ در ماه اضافه کنید.", "placeholders": { "cost": { "content": "$1", @@ -9199,31 +9214,31 @@ } }, "limitMachineAccounts": { - "message": "Limit machine accounts (optional)" + "message": "محدود کردن حساب‌های دستگاه (اختیاری)" }, "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": "برای حساب‌های دستگاه خود محدودیتی تعیین کنید. پس از رسیدن به این محدودیت، نمی‌توانید حساب‌های دستگاه جدید ایجاد کنید." }, "machineAccountLimit": { - "message": "Machine account limit (optional)" + "message": "حداکثر تعداد حساب‌های ماشین (اختیاری)" }, "maxMachineAccountCost": { - "message": "Max potential machine account cost" + "message": "حداکثر هزینه ممکن برای حساب‌های دستگاه" }, "machineAccountAccessUpdated": { - "message": "Machine account access updated" + "message": "دسترسی حساب‌های دستگاه به‌روزرسانی شد" }, "restrictedGroupAccessDesc": { - "message": "You cannot add yourself to a group." + "message": "شما نمی‌توانید خودتان را به یک گروه اضافه کنید." }, "deleteProvider": { - "message": "Delete provider" + "message": "حذف ارائه‌دهنده" }, "deleteProviderConfirmation": { - "message": "Deleting a provider is permanent and irreversible. Enter your master password to confirm the deletion of the provider and all associated data." + "message": "حذف یک ارائه‌دهنده دائمی و غیرقابل بازگشت است. برای تأیید حذف ارائه‌دهنده و تمام داده‌های مرتبط، کلمه عبور اصلی خود را وارد کنید." }, "deleteProviderName": { - "message": "Cannot delete $ID$", + "message": "امکان حذف $ID$ وجود ندارد", "placeholders": { "id": { "content": "$1", @@ -9232,7 +9247,7 @@ } }, "deleteProviderWarningDescription": { - "message": "You must unlink all clients before you can delete $ID$.", + "message": "قبل از حذف $ID$ باید تمام مشتری‌ها را جدا کنید.", "placeholders": { "id": { "content": "$1", @@ -9241,96 +9256,96 @@ } }, "providerDeleted": { - "message": "Provider deleted" + "message": "ارائه‌دهنده حذف شد" }, "providerDeletedDesc": { - "message": "The Provider and all associated data has been deleted." + "message": "ارائه‌دهنده و تمام داده‌های مرتبط حذف شدند." }, "deleteProviderRecoverConfirmDesc": { - "message": "You have requested to delete this Provider. Use the button below to confirm." + "message": "شما درخواست حذف این ارائه‌دهنده را داده‌اید. برای تأیید، از دکمه زیر استفاده کنید." }, "deleteProviderWarning": { - "message": "Deleting your provider is permanent. It cannot be undone." + "message": "حذف ارائه‌دهنده شما دائمی است و قابل بازگشت نیست." }, "errorAssigningTargetCollection": { - "message": "Error assigning target collection." + "message": "خطا در اختصاص مجموعه هدف." }, "errorAssigningTargetFolder": { - "message": "Error assigning target folder." + "message": "خطا در اختصاص پوشه هدف." }, "integrationsAndSdks": { - "message": "Integrations & SDKs", + "message": "ادغام‌ها و کیت‌های توسعه نرم‌افزار (SDK)", "description": "The title for the section that deals with integrations and SDKs." }, "integrations": { - "message": "Integrations" + "message": "یکپارچه سازی‌ها" }, "integrationsDesc": { - "message": "Automatically sync secrets from Bitwarden Secrets Manager to a third-party service." + "message": "همگام‌سازی خودکار رمزها از مدیر اسرار Bitwarden به سرویس‌های ثالث." }, "sdks": { - "message": "SDKs" + "message": "SDK ها" }, "sdksDesc": { - "message": "Use Bitwarden Secrets Manager SDK in the following programming languages to build your own applications." + "message": "برای ساخت برنامه‌های خود، از کیت توسعه مدیر اسرار (SDK) Bitwarden در زبان‌های برنامه‌نویسی زیر استفاده کنید." }, "ssoDescStart": { - "message": "Configure", + "message": "پیکربندی", "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": "برای Bitwarden با استفاده از راهنمای پیاده‌سازی ارائه‌دهنده هویت خود.", "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": "تأمین کاربران" }, "scimIntegration": { "message": "SCIM" }, "scimIntegrationDescStart": { - "message": "Configure ", + "message": "پیکربندی ", "description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider" }, "scimIntegrationDescEnd": { - "message": "(System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider.", + "message": "سامانه مدیریت هویت بین‌دامنه (Scim) برای تأمین خودکار کاربران و گروه‌ها در Bitwarden با استفاده از راهنمای پیاده‌سازی ارائه‌دهنده هویت شما.", "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" }, "bwdcDesc": { - "message": "Configure Bitwarden Directory Connector to automatically provision users and groups using the implementation guide for your Identity Provider." + "message": "کانکتور دایرکتوری Bitwarden را برای تأمین خودکار کاربران و گروه‌ها با استفاده از راهنمای پیاده‌سازی ارائه‌دهنده هویت خود تنظیم کنید." }, "eventManagement": { - "message": "Event management" + "message": "مدیریت رویدادها" }, "eventManagementDesc": { - "message": "Integrate Bitwarden event logs with your SIEM (system information and event management) system by using the implementation guide for your platform." + "message": "گزارش‌های رویداد Bitwarden را با سیستم SIEM (مدیریت اطلاعات و رویدادهای امنیتی) خود با استفاده از راهنمای پیاده‌سازی مخصوص پلتفرم خود ادغام کنید." }, "deviceManagement": { - "message": "Device management" + "message": "مدیریت دستگاه" }, "deviceManagementDesc": { - "message": "Configure device management for Bitwarden using the implementation guide for your platform." + "message": "مدیریت دستگاه‌ها را برای Bitwarden با استفاده از راهنمای پیاده‌سازی مربوط به پلتفرم خود پیکربندی کنید." }, "deviceIdMissing": { - "message": "Device ID is missing" + "message": "شناسه دستگاه موجود نیست" }, "deviceTypeMissing": { - "message": "Device type is missing" + "message": "نوع دستگاه مشخص نیست" }, "deviceCreationDateMissing": { - "message": "Device creation date is missing" + "message": "تاریخ ایجاد دستگاه مشخص نیست" }, "desktopRequired": { - "message": "Desktop required" + "message": "دسکتاپ مورد نیاز است" }, "reopenLinkOnDesktop": { - "message": "Reopen this link from your email on a desktop." + "message": "این لینک را از ایمیل خود روی دسکتاپ باز کنید." }, "integrationCardTooltip": { - "message": "Launch $INTEGRATION$ implementation guide.", + "message": "راهنمای پیاده‌سازی $INTEGRATION$ را اجرا کنید.", "placeholders": { "integration": { "content": "$1", @@ -9339,7 +9354,7 @@ } }, "smIntegrationTooltip": { - "message": "Set up $INTEGRATION$.", + "message": "راه‌اندازی $INTEGRATION$.", "placeholders": { "integration": { "content": "$1", @@ -9348,7 +9363,7 @@ } }, "smSdkTooltip": { - "message": "View $SDK$ repository", + "message": "مشاهده مخزن $SDK$", "placeholders": { "sdk": { "content": "$1", @@ -9357,7 +9372,7 @@ } }, "integrationCardAriaLabel": { - "message": "open $INTEGRATION$ implementation guide in a new tab.", + "message": "راهنمای پیاده‌سازی $INTEGRATION$ را در یک تب جدید باز کنید.", "placeholders": { "integration": { "content": "$1", @@ -9366,7 +9381,7 @@ } }, "smSdkAriaLabel": { - "message": "view $SDK$ repository in a new tab.", + "message": "مخزن $SDK$ را در یک تب جدید مشاهده کنید.", "placeholders": { "sdk": { "content": "$1", @@ -9375,7 +9390,7 @@ } }, "smIntegrationCardAriaLabel": { - "message": "set up $INTEGRATION$ implementation guide in a new tab.", + "message": "راهنمای پیاده‌سازی $INTEGRATION$ را در یک تب جدید راه‌اندازی کنید.", "placeholders": { "integration": { "content": "$1", @@ -9384,76 +9399,76 @@ } }, "createNewClientToManageAsProvider": { - "message": "Create a new client organization to manage as a Provider. Additional seats will be reflected in the next billing cycle." + "message": "یک سازمان مشتری جدید به‌عنوان ارائه‌دهنده ایجاد کنید. صندلی‌های اضافی در دوره صورتحساب بعدی اعمال خواهند شد." }, "selectAPlan": { - "message": "Select a plan" + "message": "یک طرح انتخاب کنید" }, "thirtyFivePercentDiscount": { - "message": "35% Discount" + "message": "۳۵٪ تخفیف" }, "monthPerMember": { - "message": "month per member" + "message": "ماهانه به ازای هر عضو" }, "monthPerMemberBilledAnnually": { - "message": "month per member billed annually" + "message": "ماهانه به ازای هر عضو، پرداخت به صورت سالانه" }, "seats": { - "message": "Seats" + "message": "صندلی‌ها" }, "addOrganization": { - "message": "Add organization" + "message": "افزودن سازمان" }, "createdNewClient": { - "message": "Successfully created new client" + "message": "ایجاد مشتری جدید با موفقیت انجام شد" }, "noAccess": { - "message": "No access" + "message": "بدون دسترسی" }, "collectionAdminConsoleManaged": { - "message": "This collection is only accessible from the admin console" + "message": "این مجموعه فقط از طریق کنسول مدیریت قابل دسترسی است" }, "organizationOptionsMenu": { - "message": "Toggle Organization Menu" + "message": "تغییر وضعیت منوی سازمان" }, "vaultItemSelect": { - "message": "Select vault item" + "message": "مورد گاوصندوق را انتخاب کنید" }, "collectionItemSelect": { - "message": "Select collection item" + "message": "مورد مجموعه را انتخاب کنید" }, "manageBillingFromProviderPortalMessage": { - "message": "Manage billing from the Provider Portal" + "message": "مدیریت صورتحساب از طریق درگاه ارائه‌دهنده" }, "continueSettingUp": { - "message": "Continue setting up Bitwarden" + "message": "ادامه راه‌اندازی Bitwarden" }, "continueSettingUpFreeTrial": { - "message": "Continue setting up your free trial of Bitwarden" + "message": "ادامه تنظیم دوره آزمایشی رایگان Bitwarden خود را انجام دهید" }, "continueSettingUpPasswordManager": { - "message": "Continue setting up Bitwarden Password Manager" + "message": "ادامه راه‌اندازی مدیر کلمه عبور Bitwarden را انجام دهید" }, "continueSettingUpFreeTrialPasswordManager": { - "message": "Continue setting up your free trial of Bitwarden Password Manager" + "message": "ادامه راه‌اندازی دوره آزمایشی رایگان مدیر کلمه عبور Bitwarden را انجام دهید" }, "continueSettingUpSecretsManager": { - "message": "Continue setting up Bitwarden Secrets Manager" + "message": "ادامه راه‌اندازی مدیر اسرار Bitwarden را انجام دهید" }, "continueSettingUpFreeTrialSecretsManager": { - "message": "Continue setting up your free trial of Bitwarden Secrets Manager" + "message": "ادامه راه‌اندازی دوره آزمایشی رایگان مدیر اسرار Bitwarden را انجام دهید" }, "enterTeamsOrgInfo": { - "message": "Enter your Teams organization information" + "message": "اطلاعات سازمان تیم خود را وارد کنید" }, "enterFamiliesOrgInfo": { - "message": "Enter your Families organization information" + "message": "اطلاعات سازمان خانواده خود را وارد کنید" }, "enterEnterpriseOrgInfo": { - "message": "Enter your Enterprise organization information" + "message": "اطلاعات سازمان تجاری خود را وارد کنید" }, "viewItemsIn": { - "message": "View items in $NAME$", + "message": "مشاهده موارد در $NAME$", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -9463,7 +9478,7 @@ } }, "backTo": { - "message": "Back to $NAME$", + "message": "بازگشت به $NAME$", "description": "Navigate back to a previous folder or collection", "placeholders": { "name": { @@ -9473,11 +9488,11 @@ } }, "back": { - "message": "Back", + "message": "بازگشت", "description": "Button text to navigate back" }, "removeItem": { - "message": "Remove $NAME$", + "message": "حذف $NAME$", "description": "Remove a selected option, such as a folder or collection", "placeholders": { "name": { @@ -9487,34 +9502,34 @@ } }, "viewInfo": { - "message": "View info" + "message": "نمایش اطلاعات" }, "viewAccess": { - "message": "View access" + "message": "مشاهده دسترسی" }, "noCollectionsSelected": { - "message": "You have not selected any collections." + "message": "شما هیچ مجموعه‌ای را انتخاب نکرده‌اید." }, "updateName": { - "message": "Update name" + "message": "به‌روزرسانی نام" }, "updatedOrganizationName": { - "message": "Updated organization name" + "message": "نام سازمان به‌روزرسانی شد" }, "providerPlan": { - "message": "Managed Service Provider" + "message": "ارائه‌دهنده خدمات مدیریت شده" }, "managedServiceProvider": { - "message": "Managed service provider" + "message": "ارائه‌دهنده خدمات مدیریت شده" }, "multiOrganizationEnterprise": { - "message": "Multi-organization enterprise" + "message": "سازمان تجاری چندسازمانی" }, "orgSeats": { - "message": "Organization Seats" + "message": "صندلی‌های سازمان" }, "providerDiscount": { - "message": "$AMOUNT$% Discount", + "message": "$AMOUNT$٪ تخفیف", "placeholders": { "amount": { "content": "$1", @@ -9523,122 +9538,122 @@ } }, "lowKDFIterationsBanner": { - "message": "Low KDF iterations. Increase your iterations to improve the security of your account." + "message": "تعداد تکرارهای KDF پایین است. برای افزایش امنیت حساب کاربری خود، تعداد تکرارها را افزایش دهید." }, "changeKDFSettings": { - "message": "Change KDF settings" + "message": "تغییر تنظیمات KDF" }, "secureYourInfrastructure": { - "message": "Secure your infrastructure" + "message": "زیرساخت خود را ایمن کنید" }, "protectYourFamilyOrBusiness": { - "message": "Protect your family or business" + "message": "از خانواده یا کسب‌وکار خود را محافظت کنید" }, "upgradeOrganizationCloseSecurityGaps": { - "message": "Close security gaps with monitoring reports" + "message": "شکاف‌های امنیتی را با گزارش‌های نظارتی ببندید" }, "upgradeOrganizationCloseSecurityGapsDesc": { - "message": "Stay ahead of security vulnerabilities by upgrading to a paid plan for enhanced monitoring." + "message": "با ارتقا به طرح پرداختی برای نظارت پیشرفته، از آسیب‌پذیری‌های امنیتی جلوتر باشید." }, "approveAllRequests": { - "message": "Approve all requests" + "message": "تمام درخواست‌ها را تأیید کن" }, "allLoginRequestsApproved": { - "message": "All login requests approved" + "message": "تمام درخواست‌های ورود تأیید شدند" }, "payPal": { - "message": "PayPal" + "message": "پی پال" }, "bitcoin": { - "message": "Bitcoin" + "message": "بیت کوین" }, "updatedTaxInformation": { - "message": "Updated tax information" + "message": "اطلاعات مالیاتی به‌روزرسانی شد" }, "billingInvalidTaxIdError": { - "message": "Invalid tax ID, if you believe this is an error please contact support." + "message": "شناسه مالیاتی نامعتبر است. اگر فکر می‌کنید این یک اشتباه است، لطفاً با پشتیبانی تماس بگیرید." }, "billingTaxIdTypeInferenceError": { - "message": "We were unable to validate your tax ID, if you believe this is an error please contact support." + "message": "ما نتوانستیم شناسه مالیاتی شما را تأیید کنیم. اگر فکر می‌کنید این یک اشتباه است، لطفاً با پشتیبانی تماس بگیرید." }, "billingPreviewInvalidTaxIdError": { - "message": "Invalid tax ID, if you believe this is an error please contact support." + "message": "شناسه مالیاتی نامعتبر است. اگر فکر می‌کنید این یک اشتباه است، لطفاً با پشتیبانی تماس بگیرید." }, "billingPreviewInvoiceError": { - "message": "An error occurred while previewing the invoice. Please try again later." + "message": "هنگام پیش‌نمایش فاکتور خطا رخ داد. لطفاً بعداً دوباره تلاش کنید." }, "unverified": { - "message": "Unverified" + "message": "تأیید نشده" }, "verified": { - "message": "Verified" + "message": "تأیید شده" }, "viewSecret": { - "message": "View secret" + "message": "مشاهده راز" }, "noClients": { - "message": "There are no clients to list" + "message": "هیچ مشتری برای نمایش وجود ندارد" }, "providerBillingEmailHint": { - "message": "This email address will receive all invoices pertaining to this provider", + "message": "این آدرس ایمیل همه فاکتورهای مربوط به این ارائه‌دهنده را دریافت خواهد کرد", "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": "شناسایی خطرات امنیتی با بررسی دسترسی اعضا" }, "onlyAvailableForEnterpriseOrganization": { - "message": "Quickly view member access across the organization by upgrading to an Enterprise plan." + "message": "با ارتقا به طرح سازمانی، به‌سرعت دسترسی اعضا در سراسر سازمان را مشاهده کنید." }, "date": { - "message": "Date" + "message": "تاریخ" }, "exportClientReport": { - "message": "Export client report" + "message": "گزارشات برون ریزی مشتری" }, "memberAccessReport": { - "message": "Member access" + "message": "دسترسی اعضا" }, "memberAccessReportDesc": { - "message": "Ensure members have access to the right credentials and their accounts are secure. Use this report to obtain a CSV of member access and account configurations." + "message": "اطمینان حاصل کنید که اعضا به اطلاعات ورود مناسب دسترسی دارند و حساب‌هایشان امن است. از این گزارش برای دریافت پرونده CSV شامل دسترسی اعضا و تنظیمات حساب‌های کاربری استفاده کنید." }, "memberAccessReportPageDesc": { - "message": "Audit organization member access across groups, collections, and collection items. The CSV export provides a detailed breakdown per member, including information on collection permissions and account configurations." + "message": "دسترسی اعضای سازمان را در گروه‌ها، مجموعه‌ها و موارد مجموعه بررسی کنید. خروجی CSV شامل جزئیات کامل برای هر عضو است، از جمله اطلاعات مربوط به مجوزهای مجموعه و تنظیمات حساب کاربری." }, "memberAccessReportNoCollection": { - "message": "(No Collection)" + "message": "(بدون مجموعه)" }, "memberAccessReportNoCollectionPermission": { - "message": "(No Collection Permission)" + "message": "(بدون مجوز مجموعه)" }, "memberAccessReportNoGroup": { - "message": "(No Group)" + "message": "(بدون گروه)" }, "memberAccessReportTwoFactorEnabledTrue": { - "message": "On" + "message": "روشن" }, "memberAccessReportTwoFactorEnabledFalse": { - "message": "Off" + "message": "خاموش" }, "memberAccessReportAuthenticationEnabledTrue": { - "message": "On" + "message": "روشن" }, "memberAccessReportAuthenticationEnabledFalse": { - "message": "Off" + "message": "خاموش" }, "higherKDFIterations": { - "message": "Higher KDF iterations can help protect your master password from being brute forced by an attacker." + "message": "افزایش تعداد تکرارهای KDF می‌تواند به محافظت از کلمه عبور اصلی شما در برابر حملات بروت‌فورس کمک کند." }, "incrementsOf100,000": { - "message": "increments of 100,000" + "message": "افزایش‌ها به صورت ۱۰۰,۰۰۰ تایی" }, "smallIncrements": { - "message": "small increments" + "message": "افزایش‌های کوچک" }, "kdfIterationRecommends": { - "message": "We recommend 600,000 or more" + "message": "ما توصیه می‌کنیم ۶۰۰,۰۰۰ یا بیشتر باشد" }, "kdfToHighWarningIncreaseInIncrements": { - "message": "For older devices, setting your KDF too high may lead to performance issues. Increase the value in $VALUE$ and test your devices.", + "message": "برای دستگاه‌های قدیمی‌تر، تنظیم KDF خیلی بالا ممکن است باعث مشکلات عملکردی شود. مقدار را در $VALUE$ افزایش دهید و دستگاه‌های خود را تست کنید.", "placeholders": { "value": { "content": "$1", @@ -9647,31 +9662,31 @@ } }, "providerReinstate": { - "message": " Contact Customer Support to reinstate your subscription." + "message": " برای بازیابی اشتراک خود با پشتیبانی مشتری تماس بگیرید." }, "secretPeopleDescription": { - "message": "Grant groups or people access to this secret. Permissions set for people will override permissions set by groups." + "message": "به گروه‌ها یا افراد برای دسترسی به این راز اجازه دهید. مجوزهایی که برای افراد تنظیم می‌شود، بر مجوزهای تنظیم‌شده توسط گروه‌ها اولویت خواهد داشت." }, "secretPeopleEmptyMessage": { - "message": "Add people or groups to share access to this secret" + "message": "برای اشتراک‌گذاری دسترسی به این راز، افراد یا گروه‌ها را اضافه کنید" }, "secretMachineAccountsDescription": { - "message": "Grant machine accounts access to this secret." + "message": "به حساب‌های دستگاه اجازه دسترسی به این راز را بدهید." }, "secretMachineAccountsEmptyMessage": { - "message": "Add machine accounts to grant access to this secret" + "message": "برای اعطای دسترسی به این راز، حساب‌های دستگاه را اضافه کنید" }, "smAccessRemovalWarningSecretTitle": { - "message": "Remove access to this secret" + "message": "دسترسی به این راز را حذف کنید" }, "smAccessRemovalSecretMessage": { - "message": "This action will remove your access to this secret." + "message": "این اقدام دسترسی شما به این راز را حذف خواهد کرد." }, "invoice": { - "message": "Invoice" + "message": "صورت‌حساب" }, "unassignedSeatsAvailable": { - "message": "You have $SEATS$ unassigned seats available.", + "message": "شما $SEATS$ صندلی اختصاص نیافته در دسترس دارید.", "placeholders": { "seats": { "content": "$1", @@ -9681,61 +9696,61 @@ "description": "A message showing how many unassigned seats are available for a provider." }, "contactYourProviderForAdditionalSeats": { - "message": "Contact your provider admin to purchase additional seats." + "message": "برای خرید صندلی‌های اضافی با مدیر ارائه‌دهنده خود تماس بگیرید." }, "open": { - "message": "Open", + "message": "باز کن", "description": "The status of an invoice." }, "uncollectible": { - "message": "Uncollectible", + "message": "غیرقابل وصول", "description": "The status of an invoice." }, "clientDetails": { - "message": "Client details" + "message": "جزئیات مشتری" }, "downloadCSV": { - "message": "Download CSV" + "message": "بارگیری CSV" }, "monthlySubscriptionUserSeatsMessage": { - "message": "Adjustments to your subscription will result in prorated charges to your billing totals on your next billing period. " + "message": "تغییرات در اشتراک شما منجر به اعمال هزینه‌های نسبت‌ داده شده در مجموع صورتحساب دوره بعدی خواهد شد. " }, "annualSubscriptionUserSeatsMessage": { - "message": "Adjustments to your subscription will result in prorated charges on a monthly billing cycle. " + "message": "تغییرات در اشتراک شما منجر به اعمال هزینه‌های نسبت‌داده شده در دوره صورتحساب ماهانه خواهد شد. " }, "billingHistoryDescription": { - "message": "Download a CSV to obtain client details for each billing date. Prorated charges are not included in the CSV and may vary from the linked invoice. For the most accurate billing details, refer to your monthly invoices.", + "message": "یک پرونده CSV بارگیری کنید تا جزئیات مشتری‌ها را برای هر تاریخ صورتحساب دریافت کنید. هزینه‌های نسبت‌داده شده در CSV گنجانده نشده‌اند و ممکن است با فاکتور مربوطه متفاوت باشند. برای دقیق‌ترین اطلاعات صورتحساب، به فاکتورهای ماهانه خود مراجعه کنید.", "description": "A paragraph on the Billing History page of the Provider Portal letting users know they can download a CSV report for their invoices that does not include prorations." }, "noInvoicesToList": { - "message": "There are no invoices to list", + "message": "هیچ فاکتوری برای نمایش وجود ندارد", "description": "A paragraph on the Billing History page of the Provider Portal letting users know they can download a CSV report for their invoices that does not include prorations." }, "providerClientVaultPrivacyNotification": { - "message": "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,", + "message": "اطلاعیه: اواخر این ماه، حریم خصوصی گاوصندوق‌های مشتری بهبود می‌یابد و اعضای ارائه‌دهنده دیگر به طور مستقیم به موارد گاوصندوق مشتری دسترسی نخواهند داشت. برای سوالات،", "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.", "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": "Sponsored" + "message": "حمایت شده" }, "licenseAndBillingManagementDesc": { - "message": "After making updates in the Bitwarden cloud server, upload your license file to apply the most recent changes." + "message": "پس از انجام به‌روزرسانی‌ها در سرور ابری Bitwarden، برای اعمال آخرین تغییرات، فایل لایسنس خود را بارگذاری کنید." }, "addToFolder": { - "message": "Add to folder" + "message": "افزودن به پوشه" }, "selectFolder": { - "message": "Select folder" + "message": "انتخاب پوشه" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "۱ مورد به طور دائمی به سازمان انتخاب شده منتقل خواهد شد. شما دیگر مالک این مورد نخواهید بود." }, "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$ مورد به طور دائمی به سازمان انتخاب شده منتقل خواهند شد. شما دیگر مالک این موارد نخواهید بود.", "placeholders": { "personal_items_count": { "content": "$1", @@ -9744,7 +9759,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 item will be permanently transferred to $ORG$. You will no longer own this item.", + "message": "۱ مورد به طور دائمی به $ORG$ منتقل خواهد شد. شما دیگر مالک این مورد نخواهید بود.", "placeholders": { "org": { "content": "$1", @@ -9753,7 +9768,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to $ORG$. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ مورد به طور دائمی به $ORG$ منتقل خواهند شد. شما دیگر مالک این موارد نخواهید بود.", "placeholders": { "personal_items_count": { "content": "$1", @@ -9766,85 +9781,85 @@ } }, "data": { - "message": "Data" + "message": "داده‌" }, "purchasedSeatsRemoved": { - "message": "purchased seats removed" + "message": "صندلی‌های خریداری‌شده حذف شدند" }, "environmentVariables": { - "message": "Environment variables" + "message": "متغیرهای محیطی" }, "organizationId": { - "message": "Organization ID" + "message": "شناسه سازمان" }, "projectIds": { - "message": "Project IDs" + "message": "شناسه‌های پروژه" }, "projectId": { - "message": "Project ID" + "message": "شناسه پروژه" }, "projectsAccessedByMachineAccount": { - "message": "The following projects can be accessed by this machine account." + "message": "این حساب دستگاه می‌تواند به پروژه‌های زیر دسترسی داشته باشد." }, "config": { - "message": "Config" + "message": "پیکربندی" }, "learnMoreAboutEmergencyAccess": { - "message": "Learn more about emergency access" + "message": "بیشتر درباره دسترسی اضطراری بیاموزید" }, "learnMoreAboutMatchDetection": { - "message": "Learn more about match detection" + "message": "بیشتر درباره تشخیص تطابق بیاموزید" }, "learnMoreAboutMasterPasswordReprompt": { - "message": "Learn more about master password re-prompt" + "message": "بیشتر درباره درخواست مجدد کلمه عبور اصلی بیاموزید" }, "learnMoreAboutSearchingYourVault": { - "message": "Learn more about searching your vault" + "message": "بیشتر درباره جستجو در گاوصندوق خود بیاموزید" }, "learnMoreAboutYourAccountFingerprintPhrase": { - "message": "Learn about your account fingerprint phrase" + "message": "درباره عبارت اثر انگشت حساب خود اطلاعات کسب کنید" }, "impactOfRotatingYourEncryptionKey": { - "message": "Impact of rotating your encryption key" + "message": "تأثیر تغییر دوره‌ای کلید رمزگذاری شما" }, "learnMoreAboutEncryptionAlgorithms": { - "message": "Learn more about encryption algorithms" + "message": "بیشتر درباره الگوریتم‌های رمزگذاری بیاموزید" }, "learnMoreAboutKDFIterations": { - "message": "Learn more about KDF iterations" + "message": "بیشتر درباره تکرارهای KDF بیاموزید" }, "learnMoreAboutLocalization": { - "message": "Learn more about localization" + "message": "بیشتر درباره بومی‌سازی بیاموزید" }, "learnMoreAboutWebsiteIcons": { - "message": "Learn more about using website icons" + "message": "بیشتر درباره استفاده از آیکون‌های وب‌سایت بیاموزید" }, "learnMoreAboutUserAccess": { - "message": "Learn more about user access" + "message": "بیشتر درباره دسترسی کاربران بیاموزید" }, "learnMoreAboutMemberRoles": { - "message": "Learn more about member roles and permissions" + "message": "بیشتر درباره نقش‌ها و مجوزهای اعضا بیاموزید" }, "whatIsACvvNumber": { - "message": "What is a CVV number?" + "message": "عدد CVV چیست؟" }, "learnMoreAboutApi": { - "message": "Learn more about Bitwarden's API" + "message": "بیشتر درباره Bitwarden API بیاموزید" }, "fileSend": { - "message": "File Send" + "message": "پرونده ارسال" }, "fileSends": { - "message": "File Sends" + "message": "پرونده ارسال‌ها" }, "textSend": { - "message": "Text Send" + "message": "ارسال متن" }, "textSends": { - "message": "Text Sends" + "message": "ارسال‌های متن" }, "includesXMembers": { - "message": "for $COUNT$ member", + "message": "برای $COUNT$ عضو", "placeholders": { "count": { "content": "$1", @@ -9862,10 +9877,10 @@ } }, "optionalOnPremHosting": { - "message": "Optional on-premises hosting" + "message": "میزبانی اختیاری در محل" }, "upgradeFreeOrganization": { - "message": "Upgrade your $NAME$ organization ", + "message": "سازمان $NAME$ خود را ارتقا دهید ", "placeholders": { "name": { "content": "$1", @@ -9874,10 +9889,10 @@ } }, "includeSsoAuthenticationMessage": { - "message": "SSO Authentication" + "message": "احراز هویت SSO" }, "familiesPlanInvLimitReachedManageBilling": { - "message": "Families organizations may have up to $SEATCOUNT$ members. Upgrade to a paid plan to invite more members.", + "message": "سازمان‌های خانواده ممکن است تا $SEATCOUNT$ عضو داشته باشند. برای دعوت از اعضای بیشتر، به یک طرح پولی ارتقا دهید.", "placeholders": { "seatcount": { "content": "$1", @@ -9886,7 +9901,7 @@ } }, "familiesPlanInvLimitReachedNoManageBilling": { - "message": "Families organizations may have up to $SEATCOUNT$ members. Contact your organization owner to upgrade.", + "message": "سازمان‌های خانواده ممکن است تا $SEATCOUNT$ عضو داشته باشند. برای ارتقا با مالک سازمان خود تماس بگیرید.", "placeholders": { "seatcount": { "content": "$1", @@ -9895,10 +9910,10 @@ } }, "upgradePlans": { - "message": "Upgrade your plan to invite members and experience powerful security features." + "message": "طرح خود را ارتقا دهید تا اعضا را دعوت کرده و از ویژگی‌های امنیتی قدرتمند بهره‌مند شوید." }, "upgradeDiscount": { - "message": "Save $AMOUNT$%", + "message": "$AMOUNT$٪ صرفه‌جویی کنید", "placeholders": { "amount": { "content": "$1", @@ -9907,49 +9922,49 @@ } }, "enterprisePlanUpgradeMessage": { - "message": "Advanced capabilities for larger organizations" + "message": "قابلیت‌های پیشرفته برای سازمان‌های بزرگ‌تر" }, "teamsPlanUpgradeMessage": { - "message": "Resilient protection for growing teams" + "message": "محافظت مقاوم برای تیم‌های در حال رشد" }, "teamsInviteMessage": { - "message": "Invite unlimited members" + "message": "دعوت از اعضا بدون محدودیت" }, "accessToCreateGroups": { - "message": "Access to create groups" + "message": "دسترسی برای ایجاد گروه‌ها" }, "syncGroupsAndUsersFromDirectory": { - "message": "Sync groups and users from a directory" + "message": "همگام‌سازی گروه‌ها و کاربران از یک دایرکتوری" }, "familyPlanUpgradeMessage": { - "message": "Secure your family logins" + "message": "ورودهای خانواده خود را ایمن کنید" }, "accessToPremiumFeatures": { - "message": "Access to Premium features" + "message": "دسترسی به ویژگی‌های پرمیوم" }, "additionalStorageGbMessage": { - "message": "GB additional storage" + "message": "گیگابایت فضای ذخیره‌سازی اضافی" }, "sshKeyAlgorithm": { - "message": "Key algorithm" + "message": "الگوریتم کلید" }, "sshPrivateKey": { - "message": "Private key" + "message": "کلید خصوصی" }, "sshPublicKey": { - "message": "Public key" + "message": "کلید عمومی" }, "sshFingerprint": { - "message": "Fingerprint" + "message": "اثر انگشت" }, "sshKeyFingerprint": { - "message": "Fingerprint" + "message": "اثر انگشت" }, "sshKeyPrivateKey": { - "message": "Private key" + "message": "کلید خصوصی" }, "sshKeyPublicKey": { - "message": "Public key" + "message": "کلید عمومی" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -9964,89 +9979,89 @@ "message": "RSA 4096-Bit" }, "premiumAccounts": { - "message": "6 premium accounts" + "message": "۶ حساب پرمیوم" }, "unlimitedSharing": { - "message": "Unlimited sharing" + "message": "اشتراک‌گذاری نامحدود" }, "unlimitedCollections": { - "message": "Unlimited collections" + "message": "مجموعه‌های نامحدود" }, "secureDataSharing": { - "message": "Secure data sharing" + "message": "اشتراک‌گذاری امن داده‌ها" }, "eventLogMonitoring": { - "message": "Event log monitoring" + "message": "نظارت بر گزارش رویدادها" }, "directoryIntegration": { - "message": "Directory integration" + "message": "ادغام دایرکتوری" }, "passwordLessSso": { - "message": "Passwordless SSO" + "message": "ورود یک مرحله‌ای بدون کلمه عبور" }, "accountRecovery": { - "message": "Account recovery" + "message": "بازیابی حساب کاربری" }, "customRoles": { - "message": "Custom roles" + "message": "نقش‌های سفارشی" }, "unlimitedSecretsStorage": { - "message": "Unlimited secrets storage" + "message": "ذخیره‌سازی نامحدود رازها" }, "unlimitedUsers": { - "message": "Unlimited users" + "message": "کاربران نامحدود" }, "UpTo50MachineAccounts": { - "message": "Up to 50 machine accounts" + "message": "تا ۵۰ حساب ماشین" }, "UpTo20MachineAccounts": { - "message": "Up to 20 machine accounts" + "message": "تا ۲۰ حساب ماشین" }, "current": { - "message": "Current" + "message": "فعلی" }, "secretsManagerSubscriptionInfo": { - "message": "Your Secrets Manager subscription will upgrade based on the plan selected" + "message": "اشتراک مدیر اسرار شما بر اساس طرح انتخاب شده ارتقا خواهد یافت" }, "bitwardenPasswordManager": { - "message": "Bitwarden Password Manager" + "message": "مدیر کلمه عبور Bitwarden" }, "secretsManagerComplimentaryPasswordManager": { - "message": "Your complimentary one year Password Manager subscription will upgrade to the selected plan. You will not be charged until the complimentary period is over." + "message": "اشتراک رایگان یک‌ساله مدیر کلمه عبور شما به طرح انتخاب شده ارتقا خواهد یافت. تا پایان دوره رایگان هیچ هزینه‌ای از شما دریافت نخواهد شد." }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "پرونده در دستگاه ذخیره شد. از بخش بارگیری‌های دستگاه خود مدیریت کنید." }, "publicApi": { - "message": "Public API", + "message": "API عمومی", "description": "The text, 'API', is an acronym and should not be translated." }, "showCharacterCount": { - "message": "Show character count" + "message": "نمایش تعداد کاراکترها" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "مخفی کردن تعداد کاراکترها" }, "editAccess": { - "message": "Edit access" + "message": "ویرایش دسترسی" }, "textHelpText": { - "message": "Use text fields for data like security questions" + "message": "برای داده‌هایی مانند سوالات امنیتی از فیلدهای متنی استفاده کنید" }, "hiddenHelpText": { - "message": "Use hidden fields for sensitive data like a password" + "message": "برای داده‌های حساس مانند کلمه عبور از فیلدهای مخفی استفاده کنید" }, "checkBoxHelpText": { - "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email" + "message": "اگر می‌خواهید فیلدهای تیک‌دار فرم را به‌صورت خودکار پر کنید، مانند گزینه به یاد سپردن ایمیل، از کادرهای انتخاب استفاده کنید" }, "linkedHelpText": { - "message": "Use a linked field when you are experiencing autofill issues for a specific website." + "message": "وقتی در پر کردن خودکار برای یک وب‌سایت خاص به مشکل برخوردید، از فیلد مرتبط استفاده کنید." }, "linkedLabelHelpText": { - "message": "Enter the the field's html id, name, aria-label, or placeholder." + "message": "شناسه Html، نام، aria-label یا محل نگهدار فیلد را وارد کنید." }, "uppercaseDescription": { - "message": "Include uppercase characters", + "message": "شامل حروف بزرگ باشد", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -10054,7 +10069,7 @@ "description": "Label for the password generator uppercase character checkbox" }, "lowercaseDescription": { - "message": "Include lowercase characters", + "message": "شامل حروف کوچک باشد", "description": "Full description for the password generator lowercase character checkbox" }, "lowercaseLabel": { @@ -10062,7 +10077,7 @@ "description": "Label for the password generator lowercase character checkbox" }, "numbersDescription": { - "message": "Include numbers", + "message": "شامل اعداد", "description": "Full description for the password generator numbers checkbox" }, "numbersLabel": { @@ -10070,36 +10085,36 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Include special characters", + "message": "افزودن کاراکترهای خاص", "description": "Full description for the password generator special characters checkbox" }, "addAttachment": { - "message": "Add attachment" + "message": "افزودن پیوست" }, "maxFileSizeSansPunctuation": { - "message": "Maximum file size is 500 MB" + "message": "بیشترین حجم پرونده ۵۰۰ مگابایت است" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "آیا مطمئن هستید که می‌خواهید این پرونده پیوست را به‌طور دائمی حذف کنید؟" }, "manageSubscriptionFromThe": { - "message": "Manage subscription from the", + "message": "مدیریت اشتراک از طریق", "description": "This represents the beginning of a sentence. The full sentence will be 'Manage subscription from the Provider Portal', but 'Provider Portal' will be a link and thus cannot be included in the translation file." }, "toHostBitwardenOnYourOwnServer": { - "message": "To host Bitwarden on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up automatic sync in your self-hosted organization." + "message": "برای میزبانی Bitwarden روی سرور خود، باید پرونده لایسنس خود را بارگذاری کنید. برای پشتیبانی از طرح‌های رایگان خانواده‌ها و قابلیت‌های پیشرفته صورتحساب برای سازمان خودمیزبان، لازم است همگام‌سازی خودکار را در سازمان خودمیزبان خود راه‌اندازی کنید." }, "selfHostingTitleProper": { - "message": "Self-Hosting" + "message": "خود میزبانی" }, "claim-domain-single-org-warning": { - "message": "Claiming a domain will turn on the single organization policy." + "message": "ثبت دامنه، سیاست سازمان واحد را فعال می‌کند." }, "single-org-revoked-user-warning": { - "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations." + "message": "اعضای غیرمنطبق دسترسی‌شان لغو خواهد شد. مدیران می‌توانند پس از خروج اعضا از سایر سازمان‌ها، آنها را مجدداً فعال کنند." }, "deleteOrganizationUser": { - "message": "Delete $NAME$", + "message": "حذف $NAME$", "placeholders": { "name": { "content": "$1", @@ -10109,7 +10124,7 @@ } }, "deleteOrganizationUserWarningDesc": { - "message": "This will permanently delete all items owned by $NAME$. Collection items are not impacted.", + "message": "این عمل تمام موارد متعلق به $NAME$ را به‌صورت دائمی حذف می‌کند. موارد مجموعه تحت تأثیر قرار نمی‌گیرند.", "description": "Warning description for the delete organization user dialog", "placeholders": { "name": { @@ -10119,11 +10134,11 @@ } }, "deleteManyOrganizationUsersWarningDesc": { - "message": "This will permanently delete all items owned by the following members. Collection items are not impacted.", + "message": "این عمل تمام موارد متعلق به اعضای زیر را به‌صورت دائمی حذف می‌کند. موارد مجموعه تحت تأثیر قرار نمی‌گیرند.", "description": "Warning description for the bulk delete organization users dialog" }, "organizationUserDeleted": { - "message": "Deleted $NAME$", + "message": "$NAME$ حذف شد", "placeholders": { "name": { "content": "$1", @@ -10132,10 +10147,10 @@ } }, "organizationUserDeletedDesc": { - "message": "The user was removed from the organization and all associated user data has been deleted." + "message": "کاربر از سازمان حذف شده و تمامی داده‌های مربوط به کاربر نیز پاک شده‌اند." }, "deletedUserId": { - "message": "Deleted user $ID$ - an owner / admin deleted the user account", + "message": "کاربر $ID$ حذف شد - یک مالک یا مدیر حساب کاربری را حذف کرده است", "placeholders": { "id": { "content": "$1", @@ -10144,7 +10159,7 @@ } }, "userLeftOrganization": { - "message": "User $ID$ left organization", + "message": "کاربر $ID$ سازمان را ترک کرد", "placeholders": { "id": { "content": "$1", @@ -10153,7 +10168,7 @@ } }, "suspendedOrganizationTitle": { - "message": "The $ORGANIZATION$ is suspended", + "message": "سازمان $ORGANIZATION$ تعلیق شده است", "placeholders": { "organization": { "content": "$1", @@ -10162,37 +10177,37 @@ } }, "suspendedUserOrgMessage": { - "message": "Contact your organization owner for assistance." + "message": "برای دریافت کمک با مالک سازمان خود تماس بگیرید." }, "suspendedOwnerOrgMessage": { - "message": "To regain access to your organization, add a payment method." + "message": "برای بازیابی دسترسی به سازمان خود، یک روش پرداخت اضافه کنید." }, "deleteMembers": { - "message": "Delete members" + "message": "حذف اعضا" }, "noSelectedMembersApplicable": { - "message": "This action is not applicable to any of the selected members." + "message": "این عمل برای هیچ یک از اعضا انتخاب شده قابل اجرا نیست." }, "deletedSuccessfully": { - "message": "Deleted successfully" + "message": "با موفقیت حذف شد" }, "freeFamiliesSponsorship": { - "message": "Remove Free Bitwarden Families sponsorship" + "message": "حذف حمایت مالی خانواده‌های رایگان Bitwarden" }, "freeFamiliesSponsorshipPolicyDesc": { - "message": "Do not allow members to redeem a Families plan through this organization." + "message": "اجازه ندهید اعضا از طریق این سازمان طرح خانواده‌ها را دریافت کنند." }, "verifyBankAccountWithStatementDescriptorWarning": { - "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + "message": "پرداخت با حساب بانکی فقط برای مشتریان در ایالات متحده در دسترس است. شما باید حساب بانکی خود را تأیید کنید. ما در ۱ تا ۲ روز کاری آینده یک واریز کوچک انجام خواهیم داد. کد توضیح صورت‌حساب مربوط به این واریز را در صفحه صورتحساب سازمان وارد کنید تا حساب بانکی تأیید شود. عدم تأیید حساب بانکی منجر به پرداخت ناموفق و تعلیق اشتراک شما خواهد شد." }, "verifyBankAccountWithStatementDescriptorInstructions": { - "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + "message": "ما یک واریز کوچک به حساب بانکی شما انجام داده‌ایم (این ممکن است ۱ تا ۲ روز کاری طول بکشد). کد شش‌رقمی که با 'SM' شروع می‌شود و در توضیحات واریز آمده است را وارد کنید. عدم تأیید حساب بانکی منجر به پرداخت ناموفق و تعلیق اشتراک شما خواهد شد." }, "descriptorCode": { - "message": "Descriptor code" + "message": "کد توضیح دهنده" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "نمی‌توانید مجموعه‌هایی را که فقط دسترسی مشاهده دارند حذف کنید: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -10201,37 +10216,37 @@ } }, "removeMembers": { - "message": "Remove members" + "message": "حذف اعضا" }, "devices": { - "message": "Devices" + "message": "دستگاه‌ها" }, "deviceListDescription": { - "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now." + "message": "حساب شما در هر یک از دستگاه‌های زیر وارد شده است. اگر دستگاهی را نمی‌شناسید، هم‌اکنون آن را حذف کنید." }, "deviceListDescriptionTemp": { - "message": "Your account was logged in to each of the devices below." + "message": "حساب شما در هر یک از دستگاه‌های زیر وارد شده است." }, "claimedDomains": { - "message": "Claimed domains" + "message": "دامنه‌های ثبت شده" }, "claimDomain": { - "message": "Claim domain" + "message": "ثبت دامنه" }, "reclaimDomain": { - "message": "Reclaim domain" + "message": "ثبت مجدد دامنه" }, "claimDomainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be claimed." + "message": "مثال:.mydomain.com زیر دامنه‌ها برای ثبت نیاز به ورودی‌های جداگانه دارند." }, "automaticClaimedDomains": { - "message": "Automatic Claimed Domains" + "message": "دامنه‌های ثبت شده خودکار" }, "automaticDomainClaimProcess": { - "message": "Bitwarden will attempt to claim the domain 3 times during the first 72 hours. If the domain can’t be claimed, check the DNS record in your host and manually claim. The domain will be removed from your organization in 7 days if it is not claimed." + "message": "Bitwarden در ۷۲ ساعت اول سه بار تلاش خواهد کرد دامنه را ثبت کند. اگر دامنه ثبت نشد، رکورد DNS در میزبان خود را بررسی کرده و به‌صورت دستی ثبت کنید. اگر دامنه ثبت نشود، پس از ۷ روز از سازمان شما حذف خواهد شد." }, "domainNotClaimed": { - "message": "$DOMAIN$ not claimed. Check your DNS records.", + "message": "دامنه $DOMAIN$ ثبت نشده است. رکوردهای DNS خود را بررسی کنید.", "placeholders": { "DOMAIN": { "content": "$1", @@ -10240,19 +10255,19 @@ } }, "domainStatusClaimed": { - "message": "Claimed" + "message": "ثبت شده" }, "domainStatusUnderVerification": { - "message": "Under verification" + "message": "در حال تأیید" }, "claimedDomainsDesc": { - "message": "Claim a domain to own all member accounts whose email address matches the domain. Members will be able to skip the SSO identifier when logging in. Administrators will also be able to delete member accounts." + "message": "یک دامنه را ثبت کنید تا مالک تمام حساب‌های کاربری اعضایی باشید که آدرس ایمیل آنها با آن دامنه مطابقت دارد. اعضا می‌توانند هنگام ورود، مرحله شناسایی SSO را رد کنند. همچنین مدیران قادر خواهند بود حساب‌های کاربری اعضا را حذف کنند." }, "invalidDomainNameClaimMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be claimed." + "message": "ورودی یک قالب معتبر نیست. فرمت: .mydomain.com زیر دامنه ها برای ثبت نیاز به ورودی‌های جداگانه دارند." }, "domainClaimedEvent": { - "message": "$DOMAIN$ claimed", + "message": "$DOMAIN$ ثبت شد", "placeholders": { "DOMAIN": { "content": "$1", @@ -10261,7 +10276,7 @@ } }, "domainNotClaimedEvent": { - "message": "$DOMAIN$ not claimed", + "message": "$DOMAIN$ ثبت نشد", "placeholders": { "DOMAIN": { "content": "$1", @@ -10270,7 +10285,7 @@ } }, "updatedRevokeSponsorshipConfirmationForSentSponsorship": { - "message": "If you remove $EMAIL$, the sponsorship for this Family plan cannot be redeemed. Are you sure you want to continue?", + "message": "اگر $EMAIL$ را حذف کنید، امکان دریافت حمایت مالی برای این طرح خانواده وجود نخواهد داشت. آیا مطمئن هستید که می‌خواهید ادامه دهید؟", "placeholders": { "email": { "content": "$1", @@ -10279,7 +10294,7 @@ } }, "updatedRevokeSponsorshipConfirmationForAcceptedSponsorship": { - "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end and the saved payment method will be charged $40 + applicable tax on $DATE$. You will not be able to redeem a new sponsorship until $DATE$. Are you sure you want to continue?", + "message": "اگر $EMAIL$ را حذف کنید، حمایت مالی این طرح خانواده پایان می‌یابد و روش پرداخت ذخیره شده در تاریخ $DATE$ مبلغ ۴۰ دلار به‌علاوه مالیات مربوطه را از شما کسر خواهد کرد. تا تاریخ $DATE$ قادر به دریافت حمایت مالی جدید نخواهید بود. آیا مطمئن هستید که می‌خواهید ادامه دهید؟", "placeholders": { "email": { "content": "$1", @@ -10292,108 +10307,108 @@ } }, "domainClaimed": { - "message": "Domain claimed" + "message": "دامنه ثبت شده است" }, "organizationNameMaxLength": { - "message": "Organization name cannot exceed 50 characters." + "message": "نام سازمان نمی‌تواند بیش از ۵۰ کاراکتر باشد." }, "rotationCompletedTitle": { - "message": "Key rotation successful" + "message": "چرخش کلید با موفقیت انجام شد" }, "rotationCompletedDesc": { - "message": "Your master password and encryption keys have been updated. Your other devices have been logged out." + "message": "کلمه عبور اصلی و کلیدهای رمزگذاری شما به‌روزرسانی شده‌اند. سایر دستگاه‌های شما از حساب کاربری خارج شده‌اند." }, "trustUserEmergencyAccess": { - "message": "Trust and confirm user" + "message": "اعتماد و تأیید کاربر" }, "trustOrganization": { - "message": "Trust organization" + "message": "اعتماد به سازمان" }, "trust": { - "message": "Trust" + "message": "اعتماد" }, "doNotTrust": { - "message": "Do not trust" + "message": "اعتماد نکنید" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "سازمان مورد اعتماد نیست" }, "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": "برای امنیت حساب کاربری شما، فقط در صورتی تأیید کنید که دسترسی اضطراری به این کاربر داده‌اید و اثر انگشت او با آنچه در حسابش نمایش داده شده، مطابقت دارد" }, "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": "برای امنیت حساب کاربری شما، فقط در صورتی ادامه دهید که عضو این سازمان باشید، بازیابی حساب کاربری را فعال کرده باشید و اثر انگشت نمایش داده شده در زیر با اثر انگشت سازمان مطابقت داشته باشد." }, "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": "این سازمان دارای سیاست سازمانی است که شما را در بازیابی حساب کاربری ثبت‌نام می‌کند. ثبت‌نام به مدیران سازمان اجازه می‌دهد کلمه عبور شما را تغییر دهند. فقط در صورتی ادامه دهید که این سازمان را می‌شناسید و عبارت اثر انگشت نمایش داده شده در زیر با اثر انگشت سازمان مطابقت دارد." }, "trustUser": { - "message": "Trust user" + "message": "به کاربر اعتماد کنید" }, "sshKeyWrongPassword": { - "message": "The password you entered is incorrect." + "message": "کلمه عبور وارد شده اشتباه است." }, "importSshKey": { - "message": "Import" + "message": "درون ریزی" }, "confirmSshKeyPassword": { - "message": "Confirm password" + "message": "تأیید کلمه عبور" }, "enterSshKeyPasswordDesc": { - "message": "Enter the password for the SSH key." + "message": "کلمه عبور کلید SSH را وارد کنید." }, "enterSshKeyPassword": { - "message": "Enter password" + "message": "کلمه عبور را وارد کنید" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "کلید SSH نامعتبر است" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "نوع کلید SSH پشتیبانی نمی‌شود" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "وارد کردن کلید از حافظه موقت" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "کلید SSH با موفقیت وارد شد" }, "copySSHPrivateKey": { - "message": "Copy private key" + "message": "کپی کلید خصوصی" }, "openingExtension": { - "message": "Opening the Bitwarden browser extension" + "message": "باز کردن افزونه مرورگر Bitwarden" }, "somethingWentWrong": { - "message": "Something went wrong..." + "message": "مشکلی پیش آمد..." }, "openingExtensionError": { - "message": "We had trouble opening the Bitwarden browser extension. Click the button to open it now." + "message": "در باز کردن افزونه مرورگر Bitwarden مشکلی پیش آمد. برای باز کردن آن اکنون روی دکمه کلیک کنید." }, "openExtension": { - "message": "Open extension" + "message": "باز کردن افزونه" }, "doNotHaveExtension": { - "message": "Don't have the Bitwarden browser extension?" + "message": "افزونه مرورگر Bitwarden را ندارید؟" }, "installExtension": { - "message": "Install extension" + "message": "نصب افزونه" }, "openedExtension": { - "message": "Opened the browser extension" + "message": "افزونه مرورگر باز شد" }, "openedExtensionViewAtRiskPasswords": { - "message": "Successfully opened the Bitwarden browser extension. You can now review your at-risk passwords." + "message": "افزونه مرورگر Bitwarden با موفقیت باز شد. اکنون می‌توانید کلمات عبور در معرض خطر خود را بررسی کنید." }, "openExtensionManuallyPart1": { - "message": "We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon", + "message": "در باز کردن افزونه مرورگر Bitwarden مشکل داشتیم. آیکون Bitwarden را باز کنید", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "openExtensionManuallyPart2": { - "message": "from the toolbar.", + "message": "از نوار ابزار.", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "resellerRenewalWarningMsg": { - "message": "Your subscription will renew soon. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $RENEWAL_DATE$.", + "message": "اشتراک شما به‌زودی تمدید می‌شود. برای تضمین ادامه‌ی بدون وقفه‌ی خدمات، قبل از تاریخ $RENEWAL_DATE$ با $RESELLER$ تماس بگیرید و تمدید خود را تأیید کنید.", "placeholders": { "reseller": { "content": "$1", @@ -10406,7 +10421,7 @@ } }, "resellerOpenInvoiceWarningMgs": { - "message": "An invoice for your subscription was issued on $ISSUED_DATE$. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $DUE_DATE$.", + "message": "فاکتوری برای اشتراک شما در تاریخ $ISSUED_DATE$ صادر شده است. برای تضمین ادامه‌ی بدون وقفه‌ی خدمات، قبل از تاریخ $DUE_DATE$ با $RESELLER$ تماس بگیرید و تمدید خود را تأیید کنید.", "placeholders": { "reseller": { "content": "$1", @@ -10423,7 +10438,7 @@ } }, "resellerPastDueWarningMsg": { - "message": "The invoice for your subscription has not been paid. To ensure uninterrupted service, contact $RESELLER$ to confirm your renewal before $GRACE_PERIOD_END$.", + "message": "فاکتور اشتراک شما پرداخت نشده است. برای تضمین ادامه‌ی بدون وقفه‌ی خدمات، قبل از پایان مهلت $GRACE_PERIOD_END$ با $RESELLER$ تماس بگیرید و تمدید خود را تأیید کنید.", "placeholders": { "reseller": { "content": "$1", @@ -10436,13 +10451,13 @@ } }, "restartOrganizationSubscription": { - "message": "Organization subscription restarted" + "message": "اشتراک سازمان مجدداً راه‌اندازی شد" }, "restartSubscription": { - "message": "Restart your subscription" + "message": "اشتراک خود را مجدداً راه‌اندازی کنید" }, "suspendedManagedOrgMessage": { - "message": "Contact $PROVIDER$ for assistance.", + "message": "برای دریافت کمک با $PROVIDER$ تماس بگیرید.", "placeholders": { "provider": { "content": "$1", @@ -10451,16 +10466,16 @@ } }, "accountDeprovisioningNotification": { - "message": "Administrators now have the ability to delete member accounts that belong to a claimed domain." + "message": "اکنون مدیران قادر به حذف حساب‌های کاربری اعضایی هستند که به دامنه ثبت شده تعلق دارند." }, "deleteManagedUserWarningDesc": { - "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action." + "message": "این اقدام حساب کاربری عضو را به همراه تمام موارد داخل گاوصندوق او حذف خواهد کرد. این جایگزین عملیات حذف قبلی است." }, "deleteManagedUserWarning": { - "message": "Delete is a new action!" + "message": "حذف یک اقدام جدید است!" }, "seatsRemaining": { - "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.", + "message": "شما $REMAINING$ صندلی باقی‌مانده از مجموع $TOTAL$ صندلی اختصاص یافته به این سازمان دارید. برای مدیریت اشتراک خود با ارائه‌دهنده‌تان تماس بگیرید.", "placeholders": { "remaining": { "content": "$1", @@ -10473,19 +10488,19 @@ } }, "existingOrganization": { - "message": "Existing organization" + "message": "سازمان موجود" }, "selectOrganizationProviderPortal": { - "message": "Select an organization to add to your Provider Portal." + "message": "یک سازمان برای افزودن به پورتال ارائه‌دهنده خود انتخاب کنید." }, "noOrganizations": { - "message": "There are no organizations to list" + "message": "هیچ سازمانی برای نمایش وجود ندارد" }, "yourProviderSubscriptionCredit": { - "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription." + "message": "اشتراک ارائه‌دهنده شما برای هر زمان باقی‌مانده در اشتراک سازمان اعتبار دریافت خواهد کرد." }, "doYouWantToAddThisOrg": { - "message": "Do you want to add this organization to $PROVIDER$?", + "message": "آیا می‌خواهید این سازمان را به $PROVIDER$ اضافه کنید؟", "placeholders": { "provider": { "content": "$1", @@ -10494,13 +10509,13 @@ } }, "addedExistingOrganization": { - "message": "Added existing organization" + "message": "سازمان موجود اضافه شد" }, "assignedExceedsAvailable": { - "message": "Assigned seats exceed available seats." + "message": "تعداد صندلی‌های اختصاص داده شده بیشتر از صندلی‌های موجود است." }, "userkeyRotationDisclaimerEmergencyAccessText": { - "message": "Fingerprint phrase for $NUM_USERS$ contacts for which you have enabled emergency access.", + "message": "عبارت اثرانگشت برای $NUM_USERS$ مخاطبی که دسترسی اضطراری به آن‌ها فعال کرده‌اید.", "placeholders": { "num_users": { "content": "$1", @@ -10509,7 +10524,7 @@ } }, "userkeyRotationDisclaimerAccountRecoveryOrgsText": { - "message": "Fingerprint phrase for the organization $ORG_NAME$ for which you have enabled account recovery.", + "message": "عبارت اثرانگشت برای سازمان $ORG_NAME$ که بازیابی حساب کاربری را برای آن فعال کرده‌اید.", "placeholders": { "org_name": { "content": "$1", @@ -10518,97 +10533,122 @@ } }, "userkeyRotationDisclaimerDescription": { - "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:" + "message": "تغییر کلیدهای رمزنگاری شما نیازمند اعتماد به کلیدهای هر سازمانی است که می‌تواند حساب کاربری شما را بازیابی کند، و همچنین هر مخاطبی که دسترسی اضطراری برای او فعال کرده‌اید. برای ادامه، مطمئن شوید که می‌توانید موارد زیر را تأیید کنید:" }, "userkeyRotationDisclaimerTitle": { - "message": "Untrusted encryption keys" + "message": "کلیدهای رمزنگاری غیرقابل اعتماد" }, "changeAtRiskPassword": { - "message": "Change at-risk password" + "message": "تغییر کلمه عبور در معرض خطر" }, "removeUnlockWithPinPolicyTitle": { - "message": "Remove Unlock with PIN" + "message": "حذف گزینه‌ی بازکردن با کد پین" }, "removeUnlockWithPinPolicyDesc": { - "message": "Do not allow members to unlock their account with a PIN." + "message": "به اعضا اجازه ندهید با کد پین حساب کاربری خود را باز کنند." }, "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." + "message": "گزارش‌های رویداد برای سازمان شما ذخیره نمی‌شوند. برای دسترسی کامل به گزارش‌های رویداد سازمان، به طرح تیم‌ها یا سازمان‌های بزرگ ارتقا دهید." }, "upgradeEventLogTitleMessage": { - "message": "Upgrade to see event logs from your organization." + "message": "برای مشاهده گزارش‌های رویدادهای سازمان خود، ارتقا دهید." }, "upgradeEventLogMessage": { - "message": "These events are examples only and do not reflect real events within your Bitwarden organization." + "message": "این رویدادها تنها مثال هستند و رویدادهای واقعی درون سازمان Bitwarden شما را نشان نمی‌دهند." }, "cannotCreateCollection": { - "message": "Free organizations may have up to 2 collections. Upgrade to a paid plan to add more collections." + "message": "سازمان‌های رایگان می‌توانند حداکثر تا ۲ مجموعه داشته باشند. برای اضافه کردن مجموعه‌های بیشتر، به طرح پولی ارتقا دهید." }, "businessUnit": { - "message": "Business Unit" + "message": "واحد کسب و کار" }, "businessUnits": { - "message": "Business Units" + "message": "واحدهای کسب و کار" }, "newBusinessUnit": { - "message": "New business unit" + "message": "واحد کسب و کار جدید" + }, + "sendsTitleNoItems": { + "message": "اطلاعات حساس را به‌صورت ایمن ارسال کنید", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "پرونده‌ها و داده‌های خود را به‌صورت امن با هر کسی، در هر پلتفرمی به اشتراک بگذارید. اطلاعات شما در حین اشتراک‌گذاری به‌طور کامل رمزگذاری انتها به انتها باقی خواهد ماند و میزان افشا محدود می‌شود.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "ساخت سریع کلمات عبور" + }, + "generatorNudgeBodyOne": { + "message": "به‌راحتی کلمات عبور قوی و منحصر به فرد ایجاد کنید با کلیک روی", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "برای کمک به حفظ امنیت ورودهای شما.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "با کلیک روی دکمه تولید رمز عبور، به‌راحتی کلمات عبور قوی و منحصر به‌ فرد ایجاد کنید تا ورودهای شما ایمن باقی بمانند.", + "description": "Aria label for the body content of the generator nudge" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "با پر کردن خودکار در وقت خود صرفه جویی کنید" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "شامل یک", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "وب‌سایت", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "تا این ورود به عنوان پیشنهاد پر کردن خودکار ظاهر شود.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "پرداخت آنلاین بدون وقفه" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "با کارت‌ها، فرم‌های پرداخت را به‌راحتی و با امنیت و دقت پر کنید." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "ساخت حساب‌های کاربری را ساده کنید" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "با هویت‌ها، به سرعت فرم‌های طولانی ثبت‌نام یا تماس را پر کنید." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "اطلاعات حساس خود را ایمن نگه دارید" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "با یادداشت‌ها، اطلاعات حساسی مانند جزئیات بانکی یا بیمه را به‌صورت ایمن ذخیره کنید." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "دسترسی SSH مناسب برای توسعه‌دهندگان" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "کلیدهای خود را ذخیره کنید و با عامل SSH برای احراز هویت سریع و رمزگذاری‌شده متصل شوید.", "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 را بیاموزید", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "restart": { - "message": "Restart" + "message": "راه اندازی مجدد" }, "verifyProviderBankAccountWithStatementDescriptorWarning": { - "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." + "message": "پرداخت با حساب بانکی تنها برای مشتریان در ایالات متحده در دسترس است. شما باید حساب بانکی خود را تأیید کنید. ما ظرف ۱ تا ۲ روز کاری آینده یک واریز کوچک انجام خواهیم داد. کد توضیح صورت‌حساب این واریز را در صفحه اشتراک ارائه‌دهنده وارد کنید تا حساب بانکی تأیید شود. عدم تأیید حساب بانکی منجر به عدم پرداخت و تعلیق اشتراک شما خواهد شد." }, "clickPayWithPayPal": { - "message": "Please click the Pay with PayPal button to add your payment method." + "message": "لطفاً برای افزودن روش پرداخت خود، روی دکمه پرداخت با پی‌پال کلیک کنید." } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index ccbcf4f7cc3..04504a49c2e 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -547,12 +547,6 @@ "message": "Laajenna tai supista", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Luo salasana" - }, - "generatePassphrase": { - "message": "Luo salalause" - }, "checkPassword": { "message": "Tarkasta, onko salasana paljastunut." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Luo sähköpostiosoite" }, + "generatePassword": { + "message": "Luo salasana" + }, + "generatePassphrase": { + "message": "Luo salalause" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Arvon tulee olla väliltä $MIN$—$MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Käytä tätä salasanaa" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Käytä tätä käyttäjätunnusta" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index 97e22e18045..8aeb3d17aa1 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -547,12 +547,6 @@ "message": "Palakihin/paliitin", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Gumawa ng password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Tingnan kung nakompromiso na ba ang password." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Gumawa ng password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index d881ecfefd3..e8016b547f9 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -547,12 +547,6 @@ "message": "Déplier / replier", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Générer un mot de passe" - }, - "generatePassphrase": { - "message": "Générer une phrase de passe" - }, "checkPassword": { "message": "Vérifier si le mot de passe a été exposé." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Générer un courriel" }, + "generatePassword": { + "message": "Générer un mot de passe" + }, + "generatePassphrase": { + "message": "Générer une phrase de passe" + }, + "passwordGenerated": { + "message": "Mot de passe généré" + }, + "passphraseGenerated": { + "message": "Phrase de passe générée" + }, + "usernameGenerated": { + "message": "Nom d'utilisateur généré" + }, + "emailGenerated": { + "message": "Courriel généré" + }, "spinboxBoundariesHint": { "message": "La valeur doit être comprise entre $MIN$ et $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Utiliser ce mot de passe" }, + "useThisPassphrase": { + "message": "Utiliser cette phrase de passe" + }, "useThisUsername": { "message": "Utiliser ce nom d'utilisateur" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nouvelle unité d'affaires" }, + "sendsTitleNoItems": { + "message": "Envoyez des informations sensibles, en toute sécurité", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Partagez des fichiers et des données en toute sécurité avec n'importe qui, sur n'importe quelle plateforme. Vos informations resteront chiffrées de bout en bout tout en limitant l'exposition.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Créer rapidement des mots de passe" + }, + "generatorNudgeBodyOne": { + "message": "Créez facilement des mots de passe forts et uniques en cliquant sur", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "pour vous aider à garder vos identifiants sécuritaires.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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 à garder vos identifiants sécuritaires.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Gagnez du temps avec le remplissage automatique" }, diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index 707f9752ab6..004090b4fab 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 6dd2d9243b1..2f11b460d66 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -547,12 +547,6 @@ "message": "שנה מצב כיווץ", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "צור סיסמה" - }, - "generatePassphrase": { - "message": "צור ביטוי סיסמה" - }, "checkPassword": { "message": "בדוק אם הסיסמה נחשפה." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "צור דוא\"ל" }, + "generatePassword": { + "message": "צור סיסמה" + }, + "generatePassphrase": { + "message": "צור ביטוי סיסמה" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "הערך חייב להיות בין $MIN$ ל־$MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "השתמש בסיסמה זו" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "השתמש בשם משתמש זה" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index 22a31e5df70..4fbcada7060 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 3c37dc9cedf..501741f494a 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -547,12 +547,6 @@ "message": "Sažmi/Proširi", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generiraj lozinku" - }, - "generatePassphrase": { - "message": "Generiraj fraznu lozinku" - }, "checkPassword": { "message": "Provjeri je li lozinka bila ukradena." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generiraj e-poštu" }, + "generatePassword": { + "message": "Generiraj lozinku" + }, + "generatePassphrase": { + "message": "Generiraj fraznu lozinku" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Vrijednost mora biti u rasponu $MIN$ - $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Koristi ovu lozinku" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Koristi ovo korisničko ime" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Uštedi vrijeme s auto-ispunom" }, diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 33ea6c3d9cd..42da598459e 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -547,12 +547,6 @@ "message": "Összecsukás/kinyitás", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Jelszó generálása" - }, - "generatePassphrase": { - "message": "Jelmondat generálás" - }, "checkPassword": { "message": "A jelszóvédelmi állapot ellenőrzése." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Email generálása" }, + "generatePassword": { + "message": "Jelszó generálása" + }, + "generatePassphrase": { + "message": "Jelmondat generálás" + }, + "passwordGenerated": { + "message": "A jelszó generálásra került." + }, + "passphraseGenerated": { + "message": "A jelmondat generálásra került." + }, + "usernameGenerated": { + "message": "A felhasználónév generálásra került." + }, + "emailGenerated": { + "message": "Az email generálásra került." + }, "spinboxBoundariesHint": { "message": "Az érték legyen $MIN$ és $MAX$ között.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Jelszó használata" }, + "useThisPassphrase": { + "message": "Jelmondat használata" + }, "useThisUsername": { "message": "Felhasználónév használata" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Új üzleti egység" }, + "sendsTitleNoItems": { + "message": "Érzékeny információt küldése biztonságosan", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Fájlok vagy adatok megosztása biztonságosan bárkivel, bármilyen platformon. Az információk titkosítva maradnak a végpontokon, korlátozva a kitettséget.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Jelszavak gyors létrehozása" + }, + "generatorNudgeBodyOne": { + "message": "Könnyen létrehozhatunk erős és egyedi jelszavakat a gombra kattintva", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index 379a6424333..24f095ed094 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -547,12 +547,6 @@ "message": "Alihkan Ciutkan", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Buat Kata Sandi" - }, - "generatePassphrase": { - "message": "Buat frasa sandi" - }, "checkPassword": { "message": "Periksa apakah kata sandi telah terekspos." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Buat Kata Sandi" + }, + "generatePassphrase": { + "message": "Buat frasa sandi" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index 8019ac7a750..d1e7f59d3d9 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -547,12 +547,6 @@ "message": "Comprimi/espandi", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Genera password" - }, - "generatePassphrase": { - "message": "Genera passphrase" - }, "checkPassword": { "message": "Verifica se la password è stata esposta." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Genera email" }, + "generatePassword": { + "message": "Genera password" + }, + "generatePassphrase": { + "message": "Genera passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Il valore deve essere compreso tra $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Usa questa password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Usa questo nome utente" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 2de545cd27a..bc692f4cd78 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -547,12 +547,6 @@ "message": "開く/閉じる", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "パスワードの自動生成" - }, - "generatePassphrase": { - "message": "パスフレーズを生成" - }, "checkPassword": { "message": "パスワードが漏洩していないか確認する" }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "メールアドレスを生成" }, + "generatePassword": { + "message": "パスワードの自動生成" + }, + "generatePassphrase": { + "message": "パスフレーズを生成" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "値は $MIN$ から $MAX$ の間でなければなりません。", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "このパスワードを使用する" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "このユーザー名を使用する" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index 863f8d11dea..3f6fe55ffe0 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -547,12 +547,6 @@ "message": "ჩამოშლის გადამრთველი", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "წარმოქმენი პაროლი" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "შეამოწმე პაროლი თუ გაბაზრდა" }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "წარმოქმენი პაროლი" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 27a160a9a3c..09873860bce 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index 98c317d377f..518fe2090df 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -547,12 +547,6 @@ "message": "ಟಾಗಲ್ ಕುಸಿತ", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "ಪಾಸ್ವರ್ಡ್ ಬಹಿರಂಗಗೊಂಡಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 2340ae849fa..991ae2e31b8 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -547,12 +547,6 @@ "message": "Toggle Collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "비밀번호 생성" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "비밀번호가 노출되었는지 확인합니다." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "비밀번호 생성" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 27818e4e3b9..5535e23b030 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -547,12 +547,6 @@ "message": "Pārslēgt sakļaušanu", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Veidot paroli" - }, - "generatePassphrase": { - "message": "Izveidot paroles vārdkopu" - }, "checkPassword": { "message": "Pārbaudīt, vai parole ir bijusi nopludināta." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Izveidot e-pasta adresi" }, + "generatePassword": { + "message": "Veidot paroli" + }, + "generatePassphrase": { + "message": "Izveidot paroles vārdkopu" + }, + "passwordGenerated": { + "message": "Parole izveidota" + }, + "passphraseGenerated": { + "message": "Paroles vārdkopa izveidota" + }, + "usernameGenerated": { + "message": "Lietotājvārds izveidots" + }, + "emailGenerated": { + "message": "E-pasta adrese izveidota" + }, "spinboxBoundariesHint": { "message": "Vērtībai jābūt starp $MIN$ un $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Izmantot šo paroli" }, + "useThisPassphrase": { + "message": "Izmantot šo paroles vārdkopu" + }, "useThisUsername": { "message": "Izmantot šo lietotājvārdu" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Jauna uzņēmējdarbības vienība" }, + "sendsTitleNoItems": { + "message": "Drošā veidā nosūti jūtīgu informāciju", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Kopīgo datnes un datus drošā veidā ar ikvienu jebkurā platformā! Tava informācija paliks pilnībā šifrēta, vienlaikus ierobežojot riskantumu.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Ātra paroļu izveidošana" + }, + "generatorNudgeBodyOne": { + "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": ", lai palīdzētu uzturērt pieteikšanās vienumus drošus.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Laika ietaupīšana ar automātisko aizpildi" }, diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index 54a837b83e1..01c1f6307ee 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -547,12 +547,6 @@ "message": "ചുരുക്കുക", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "പാസ്‌വേഡ് സൃഷ്ടിക്കുക" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "പാസ്സ്‌വേർഡ് ചോർന്നോ എന്ന് നോക്കുക." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "പാസ്‌വേഡ് സൃഷ്ടിക്കുക" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 27a160a9a3c..60ddec4332e 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -1,24 +1,24 @@ { "allApplications": { - "message": "All applications" + "message": "सर्व अ‍ॅप्लिकेशन्स" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "बिटवॉर्डन चिन्ह" }, "criticalApplications": { - "message": "Critical applications" + "message": "महत्त्वाचे अ‍ॅप्लिकेशन्स" }, "noCriticalAppsAtRisk": { - "message": "No critical applications at risk" + "message": "कोणतेही महत्त्वाचे अ‍ॅप्लिकेशन्स धोक्यात नाहीत" }, "accessIntelligence": { - "message": "Access Intelligence" + "message": "अ‍ॅक्सेस इंटेलिजेंस" }, "riskInsights": { - "message": "Risk Insights" + "message": "जोखीम अंतर्दृष्टी" }, "passwordRisk": { - "message": "Password Risk" + "message": "पासवर्डचा धोका" }, "reviewAtRiskPasswords": { "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords." @@ -54,7 +54,7 @@ } }, "createNewLoginItem": { - "message": "Create new login item" + "message": "नवीन लॉगिन आयटम तयार करा" }, "criticalApplicationsWithCount": { "message": "Critical applications ($COUNT$)", @@ -96,7 +96,7 @@ "message": "Mark critical apps" }, "markAppAsCritical": { - "message": "Mark app as critical" + "message": "अ‍ॅपला गंभीर म्हणून चिन्हांकित करा" }, "applicationsMarkedAsCriticalSuccess": { "message": "Applications marked as critical" @@ -105,13 +105,13 @@ "message": "Application" }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "धोकादायक पासवर्ड" }, "requestPasswordChange": { - "message": "Request password change" + "message": "पासवर्ड बदलण्याची विनंती करा" }, "totalPasswords": { - "message": "Total passwords" + "message": "एकूण पासवर्ड" }, "searchApps": { "message": "Search applications" @@ -120,7 +120,7 @@ "message": "At-risk members" }, "atRiskMembersWithCount": { - "message": "At-risk members ($COUNT$)", + "message": "जोखीम गटातील सदस्य ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -186,7 +186,7 @@ "message": "What type of item is this?" }, "name": { - "message": "Name" + "message": "नाव" }, "uri": { "message": "URI" @@ -205,13 +205,13 @@ "message": "New URI" }, "username": { - "message": "Username" + "message": "वापरकर्तानाव" }, "password": { - "message": "Password" + "message": "पासवर्ड" }, "newPassword": { - "message": "New password" + "message": "नवीन पासवर्ड" }, "passphrase": { "message": "Passphrase" @@ -232,7 +232,7 @@ "message": "Cardholder name" }, "loginCredentials": { - "message": "Login credentials" + "message": "लॉगिन क्रेडेन्शियल्स" }, "personalDetails": { "message": "Personal details" @@ -241,13 +241,13 @@ "message": "Identification" }, "contactInfo": { - "message": "Contact info" + "message": "संपर्क माहिती" }, "cardDetails": { - "message": "Card details" + "message": "कार्ड तपशील" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "$BRAND$ ची माहिती", "placeholders": { "brand": { "content": "$1", @@ -259,16 +259,16 @@ "message": "Item history" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "ऑथेंटिकेटर की" }, "autofillOptions": { - "message": "Autofill options" + "message": "ऑटोफिल पर्याय" }, "websiteUri": { - "message": "Website (URI)" + "message": "वेबसाइट (URI)" }, "websiteUriCount": { - "message": "Website (URI) $COUNT$", + "message": "वेबसाइट (URI) $COUNT$", "description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.", "placeholders": { "count": { @@ -318,25 +318,25 @@ "message": "Autofill on page load?" }, "number": { - "message": "Number" + "message": "क्रमांक" }, "brand": { - "message": "Brand" + "message": "ब्रँड" }, "expiration": { - "message": "Expiration" + "message": "कालबाह्यता" }, "securityCode": { - "message": "Security code (CVV)" + "message": "सुरक्षा कोड (CVV)" }, "securityCodeSlashCVV": { - "message": "Security code / CVV" + "message": "सुरक्षा कोड / CVV" }, "identityName": { "message": "Identity name" }, "company": { - "message": "Company" + "message": "कंपनी" }, "ssn": { "message": "Social Security number" @@ -348,46 +348,46 @@ "message": "License number" }, "email": { - "message": "Email" + "message": "ईमेल" }, "phone": { "message": "Phone" }, "january": { - "message": "January" + "message": "जानेवरी" }, "february": { - "message": "February" + "message": "फेब्रुवरी" }, "march": { - "message": "March" + "message": "मार्च" }, "april": { - "message": "April" + "message": "एप्रिल" }, "may": { - "message": "May" + "message": "मे" }, "june": { - "message": "June" + "message": "जून" }, "july": { - "message": "July" + "message": "जुलै" }, "august": { - "message": "August" + "message": "ऑगस्ट" }, "september": { - "message": "September" + "message": "सेप्टेंबर" }, "october": { - "message": "October" + "message": "ऑक्टोबर" }, "november": { - "message": "November" + "message": "नोवेंबर" }, "december": { - "message": "December" + "message": "डिसेंबर" }, "title": { "message": "Title" @@ -414,13 +414,13 @@ "message": "If you've renewed it, update the card's information" }, "expirationMonth": { - "message": "Expiration month" + "message": "कालबाह्यता महिना" }, "expirationYear": { - "message": "Expiration year" + "message": "कालबाह्यता वर्ष" }, "authenticatorKeyTotp": { - "message": "Authenticator key (TOTP)" + "message": "ऑथेंटिकेटर की (TOTP)" }, "totpHelperTitle": { "message": "Make 2-step verification seamless" @@ -547,14 +547,8 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { - "message": "Check if password has been exposed." + "message": "पासवर्ड उघड झाला आहे का तपासा." }, "passwordExposed": { "message": "This password has been exposed $VALUE$ time(s) in data breaches. You should change it.", @@ -566,13 +560,13 @@ } }, "passwordSafe": { - "message": "This password was not found in any known data breaches. It should be safe to use." + "message": "हा पासवर्ड कोणत्याही c डेटा उल्लंघनात आढळला नाही. तो वापरण्यास सुरक्षित असावा." }, "save": { - "message": "Save" + "message": "जतन करा" }, "cancel": { - "message": "Cancel" + "message": "रद्द करा" }, "canceled": { "message": "Canceled" @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 27a160a9a3c..09873860bce 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index b2068d1d939..360e59ea70f 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -547,12 +547,6 @@ "message": "Bytt mellom skjul/utvid", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generer et passord" - }, - "generatePassphrase": { - "message": "Generér passordfrase" - }, "checkPassword": { "message": "Sjekk om passordet har blitt utsatt." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generér E-post" }, + "generatePassword": { + "message": "Generer et passord" + }, + "generatePassphrase": { + "message": "Generér passordfrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Verdien må være mellom $MIN$ og $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Bruk dette passordet" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Bruk dette brukernavnet" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Spar tid med auto-utfylling" }, diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index c8c0c90dcde..3dc7ab5b476 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index d92b9707fc9..fdb5e68d3b4 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -547,12 +547,6 @@ "message": "Inklappen/uitklappen", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Wachtwoord genereren" - }, - "generatePassphrase": { - "message": "Wachtwoordzin genereren" - }, "checkPassword": { "message": "Controleer of wachtwoord is gelekt." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "E-mailadres genereren" }, + "generatePassword": { + "message": "Wachtwoord genereren" + }, + "generatePassphrase": { + "message": "Wachtwoordzin genereren" + }, + "passwordGenerated": { + "message": "Wachtwoord gegenereerd" + }, + "passphraseGenerated": { + "message": "Wachtwoordzin gegenereerd" + }, + "usernameGenerated": { + "message": "Gebruikersnaam gegenereerd" + }, + "emailGenerated": { + "message": "E-mail gegenereerd" + }, "spinboxBoundariesHint": { "message": "Waarde moet tussen $MIN$ en $MAX$ liggen.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Dit wachtwoord gebruiken" }, + "useThisPassphrase": { + "message": "Deze wachtwoordzin gebruiken" + }, "useThisUsername": { "message": "Deze gebruikersnaam gebruiken" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nieuwe bedrijfseenheid" }, + "sendsTitleNoItems": { + "message": "Gevoelige informatie veilig versturen", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Deel bestanden en gegevens veilig met iedereen, op elk platform. Je informatie blijft end-to-end versleuteld terwijl en blootstelling beperkt.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Snel wachtwoorden maken" + }, + "generatorNudgeBodyOne": { + "message": "Maak eenvoudig sterke en unieke wachtwoorden door te klikken op", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "om je te helpen je inloggegevens veilig te houden.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Tijd besparen met automatisch aanvullen" }, diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 619c1776cb6..12c41a6e3db 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -547,12 +547,6 @@ "message": "Gøym/vid ut", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Laga passord" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Laga passord" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 27a160a9a3c..09873860bce 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index de9caf9bbce..7480135bc41 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -547,12 +547,6 @@ "message": "Zwiń/rozwiń", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Wygeneruj hasło" - }, - "generatePassphrase": { - "message": "Wygeneruj hasło wyrazowe" - }, "checkPassword": { "message": "Sprawdź, czy hasło zostało ujawnione." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Wygeneruj e-mail" }, + "generatePassword": { + "message": "Wygeneruj hasło" + }, + "generatePassphrase": { + "message": "Wygeneruj hasło wyrazowe" + }, + "passwordGenerated": { + "message": "Hasło zostało wygenerowane" + }, + "passphraseGenerated": { + "message": "Hasło wyrazowe zostało wygenerowane" + }, + "usernameGenerated": { + "message": "Nazwa użytkownika została wygenerowana" + }, + "emailGenerated": { + "message": "E-mail został wygenerowany" + }, "spinboxBoundariesHint": { "message": "Wartość musi być pomiędzy $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Użyj tego hasła" }, + "useThisPassphrase": { + "message": "Użyj tego hasła wyrazowego" + }, "useThisUsername": { "message": "Użyj tej nazwy użytkownika" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nowa jednostka biznesowa" }, + "sendsTitleNoItems": { + "message": "Wysyłaj bezpiecznie poufne informacje", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Udostępniaj pliki i dane bezpiecznie każdemu, na każdej platformie. Twoje dane pozostaną zaszyfrowane end-to-end przy jednoczesnym ograniczeniu narażenia.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Szybko twórz hasła" + }, + "generatorNudgeBodyOne": { + "message": "Łatwo twórz silne i unikalne hasła, klikając na", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": ", aby pomóc Ci zachować bezpieczeństwo Twoich danych logowania.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Łatwo twórz silne i unikalne hasła, klikając na Wygeneruj Hasło, aby pomóc Ci zachować bezpieczeństwo Twoich danych logowania.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Oszczędzaj czas dzięki autouzupełnianiu" }, diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index 04403ade2d9..32d060465a5 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -547,12 +547,6 @@ "message": "Alternar Colapso", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Gerar Senha" - }, - "generatePassphrase": { - "message": "Gerar frase secreta" - }, "checkPassword": { "message": "Verifique se a senha foi exposta." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Gerar e-mail" }, + "generatePassword": { + "message": "Gerar Senha" + }, + "generatePassphrase": { + "message": "Gerar frase secreta" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Valor deve ser entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use esta senha" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use este nome de usuário" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nova unidade de negócio" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index dc66923f629..9aa737e6b23 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -547,12 +547,6 @@ "message": "Alternar colapso", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Gerar palavra-passe" - }, - "generatePassphrase": { - "message": "Gerar frase de acesso" - }, "checkPassword": { "message": "Verificar se a palavra-passe foi exposta." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Gerar e-mail" }, + "generatePassword": { + "message": "Gerar palavra-passe" + }, + "generatePassphrase": { + "message": "Gerar frase de acesso" + }, + "passwordGenerated": { + "message": "Palavra-passe gerada" + }, + "passphraseGenerated": { + "message": "Frase de acesso gerada" + }, + "usernameGenerated": { + "message": "Nome de utilizador gerado" + }, + "emailGenerated": { + "message": "E-mail gerado" + }, "spinboxBoundariesHint": { "message": "O valor deve estar entre $MIN$ e $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Utilizar esta palavra-passe" }, + "useThisPassphrase": { + "message": "Utilizar esta frase de acesso" + }, "useThisUsername": { "message": "Utilizar este nome de utilizador" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nova unidade de negócio" }, + "sendsTitleNoItems": { + "message": "Envie informações sensíveis com segurança", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Partilhe ficheiros e dados de forma segura com qualquer pessoa, em qualquer plataforma. As suas informações permanecerão encriptadas ponto a ponto, limitando a exposição.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Criar rapidamente palavras-passe" + }, + "generatorNudgeBodyOne": { + "message": "Crie facilmente palavras-passe fortes e únicas clicando em", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "para o ajudar a manter as suas credenciais seguras.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "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" + }, "newLoginNudgeTitle": { "message": "Poupe tempo com o preenchimento automático" }, diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 632733642b1..8ea595a4a32 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -547,12 +547,6 @@ "message": "Comutare restrângere", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generare parolă" - }, - "generatePassphrase": { - "message": "Generare parolă" - }, "checkPassword": { "message": "Verificați dacă parola a fost dezvăluită." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generare parolă" + }, + "generatePassphrase": { + "message": "Generare parolă" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index c30371f7d86..b353a8d0e61 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -547,12 +547,6 @@ "message": "Свернуть/развернуть", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Сгенерировать пароль" - }, - "generatePassphrase": { - "message": "Создать парольную фразу" - }, "checkPassword": { "message": "Проверьте, не скомпрометирован ли пароль." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Сгенерировать email" }, + "generatePassword": { + "message": "Сгенерировать пароль" + }, + "generatePassphrase": { + "message": "Создать парольную фразу" + }, + "passwordGenerated": { + "message": "Пароль создан" + }, + "passphraseGenerated": { + "message": "Парольная фраза создана" + }, + "usernameGenerated": { + "message": "Имя пользователя создано" + }, + "emailGenerated": { + "message": "Email создан" + }, "spinboxBoundariesHint": { "message": "Значение должно быть между $MIN$ и $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Использовать этот пароль" }, + "useThisPassphrase": { + "message": "Использовать эту парольную фразу" + }, "useThisUsername": { "message": "Использовать это имя пользователя" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Новая бизнес-единица" }, + "sendsTitleNoItems": { + "message": "Безопасная отправка конфиденциальной информации", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Безопасно обменивайтесь файлами и данными с кем угодно на любой платформе. Ваша информация надежно шифруется и доступ к ней ограничен.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Быстрое создание паролей" + }, + "generatorNudgeBodyOne": { + "message": "Легко создавайте надежные и уникальные пароли, нажатием на кнопку,", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "чтобы обеспечить безопасность ваших логинов.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Легко создавайте надежные и уникальные пароли, нажатием на кнопку 'Сгенерировать пароль', чтобы обеспечить безопасность ваших логинов.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" }, diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index f75fd53c209..16542445a85 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index e785bd3749b..127e8cce83e 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -547,12 +547,6 @@ "message": "Prepnúť zloženie", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generovať heslo" - }, - "generatePassphrase": { - "message": "Generovať prístupovú frázu" - }, "checkPassword": { "message": "Overiť či došlo k úniku hesla." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generovať e-mail" }, + "generatePassword": { + "message": "Generovať heslo" + }, + "generatePassphrase": { + "message": "Generovať prístupovú frázu" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Hodnota musí byť medzi $MIN$ a $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Použiť toto heslo" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Použiť toto používateľské meno" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Nová organizačná jednotka" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Ušetrite čas s automatickým vypĺňaním" }, diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index 5a43561bf5a..0731d963194 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -547,12 +547,6 @@ "message": "Skrči/Razširi", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generiraj geslo" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Preveri izpostavljenost gesla." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generiraj geslo" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index e54b6d148ca..b698ef5e281 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -547,12 +547,6 @@ "message": "Пребаци проширење", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Генерисање лозинке" - }, - "generatePassphrase": { - "message": "Генеришите приступну фразу" - }, "checkPassword": { "message": "Проверите да ли је лозинка изложена." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Генеришите имејл" }, + "generatePassword": { + "message": "Генерисање лозинке" + }, + "generatePassphrase": { + "message": "Генеришите приступну фразу" + }, + "passwordGenerated": { + "message": "Лозинка генерисана" + }, + "passphraseGenerated": { + "message": "Приступна фраза је генерисана" + }, + "usernameGenerated": { + "message": "Корисничко име генерисано" + }, + "emailGenerated": { + "message": "Имејл генерисан" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Употреби ову лозинку" }, + "useThisPassphrase": { + "message": "Употреби ову приступну фразу" + }, "useThisUsername": { "message": "Употреби ово корисничко име" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Шаљите бзбедно осетљиве информације", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Делите датотеке и податке безбедно са било ким, на било којој платформи. Ваше информације ће остати шифроване од почетка-до-краја уз ограничење изложености.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Брзо креирајте лозинке" + }, + "generatorNudgeBodyOne": { + "message": "Лако креирајте снажне и јединствене лозинке кликом на", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "да вам помогне да задржите своје пријаве сигурно.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Лако креирајте снажне и јединствене лозинке кликом на дугме „Генерирате лозинку“ да вам помогне да чувате своје пријаве на сигурно.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Уштедите време са ауто-пуњењем" }, diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index 95b9348aa04..34282b8aaeb 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generiši lozinku" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generiši lozinku" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 3bbfc4577ea..43658ca8129 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -547,12 +547,6 @@ "message": "Växla synlig/dold", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generera lösenord" - }, - "generatePassphrase": { - "message": "Generera lösenfras" - }, "checkPassword": { "message": "Kontrollera om ditt lösenord har äventyrats." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generera lösenord" + }, + "generatePassphrase": { + "message": "Generera lösenfras" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Värde måste vara mellan $MIN$ och $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Använd detta lösenord" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Använd detta användarnamn" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 27a160a9a3c..09873860bce 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Generate password" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Check if password has been exposed." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Generate password" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index 7651ae5bc06..cf6aab45cec 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -547,12 +547,6 @@ "message": "Toggle collapse", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "สร้างรหัสผ่าน" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "ตรวจสอบว่ารหัสผ่านถูกเปิดเผยหรือไม่" }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "สร้างรหัสผ่าน" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index 7e6f3e6ab4e..4192861d6d1 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -547,12 +547,6 @@ "message": "Daraltmayı aç/kapat", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Parola oluştur" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Parolanız ele geçirilip geçirilmediğini kontrol edin." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Parola oluştur" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Parola üretildi" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Kullanıcı adı üretildi" + }, + "emailGenerated": { + "message": "E-posta üretildi" + }, "spinboxBoundariesHint": { "message": "Değer $MIN$ ile $MAX$ arasında olmalıdır.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Bu parolayı kullan" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Bu kullanıcı adını kullan" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Hassas bilgileri güvenle paylaşın", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Dosyaları ve verileri istediğiniz kişilerle, istediğiniz platformda paylaşın. Bilgileriniz başkalarının eline geçmemesi için uçtan şifrelenecektir.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" }, diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index a899bde3d04..00871794ac6 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -99,7 +99,7 @@ "message": "Позначити програму критичною" }, "applicationsMarkedAsCriticalSuccess": { - "message": "Applications marked as critical" + "message": "Позначені критичні програми" }, "application": { "message": "Програма" @@ -141,13 +141,13 @@ "message": "Ці учасники використовують у програмах слабкі, викриті, або повторювані паролі." }, "atRiskMembersDescriptionNone": { - "message": "These are no members logging into applications with weak, exposed, or reused passwords." + "message": "Немає учасників, які використовують у програмах слабкі, викриті, або повторювані паролі." }, "atRiskApplicationsDescription": { "message": "Ці програми мають слабкі, викриті, або повторювані паролі." }, "atRiskApplicationsDescriptionNone": { - "message": "These are no applications with weak, exposed, or reused passwords." + "message": "Немає програм, які мають слабкі, викриті, або повторювані паролі." }, "atRiskMembersDescriptionWithApp": { "message": "Ці учасники використовують у $APPNAME$ слабкі, викриті, або повторювані паролі.", @@ -159,7 +159,7 @@ } }, "atRiskMembersDescriptionWithAppNone": { - "message": "There are no at risk members for $APPNAME$.", + "message": "Немає учасників з ризиками для $APPNAME$.", "placeholders": { "appname": { "content": "$1", @@ -547,12 +547,6 @@ "message": "Згорнути/розгорнути", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Генерувати пароль" - }, - "generatePassphrase": { - "message": "Генерувати парольну фразу" - }, "checkPassword": { "message": "Перевірити чи пароль було викрито." }, @@ -4549,7 +4543,7 @@ "message": "Після оновлення вашого ключа шифрування вам необхідно вийти з системи і потім виконати повторний вхід у всіх програмах Bitwarden, які ви використовуєте. Збій при виході та повторному вході може призвести до пошкодження даних. Ми спробуємо завершити ваші сеанси автоматично, однак, цей процес може відбутися із затримкою." }, "updateEncryptionKeyAccountExportWarning": { - "message": "Any account restricted exports you have saved will become invalid." + "message": "Будь-які збережені експорти, обмежені обліковим записом, стануть недійсними." }, "subscription": { "message": "Передплата" @@ -6477,10 +6471,10 @@ "message": "Недійсний код підтвердження" }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Головний пароль більше не є обов'язковим для учасників зазначеної організації. Підтвердьте вказаний нижче домен з адміністратором вашої організації." }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Домен Key Connector" }, "leaveOrganization": { "message": "Покинути організацію" @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Генерувати е-пошту" }, + "generatePassword": { + "message": "Генерувати пароль" + }, + "generatePassphrase": { + "message": "Генерувати парольну фразу" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Значення має бути між $MIN$ та $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Використати цей пароль" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Використати це ім'я користувача" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "Новий бізнес-підрозділ" }, + "sendsTitleNoItems": { + "message": "Безпечно надсилайте конфіденційну інформацію", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Безпечно діліться файлами й даними з ким завгодно, на будь-якій платформі. Ваша інформація наскрізно зашифрована та має обмежений доступ.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Швидко створюйте паролі" + }, + "generatorNudgeBodyOne": { + "message": "Легко створюйте надійні та унікальні паролі, натиснувши на", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "щоб зберегти свої записи в безпеці.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "Легко створюйте надійні та унікальні паролі, натиснувши кнопку Генерувати пароль, щоб зберегти свої записи в безпеці.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Заощаджуйте час з автозаповненням" }, @@ -10609,6 +10649,6 @@ "message": "Оплата з банківським рахунком доступна тільки для клієнтів у США. Вам необхідно буде підтвердити свій банківський рахунок. Ми здійснимо мікродепозит протягом наступних 1–2 робочих днів. Введіть код дескриптора з цього депозиту на сторінці передплати провайдера, щоб підтвердити банківський рахунок. Неможливість засвідчення банківського рахунку призведе до втрати платежу та припинення вашої передплати." }, "clickPayWithPayPal": { - "message": "Please click the Pay with PayPal button to add your payment method." + "message": "Натисніть кнопку Сплатити з PayPal, щоб додати спосіб оплати." } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 78a536991a7..8218dc06ece 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -547,12 +547,6 @@ "message": "Ẩn bớt", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "Tạo mật khẩu" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "Kiểm tra xem mật khẩu có bị lộ không." }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "Tạo mật khẩu" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "Value must be between $MIN$ and $MAX$.", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index eb186f11360..c126e0c533c 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -547,12 +547,6 @@ "message": "切换折叠", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "生成密码" - }, - "generatePassphrase": { - "message": "生成密码短语" - }, "checkPassword": { "message": "检查密码是否已暴露。" }, @@ -5884,7 +5878,7 @@ "message": "成功恢复组织的访问权限" }, "bulkFilteredMessage": { - "message": "已拒绝,不适用于此操作" + "message": "已排除,不适用于此操作" }, "nonCompliantMembersTitle": { "message": "不符合要求的成员" @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "生成电子邮箱" }, + "generatePassword": { + "message": "生成密码" + }, + "generatePassphrase": { + "message": "生成密码短语" + }, + "passwordGenerated": { + "message": "密码已生成" + }, + "passphraseGenerated": { + "message": "密码短语已生成" + }, + "usernameGenerated": { + "message": "用户名已生成" + }, + "emailGenerated": { + "message": "电子邮箱已生成" + }, "spinboxBoundariesHint": { "message": "值必须在 $MIN$ 和 $MAX$ 之间。", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "使用此密码" }, + "useThisPassphrase": { + "message": "使用此密码短语" + }, "useThisUsername": { "message": "使用此用户名" }, @@ -8446,7 +8461,7 @@ "message": "用户更新了通过账户恢复颁发的密码。" }, "activatedAccessToSecretsManager": { - "message": "已激活对机密管理器的访问权限", + "message": "激活了对机密管理器的访问权限", "description": "Confirmation message that one or more users gained access to Secrets Manager" }, "activateAccess": { @@ -10192,7 +10207,7 @@ "message": "描述符代码" }, "cannotRemoveViewOnlyCollections": { - "message": "您无法删除仅具有「查看」权限的集合:$COLLECTIONS$", + "message": "您无法移除仅具有「查看」权限的集合:$COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "新增业务单元" }, + "sendsTitleNoItems": { + "message": "安全地发送敏感信息", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "在任何平台上安全地与任何人共享文件和数据。您的信息将在限制曝光的同时保持端到端加密。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "快速创建密码" + }, + "generatorNudgeBodyOne": { + "message": "一键创建强大且唯一的密码", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "帮助您保持登录安全。", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "点击「生成密码」按钮,轻松创建强大且唯一的密码,帮助您保持登录安全。", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "使用自动填充节省时间" }, diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 2f5567308d2..4be5bbcfbd3 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -547,12 +547,6 @@ "message": "切換折疊", "description": "Toggling an expand/collapse state." }, - "generatePassword": { - "message": "產生密碼" - }, - "generatePassphrase": { - "message": "Generate passphrase" - }, "checkPassword": { "message": "檢查密碼是否已暴露。" }, @@ -6824,6 +6818,24 @@ "generateEmail": { "message": "Generate email" }, + "generatePassword": { + "message": "產生密碼" + }, + "generatePassphrase": { + "message": "Generate passphrase" + }, + "passwordGenerated": { + "message": "Password generated" + }, + "passphraseGenerated": { + "message": "Passphrase generated" + }, + "usernameGenerated": { + "message": "Username generated" + }, + "emailGenerated": { + "message": "Email generated" + }, "spinboxBoundariesHint": { "message": "值必須介於 $MIN$ 及 $MAX$。", "description": "Explains spin box minimum and maximum values to the user", @@ -6887,6 +6899,9 @@ "useThisPassword": { "message": "使用此密碼" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "使用此使用者名稱" }, @@ -10553,6 +10568,31 @@ "newBusinessUnit": { "message": "New business unit" }, + "sendsTitleNoItems": { + "message": "Send sensitive information safely", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "generatorNudgeTitle": { + "message": "Quickly create passwords" + }, + "generatorNudgeBodyOne": { + "message": "Easily create strong and unique passwords by clicking on", + "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.", + "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.", + "description": "Aria label for the body content of the generator nudge" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, From 85cef971c6944a6f9dc50a5f7226956b5037c128 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 30 May 2025 15:31:11 +0200 Subject: [PATCH 15/33] Add semver as dependency (#15005) --- .github/renovate.json5 | 1 + apps/cli/package.json | 1 + package-lock.json | 73 +++++++++++++++++++++++++++++++++--------- package.json | 1 + 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 453e5e29c44..8ad9ad1b360 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -204,6 +204,7 @@ "scopeguard", "security-framework", "security-framework-sys", + "semver", "serde", "serde_json", "simplelog", diff --git a/apps/cli/package.json b/apps/cli/package.json index eeebf4dad6f..4ac93d53c40 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -89,6 +89,7 @@ "papaparse": "5.5.3", "proper-lockfile": "4.1.2", "rxjs": "7.8.1", + "semver": "7.7.2", "tldts": "7.0.1", "zxcvbn": "4.4.2" } diff --git a/package-lock.json b/package-lock.json index d4009fff06d..fbb4860eb64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,7 @@ "qrcode-parser": "2.1.3", "qrious": "4.0.2", "rxjs": "7.8.1", + "semver": "7.7.2", "tabbable": "6.2.0", "tldts": "7.0.1", "utf-8-validate": "6.0.5", @@ -223,6 +224,7 @@ "papaparse": "5.5.3", "proper-lockfile": "4.1.2", "rxjs": "7.8.1", + "semver": "7.7.2", "tldts": "7.0.1", "zxcvbn": "4.4.2" }, @@ -1588,6 +1590,19 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -2421,6 +2436,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@angular-eslint/schematics/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular-eslint/template-parser": { "version": "18.4.3", "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.4.3.tgz", @@ -2753,6 +2781,19 @@ "node": ">=14.0.0" } }, + "node_modules/@angular/build/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular/cdk": { "version": "18.2.14", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.14.tgz", @@ -2920,6 +2961,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular/common": { "version": "18.2.13", "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.13.tgz", @@ -23198,19 +23252,6 @@ "semver": "^7.7.1" } }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -34270,9 +34311,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/package.json b/package.json index 84164696f46..0eaf07ee6d7 100644 --- a/package.json +++ b/package.json @@ -201,6 +201,7 @@ "qrcode-parser": "2.1.3", "qrious": "4.0.2", "rxjs": "7.8.1", + "semver": "7.7.2", "tabbable": "6.2.0", "tldts": "7.0.1", "utf-8-validate": "6.0.5", From 291341c987784a0ba3fcef1bc9d2211aa80e6ed7 Mon Sep 17 00:00:00 2001 From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com> Date: Fri, 30 May 2025 15:34:29 +0100 Subject: [PATCH 16/33] Changes the revoke message (#14963) --- .../members/free-bitwarden-families.component.ts | 2 +- apps/web/src/locales/en/messages.json | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/billing/members/free-bitwarden-families.component.ts b/apps/web/src/app/billing/members/free-bitwarden-families.component.ts index 5b249683b57..0e3b682104e 100644 --- a/apps/web/src/app/billing/members/free-bitwarden-families.component.ts +++ b/apps/web/src/app/billing/members/free-bitwarden-families.component.ts @@ -160,7 +160,7 @@ export class FreeBitwardenFamiliesComponent implements OnInit { private async doRevokeSponsorship(sponsorship: OrganizationSponsorshipInvitesResponse) { const content = sponsorship.validUntil ? this.i18nService.t( - "updatedRevokeSponsorshipConfirmationForAcceptedSponsorship", + "revokeActiveSponsorshipConfirmation", sponsorship.friendlyName, formatDate(sponsorship.validUntil, "MM/dd/yyyy", this.locale), ) diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index a170612fab2..e1a2d3cbef2 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -10651,5 +10651,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } From 4290136a2a0cf42e0c854992fbcf24bf8e75a283 Mon Sep 17 00:00:00 2001 From: Jared McCannon Date: Fri, 30 May 2025 10:36:10 -0400 Subject: [PATCH 17/33] Fixed which collection observable was passed to the nested traverse. (#15008) --- .../admin-console/organizations/collections/vault.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 19373f193d9..45300b45fa5 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 @@ -425,7 +425,7 @@ export class VaultComponent implements OnInit, OnDestroy { ); const nestedCollections$ = combineLatest([ - this.allCollectionsWithoutUnassigned$, + allCollections$, this.configService.getFeatureFlag$(FeatureFlag.OptimizeNestedTraverseTypescript), ]).pipe( map( From d64ec01bd75c25fa4bbeb4666b002fae54930bd8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 08:48:07 -0700 Subject: [PATCH 18/33] [deps]: Update sonarsource/sonarqube-scan-action action to v5 (#14931) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/scan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index 585115ef6dd..59ef1e0734e 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -74,7 +74,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Scan with SonarCloud - uses: sonarsource/sonarqube-scan-action@bfd4e558cda28cda6b5defafb9232d191be8c203 # v4.2.1 + uses: sonarsource/sonarqube-scan-action@2500896589ef8f7247069a56136f8dc177c27ccf # v5.2.0 env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} with: From 06a480fc14ec1e5680eae32bde2c16b33f570916 Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Fri, 30 May 2025 17:53:16 +0200 Subject: [PATCH 19/33] [PM-17501] Migrate send.component on web to use tailwind (#14940) * Replace usage of text-musted with tw-text-muted * Remove usage of class no-items --------- Co-authored-by: Daniel James Smith --- apps/web/src/app/tools/send/send.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/src/app/tools/send/send.component.html b/apps/web/src/app/tools/send/send.component.html index e55d5e56f78..1f220f4551e 100644 --- a/apps/web/src/app/tools/send/send.component.html +++ b/apps/web/src/app/tools/send/send.component.html @@ -3,7 +3,7 @@ @@ -183,10 +183,10 @@ -
+
From 4e07fd7666f2601812f81d6b691c312f7c4e6559 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 08:54:58 -0700 Subject: [PATCH 20/33] [deps]: Update anchore/scan-action action to v6 (#14928) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-web.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 275b867390e..019647f594a 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -309,7 +309,7 @@ jobs: - name: Scan Docker image if: ${{ needs.setup.outputs.has_secrets == 'true' }} id: container-scan - uses: anchore/scan-action@869c549e657a088dc0441b08ce4fc0ecdac2bb65 # v5.3.0 + uses: anchore/scan-action@2c901ab7378897c01b8efaa2d0c9bf519cc64b9e # v6.2.0 with: image: ${{ steps.image-name.outputs.name }} fail-build: false From 5eb8d7b181936220e79cad1d1630701eba813089 Mon Sep 17 00:00:00 2001 From: Bryan Cunningham Date: Fri, 30 May 2025 12:38:40 -0400 Subject: [PATCH 21/33] [CL-208][CL-339] Enhance Storybook docs pages (#14838) * rearrange button docs * Enhance avatar docs * Enhance badge docs * Enhance banner docs * add util to format args for snippets * update banner snippets * WIP * bind boolean args so they work correctly in Storybook * simplify button stories * Update callout docs * use title component for checkbox docs * use title and description component for chip select docs * update color password story docs * update disclosure docs * add import to icon docs * updated icon-button docs * update link docs * Update prgress docs * updated search field docs * remove html type definitions * add import for progress * updated toast docs * remove example from docs. format args for snippet * Update badges docs * handle array arg values correctly * Update badges list docs * fix dupe key error from taost story * remove unnecessary typeof check * remove banner usage example * add breadcrumbs import statement and jsdoc * add color password import statement * fixing type mismaches * fix typos * Add missing generics to format function * fix typo * update callout icon spacing to match Figma * add back max width container --- .storybook/format-args-for-code-snippet.ts | 33 ++++++ .storybook/preview.tsx | 7 +- .../components/src/avatar/avatar.component.ts | 6 ++ libs/components/src/avatar/avatar.mdx | 12 +-- libs/components/src/avatar/avatar.stories.ts | 16 +++ .../src/badge-list/badge-list.stories.ts | 3 +- libs/components/src/badge/badge.component.ts | 15 ++- libs/components/src/badge/badge.mdx | 18 +--- libs/components/src/badge/badge.stories.ts | 100 ++++++++++-------- .../components/src/banner/banner.component.ts | 15 ++- libs/components/src/banner/banner.mdx | 23 ++-- libs/components/src/banner/banner.stories.ts | 37 ++++--- .../src/breadcrumbs/breadcrumbs.component.ts | 5 + .../src/breadcrumbs/breadcrumbs.mdx | 11 +- libs/components/src/button/button.mdx | 39 ++++--- libs/components/src/button/button.stories.ts | 73 +++++++------ .../src/callout/callout.component.html | 5 +- .../src/callout/callout.component.ts | 5 + libs/components/src/callout/callout.mdx | 10 +- .../components/src/callout/callout.stories.ts | 23 ++-- libs/components/src/checkbox/checkbox.mdx | 5 +- .../src/chip-select/chip-select.component.ts | 3 + .../src/chip-select/chip-select.mdx | 7 +- .../color-password.component.ts | 6 +- .../src/color-password/color-password.mdx | 11 +- .../color-password/color-password.stories.ts | 6 +- .../src/disclosure/disclosure.component.ts | 24 +++++ libs/components/src/disclosure/disclosure.mdx | 32 +----- .../src/icon-button/icon-button.component.ts | 6 ++ .../src/icon-button/icon-button.mdx | 14 +-- .../src/icon-button/icon-button.stories.ts | 48 +++------ libs/components/src/icon/icon.mdx | 4 + libs/components/src/link/link.directive.ts | 8 ++ libs/components/src/link/link.mdx | 15 +-- libs/components/src/link/link.stories.ts | 10 ++ .../src/progress/progress.component.ts | 15 +-- libs/components/src/progress/progress.mdx | 10 +- .../src/progress/progress.stories.ts | 17 +++ libs/components/src/search/search.mdx | 4 +- libs/components/src/search/search.stories.ts | 7 +- libs/components/src/toast/toast.mdx | 18 ++-- libs/components/src/toast/toast.stories.ts | 26 +++-- libs/components/src/toast/toastr.component.ts | 3 + tsconfig.eslint.json | 1 + 44 files changed, 454 insertions(+), 302 deletions(-) create mode 100644 .storybook/format-args-for-code-snippet.ts diff --git a/.storybook/format-args-for-code-snippet.ts b/.storybook/format-args-for-code-snippet.ts new file mode 100644 index 00000000000..bf36c153c0a --- /dev/null +++ b/.storybook/format-args-for-code-snippet.ts @@ -0,0 +1,33 @@ +import { argsToTemplate, StoryObj } from "@storybook/angular"; + +type RenderArgType = StoryObj["args"]; + +export const formatArgsForCodeSnippet = >( + args: RenderArgType, +) => { + const nonNullArgs = Object.entries(args as ComponentType).filter( + ([_, value]) => value !== null && value !== undefined, + ); + const functionArgs = nonNullArgs.filter(([_, value]) => typeof value === "function"); + const argsToFormat = nonNullArgs.filter(([_, value]) => typeof value !== "function"); + + const argsToTemplateIncludeKeys = [...functionArgs].map( + ([key, _]) => key as keyof RenderArgType, + ); + + const formattedNonFunctionArgs = argsToFormat + .map(([key, value]) => { + if (typeof value === "boolean") { + return `[${key}]="${value}"`; + } + + if (Array.isArray(value)) { + const formattedArray = value.map((v) => `'${v}'`).join(", "); + return `[${key}]="[${formattedArray}]"`; + } + return `${key}="${value}"`; + }) + .join(" "); + + return `${formattedNonFunctionArgs} ${argsToTemplate(args as ComponentType, { include: argsToTemplateIncludeKeys })}`; +}; diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index a948fce0428..59b5287f3a3 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -41,7 +41,12 @@ const preview: Preview = { order: ["Documentation", ["Introduction", "Colors", "Icons"], "Component Library"], }, }, - docs: { source: { type: "dynamic", excludeDecorators: true } }, + docs: { + source: { + type: "dynamic", + excludeDecorators: true, + }, + }, backgrounds: { disable: true, }, diff --git a/libs/components/src/avatar/avatar.component.ts b/libs/components/src/avatar/avatar.component.ts index 554f55636fc..c66bba1c462 100644 --- a/libs/components/src/avatar/avatar.component.ts +++ b/libs/components/src/avatar/avatar.component.ts @@ -16,6 +16,12 @@ const SizeClasses: Record = { xsmall: ["tw-h-6", "tw-w-6"], }; +/** + * Avatars display a unique color that helps a user visually recognize their logged in account. + + * A variance in color across the avatar component is important as it is used in Account Switching as a + * visual indicator to recognize which of a personal or work account a user is logged into. +*/ @Component({ selector: "bit-avatar", template: `@if (src) { diff --git a/libs/components/src/avatar/avatar.mdx b/libs/components/src/avatar/avatar.mdx index 627ba526ed9..bbf356f96fa 100644 --- a/libs/components/src/avatar/avatar.mdx +++ b/libs/components/src/avatar/avatar.mdx @@ -1,15 +1,15 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Description, Meta, Canvas, Primary, Controls, Title } from "@storybook/addon-docs"; import * as stories from "./avatar.stories"; -# Avatar +```ts +import { AvatarModule } from "@bitwarden/components"; +``` -Avatars display a unique color that helps a user visually recognize their logged in account. - -A variance in color across the avatar component is important as it is used in Account Switching as a -visual indicator to recognize which of a personal or work account a user is logged into. + +<Description /> <Primary /> <Controls /> diff --git a/libs/components/src/avatar/avatar.stories.ts b/libs/components/src/avatar/avatar.stories.ts index 19a6f86d89c..9b0d4e4aa8c 100644 --- a/libs/components/src/avatar/avatar.stories.ts +++ b/libs/components/src/avatar/avatar.stories.ts @@ -1,5 +1,7 @@ import { Meta, StoryObj } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { AvatarComponent } from "./avatar.component"; export default { @@ -21,42 +23,56 @@ export default { type Story = StoryObj<AvatarComponent>; export const Default: Story = { + render: (args) => { + return { + props: args, + template: ` + <bit-avatar ${formatArgsForCodeSnippet<AvatarComponent>(args)}></bit-avatar> + `, + }; + }, args: { color: "#175ddc", }, }; export const Large: Story = { + ...Default, args: { size: "large", }, }; export const Small: Story = { + ...Default, args: { size: "small", }, }; export const LightBackground: Story = { + ...Default, args: { color: "#d2ffcf", }, }; export const Border: Story = { + ...Default, args: { border: true, }, }; export const ColorByID: Story = { + ...Default, args: { id: "236478", }, }; export const ColorByText: Story = { + ...Default, args: { text: "Jason Doe", }, diff --git a/libs/components/src/badge-list/badge-list.stories.ts b/libs/components/src/badge-list/badge-list.stories.ts index f69ecde8377..504871f9509 100644 --- a/libs/components/src/badge-list/badge-list.stories.ts +++ b/libs/components/src/badge-list/badge-list.stories.ts @@ -2,6 +2,7 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; import { BadgeModule } from "../badge"; import { SharedModule } from "../shared"; import { I18nMockService } from "../utils/i18n-mock.service"; @@ -44,7 +45,7 @@ export const Default: Story = { render: (args) => ({ props: args, template: ` - <bit-badge-list [variant]="variant" [maxItems]="maxItems" [items]="items" [truncate]="truncate"></bit-badge-list> + <bit-badge-list ${formatArgsForCodeSnippet<BadgeListComponent>(args)}></bit-badge-list> `, }), diff --git a/libs/components/src/badge/badge.component.ts b/libs/components/src/badge/badge.component.ts index 893257ff225..3612827eff2 100644 --- a/libs/components/src/badge/badge.component.ts +++ b/libs/components/src/badge/badge.component.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { CommonModule } from "@angular/common"; import { Component, ElementRef, HostBinding, Input } from "@angular/core"; @@ -45,7 +43,18 @@ const hoverStyles: Record<BadgeVariant, string[]> = { "hover:!tw-text-contrast", ], }; +/** + * Badges are primarily used as labels, counters, and small buttons. + * Typically Badges are only used with text set to `text-xs`. If additional sizes are needed, the component configurations may be reviewed and adjusted. + + * The Badge directive can be used on a `<span>` (non clickable events), or an `<a>` or `<button>` tag + + * > `NOTE:` The Focus and Hover states only apply to badges used for interactive events. + * + * > `NOTE:` The `disabled` state only applies to buttons. + * +*/ @Component({ selector: "span[bitBadge], a[bitBadge], button[bitBadge]", providers: [{ provide: FocusableElement, useExisting: BadgeComponent }], @@ -89,7 +98,7 @@ export class BadgeComponent implements FocusableElement { if (this.title !== undefined) { return this.title; } - return this.truncate ? this.el.nativeElement.textContent.trim() : null; + return this.truncate ? this?.el?.nativeElement?.textContent?.trim() : null; } /** diff --git a/libs/components/src/badge/badge.mdx b/libs/components/src/badge/badge.mdx index 55f32183899..957a3256cbb 100644 --- a/libs/components/src/badge/badge.mdx +++ b/libs/components/src/badge/badge.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./badge.stories"; @@ -8,25 +8,15 @@ import * as stories from "./badge.stories"; import { BadgeModule } from "@bitwarden/components"; ``` -# Badge - -Badges are primarily used as labels, counters, and small buttons. - -Typically Badges are only used with text set to `text-xs`. If additional sizes are needed, the -component configurations may be reviewed and adjusted. - -The Badge directive can be used on a `<span>` (non clickable events), or an `<a>` or `<button>` tag -for interactive events. The Focus and Hover states only apply to badges used for interactive events. -The `disabled` state only applies to buttons. - -The story below uses the `<button>` element to demonstrate all the possible states. +<Title /> +<Description /> <Primary /> <Controls /> ## Styles -### Primary +### Default / Primary The primary badge is used to indicate an active status (example: device management page) or provide additional information (example: type of emergency access granted). diff --git a/libs/components/src/badge/badge.stories.ts b/libs/components/src/badge/badge.stories.ts index 6473ba8c867..a151547ef6a 100644 --- a/libs/components/src/badge/badge.stories.ts +++ b/libs/components/src/badge/badge.stories.ts @@ -1,6 +1,8 @@ import { CommonModule } from "@angular/common"; import { Meta, moduleMetadata, StoryObj } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { BadgeComponent } from "./badge.component"; export default { @@ -12,7 +14,6 @@ export default { }), ], args: { - variant: "primary", truncate: false, }, parameters: { @@ -25,45 +26,11 @@ export default { type Story = StoryObj<BadgeComponent>; -export const Variants: Story = { +export const Default: Story = { render: (args) => ({ props: args, template: /*html*/ ` - <span class="tw-text-main tw-mx-1">Default</span> - <button class="tw-mx-1" bitBadge variant="primary" [truncate]="truncate">Primary</button> - <button class="tw-mx-1" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> - <button class="tw-mx-1" bitBadge variant="success" [truncate]="truncate">Success</button> - <button class="tw-mx-1" bitBadge variant="danger" [truncate]="truncate">Danger</button> - <button class="tw-mx-1" bitBadge variant="warning" [truncate]="truncate">Warning</button> - <button class="tw-mx-1" bitBadge variant="info" [truncate]="truncate">Info</button> - <button class="tw-mx-1" bitBadge variant="notification" [truncate]="truncate">Notification</button> - <br/><br/> - <span class="tw-text-main tw-mx-1">Hover</span> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="primary" [truncate]="truncate">Primary</button> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="success" [truncate]="truncate">Success</button> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="danger" [truncate]="truncate">Danger</button> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="warning" [truncate]="truncate">Warning</button> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="info" [truncate]="truncate">Info</button> - <button class="tw-mx-1 tw-test-hover" bitBadge variant="notification" [truncate]="truncate">Notification</button> - <br/><br/> - <span class="tw-text-main tw-mx-1">Focus Visible</span> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="primary" [truncate]="truncate">Primary</button> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="success" [truncate]="truncate">Success</button> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="danger" [truncate]="truncate">Danger</button> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="warning" [truncate]="truncate">Warning</button> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="info" [truncate]="truncate">Info</button> - <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="notification" [truncate]="truncate">Notification</button> - <br/><br/> - <span class="tw-text-main tw-mx-1">Disabled</span> - <button disabled class="tw-mx-1" bitBadge variant="primary" [truncate]="truncate">Primary</button> - <button disabled class="tw-mx-1" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> - <button disabled class="tw-mx-1" bitBadge variant="success" [truncate]="truncate">Success</button> - <button disabled class="tw-mx-1" bitBadge variant="danger" [truncate]="truncate">Danger</button> - <button disabled class="tw-mx-1" bitBadge variant="warning" [truncate]="truncate">Warning</button> - <button disabled class="tw-mx-1" bitBadge variant="info" [truncate]="truncate">Info</button> - <button disabled class="tw-mx-1" bitBadge variant="notification" [truncate]="truncate">Notification</button> + <span bitBadge ${formatArgsForCodeSnippet<BadgeComponent>(args)}>Badge containing lengthy text</span> `, }), }; @@ -72,11 +39,17 @@ export const Primary: Story = { render: (args) => ({ props: args, template: /*html*/ ` - <span class="tw-text-main">Span </span><span bitBadge [variant]="variant" [truncate]="truncate">Badge containing lengthy text</span> - <br /><br /> - <span class="tw-text-main">Link </span><a href="#" bitBadge [variant]="variant" [truncate]="truncate">Badge</a> - <br /><br /> - <span class="tw-text-main">Button </span><button bitBadge [variant]="variant" [truncate]="truncate">Badge</button> + <div class="tw-flex tw-flex-col tw-gap-4"> + <div class="tw-flex tw-items-center tw-gap-2"> + <span class="tw-text-main">span</span><span bitBadge ${formatArgsForCodeSnippet<BadgeComponent>(args)}>Badge containing lengthy text</span> + </div> + <div class="tw-flex tw-items-center tw-gap-2"> + <span class="tw-text-main">link </span><a href="#" bitBadge ${formatArgsForCodeSnippet<BadgeComponent>(args)}>Badge</a> + </div> + <div class="tw-flex tw-items-center tw-gap-2"> + <span class="tw-text-main">button </span><button bitBadge ${formatArgsForCodeSnippet<BadgeComponent>(args)}>Badge</button> + </div> + </div> `, }), }; @@ -129,3 +102,46 @@ export const Truncated: Story = { truncate: true, }, }; + +export const VariantsAndInteractionStates: Story = { + render: (args) => ({ + props: args, + template: /*html*/ ` + <span class="tw-text-main tw-mx-1">Default</span> + <button class="tw-mx-1" bitBadge variant="primary" [truncate]="truncate">Primary</button> + <button class="tw-mx-1" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> + <button class="tw-mx-1" bitBadge variant="success" [truncate]="truncate">Success</button> + <button class="tw-mx-1" bitBadge variant="danger" [truncate]="truncate">Danger</button> + <button class="tw-mx-1" bitBadge variant="warning" [truncate]="truncate">Warning</button> + <button class="tw-mx-1" bitBadge variant="info" [truncate]="truncate">Info</button> + <button class="tw-mx-1" bitBadge variant="notification" [truncate]="truncate">Notification</button> + <br/><br/> + <span class="tw-text-main tw-mx-1">Hover</span> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="primary" [truncate]="truncate">Primary</button> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="success" [truncate]="truncate">Success</button> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="danger" [truncate]="truncate">Danger</button> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="warning" [truncate]="truncate">Warning</button> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="info" [truncate]="truncate">Info</button> + <button class="tw-mx-1 tw-test-hover" bitBadge variant="notification" [truncate]="truncate">Notification</button> + <br/><br/> + <span class="tw-text-main tw-mx-1">Focus Visible</span> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="primary" [truncate]="truncate">Primary</button> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="success" [truncate]="truncate">Success</button> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="danger" [truncate]="truncate">Danger</button> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="warning" [truncate]="truncate">Warning</button> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="info" [truncate]="truncate">Info</button> + <button class="tw-mx-1 tw-test-focus-visible" bitBadge variant="notification" [truncate]="truncate">Notification</button> + <br/><br/> + <span class="tw-text-main tw-mx-1">Disabled</span> + <button disabled class="tw-mx-1" bitBadge variant="primary" [truncate]="truncate">Primary</button> + <button disabled class="tw-mx-1" bitBadge variant="secondary" [truncate]="truncate">Secondary</button> + <button disabled class="tw-mx-1" bitBadge variant="success" [truncate]="truncate">Success</button> + <button disabled class="tw-mx-1" bitBadge variant="danger" [truncate]="truncate">Danger</button> + <button disabled class="tw-mx-1" bitBadge variant="warning" [truncate]="truncate">Warning</button> + <button disabled class="tw-mx-1" bitBadge variant="info" [truncate]="truncate">Info</button> + <button disabled class="tw-mx-1" bitBadge variant="notification" [truncate]="truncate">Notification</button> + `, + }), +}; diff --git a/libs/components/src/banner/banner.component.ts b/libs/components/src/banner/banner.component.ts index a7b710d6a74..a6719f25989 100644 --- a/libs/components/src/banner/banner.component.ts +++ b/libs/components/src/banner/banner.component.ts @@ -7,15 +7,24 @@ import { I18nPipe } from "@bitwarden/ui-common"; import { IconButtonModule } from "../icon-button"; -type BannerTypes = "premium" | "info" | "warning" | "danger"; +type BannerType = "premium" | "info" | "warning" | "danger"; -const defaultIcon: Record<BannerTypes, string> = { +const defaultIcon: Record<BannerType, string> = { premium: "bwi-star", info: "bwi-info-circle", warning: "bwi-exclamation-triangle", danger: "bwi-error", }; +/** + * Banners are used for important communication with the user that needs to be seen right away, but has + * little effect on the experience. Banners appear at the top of the user's screen on page load and + * persist across all pages a user navigates to. + * - They should always be dismissible and never use a timeout. If a user dismisses a banner, it should not reappear during that same active session. + * - Use banners sparingly, as they can feel intrusive to the user if they appear unexpectedly. Their effectiveness may decrease if too many are used. + * - Avoid stacking multiple banners. + * - Banners can contain a button or anchor that uses the `bitLink` directive with `linkType="secondary"`. + */ @Component({ selector: "bit-banner", templateUrl: "./banner.component.html", @@ -23,7 +32,7 @@ const defaultIcon: Record<BannerTypes, string> = { imports: [CommonModule, IconButtonModule, I18nPipe], }) export class BannerComponent implements OnInit { - @Input("bannerType") bannerType: BannerTypes = "info"; + @Input("bannerType") bannerType: BannerType = "info"; @Input() icon: string; @Input() useAlertRole = true; @Input() showClose = true; diff --git a/libs/components/src/banner/banner.mdx b/libs/components/src/banner/banner.mdx index 67fb796a548..f37fe90e117 100644 --- a/libs/components/src/banner/banner.mdx +++ b/libs/components/src/banner/banner.mdx @@ -1,25 +1,16 @@ -import { Meta, Controls, Canvas, Primary } from "@storybook/addon-docs"; +import { Canvas, Controls, Description, Meta, Primary, Title } from "@storybook/addon-docs"; import * as stories from "./banner.stories"; <Meta of={stories} /> -# Banner - -Banners are used for important communication with the user that needs to be seen right away, but has -little effect on the experience. Banners appear at the top of the user's screen on page load and -persist across all pages a user navigates to. - -- They should always be dismissible and never use a timeout. If a user dismisses a banner, it should - not reappear during that same active session. -- Use banners sparingly, as they can feel intrusive to the user if they appear unexpectedly. Their - effectiveness may decrease if too many are used. -- Avoid stacking multiple banners. -- Banners can contain a button or anchor that uses the `bitLink` directive with - `linkType="secondary"`. +```ts +import { BannerModule } from "@bitwarden/components"; +``` +<Title /> +<Description /> <Primary /> - <Controls /> ## Types @@ -56,5 +47,5 @@ Rarely used, but may be used to alert users over critical messages or very outda ## Accessibility Banners sets the `role="status"` and `aria-live="polite"` attributes to ensure screen readers -announce the content prior to the test of the page. This behaviour can be disabled by setting +announce the content prior to the test of the page. This behavior can be disabled by setting `[useAlertRole]="false"`. diff --git a/libs/components/src/banner/banner.stories.ts b/libs/components/src/banner/banner.stories.ts index 105d30bc04a..8338c9240b9 100644 --- a/libs/components/src/banner/banner.stories.ts +++ b/libs/components/src/banner/banner.stories.ts @@ -2,6 +2,7 @@ import { Meta, moduleMetadata, StoryObj } from "@storybook/angular"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; import { IconButtonModule } from "../icon-button"; import { LinkModule } from "../link"; import { SharedModule } from "../shared/shared.module"; @@ -44,48 +45,50 @@ export default { type Story = StoryObj<BannerComponent>; +export const Base: Story = { + render: (args) => { + return { + props: args, + template: ` + <bit-banner ${formatArgsForCodeSnippet<BannerComponent>(args)}> + Content Really Long Text Lorem Ipsum Ipsum Ipsum + <button bitLink linkType="secondary">Button</button> + </bit-banner> + `, + }; + }, +}; + export const Premium: Story = { + ...Base, args: { bannerType: "premium", }, - render: (args) => ({ - props: args, - template: ` - <bit-banner [bannerType]="bannerType" (onClose)="onClose($event)" [showClose]=showClose> - Content Really Long Text Lorem Ipsum Ipsum Ipsum - <button bitLink linkType="secondary">Button</button> - </bit-banner> - `, - }), -}; - -Premium.args = { - bannerType: "premium", }; export const Info: Story = { - ...Premium, + ...Base, args: { bannerType: "info", }, }; export const Warning: Story = { - ...Premium, + ...Base, args: { bannerType: "warning", }, }; export const Danger: Story = { - ...Premium, + ...Base, args: { bannerType: "danger", }, }; export const HideClose: Story = { - ...Premium, + ...Base, args: { showClose: false, }, diff --git a/libs/components/src/breadcrumbs/breadcrumbs.component.ts b/libs/components/src/breadcrumbs/breadcrumbs.component.ts index 6e8fbf5c25a..24265212969 100644 --- a/libs/components/src/breadcrumbs/breadcrumbs.component.ts +++ b/libs/components/src/breadcrumbs/breadcrumbs.component.ts @@ -8,6 +8,11 @@ import { MenuModule } from "../menu"; import { BreadcrumbComponent } from "./breadcrumb.component"; +/** + * Breadcrumbs are used to help users understand where they are in a products navigation. Typically + * Bitwarden uses this component to indicate the user's current location in a set of data organized in + * containers (Collections, Folders, or Projects). + */ @Component({ selector: "bit-breadcrumbs", templateUrl: "./breadcrumbs.component.html", diff --git a/libs/components/src/breadcrumbs/breadcrumbs.mdx b/libs/components/src/breadcrumbs/breadcrumbs.mdx index 1ea0aff8c36..cd1d0226387 100644 --- a/libs/components/src/breadcrumbs/breadcrumbs.mdx +++ b/libs/components/src/breadcrumbs/breadcrumbs.mdx @@ -1,14 +1,15 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./breadcrumbs.stories"; <Meta of={stories} /> -# Breadcrumbs +```ts +import { BreadcrumbsModule } from "@bitwarden/components"; +``` -Breadcrumbs are used to help users understand where they are in a products navigation. Typically -Bitwarden uses this component to indicate the user's current location in a set of data organized in -containers (Collections, Folders, or Projects). +<Title /> +<Description /> <Primary /> <Controls /> diff --git a/libs/components/src/button/button.mdx b/libs/components/src/button/button.mdx index 61874922fc7..b0f347ba337 100644 --- a/libs/components/src/button/button.mdx +++ b/libs/components/src/button/button.mdx @@ -1,4 +1,12 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { + Markdown, + Meta, + Canvas, + Primary, + Controls, + Title, + Description, +} from "@storybook/addon-docs"; import * as stories from "./button.stories"; @@ -8,10 +16,9 @@ import * as stories from "./button.stories"; import { ButtonModule } from "@bitwarden/components"; ``` -# Button +<Title /> -Buttons are interactive elements that can be triggered using a mouse, keyboard, or touch. They are -used to indicate actions that can be performed by a user such as submitting a form. +### Default / Secondary <Primary /> @@ -30,7 +37,7 @@ takes: ### Groups -Groups of buttons should be seperated by a `0.5` rem gap. Usually acomplished by using the +Groups of buttons should be separated by a `0.5` rem gap. Usually accomplished by using the `tw-gap-2` class in the button group container. Groups within page content, dialog footers or forms should have the `primary` call to action placed @@ -41,26 +48,24 @@ right. There are 3 main styles for the button: Primary, Secondary, and Danger. -### Primary +### Default / Secondary -<Canvas of={stories.Primary} /> +The secondary styling(shown above) should be used for secondary calls to action. An action is +"secondary" if it relates indirectly to the purpose of a page. There may be multiple secondary +buttons next to each other; however, generally there should only be 1 or 2 calls to action per page. + +### Primary Use the primary button styling for all Primary call to actions. An action is "primary" if it relates to the main purpose of a page. There should never be 2 primary styled buttons next to each other. -### Secondary - -<Canvas of={stories.Secondary} /> - -The secondary styling should be used for secondary calls to action. An action is "secondary" if it -relates indirectly to the purpose of a page. There may be multiple secondary buttons next to each -other; however, generally there should only be 1 or 2 calls to action per page. +<Canvas of={stories.Primary} /> ### Danger -<Canvas of={stories.Danger} /> +Use the danger styling only in settings when the user may perform a permanent destructive action. -Use the danger styling only in settings when the user may preform a permanent action. +<Canvas of={stories.Danger} /> ## Disabled UI @@ -114,7 +119,7 @@ success toast). ### Submit and async actions Both submit and async action buttons use a loading button state while an action is taken. If your -button is preforming a long running task in the background like a server API call, be sure to review +button is performing a long running task in the background like a server API call, be sure to review the [Async Actions Directive](?path=/story/component-library-async-actions-overview--page). <Canvas of={stories.Loading} /> diff --git a/libs/components/src/button/button.stories.ts b/libs/components/src/button/button.stories.ts index 759bd1a352c..d0a4354f374 100644 --- a/libs/components/src/button/button.stories.ts +++ b/libs/components/src/button/button.stories.ts @@ -1,15 +1,15 @@ import { Meta, StoryObj } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { ButtonComponent } from "./button.component"; export default { title: "Component Library/Button", component: ButtonComponent, args: { - buttonType: "primary", disabled: false, loading: false, - size: "default", }, argTypes: { size: { @@ -27,40 +27,27 @@ export default { type Story = StoryObj<ButtonComponent>; -export const Primary: Story = { +export const Default: Story = { render: (args) => ({ props: args, template: /*html*/ ` - <div class="tw-flex tw-gap-4 tw-mb-6 tw-items-center"> - <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block">Button</button> - <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover">Button:hover</button> - <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-focus-visible">Button:focus-visible</button> - <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover tw-test-focus-visible">Button:hover:focus-visible</button> - <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-active">Button:active</button> - </div> - <div class="tw-flex tw-gap-4 tw-items-center"> - <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block">Anchor</a> - <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover">Anchor:hover</a> - <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-focus-visible">Anchor:focus-visible</a> - <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover tw-test-focus-visible">Anchor:hover:focus-visible</a> - <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-active">Anchor:active</a> - </div> + <button bitButton ${formatArgsForCodeSnippet<ButtonComponent>(args)}>Button</button> `, }), - args: { - buttonType: "primary", - }, -}; - -export const Secondary: Story = { - ...Primary, args: { buttonType: "secondary", }, }; +export const Primary: Story = { + ...Default, + args: { + buttonType: "primary", + }, +}; + export const Danger: Story = { - ...Primary, + ...Default, args: { buttonType: "danger", }, @@ -83,16 +70,8 @@ export const Small: Story = { }; export const Loading: Story = { - render: (args) => ({ - props: args, - template: ` - <button bitButton [disabled]="disabled" [loading]="loading" [block]="block" buttonType="primary" class="tw-mr-2">Primary</button> - <button bitButton [disabled]="disabled" [loading]="loading" [block]="block" buttonType="secondary" class="tw-mr-2">Secondary</button> - <button bitButton [disabled]="disabled" [loading]="loading" [block]="block" buttonType="danger" class="tw-mr-2">Danger</button> - `, - }), + ...Default, args: { - disabled: false, loading: true, }, }; @@ -101,7 +80,6 @@ export const Disabled: Story = { ...Loading, args: { disabled: true, - loading: false, }, }; @@ -165,3 +143,28 @@ export const WithIcon: Story = { `, }), }; + +export const InteractionStates: Story = { + render: (args) => ({ + props: args, + template: /*html*/ ` + <div class="tw-flex tw-gap-4 tw-mb-6 tw-items-center"> + <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block">Button</button> + <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover">Button:hover</button> + <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-focus-visible">Button:focus-visible</button> + <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover tw-test-focus-visible">Button:hover:focus-visible</button> + <button bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-active">Button:active</button> + </div> + <div class="tw-flex tw-gap-4 tw-items-center"> + <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block">Anchor</a> + <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover">Anchor:hover</a> + <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-focus-visible">Anchor:focus-visible</a> + <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-hover tw-test-focus-visible">Anchor:hover:focus-visible</a> + <a href="#" bitButton [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size" [block]="block" class="tw-test-active">Anchor:active</a> + </div> + `, + }), + args: { + buttonType: "primary", + }, +}; diff --git a/libs/components/src/callout/callout.component.html b/libs/components/src/callout/callout.component.html index bb7f918df32..4e7b5f2a0cc 100644 --- a/libs/components/src/callout/callout.component.html +++ b/libs/components/src/callout/callout.component.html @@ -4,7 +4,10 @@ [attr.aria-labelledby]="titleId" > @if (title) { - <header id="{{ titleId }}" class="tw-mb-1 tw-mt-0 tw-text-base tw-font-semibold"> + <header + id="{{ titleId }}" + class="tw-mb-1 tw-mt-0 tw-text-base tw-font-semibold tw-flex tw-gap-2 tw-items-center" + > @if (icon) { <i class="bwi" [ngClass]="[icon, headerClass]" aria-hidden="true"></i> } diff --git a/libs/components/src/callout/callout.component.ts b/libs/components/src/callout/callout.component.ts index 6ffd8d2d0ec..e1bd7f1a596 100644 --- a/libs/components/src/callout/callout.component.ts +++ b/libs/components/src/callout/callout.component.ts @@ -24,6 +24,11 @@ const defaultI18n: Partial<Record<CalloutTypes, string>> = { // Increments for each instance of this component let nextId = 0; +/** + * Callouts are used to communicate important information to the user. Callouts should be used + * sparingly, as they command a large amount of visual attention. Avoid using more than 1 callout in + * the same location. + */ @Component({ selector: "bit-callout", templateUrl: "callout.component.html", diff --git a/libs/components/src/callout/callout.mdx b/libs/components/src/callout/callout.mdx index 160b1e1cc33..a1254b3f691 100644 --- a/libs/components/src/callout/callout.mdx +++ b/libs/components/src/callout/callout.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./callout.stories"; @@ -8,11 +8,11 @@ import { CalloutModule } from "@bitwarden/components"; <Meta of={stories} /> -# Callouts +<Title /> +<Description /> -Callouts are used to communicate important information to the user. Callouts should be used -sparingly, as they command a large amount of visual attention. Avoid using more than 1 callout in -the same location. +<Primary /> +<Controls /> ## Styles diff --git a/libs/components/src/callout/callout.stories.ts b/libs/components/src/callout/callout.stories.ts index 3101d4316f1..5f22bf9570a 100644 --- a/libs/components/src/callout/callout.stories.ts +++ b/libs/components/src/callout/callout.stories.ts @@ -2,6 +2,7 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; import { I18nMockService } from "../utils/i18n-mock.service"; import { CalloutComponent } from "./callout.component"; @@ -24,9 +25,6 @@ export default { ], }), ], - args: { - type: "warning", - }, parameters: { design: { type: "figma", @@ -37,36 +35,35 @@ export default { type Story = StoryObj<CalloutComponent>; -export const Success: Story = { +export const Info: Story = { render: (args) => ({ props: args, template: ` - <bit-callout [type]="type" [title]="title">Content</bit-callout> + <bit-callout ${formatArgsForCodeSnippet<CalloutComponent>(args)}>Content</bit-callout> `, }), args: { - type: "success", - title: "Success", + title: "Title", }, }; -export const Info: Story = { - ...Success, +export const Success: Story = { + ...Info, args: { - type: "info", - title: "Info", + ...Info.args, + type: "success", }, }; export const Warning: Story = { - ...Success, + ...Info, args: { type: "warning", }, }; export const Danger: Story = { - ...Success, + ...Info, args: { type: "danger", }, diff --git a/libs/components/src/checkbox/checkbox.mdx b/libs/components/src/checkbox/checkbox.mdx index f3ce0d8fd07..ba5de4d234a 100644 --- a/libs/components/src/checkbox/checkbox.mdx +++ b/libs/components/src/checkbox/checkbox.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Source, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Source, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./checkbox.stories"; @@ -8,7 +8,8 @@ import * as stories from "./checkbox.stories"; import { CheckboxModule } from "@bitwarden/components"; ``` -# Checkbox +<Title /> +<Description /> <Primary /> <Controls /> diff --git a/libs/components/src/chip-select/chip-select.component.ts b/libs/components/src/chip-select/chip-select.component.ts index d1f3bba2624..270249ade0c 100644 --- a/libs/components/src/chip-select/chip-select.component.ts +++ b/libs/components/src/chip-select/chip-select.component.ts @@ -33,6 +33,9 @@ export type ChipSelectOption<T> = Option<T> & { children?: ChipSelectOption<T>[]; }; +/** + * `<bit-chip-select>` is a select element that is commonly used to filter items in lists or tables. + */ @Component({ selector: "bit-chip-select", templateUrl: "chip-select.component.html", diff --git a/libs/components/src/chip-select/chip-select.mdx b/libs/components/src/chip-select/chip-select.mdx index d569158b75a..b09b9664f8e 100644 --- a/libs/components/src/chip-select/chip-select.mdx +++ b/libs/components/src/chip-select/chip-select.mdx @@ -1,4 +1,4 @@ -import { Meta, Primary, Controls, Canvas } from "@storybook/addon-docs"; +import { Meta, Primary, Controls, Canvas, Title, Description } from "@storybook/addon-docs"; import * as stories from "./chip-select.stories"; @@ -8,9 +8,8 @@ import * as stories from "./chip-select.stories"; import { ChipSelectComponent } from "@bitwarden/components"; ``` -# Chip Select - -`<bit-chip-select>` is a select element that is commonly used to filter items in lists or tables. +<Title /> +<Description /> <Canvas of={stories.Default} /> diff --git a/libs/components/src/color-password/color-password.component.ts b/libs/components/src/color-password/color-password.component.ts index 2dd78e8525d..a6cd58044a3 100644 --- a/libs/components/src/color-password/color-password.component.ts +++ b/libs/components/src/color-password/color-password.component.ts @@ -10,7 +10,11 @@ enum CharacterType { Special, Number, } - +/** + * The color password is used primarily in the Generator pages and in the Login type form. It includes + * the logic for displaying letters as `text-main`, numbers as `primary`, and special symbols as + * `danger`. + */ @Component({ selector: "bit-color-password", template: `@for (character of passwordCharArray(); track $index; let i = $index) { diff --git a/libs/components/src/color-password/color-password.mdx b/libs/components/src/color-password/color-password.mdx index 8f3746715e1..4deeace9b9e 100644 --- a/libs/components/src/color-password/color-password.mdx +++ b/libs/components/src/color-password/color-password.mdx @@ -1,14 +1,15 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./color-password.stories"; <Meta of={stories} /> -# Color password +```ts +import { ColorPasswordModule } from "@bitwarden/components"; +``` -The color password is used primarily in the Generator pages and in the Login type form. It includes -the logic for displaying letters as `text-main`, numbers as `primary`, and special symbols as -`danger`. +<Title /> +<Description /> <Primary /> <Controls /> diff --git a/libs/components/src/color-password/color-password.stories.ts b/libs/components/src/color-password/color-password.stories.ts index bb835d97d4a..5a544dcb22e 100644 --- a/libs/components/src/color-password/color-password.stories.ts +++ b/libs/components/src/color-password/color-password.stories.ts @@ -1,5 +1,7 @@ import { Meta, StoryObj } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { ColorPasswordComponent } from "./color-password.component"; const examplePassword = "Wq$Jk😀7j DX#rS5Sdi!z "; @@ -25,7 +27,7 @@ export const ColorPassword: Story = { render: (args) => ({ props: args, template: ` - <bit-color-password class="tw-text-base" [password]="password" [showCount]="showCount"></bit-color-password> + <bit-color-password ${formatArgsForCodeSnippet<ColorPasswordComponent>(args)}></bit-color-password> `, }), }; @@ -35,7 +37,7 @@ export const WrappedColorPassword: Story = { props: args, template: ` <div class="tw-max-w-32"> - <bit-color-password class="tw-text-base" [password]="password" [showCount]="showCount"></bit-color-password> + <bit-color-password ${formatArgsForCodeSnippet<ColorPasswordComponent>(args)}></bit-color-password> </div> `, }), diff --git a/libs/components/src/disclosure/disclosure.component.ts b/libs/components/src/disclosure/disclosure.component.ts index 6de06b48b3f..c18a2e31ea6 100644 --- a/libs/components/src/disclosure/disclosure.component.ts +++ b/libs/components/src/disclosure/disclosure.component.ts @@ -11,6 +11,30 @@ import { let nextId = 0; +/** + * The `bit-disclosure` component is used in tandem with the `bitDisclosureTriggerFor` directive to create an accessible content area whose visibility is controlled by a trigger button. + + * To compose a disclosure and trigger: + + * 1. Create a trigger component (see "Supported Trigger Components" section below) + * 2. Create a `bit-disclosure` + * 3. Set a template reference on the `bit-disclosure` + * 4. Use the `bitDisclosureTriggerFor` directive on the trigger component, and pass it the `bit-disclosure` template reference + * 5. Set the `open` property on the `bit-disclosure` to init the disclosure as either currently expanded or currently collapsed. The disclosure will default to `false`, meaning it defaults to being hidden. + * + * @example + * + * ```html + * <button + * type="button" + * bitIconButton="bwi-sliders" + * [buttonType]="'muted'" + * [bitDisclosureTriggerFor]="disclosureRef" + * ></button> + * <bit-disclosure #disclosureRef open>click button to hide this content</bit-disclosure> + * ``` + * + */ @Component({ selector: "bit-disclosure", standalone: true, diff --git a/libs/components/src/disclosure/disclosure.mdx b/libs/components/src/disclosure/disclosure.mdx index 2fcff6f5982..50ccf936acc 100644 --- a/libs/components/src/disclosure/disclosure.mdx +++ b/libs/components/src/disclosure/disclosure.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./disclosure.stories"; @@ -8,37 +8,11 @@ import * as stories from "./disclosure.stories"; import { DisclosureComponent, DisclosureTriggerForDirective } from "@bitwarden/components"; ``` -# Disclosure - -The `bit-disclosure` component is used in tandem with the `bitDisclosureTriggerFor` directive to -create an accessible content area whose visibility is controlled by a trigger button. - -To compose a disclosure and trigger: - -1. Create a trigger component (see "Supported Trigger Components" section below) -2. Create a `bit-disclosure` -3. Set a template reference on the `bit-disclosure` -4. Use the `bitDisclosureTriggerFor` directive on the trigger component, and pass it the - `bit-disclosure` template reference -5. Set the `open` property on the `bit-disclosure` to init the disclosure as either currently - expanded or currently collapsed. The disclosure will default to `false`, meaning it defaults to - being hidden. - -``` -<button - type="button" - bitIconButton="bwi-sliders" - [buttonType]="'muted'" - [bitDisclosureTriggerFor]="disclosureRef" -></button> -<bit-disclosure #disclosureRef open>click button to hide this content</bit-disclosure> -``` +<Title /> +<Description /> <Canvas of={stories.DisclosureWithIconButton} /> -<br /> -<br /> - ## Supported Trigger Components This is the list of currently supported trigger components: diff --git a/libs/components/src/icon-button/icon-button.component.ts b/libs/components/src/icon-button/icon-button.component.ts index 60877070e2b..573708b1e40 100644 --- a/libs/components/src/icon-button/icon-button.component.ts +++ b/libs/components/src/icon-button/icon-button.component.ts @@ -147,7 +147,13 @@ const sizes: Record<IconButtonSize, string[]> = { default: ["tw-px-2.5", "tw-py-1.5"], small: ["tw-leading-none", "tw-text-base", "tw-p-1"], }; +/** + * Icon buttons are used when no text accompanies the button. It consists of an icon that may be updated to any icon in the `bwi-font`, a `title` attribute, and an `aria-label`. + * The most common use of the icon button is in the banner, toast, and modal components as a close button. It can also be found in tables as the 3 dot option menu, or on navigation list items when there are options that need to be collapsed into a menu. + + * Similar to the main button components, spacing between multiple icon buttons should be .5rem. + */ @Component({ selector: "button[bitIconButton]:not(button[bitButton])", templateUrl: "icon-button.component.html", diff --git a/libs/components/src/icon-button/icon-button.mdx b/libs/components/src/icon-button/icon-button.mdx index 85164717de7..637a9d7daa0 100644 --- a/libs/components/src/icon-button/icon-button.mdx +++ b/libs/components/src/icon-button/icon-button.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./icon-button.stories"; @@ -8,16 +8,8 @@ import * as stories from "./icon-button.stories"; import { IconButtonModule } from "@bitwarden/components"; ``` -# Icon Button - -Icon buttons are used when no text accompanies the button. It consists of an icon that may be -updated to any icon in the `bwi-font`, a `title` attribute, and an `aria-label`. - -The most common use of the icon button is in the banner, toast, and modal components as a close -button. It can also be found in tables as the 3 dot option menu, or on navigation list items when -there are options that need to be collapsed into a menu. - -Similar to the main button components, spacing between multiple icon buttons should be .5rem. +<Title /> +<Description /> <Primary /> <Controls /> diff --git a/libs/components/src/icon-button/icon-button.stories.ts b/libs/components/src/icon-button/icon-button.stories.ts index 08c95c5d641..f63c494f7db 100644 --- a/libs/components/src/icon-button/icon-button.stories.ts +++ b/libs/components/src/icon-button/icon-button.stories.ts @@ -1,5 +1,7 @@ import { Meta, StoryObj } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { BitIconButtonComponent } from "./icon-button.component"; export default { @@ -7,8 +9,11 @@ export default { component: BitIconButtonComponent, args: { bitIconButton: "bwi-plus", - size: "default", - disabled: false, + }, + argTypes: { + buttonType: { + options: ["primary", "secondary", "danger", "unstyled", "contrast", "main", "muted", "light"], + }, }, parameters: { design: { @@ -24,25 +29,9 @@ export const Default: Story = { render: (args) => ({ props: args, template: /*html*/ ` - <div class="tw-space-x-4"> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="main" [size]="size">Button</button> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="muted" [size]="size">Button</button> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="primary" [size]="size">Button</button> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="secondary"[size]="size">Button</button> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="danger" [size]="size">Button</button> - <div class="tw-bg-primary-600 tw-p-2 tw-inline-block"> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="contrast" [size]="size">Button</button> - </div> - <div class="tw-bg-background-alt2 tw-p-2 tw-inline-block"> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" buttonType="light" [size]="size">Button</button> - </div> - </div> + <button ${formatArgsForCodeSnippet<BitIconButtonComponent>(args)}>Button</button> `, }), - args: { - size: "default", - buttonType: "primary", - }, }; export const Small: Story = { @@ -54,40 +43,35 @@ export const Small: Story = { }; export const Primary: Story = { - render: (args) => ({ - props: args, - template: /*html*/ ` - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size">Button</button> - `, - }), + ...Default, args: { buttonType: "primary", }, }; export const Secondary: Story = { - ...Primary, + ...Default, args: { buttonType: "secondary", }, }; export const Danger: Story = { - ...Primary, + ...Default, args: { buttonType: "danger", }, }; export const Main: Story = { - ...Primary, + ...Default, args: { buttonType: "main", }, }; export const Muted: Story = { - ...Primary, + ...Default, args: { buttonType: "muted", }, @@ -98,7 +82,8 @@ export const Light: Story = { props: args, template: /*html*/ ` <div class="tw-bg-background-alt2 tw-p-6 tw-w-full tw-inline-block"> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size">Button</button> + <!-- <div> used only to provide dark background color --> + <button ${formatArgsForCodeSnippet<BitIconButtonComponent>(args)}>Button</button> </div> `, }), @@ -112,7 +97,8 @@ export const Contrast: Story = { props: args, template: /*html*/ ` <div class="tw-bg-primary-600 tw-p-6 tw-w-full tw-inline-block"> - <button bitIconButton="bwi-plus" [disabled]="disabled" [loading]="loading" [buttonType]="buttonType" [size]="size">Button</button> + <!-- <div> used only to provide dark background color --> + <button ${formatArgsForCodeSnippet<BitIconButtonComponent>(args)}>Button</button> </div> `, }), diff --git a/libs/components/src/icon/icon.mdx b/libs/components/src/icon/icon.mdx index 6435fc24948..d1809c81cd2 100644 --- a/libs/components/src/icon/icon.mdx +++ b/libs/components/src/icon/icon.mdx @@ -4,6 +4,10 @@ import * as stories from "./icon.stories"; <Meta of={stories} /> +```ts +import { IconModule } from "@bitwarden/components"; +``` + # Icon Use Instructions - Icons will generally be attached to the associated Jira task. diff --git a/libs/components/src/link/link.directive.ts b/libs/components/src/link/link.directive.ts index 52aba557661..ca25e5fef56 100644 --- a/libs/components/src/link/link.directive.ts +++ b/libs/components/src/link/link.directive.ts @@ -66,6 +66,14 @@ abstract class LinkDirective { linkType: LinkType = "primary"; } +/** + * Text Links and Buttons can use either the `<a>` or `<button>` tags. Choose which based on the action the button takes: + + * - if navigating to a new page, use a `<a>` + * - if taking an action on the current page, use a `<button>` + + * Text buttons or links are most commonly used in paragraphs of text or in forms to customize actions or show/hide additional form options. + */ @Directive({ selector: "a[bitLink]", standalone: true, diff --git a/libs/components/src/link/link.mdx b/libs/components/src/link/link.mdx index e509ddb9911..8fb5f693f10 100644 --- a/libs/components/src/link/link.mdx +++ b/libs/components/src/link/link.mdx @@ -1,4 +1,4 @@ -import { Meta, Story, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Story, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./link.stories"; @@ -8,18 +8,11 @@ import * as stories from "./link.stories"; import { LinkModule } from "@bitwarden/components"; ``` -# Link / Text button - -Text Links and Buttons can use either the `<a>` or `<button>` tags. Choose which based on the action -the button takes: - -- if navigating to a new page, use a `<a>` -- if taking an action on the current page, use a `<button>` - -Text buttons or links are most commonly used in paragraphs of text or in forms to customize actions -or show/hide additional form options. +<Title>Link / Text button + + ## Variants diff --git a/libs/components/src/link/link.stories.ts b/libs/components/src/link/link.stories.ts index d07d33ae589..edf2cb14cd6 100644 --- a/libs/components/src/link/link.stories.ts +++ b/libs/components/src/link/link.stories.ts @@ -1,5 +1,7 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { AnchorLinkDirective, ButtonLinkDirective } from "./link.directive"; import { LinkModule } from "./link.module"; @@ -27,6 +29,14 @@ export default { type Story = StoryObj; export const Default: Story = { + render: (args) => ({ + template: /*html*/ ` + (args)}>Your text here + `, + }), +}; + +export const InteractionStates: Story = { render: () => ({ template: /*html*/ `
diff --git a/libs/components/src/progress/progress.component.ts b/libs/components/src/progress/progress.component.ts index 04e535158b1..cc2a6df7340 100644 --- a/libs/components/src/progress/progress.component.ts +++ b/libs/components/src/progress/progress.component.ts @@ -1,22 +1,25 @@ import { CommonModule } from "@angular/common"; import { Component, Input } from "@angular/core"; -type SizeTypes = "small" | "default" | "large"; -type BackgroundTypes = "danger" | "primary" | "success" | "warning"; +type ProgressSizeType = "small" | "default" | "large"; +type BackgroundType = "danger" | "primary" | "success" | "warning"; -const SizeClasses: Record = { +const SizeClasses: Record = { small: ["tw-h-1"], default: ["tw-h-4"], large: ["tw-h-6"], }; -const BackgroundClasses: Record = { +const BackgroundClasses: Record = { danger: ["tw-bg-danger-600"], primary: ["tw-bg-primary-600"], success: ["tw-bg-success-600"], warning: ["tw-bg-warning-600"], }; +/** + * Progress indicators may be used to visually indicate progress or to visually measure some other value, such as a password strength indicator. + */ @Component({ selector: "bit-progress", templateUrl: "./progress.component.html", @@ -25,9 +28,9 @@ const BackgroundClasses: Record = { }) export class ProgressComponent { @Input() barWidth = 0; - @Input() bgColor: BackgroundTypes = "primary"; + @Input() bgColor: BackgroundType = "primary"; @Input() showText = true; - @Input() size: SizeTypes = "default"; + @Input() size: ProgressSizeType = "default"; @Input() text?: string; get displayText() { diff --git a/libs/components/src/progress/progress.mdx b/libs/components/src/progress/progress.mdx index 9a75f8ae1fa..def2f239129 100644 --- a/libs/components/src/progress/progress.mdx +++ b/libs/components/src/progress/progress.mdx @@ -1,13 +1,15 @@ -import { Meta, Canvas, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./progress.stories"; -# Progress +```ts +import { ProgressModule } from "@bitwarden/components"; +``` -Progress indicators may be used to visually indicate progress or to visually measure some other -value, such as a password strength indicator. + +<Description /> <Primary /> <Controls /> diff --git a/libs/components/src/progress/progress.stories.ts b/libs/components/src/progress/progress.stories.ts index 1484dab0a21..5c7eb066cd3 100644 --- a/libs/components/src/progress/progress.stories.ts +++ b/libs/components/src/progress/progress.stories.ts @@ -1,5 +1,7 @@ import { Meta, StoryObj } from "@storybook/angular"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; + import { ProgressComponent } from "./progress.component"; export default { @@ -20,19 +22,34 @@ export default { type Story = StoryObj<ProgressComponent>; +export const Base: Story = { + render: (args) => ({ + props: args, + template: ` + <bit-progress ${formatArgsForCodeSnippet<ProgressComponent>(args)}></bit-progress> + `, + }), + args: { + barWidth: 50, + }, +}; + export const Empty: Story = { + ...Base, args: { barWidth: 0, }, }; export const Full: Story = { + ...Base, args: { barWidth: 100, }, }; export const CustomText: Story = { + ...Base, args: { barWidth: 25, text: "Loading...", diff --git a/libs/components/src/search/search.mdx b/libs/components/src/search/search.mdx index 492fd0dda2d..7775225b8c2 100644 --- a/libs/components/src/search/search.mdx +++ b/libs/components/src/search/search.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Source, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Source, Primary, Controls, Title } from "@storybook/addon-docs"; import * as stories from "./search.stories"; @@ -8,7 +8,7 @@ import * as stories from "./search.stories"; import { SearchModule } from "@bitwarden/components"; ``` -# Search +<Title>Search field diff --git a/libs/components/src/search/search.stories.ts b/libs/components/src/search/search.stories.ts index a6cd714d43a..526e1381d70 100644 --- a/libs/components/src/search/search.stories.ts +++ b/libs/components/src/search/search.stories.ts @@ -3,6 +3,7 @@ import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; import { InputModule } from "../input/input.module"; import { SharedModule } from "../shared"; import { I18nMockService } from "../utils/i18n-mock.service"; @@ -27,6 +28,10 @@ export default { ], }), ], + args: { + placeholder: "search", + disabled: false, + }, } as Meta; type Story = StoryObj; @@ -35,7 +40,7 @@ export const Default: Story = { render: (args) => ({ props: args, template: ` - + (args)}> `, }), args: {}, diff --git a/libs/components/src/toast/toast.mdx b/libs/components/src/toast/toast.mdx index d27109b4772..6d9d80c6ae5 100644 --- a/libs/components/src/toast/toast.mdx +++ b/libs/components/src/toast/toast.mdx @@ -1,4 +1,4 @@ -import { Meta, Canvas, Source, Primary, Controls } from "@storybook/addon-docs"; +import { Meta, Canvas, Source, Primary, Controls, Title, Description } from "@storybook/addon-docs"; import * as stories from "./toast.stories"; @@ -8,12 +8,16 @@ import * as stories from "./toast.stories"; import { ToastService } from "@bitwarden/components"; ``` -# Toast + -Toasts are ephemeral notifications. They most often communicate the result of a user action. Due to -their ephemeral nature, long messages and critical alerts should not utilize toasts. +<Primary /> +<Controls /> -<Canvas of={stories.Default} /> +### Variants + +<Canvas of={stories.Variants} /> + +### Long content <Canvas of={stories.LongContent} /> @@ -38,7 +42,7 @@ The following options are accepted: <Canvas of={stories.Service} /> -## Toast container +### Toast container `bit-toast-container` should be added to the app root of consuming clients to ensure toasts are properly announced to screenreaders. @@ -48,7 +52,7 @@ properly announced to screenreaders. <bit-toast-container></bit-toast-container> ``` -## Accessibility +### Accessibility In addition to the accessibility provided by the `bit-toast-container` component, the toast itself will apply `aria-alert="true"` if the toast is of type `error`. diff --git a/libs/components/src/toast/toast.stories.ts b/libs/components/src/toast/toast.stories.ts index 0af4974eead..b4a80cd3276 100644 --- a/libs/components/src/toast/toast.stories.ts +++ b/libs/components/src/toast/toast.stories.ts @@ -6,6 +6,7 @@ import { Meta, StoryObj, applicationConfig, moduleMetadata } from "@storybook/an import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { formatArgsForCodeSnippet } from "../../../../.storybook/format-args-for-code-snippet"; import { ButtonModule } from "../button"; import { I18nMockService } from "../utils/i18n-mock.service"; @@ -75,11 +76,22 @@ export const Default: Story = { render: (args) => ({ props: args, template: ` - <div class="tw-flex tw-flex-col tw-min-w tw-max-w-[--bit-toast-width]"> - <bit-toast [title]="title" [message]="message" [progressWidth]="progressWidth" (onClose)="onClose()" variant="success"></bit-toast> - <bit-toast [title]="title" [message]="message" [progressWidth]="progressWidth" (onClose)="onClose()" variant="info"></bit-toast> - <bit-toast [title]="title" [message]="message" [progressWidth]="progressWidth" (onClose)="onClose()" variant="warning"></bit-toast> - <bit-toast [title]="title" [message]="message" [progressWidth]="progressWidth" (onClose)="onClose()" variant="error"></bit-toast> + <div class="tw-min-w tw-max-w-[--bit-toast-width]"> + <bit-toast ${formatArgsForCodeSnippet<ToastComponent>(args)}></bit-toast> + </div> + `, + }), +}; + +export const Variants: Story = { + render: (args) => ({ + props: args, + template: ` + <div class="tw-flex tw-flex-col tw-min-w tw-max-w-[--bit-toast-width] tw-gap-2"> + <bit-toast ${formatArgsForCodeSnippet<ToastComponent>(args)} variant="success"></bit-toast> + <bit-toast ${formatArgsForCodeSnippet<ToastComponent>(args)} variant="info"></bit-toast> + <bit-toast ${formatArgsForCodeSnippet<ToastComponent>(args)} variant="warning"></bit-toast> + <bit-toast ${formatArgsForCodeSnippet<ToastComponent>(args)} variant="error"></bit-toast> </div> `, }), @@ -93,8 +105,8 @@ export const LongContent: Story = { args: { title: "Foo", message: [ - "Lorem ipsum dolor sit amet, consectetur adipisci", - "Lorem ipsum dolor sit amet, consectetur adipisci", + "Maecenas commodo posuere quam, vel malesuada nulla accumsan ac.", + "Pellentesque interdum ligula ante, eget bibendum ante lacinia congue.", ], }, }; diff --git a/libs/components/src/toast/toastr.component.ts b/libs/components/src/toast/toastr.component.ts index 75124ceb4b3..06182f094aa 100644 --- a/libs/components/src/toast/toastr.component.ts +++ b/libs/components/src/toast/toastr.component.ts @@ -4,6 +4,9 @@ import { Toast as BaseToastrComponent, ToastPackage, ToastrService } from "ngx-t import { ToastComponent } from "./toast.component"; +/** + * Toasts are ephemeral notifications. They most often communicate the result of a user action. Due to their ephemeral nature, long messages and critical alerts should not utilize toasts. + */ @Component({ template: ` <bit-toast diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 90b95ff54bf..a60a7053182 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -46,6 +46,7 @@ ".storybook/main.ts", ".storybook/manager.js", ".storybook/test-runner.ts", + ".storybook/format-args-for-code-snippet.ts", "apps/browser/src/autofill/content/components/.lit-storybook/main.ts" ], "include": ["apps/**/*", "libs/**/*", "bitwarden_license/**/*", "scripts/**/*"], From 895d54fd5eb92a520d76fe8458ef94fc2765890e Mon Sep 17 00:00:00 2001 From: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> Date: Fri, 30 May 2025 11:40:55 -0500 Subject: [PATCH 22/33] [PM-21443] Require userId for KeyService's everHadUserKey$ (#14712) * Require userId for KeyService's everHadUserKey$ * handle null active user in tdeDecryptionRequiredGuard --- .../src/auth/guards/lock.guard.spec.ts | 2 +- libs/angular/src/auth/guards/lock.guard.ts | 2 +- .../angular/src/auth/guards/redirect.guard.ts | 6 +- .../tde-decryption-required.guard.spec.ts | 107 ++++++++++++++++++ .../guards/tde-decryption-required.guard.ts | 11 +- .../src/auth/guards/unauth.guard.spec.ts | 4 +- libs/angular/src/auth/guards/unauth.guard.ts | 2 +- .../src/abstractions/key.service.ts | 6 +- libs/key-management/src/key.service.spec.ts | 11 +- libs/key-management/src/key.service.ts | 16 ++- 10 files changed, 142 insertions(+), 25 deletions(-) create mode 100644 libs/angular/src/auth/guards/tde-decryption-required.guard.spec.ts diff --git a/libs/angular/src/auth/guards/lock.guard.spec.ts b/libs/angular/src/auth/guards/lock.guard.spec.ts index 32b8ecbb9dd..ed77f9bdebf 100644 --- a/libs/angular/src/auth/guards/lock.guard.spec.ts +++ b/libs/angular/src/auth/guards/lock.guard.spec.ts @@ -44,7 +44,7 @@ describe("lockGuard", () => { const keyService: MockProxy<KeyService> = mock<KeyService>(); keyService.isLegacyUser.mockResolvedValue(setupParams.isLegacyUser); - keyService.everHadUserKey$ = of(setupParams.everHadUserKey); + keyService.everHadUserKey$.mockReturnValue(of(setupParams.everHadUserKey)); const platformUtilService: MockProxy<PlatformUtilsService> = mock<PlatformUtilsService>(); platformUtilService.getClientType.mockReturnValue(setupParams.clientType); diff --git a/libs/angular/src/auth/guards/lock.guard.ts b/libs/angular/src/auth/guards/lock.guard.ts index 10ad4917f32..01d03dc718d 100644 --- a/libs/angular/src/auth/guards/lock.guard.ts +++ b/libs/angular/src/auth/guards/lock.guard.ts @@ -84,7 +84,7 @@ export function lockGuard(): CanActivateFn { } // If authN user with TDE directly navigates to lock, reject that navigation - const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$); + const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$(activeUser.id)); if (tdeEnabled && !everHadUserKey) { return false; } diff --git a/libs/angular/src/auth/guards/redirect.guard.ts b/libs/angular/src/auth/guards/redirect.guard.ts index 00dd20c9909..b893614b405 100644 --- a/libs/angular/src/auth/guards/redirect.guard.ts +++ b/libs/angular/src/auth/guards/redirect.guard.ts @@ -2,8 +2,10 @@ import { inject } from "@angular/core"; import { CanActivateFn, Router } from "@angular/router"; import { firstValueFrom } from "rxjs"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; +import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { DeviceTrustServiceAbstraction } from "@bitwarden/common/key-management/device-trust/abstractions/device-trust.service.abstraction"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { KeyService } from "@bitwarden/key-management"; @@ -33,6 +35,7 @@ export function redirectGuard(overrides: Partial<RedirectRoutes> = {}): CanActiv const authService = inject(AuthService); const keyService = inject(KeyService); const deviceTrustService = inject(DeviceTrustServiceAbstraction); + const accountService = inject(AccountService); const logService = inject(LogService); const router = inject(Router); @@ -49,7 +52,8 @@ export function redirectGuard(overrides: Partial<RedirectRoutes> = {}): CanActiv // If locked, TDE is enabled, and the user hasn't decrypted yet, then redirect to the // login decryption options component. const tdeEnabled = await firstValueFrom(deviceTrustService.supportsDeviceTrust$); - const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$); + const userId = await firstValueFrom(accountService.activeAccount$.pipe(getUserId)); + const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$(userId)); if (authStatus === AuthenticationStatus.Locked && tdeEnabled && !everHadUserKey) { logService.info( "Sending user to TDE decryption options. AuthStatus is %s. TDE support is %s. Ever had user key is %s.", diff --git a/libs/angular/src/auth/guards/tde-decryption-required.guard.spec.ts b/libs/angular/src/auth/guards/tde-decryption-required.guard.spec.ts new file mode 100644 index 00000000000..4408452a2a2 --- /dev/null +++ b/libs/angular/src/auth/guards/tde-decryption-required.guard.spec.ts @@ -0,0 +1,107 @@ +import { TestBed } from "@angular/core/testing"; +import { Router, provideRouter } from "@angular/router"; +import { mock } from "jest-mock-extended"; +import { BehaviorSubject, of } from "rxjs"; + +import { EmptyComponent } from "@bitwarden/angular/platform/guard/feature-flag.guard.spec"; +import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; +import { DeviceTrustServiceAbstraction } from "@bitwarden/common/key-management/device-trust/abstractions/device-trust.service.abstraction"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { UserId } from "@bitwarden/common/types/guid"; +import { KeyService } from "@bitwarden/key-management"; + +import { tdeDecryptionRequiredGuard } from "./tde-decryption-required.guard"; + +describe("tdeDecryptionRequiredGuard", () => { + const activeUser: Account = { + id: "fake_user_id" as UserId, + email: "test@email.com", + emailVerified: true, + name: "Test User", + }; + + const setup = ( + activeUser: Account | null, + authStatus: AuthenticationStatus | null = null, + tdeEnabled: boolean = false, + everHadUserKey: boolean = false, + ) => { + const accountService = mock<AccountService>(); + const authService = mock<AuthService>(); + const keyService = mock<KeyService>(); + const deviceTrustService = mock<DeviceTrustServiceAbstraction>(); + const logService = mock<LogService>(); + + accountService.activeAccount$ = new BehaviorSubject<Account | null>(activeUser); + if (authStatus !== null) { + authService.getAuthStatus.mockResolvedValue(authStatus); + } + keyService.everHadUserKey$.mockReturnValue(of(everHadUserKey)); + deviceTrustService.supportsDeviceTrust$ = of(tdeEnabled); + + const testBed = TestBed.configureTestingModule({ + providers: [ + { provide: AccountService, useValue: accountService }, + { provide: AuthService, useValue: authService }, + { provide: KeyService, useValue: keyService }, + { provide: DeviceTrustServiceAbstraction, useValue: deviceTrustService }, + { provide: LogService, useValue: logService }, + provideRouter([ + { path: "", component: EmptyComponent }, + { + path: "protected-route", + component: EmptyComponent, + canActivate: [tdeDecryptionRequiredGuard()], + }, + ]), + ], + }); + + return { + router: testBed.inject(Router), + }; + }; + + it("redirects to root when the active account is null", async () => { + const { router } = setup(null, null); + await router.navigate(["protected-route"]); + expect(router.url).toBe("/"); + }); + + test.each([AuthenticationStatus.Unlocked, AuthenticationStatus.LoggedOut])( + "redirects to root when the user isn't locked", + async (authStatus) => { + const { router } = setup(activeUser, authStatus); + + await router.navigate(["protected-route"]); + + expect(router.url).toBe("/"); + }, + ); + + it("redirects to root when TDE is not enabled", async () => { + const { router } = setup(activeUser, AuthenticationStatus.Locked, false, true); + + await router.navigate(["protected-route"]); + + expect(router.url).toBe("/"); + }); + + it("redirects to root when user has had a user key", async () => { + const { router } = setup(activeUser, AuthenticationStatus.Locked, true, true); + + await router.navigate(["protected-route"]); + + expect(router.url).toBe("/"); + }); + + it("allows access when user is locked, TDE is enabled, and user has never had a user key", async () => { + const { router } = setup(activeUser, AuthenticationStatus.Locked, true, false); + + const result = await router.navigate(["protected-route"]); + expect(result).toBe(true); + expect(router.url).toBe("/protected-route"); + }); +}); diff --git a/libs/angular/src/auth/guards/tde-decryption-required.guard.ts b/libs/angular/src/auth/guards/tde-decryption-required.guard.ts index 1d98b1fa740..13e7c6d04e1 100644 --- a/libs/angular/src/auth/guards/tde-decryption-required.guard.ts +++ b/libs/angular/src/auth/guards/tde-decryption-required.guard.ts @@ -5,8 +5,9 @@ import { RouterStateSnapshot, CanActivateFn, } from "@angular/router"; -import { firstValueFrom } from "rxjs"; +import { firstValueFrom, map } from "rxjs"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { DeviceTrustServiceAbstraction } from "@bitwarden/common/key-management/device-trust/abstractions/device-trust.service.abstraction"; @@ -24,12 +25,18 @@ export function tdeDecryptionRequiredGuard(): CanActivateFn { const authService = inject(AuthService); const keyService = inject(KeyService); const deviceTrustService = inject(DeviceTrustServiceAbstraction); + const accountService = inject(AccountService); const logService = inject(LogService); const router = inject(Router); + const userId = await firstValueFrom(accountService.activeAccount$.pipe(map((a) => a?.id))); + if (userId == null) { + return router.createUrlTree(["/"]); + } + const authStatus = await authService.getAuthStatus(); const tdeEnabled = await firstValueFrom(deviceTrustService.supportsDeviceTrust$); - const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$); + const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$(userId)); // We need to determine if we should bypass the decryption options and send the user to the vault. // The ONLY time that we want to send a user to the decryption options is when: diff --git a/libs/angular/src/auth/guards/unauth.guard.spec.ts b/libs/angular/src/auth/guards/unauth.guard.spec.ts index ad0ce680a1f..c696b849558 100644 --- a/libs/angular/src/auth/guards/unauth.guard.spec.ts +++ b/libs/angular/src/auth/guards/unauth.guard.spec.ts @@ -2,7 +2,7 @@ import { TestBed } from "@angular/core/testing"; import { Router } from "@angular/router"; import { RouterTestingModule } from "@angular/router/testing"; import { MockProxy, mock } from "jest-mock-extended"; -import { BehaviorSubject } from "rxjs"; +import { BehaviorSubject, of } from "rxjs"; import { EmptyComponent } from "@bitwarden/angular/platform/guard/feature-flag.guard.spec"; import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -43,7 +43,7 @@ describe("UnauthGuard", () => { authService.authStatusFor$.mockReturnValue(activeAccountStatusObservable); } - keyService.everHadUserKey$ = new BehaviorSubject<boolean>(everHadUserKey); + keyService.everHadUserKey$.mockReturnValue(of(everHadUserKey)); deviceTrustService.supportsDeviceTrustByUserId$.mockReturnValue( new BehaviorSubject<boolean>(tdeEnabled), ); diff --git a/libs/angular/src/auth/guards/unauth.guard.ts b/libs/angular/src/auth/guards/unauth.guard.ts index 6764b46843e..3fcfd38349b 100644 --- a/libs/angular/src/auth/guards/unauth.guard.ts +++ b/libs/angular/src/auth/guards/unauth.guard.ts @@ -50,7 +50,7 @@ async function unauthGuard( const tdeEnabled = await firstValueFrom( deviceTrustService.supportsDeviceTrustByUserId$(activeUser.id), ); - const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$); + const everHadUserKey = await firstValueFrom(keyService.everHadUserKey$(activeUser.id)); // If locked, TDE is enabled, and the user hasn't decrypted yet, then redirect to the // login decryption options component. diff --git a/libs/key-management/src/abstractions/key.service.ts b/libs/key-management/src/abstractions/key.service.ts index 95b79890c6a..51a99421967 100644 --- a/libs/key-management/src/abstractions/key.service.ts +++ b/libs/key-management/src/abstractions/key.service.ts @@ -85,11 +85,13 @@ export abstract class KeyService { * (such as auto, biometrics, or pin) */ abstract refreshAdditionalKeys(): Promise<void>; + /** - * Observable value that returns whether or not the currently active user has ever had auser key, + * Observable value that returns whether or not the user has ever had a userKey, * i.e. has ever been unlocked/decrypted. This is key for differentiating between TDE locked and standard locked states. */ - abstract everHadUserKey$: Observable<boolean>; + abstract everHadUserKey$(userId: UserId): Observable<boolean>; + /** * Retrieves the user key * @param userId The desired user diff --git a/libs/key-management/src/key.service.spec.ts b/libs/key-management/src/key.service.spec.ts index 6d2e8fd20ec..400d7279a30 100644 --- a/libs/key-management/src/key.service.spec.ts +++ b/libs/key-management/src/key.service.spec.ts @@ -34,7 +34,6 @@ import { FakeAccountService, mockAccountServiceWith, FakeStateProvider, - FakeActiveUserState, FakeSingleUserState, } from "@bitwarden/common/spec"; import { CsprngArray } from "@bitwarden/common/types/csprng"; @@ -190,28 +189,28 @@ describe("keyService", () => { }); describe("everHadUserKey$", () => { - let everHadUserKeyState: FakeActiveUserState<boolean>; + let everHadUserKeyState: FakeSingleUserState<boolean>; beforeEach(() => { - everHadUserKeyState = stateProvider.activeUser.getFake(USER_EVER_HAD_USER_KEY); + everHadUserKeyState = stateProvider.singleUser.getFake(mockUserId, USER_EVER_HAD_USER_KEY); }); it("should return true when stored value is true", async () => { everHadUserKeyState.nextState(true); - expect(await firstValueFrom(keyService.everHadUserKey$)).toBe(true); + expect(await firstValueFrom(keyService.everHadUserKey$(mockUserId))).toBe(true); }); it("should return false when stored value is false", async () => { everHadUserKeyState.nextState(false); - expect(await firstValueFrom(keyService.everHadUserKey$)).toBe(false); + expect(await firstValueFrom(keyService.everHadUserKey$(mockUserId))).toBe(false); }); it("should return false when stored value is null", async () => { everHadUserKeyState.nextState(null); - expect(await firstValueFrom(keyService.everHadUserKey$)).toBe(false); + expect(await firstValueFrom(keyService.everHadUserKey$(mockUserId))).toBe(false); }); }); diff --git a/libs/key-management/src/key.service.ts b/libs/key-management/src/key.service.ts index 1d4fcc86a0c..fe288adeb88 100644 --- a/libs/key-management/src/key.service.ts +++ b/libs/key-management/src/key.service.ts @@ -41,7 +41,7 @@ import { USER_EVER_HAD_USER_KEY, USER_KEY, } from "@bitwarden/common/platform/services/key-state/user-key.state"; -import { ActiveUserState, StateProvider } from "@bitwarden/common/platform/state"; +import { StateProvider } from "@bitwarden/common/platform/state"; import { CsprngArray } from "@bitwarden/common/types/csprng"; import { OrganizationId, ProviderId, UserId } from "@bitwarden/common/types/guid"; import { @@ -63,10 +63,6 @@ import { import { KdfConfig } from "./models/kdf-config"; export class DefaultKeyService implements KeyServiceAbstraction { - private readonly activeUserEverHadUserKey: ActiveUserState<boolean>; - - readonly everHadUserKey$: Observable<boolean>; - readonly activeUserOrgKeys$: Observable<Record<OrganizationId, OrgKey>>; constructor( @@ -82,10 +78,6 @@ export class DefaultKeyService implements KeyServiceAbstraction { protected stateProvider: StateProvider, protected kdfConfigService: KdfConfigService, ) { - // User Key - this.activeUserEverHadUserKey = stateProvider.getActive(USER_EVER_HAD_USER_KEY); - this.everHadUserKey$ = this.activeUserEverHadUserKey.state$.pipe(map((x) => x ?? false)); - this.activeUserOrgKeys$ = this.stateProvider.activeUserId$.pipe( switchMap((userId) => (userId != null ? this.orgKeys$(userId) : NEVER)), ) as Observable<Record<OrganizationId, OrgKey>>; @@ -141,6 +133,12 @@ export class DefaultKeyService implements KeyServiceAbstraction { await this.setUserKey(key, activeUserId); } + everHadUserKey$(userId: UserId): Observable<boolean> { + return this.stateProvider + .getUser(userId, USER_EVER_HAD_USER_KEY) + .state$.pipe(map((x) => x ?? false)); + } + getInMemoryUserKeyFor$(userId: UserId): Observable<UserKey> { return this.stateProvider.getUserState$(USER_KEY, userId); } From 874fe0fd1ebde3392695183edba294a25451a0d8 Mon Sep 17 00:00:00 2001 From: Tom <144813356+ttalty@users.noreply.github.com> Date: Fri, 30 May 2025 12:55:14 -0400 Subject: [PATCH 23/33] Adding userGuid to the member details object (#14899) --- .../dirt/reports/risk-insights/models/password-health.ts | 1 + .../response/member-cipher-details.response.ts | 2 ++ .../risk-insights/services/risk-insights-report.service.ts | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) 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 d24d8386ecd..acb4a116b8f 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 @@ -97,6 +97,7 @@ export type ExposedPasswordDetail = { * organization member to a cipher */ export type MemberDetailsFlat = { + userGuid: string; userName: string; email: string; cipherId: string; diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/response/member-cipher-details.response.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/response/member-cipher-details.response.ts index fcf5ada4b2c..7aa52330663 100644 --- a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/response/member-cipher-details.response.ts +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/response/member-cipher-details.response.ts @@ -1,6 +1,7 @@ import { BaseResponse } from "@bitwarden/common/models/response/base.response"; export class MemberCipherDetailsResponse extends BaseResponse { + userGuid: string; userName: string; email: string; useKeyConnector: boolean; @@ -8,6 +9,7 @@ export class MemberCipherDetailsResponse extends BaseResponse { constructor(response: any) { super(response); + this.userGuid = this.getResponseProperty("UserGuid"); this.userName = this.getResponseProperty("UserName"); this.email = this.getResponseProperty("Email"); this.useKeyConnector = this.getResponseProperty("UseKeyConnector"); 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 6fdab58115d..afd246e1836 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 @@ -48,7 +48,9 @@ export class RiskInsightsReportService { const results$ = zip(allCiphers$, memberCiphers$).pipe( map(([allCiphers, memberCiphers]) => { const details: MemberDetailsFlat[] = memberCiphers.flatMap((dtl) => - dtl.cipherIds.map((c) => this.getMemberDetailsFlat(dtl.userName, dtl.email, c)), + dtl.cipherIds.map((c) => + this.getMemberDetailsFlat(dtl.userGuid, dtl.userName, dtl.email, c), + ), ); return [allCiphers, details] as const; }), @@ -408,11 +410,13 @@ export class RiskInsightsReportService { } private getMemberDetailsFlat( + userGuid: string, userName: string, email: string, cipherId: string, ): MemberDetailsFlat { return { + userGuid: userGuid, userName: userName, email: email, cipherId: cipherId, From 4e112e2daaba5141060f8d630e7ac232d722127a Mon Sep 17 00:00:00 2001 From: tangowithfoxtrot <5676771+tangowithfoxtrot@users.noreply.github.com> Date: Fri, 30 May 2025 10:30:08 -0700 Subject: [PATCH 24/33] feat: enable running as non-root user (#13887) --- apps/web/entrypoint.sh | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/apps/web/entrypoint.sh b/apps/web/entrypoint.sh index 16d1c78fb77..53e8af235fb 100644 --- a/apps/web/entrypoint.sh +++ b/apps/web/entrypoint.sh @@ -19,20 +19,29 @@ then LGID=65534 fi -# Create user and group +if [ "$(id -u)" = "0" ]; then + # Create user and group -groupadd -o -g $LGID $GROUPNAME >/dev/null 2>&1 || -groupmod -o -g $LGID $GROUPNAME >/dev/null 2>&1 -useradd -o -u $LUID -g $GROUPNAME -s /bin/false $USERNAME >/dev/null 2>&1 || -usermod -o -u $LUID -g $GROUPNAME -s /bin/false $USERNAME >/dev/null 2>&1 -mkhomedir_helper $USERNAME + groupadd -o -g $LGID $GROUPNAME >/dev/null 2>&1 || + groupmod -o -g $LGID $GROUPNAME >/dev/null 2>&1 + useradd -o -u $LUID -g $GROUPNAME -s /bin/false $USERNAME >/dev/null 2>&1 || + usermod -o -u $LUID -g $GROUPNAME -s /bin/false $USERNAME >/dev/null 2>&1 + mkhomedir_helper $USERNAME -# The rest... + # The rest... -chown -R $USERNAME:$GROUPNAME /etc/bitwarden -cp /etc/bitwarden/web/app-id.json /app/app-id.json -chown -R $USERNAME:$GROUPNAME /app -chown -R $USERNAME:$GROUPNAME /bitwarden_server + chown -R $USERNAME:$GROUPNAME /etc/bitwarden + chown -R $USERNAME:$GROUPNAME /app + chown -R $USERNAME:$GROUPNAME /bitwarden_server -exec gosu $USERNAME:$GROUPNAME dotnet /bitwarden_server/Server.dll \ - /contentRoot=/app /webRoot=. /serveUnknown=false /webVault=true + gosu_cmd="gosu $USERNAME:$GROUPNAME" +else + gosu_cmd="" +fi + +exec $gosu_cmd /bitwarden_server/Server \ + /contentRoot=/app \ + /webRoot=. \ + /serveUnknown=false \ + /webVault=true \ + /appIdLocation=/etc/bitwarden/web/app-id.json From 9f9cb0d13d0bc88c24e3adcac0b864a0ec336fc3 Mon Sep 17 00:00:00 2001 From: Matt Gibson <mgibson@bitwarden.com> Date: Fri, 30 May 2025 10:50:54 -0700 Subject: [PATCH 25/33] Add-userid-to-encryption-methods (#14844) * Get userId from response if available This is a small improvement for the Auth team which avoids inspection of the access token, sometimes. * Initialize sdk clients with a userId * return both Cipher and encryptedFor when encrypting a cipher Update cipher api requests to include encryptedFor attribute * Prefer named types with documentation * Update sdk to latest * Fixup types * Fixup tests * Revert getting userId from identity token response --------- Co-authored-by: Shane <smelton@bitwarden.com> --- .../notification.background.spec.ts | 17 +- .../background/notification.background.ts | 5 +- .../autofill/popup/fido2/fido2.component.ts | 6 +- .../vault-popup-autofill.service.spec.ts | 2 +- .../vault/components/add-edit.component.ts | 14 +- .../fido2/fido2-authenticator.service.spec.ts | 15 +- .../services/sdk/default-sdk.service.ts | 8 +- .../src/vault/abstractions/cipher.service.ts | 15 +- .../src/vault/models/data/field.data.ts | 2 +- .../request/cipher-bulk-share.request.ts | 9 +- .../models/request/cipher-create.request.ts | 6 +- .../models/request/cipher-share.request.ts | 6 +- .../models/request/cipher-with-id.request.ts | 6 +- .../vault/models/request/cipher.request.ts | 7 +- .../src/vault/models/view/cipher.view.ts | 2 +- .../src/vault/services/cipher.service.spec.ts | 168 +++++++++--------- .../src/vault/services/cipher.service.ts | 140 ++++++--------- .../services/default-cipher-form.service.ts | 9 +- .../assign-collections.component.ts | 2 +- 19 files changed, 212 insertions(+), 227 deletions(-) diff --git a/apps/browser/src/autofill/background/notification.background.spec.ts b/apps/browser/src/autofill/background/notification.background.spec.ts index 009efd7ff36..b161200215a 100644 --- a/apps/browser/src/autofill/background/notification.background.spec.ts +++ b/apps/browser/src/autofill/background/notification.background.spec.ts @@ -69,8 +69,9 @@ describe("NotificationBackground", () => { const accountService = mock<AccountService>(); const organizationService = mock<OrganizationService>(); + const userId = "testId" as UserId; const activeAccountSubject = new BehaviorSubject<{ id: UserId } & AccountInfo>({ - id: "testId" as UserId, + id: userId, email: "test@example.com", emailVerified: true, name: "Test User", @@ -1141,8 +1142,11 @@ describe("NotificationBackground", () => { convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView); editItemSpy.mockResolvedValueOnce(undefined); cipherEncryptSpy.mockResolvedValueOnce({ - ...cipherView, - id: "testId", + cipher: { + ...cipherView, + id: "testId", + }, + encryptedFor: userId, }); sendMockExtensionMessage(message, sender); @@ -1188,6 +1192,13 @@ describe("NotificationBackground", () => { folderExistsSpy.mockResolvedValueOnce(true); convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView); editItemSpy.mockResolvedValueOnce(undefined); + cipherEncryptSpy.mockResolvedValueOnce({ + cipher: { + ...cipherView, + id: "testId", + }, + encryptedFor: userId, + }); const errorMessage = "fetch error"; createWithServerSpy.mockImplementation(() => { throw new Error(errorMessage); diff --git a/apps/browser/src/autofill/background/notification.background.ts b/apps/browser/src/autofill/background/notification.background.ts index a73141b7e4d..cb6a67c8137 100644 --- a/apps/browser/src/autofill/background/notification.background.ts +++ b/apps/browser/src/autofill/background/notification.background.ts @@ -719,9 +719,10 @@ export default class NotificationBackground { return; } - const cipher = await this.cipherService.encrypt(newCipher, activeUserId); + const encrypted = await this.cipherService.encrypt(newCipher, activeUserId); + const { cipher } = encrypted; try { - await this.cipherService.createWithServer(cipher); + await this.cipherService.createWithServer(encrypted); await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", { itemName: newCipher?.name && String(newCipher?.name), cipherId: cipher?.id && String(cipher?.id), diff --git a/apps/browser/src/autofill/popup/fido2/fido2.component.ts b/apps/browser/src/autofill/popup/fido2/fido2.component.ts index 6b7d9120195..996d1bb6176 100644 --- a/apps/browser/src/autofill/popup/fido2/fido2.component.ts +++ b/apps/browser/src/autofill/popup/fido2/fido2.component.ts @@ -442,10 +442,10 @@ export class Fido2Component implements OnInit, OnDestroy { ); this.buildCipher(name, username); - const cipher = await this.cipherService.encrypt(this.cipher, activeUserId); + const encrypted = await this.cipherService.encrypt(this.cipher, activeUserId); try { - await this.cipherService.createWithServer(cipher); - this.cipher.id = cipher.id; + await this.cipherService.createWithServer(encrypted); + this.cipher.id = encrypted.cipher.id; } catch (e) { this.logService.error(e); } diff --git a/apps/browser/src/vault/popup/services/vault-popup-autofill.service.spec.ts b/apps/browser/src/vault/popup/services/vault-popup-autofill.service.spec.ts index 415aeb31081..73c3fed3276 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-autofill.service.spec.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-autofill.service.spec.ts @@ -353,7 +353,7 @@ describe("VaultPopupAutofillService", () => { }); it("should add a URI to the cipher and save with the server", async () => { - const mockEncryptedCipher = {} as Cipher; + const mockEncryptedCipher = { cipher: {} as Cipher, encryptedFor: mockUserId }; mockCipherService.encrypt.mockResolvedValue(mockEncryptedCipher); const result = await service.doAutofillAndSave(mockCipher); expect(result).toBe(true); diff --git a/libs/angular/src/vault/components/add-edit.component.ts b/libs/angular/src/vault/components/add-edit.component.ts index 8175372cae5..8cc79a22dfd 100644 --- a/libs/angular/src/vault/components/add-edit.component.ts +++ b/libs/angular/src/vault/components/add-edit.component.ts @@ -26,11 +26,13 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { SdkService } from "@bitwarden/common/platform/abstractions/sdk/sdk.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CollectionId, UserId } from "@bitwarden/common/types/guid"; -import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; +import { + CipherService, + EncryptionContext, +} from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType, SecureNoteType } from "@bitwarden/common/vault/enums"; import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type"; -import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CardView } from "@bitwarden/common/vault/models/view/card.view"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; @@ -740,17 +742,17 @@ export class AddEditComponent implements OnInit, OnDestroy { return this.cipherService.encrypt(this.cipher, userId); } - protected saveCipher(cipher: Cipher) { + protected saveCipher(data: EncryptionContext) { let orgAdmin = this.organization?.canEditAllCiphers; // if a cipher is unassigned we want to check if they are an admin or have permission to edit any collection - if (!cipher.collectionIds) { + if (!data.cipher.collectionIds) { orgAdmin = this.organization?.canEditUnassignedCiphers; } return this.cipher.id == null - ? this.cipherService.createWithServer(cipher, orgAdmin) - : this.cipherService.updateWithServer(cipher, orgAdmin); + ? this.cipherService.createWithServer(data, orgAdmin) + : this.cipherService.updateWithServer(data, orgAdmin); } protected deleteCipher(userId: UserId) { diff --git a/libs/common/src/platform/services/fido2/fido2-authenticator.service.spec.ts b/libs/common/src/platform/services/fido2/fido2-authenticator.service.spec.ts index 5c377e1a980..78ae8253ee2 100644 --- a/libs/common/src/platform/services/fido2/fido2-authenticator.service.spec.ts +++ b/libs/common/src/platform/services/fido2/fido2-authenticator.service.spec.ts @@ -6,7 +6,7 @@ import { BehaviorSubject, of } from "rxjs"; import { mockAccountServiceWith } from "../../../../spec"; import { Account } from "../../../auth/abstractions/account.service"; import { UserId } from "../../../types/guid"; -import { CipherService } from "../../../vault/abstractions/cipher.service"; +import { CipherService, EncryptionContext } from "../../../vault/abstractions/cipher.service"; import { SyncService } from "../../../vault/abstractions/sync/sync.service.abstraction"; import { CipherRepromptType } from "../../../vault/enums/cipher-reprompt-type"; import { CipherType } from "../../../vault/enums/cipher-type"; @@ -36,8 +36,9 @@ type ParentWindowReference = string; const RpId = "bitwarden.com"; describe("FidoAuthenticatorService", () => { + const userId = "testId" as UserId; const activeAccountSubject = new BehaviorSubject<Account | null>({ - id: "testId" as UserId, + id: userId, email: "test@example.com", emailVerified: true, name: "Test User", @@ -254,7 +255,7 @@ describe("FidoAuthenticatorService", () => { cipherId: existingCipher.id, userVerified: false, }); - cipherService.encrypt.mockResolvedValue(encryptedCipher as unknown as Cipher); + cipherService.encrypt.mockResolvedValue(encryptedCipher as unknown as EncryptionContext); await authenticator.makeCredential(params, windowReference); @@ -325,7 +326,7 @@ describe("FidoAuthenticatorService", () => { cipherId: existingCipher.id, userVerified: false, }); - cipherService.encrypt.mockResolvedValue(encryptedCipher as unknown as Cipher); + cipherService.encrypt.mockResolvedValue(encryptedCipher as unknown as EncryptionContext); cipherService.updateWithServer.mockRejectedValue(new Error("Internal error")); const result = async () => await authenticator.makeCredential(params, windowReference); @@ -357,13 +358,13 @@ describe("FidoAuthenticatorService", () => { cipherService.decrypt.mockResolvedValue(cipher); cipherService.encrypt.mockImplementation(async (cipher) => { cipher.login.fido2Credentials[0].credentialId = credentialId; // Replace id for testability - return {} as any; + return { cipher: {} as any as Cipher, encryptedFor: userId }; }); - cipherService.createWithServer.mockImplementation(async (cipher) => { + cipherService.createWithServer.mockImplementation(async ({ cipher }) => { cipher.id = cipherId; return cipher; }); - cipherService.updateWithServer.mockImplementation(async (cipher) => { + cipherService.updateWithServer.mockImplementation(async ({ cipher }) => { cipher.id = cipherId; return cipher; }); diff --git a/libs/common/src/platform/services/sdk/default-sdk.service.ts b/libs/common/src/platform/services/sdk/default-sdk.service.ts index 6be89a4b376..d9f7ba19a6f 100644 --- a/libs/common/src/platform/services/sdk/default-sdk.service.ts +++ b/libs/common/src/platform/services/sdk/default-sdk.service.ts @@ -180,9 +180,7 @@ export class DefaultSdkService implements SdkService { return () => client?.markForDisposal(); }); }), - tap({ - finalize: () => this.sdkClientCache.delete(userId), - }), + tap({ finalize: () => this.sdkClientCache.delete(userId) }), shareReplay({ refCount: true, bufferSize: 1 }), ); @@ -205,9 +203,7 @@ export class DefaultSdkService implements SdkService { method: { decryptedKey: { decrypted_user_key: userKey.keyB64 } }, kdfParams: kdfParams.kdfType === KdfType.PBKDF2_SHA256 - ? { - pBKDF2: { iterations: kdfParams.iterations }, - } + ? { pBKDF2: { iterations: kdfParams.iterations } } : { argon2id: { iterations: kdfParams.iterations, diff --git a/libs/common/src/vault/abstractions/cipher.service.ts b/libs/common/src/vault/abstractions/cipher.service.ts index fc809058161..91f8006d15e 100644 --- a/libs/common/src/vault/abstractions/cipher.service.ts +++ b/libs/common/src/vault/abstractions/cipher.service.ts @@ -21,6 +21,12 @@ import { CipherView } from "../models/view/cipher.view"; import { FieldView } from "../models/view/field.view"; import { AddEditCipherInfo } from "../types/add-edit-cipher-info"; +export type EncryptionContext = { + cipher: Cipher; + /** The Id of the user that encrypted the cipher. It should always represent a UserId, even for Organization-owned ciphers */ + encryptedFor: UserId; +}; + export abstract class CipherService implements UserKeyRotationDataProvider<CipherWithIdRequest> { abstract cipherViews$(userId: UserId): Observable<CipherView[]>; abstract ciphers$(userId: UserId): Observable<Record<CipherId, CipherData>>; @@ -42,7 +48,7 @@ export abstract class CipherService implements UserKeyRotationDataProvider<Ciphe keyForEncryption?: SymmetricCryptoKey, keyForCipherKeyDecryption?: SymmetricCryptoKey, originalCipher?: Cipher, - ): Promise<Cipher>; + ): Promise<EncryptionContext>; abstract encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise<Field[]>; abstract encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise<Field>; abstract get(id: string, userId: UserId): Promise<Cipher>; @@ -94,7 +100,10 @@ export abstract class CipherService implements UserKeyRotationDataProvider<Ciphe * * @returns A promise that resolves to the created cipher */ - abstract createWithServer(cipher: Cipher, orgAdmin?: boolean): Promise<Cipher>; + abstract createWithServer( + { cipher, encryptedFor }: EncryptionContext, + orgAdmin?: boolean, + ): Promise<Cipher>; /** * Update a cipher with the server * @param cipher The cipher to update @@ -104,7 +113,7 @@ export abstract class CipherService implements UserKeyRotationDataProvider<Ciphe * @returns A promise that resolves to the updated cipher */ abstract updateWithServer( - cipher: Cipher, + { cipher, encryptedFor }: EncryptionContext, orgAdmin?: boolean, isNotClone?: boolean, ): Promise<Cipher>; diff --git a/libs/common/src/vault/models/data/field.data.ts b/libs/common/src/vault/models/data/field.data.ts index b9daf7fa423..cf9df69a6b0 100644 --- a/libs/common/src/vault/models/data/field.data.ts +++ b/libs/common/src/vault/models/data/field.data.ts @@ -7,7 +7,7 @@ export class FieldData { type: FieldType; name: string; value: string; - linkedId: LinkedIdType; + linkedId: LinkedIdType | null; constructor(response?: FieldApi) { if (response == null) { diff --git a/libs/common/src/vault/models/request/cipher-bulk-share.request.ts b/libs/common/src/vault/models/request/cipher-bulk-share.request.ts index 4f56297d0a5..d0c394bea00 100644 --- a/libs/common/src/vault/models/request/cipher-bulk-share.request.ts +++ b/libs/common/src/vault/models/request/cipher-bulk-share.request.ts @@ -1,5 +1,6 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore +import { UserId } from "../../../types/guid"; import { Cipher } from "../domain/cipher"; import { CipherWithIdRequest } from "./cipher-with-id.request"; @@ -8,11 +9,15 @@ export class CipherBulkShareRequest { ciphers: CipherWithIdRequest[]; collectionIds: string[]; - constructor(ciphers: Cipher[], collectionIds: string[]) { + constructor( + ciphers: Cipher[], + collectionIds: string[], + readonly encryptedFor: UserId, + ) { if (ciphers != null) { this.ciphers = []; ciphers.forEach((c) => { - this.ciphers.push(new CipherWithIdRequest(c)); + this.ciphers.push(new CipherWithIdRequest({ cipher: c, encryptedFor })); }); } this.collectionIds = collectionIds; diff --git a/libs/common/src/vault/models/request/cipher-create.request.ts b/libs/common/src/vault/models/request/cipher-create.request.ts index 9c3be5544b9..e992ebed9b2 100644 --- a/libs/common/src/vault/models/request/cipher-create.request.ts +++ b/libs/common/src/vault/models/request/cipher-create.request.ts @@ -1,4 +1,4 @@ -import { Cipher } from "../domain/cipher"; +import { EncryptionContext } from "../../abstractions/cipher.service"; import { CipherRequest } from "./cipher.request"; @@ -6,8 +6,8 @@ export class CipherCreateRequest { cipher: CipherRequest; collectionIds: string[]; - constructor(cipher: Cipher) { - this.cipher = new CipherRequest(cipher); + constructor({ cipher, encryptedFor }: EncryptionContext) { + this.cipher = new CipherRequest({ cipher, encryptedFor }); this.collectionIds = cipher.collectionIds; } } diff --git a/libs/common/src/vault/models/request/cipher-share.request.ts b/libs/common/src/vault/models/request/cipher-share.request.ts index 4043599ce05..17c46168efe 100644 --- a/libs/common/src/vault/models/request/cipher-share.request.ts +++ b/libs/common/src/vault/models/request/cipher-share.request.ts @@ -1,4 +1,4 @@ -import { Cipher } from "../domain/cipher"; +import { EncryptionContext } from "../../abstractions/cipher.service"; import { CipherRequest } from "./cipher.request"; @@ -6,8 +6,8 @@ export class CipherShareRequest { cipher: CipherRequest; collectionIds: string[]; - constructor(cipher: Cipher) { - this.cipher = new CipherRequest(cipher); + constructor({ cipher, encryptedFor }: EncryptionContext) { + this.cipher = new CipherRequest({ cipher, encryptedFor }); this.collectionIds = cipher.collectionIds; } } diff --git a/libs/common/src/vault/models/request/cipher-with-id.request.ts b/libs/common/src/vault/models/request/cipher-with-id.request.ts index f291e342640..0b04f50fb1e 100644 --- a/libs/common/src/vault/models/request/cipher-with-id.request.ts +++ b/libs/common/src/vault/models/request/cipher-with-id.request.ts @@ -1,12 +1,12 @@ -import { Cipher } from "../domain/cipher"; +import { EncryptionContext } from "../../abstractions/cipher.service"; import { CipherRequest } from "./cipher.request"; export class CipherWithIdRequest extends CipherRequest { id: string; - constructor(cipher: Cipher) { - super(cipher); + constructor({ cipher, encryptedFor }: EncryptionContext) { + super({ cipher, encryptedFor }); this.id = cipher.id; } } diff --git a/libs/common/src/vault/models/request/cipher.request.ts b/libs/common/src/vault/models/request/cipher.request.ts index 5b77ee7508e..2e3b2efbedc 100644 --- a/libs/common/src/vault/models/request/cipher.request.ts +++ b/libs/common/src/vault/models/request/cipher.request.ts @@ -1,5 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore +import { UserId } from "../../../types/guid"; +import { EncryptionContext } from "../../abstractions/cipher.service"; import { CipherRepromptType } from "../../enums/cipher-reprompt-type"; import { CipherType } from "../../enums/cipher-type"; import { CardApi } from "../api/card.api"; @@ -10,12 +12,12 @@ import { LoginUriApi } from "../api/login-uri.api"; import { LoginApi } from "../api/login.api"; import { SecureNoteApi } from "../api/secure-note.api"; import { SshKeyApi } from "../api/ssh-key.api"; -import { Cipher } from "../domain/cipher"; import { AttachmentRequest } from "./attachment.request"; import { PasswordHistoryRequest } from "./password-history.request"; export class CipherRequest { + encryptedFor: UserId; type: CipherType; folderId: string; organizationId: string; @@ -36,8 +38,9 @@ export class CipherRequest { reprompt: CipherRepromptType; key: string; - constructor(cipher: Cipher) { + constructor({ cipher, encryptedFor }: EncryptionContext) { this.type = cipher.type; + this.encryptedFor = encryptedFor; this.folderId = cipher.folderId; this.organizationId = cipher.organizationId; this.name = cipher.name ? cipher.name.encryptedString : null; diff --git a/libs/common/src/vault/models/view/cipher.view.ts b/libs/common/src/vault/models/view/cipher.view.ts index 1f73903a5bc..e182025a332 100644 --- a/libs/common/src/vault/models/view/cipher.view.ts +++ b/libs/common/src/vault/models/view/cipher.view.ts @@ -25,7 +25,7 @@ export class CipherView implements View, InitializerMetadata { readonly initializerKey = InitializerKey.CipherView; id: string = null; - organizationId: string = null; + organizationId: string | undefined = null; folderId: string = null; name: string = null; notes: string = null; diff --git a/libs/common/src/vault/services/cipher.service.spec.ts b/libs/common/src/vault/services/cipher.service.spec.ts index 9e56bac2ca0..1a0b1568775 100644 --- a/libs/common/src/vault/services/cipher.service.spec.ts +++ b/libs/common/src/vault/services/cipher.service.spec.ts @@ -27,6 +27,7 @@ import { ContainerService } from "../../platform/services/container.service"; import { CipherId, UserId } from "../../types/guid"; import { CipherKey, OrgKey, UserKey } from "../../types/key"; import { CipherEncryptionService } from "../abstractions/cipher-encryption.service"; +import { EncryptionContext } from "../abstractions/cipher.service"; import { CipherFileUploadService } from "../abstractions/file-upload/cipher-file-upload.service"; import { FieldType } from "../enums"; import { CipherRepromptType } from "../enums/cipher-reprompt-type"; @@ -78,36 +79,12 @@ const cipherData: CipherData = { }, passwordHistory: [{ password: "EncryptedString", lastUsedDate: "2022-01-31T12:00:00.000Z" }], attachments: [ - { - id: "a1", - url: "url", - size: "1100", - sizeName: "1.1 KB", - fileName: "file", - key: "EncKey", - }, - { - id: "a2", - url: "url", - size: "1100", - sizeName: "1.1 KB", - fileName: "file", - key: "EncKey", - }, + { id: "a1", url: "url", size: "1100", sizeName: "1.1 KB", fileName: "file", key: "EncKey" }, + { id: "a2", url: "url", size: "1100", sizeName: "1.1 KB", fileName: "file", key: "EncKey" }, ], fields: [ - { - name: "EncryptedString", - value: "EncryptedString", - type: FieldType.Text, - linkedId: null, - }, - { - name: "EncryptedString", - value: "EncryptedString", - type: FieldType.Hidden, - linkedId: null, - }, + { name: "EncryptedString", value: "EncryptedString", type: FieldType.Text, linkedId: null }, + { name: "EncryptedString", value: "EncryptedString", type: FieldType.Hidden, linkedId: null }, ], }; const mockUserId = Utils.newGuid() as UserId; @@ -133,7 +110,7 @@ describe("Cipher Service", () => { const userId = "TestUserId" as UserId; let cipherService: CipherService; - let cipherObj: Cipher; + let encryptionContext: EncryptionContext; beforeEach(() => { encryptService.encryptFileData.mockReturnValue(Promise.resolve(ENCRYPTED_BYTES)); @@ -159,7 +136,7 @@ describe("Cipher Service", () => { cipherEncryptionService, ); - cipherObj = new Cipher(cipherData); + encryptionContext = { cipher: new Cipher(cipherData), encryptedFor: userId }; }); afterEach(() => { @@ -192,33 +169,33 @@ describe("Cipher Service", () => { it("should call apiService.postCipherAdmin when orgAdmin param is true and the cipher orgId != null", async () => { const spy = jest .spyOn(apiService, "postCipherAdmin") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.createWithServer(cipherObj, true); - const expectedObj = new CipherCreateRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.createWithServer(encryptionContext, true); + const expectedObj = new CipherCreateRequest(encryptionContext); expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalledWith(expectedObj); }); it("should call apiService.postCipher when orgAdmin param is true and the cipher orgId is null", async () => { - cipherObj.organizationId = null; + encryptionContext.cipher.organizationId = null!; const spy = jest .spyOn(apiService, "postCipher") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.createWithServer(cipherObj, true); - const expectedObj = new CipherRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.createWithServer(encryptionContext, true); + const expectedObj = new CipherRequest(encryptionContext); expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalledWith(expectedObj); }); it("should call apiService.postCipherCreate if collectionsIds != null", async () => { - cipherObj.collectionIds = ["123"]; + encryptionContext.cipher.collectionIds = ["123"]; const spy = jest .spyOn(apiService, "postCipherCreate") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.createWithServer(cipherObj); - const expectedObj = new CipherCreateRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.createWithServer(encryptionContext); + const expectedObj = new CipherCreateRequest(encryptionContext); expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalledWith(expectedObj); @@ -227,9 +204,9 @@ describe("Cipher Service", () => { it("should call apiService.postCipher when orgAdmin and collectionIds logic is false", async () => { const spy = jest .spyOn(apiService, "postCipher") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.createWithServer(cipherObj); - const expectedObj = new CipherRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.createWithServer(encryptionContext); + const expectedObj = new CipherRequest(encryptionContext); expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalledWith(expectedObj); @@ -240,36 +217,36 @@ describe("Cipher Service", () => { it("should call apiService.putCipherAdmin when orgAdmin param is true", async () => { const spy = jest .spyOn(apiService, "putCipherAdmin") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.updateWithServer(cipherObj, true); - const expectedObj = new CipherRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.updateWithServer(encryptionContext, true); + const expectedObj = new CipherRequest(encryptionContext); expect(spy).toHaveBeenCalled(); - expect(spy).toHaveBeenCalledWith(cipherObj.id, expectedObj); + expect(spy).toHaveBeenCalledWith(encryptionContext.cipher.id, expectedObj); }); it("should call apiService.putCipher if cipher.edit is true", async () => { - cipherObj.edit = true; + encryptionContext.cipher.edit = true; const spy = jest .spyOn(apiService, "putCipher") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.updateWithServer(cipherObj); - const expectedObj = new CipherRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.updateWithServer(encryptionContext); + const expectedObj = new CipherRequest(encryptionContext); expect(spy).toHaveBeenCalled(); - expect(spy).toHaveBeenCalledWith(cipherObj.id, expectedObj); + expect(spy).toHaveBeenCalledWith(encryptionContext.cipher.id, expectedObj); }); it("should call apiService.putPartialCipher when orgAdmin, and edit are false", async () => { - cipherObj.edit = false; + encryptionContext.cipher.edit = false; const spy = jest .spyOn(apiService, "putPartialCipher") - .mockImplementation(() => Promise.resolve<any>(cipherObj.toCipherData())); - await cipherService.updateWithServer(cipherObj); - const expectedObj = new CipherPartialRequest(cipherObj); + .mockImplementation(() => Promise.resolve<any>(encryptionContext.cipher.toCipherData())); + await cipherService.updateWithServer(encryptionContext); + const expectedObj = new CipherPartialRequest(encryptionContext.cipher); expect(spy).toHaveBeenCalled(); - expect(spy).toHaveBeenCalledWith(cipherObj.id, expectedObj); + expect(spy).toHaveBeenCalledWith(encryptionContext.cipher.id, expectedObj); }); }); @@ -293,6 +270,15 @@ describe("Cipher Service", () => { jest.spyOn(cipherService as any, "getAutofillOnPageLoadDefault").mockResolvedValue(true); }); + it("should return the encrypting user id", async () => { + keyService.getOrgKey.mockReturnValue( + Promise.resolve<any>(new SymmetricCryptoKey(new Uint8Array(32)) as OrgKey), + ); + + const { encryptedFor } = await cipherService.encrypt(cipherView, userId); + expect(encryptedFor).toEqual(userId); + }); + describe("login encryption", () => { it("should add a uri hash to login uris", async () => { encryptService.hash.mockImplementation((value) => Promise.resolve(`${value} hash`)); @@ -304,9 +290,9 @@ describe("Cipher Service", () => { Promise.resolve<any>(new SymmetricCryptoKey(new Uint8Array(32)) as OrgKey), ); - const domain = await cipherService.encrypt(cipherView, userId); + const { cipher } = await cipherService.encrypt(cipherView, userId); - expect(domain.login.uris).toEqual([ + expect(cipher.login.uris).toEqual([ { uri: new EncString("uri has been encrypted"), uriChecksum: new EncString("uri hash has been encrypted"), @@ -325,7 +311,7 @@ describe("Cipher Service", () => { it("is null when feature flag is false", async () => { configService.getFeatureFlag.mockResolvedValue(false); - const cipher = await cipherService.encrypt(cipherView, userId); + const { cipher } = await cipherService.encrypt(cipherView, userId); expect(cipher.key).toBeNull(); }); @@ -338,7 +324,7 @@ describe("Cipher Service", () => { it("is null when the cipher is not viewPassword", async () => { cipherView.viewPassword = false; - const cipher = await cipherService.encrypt(cipherView, userId); + const { cipher } = await cipherService.encrypt(cipherView, userId); expect(cipher.key).toBeNull(); }); @@ -346,7 +332,7 @@ describe("Cipher Service", () => { it("is defined when the cipher is viewPassword", async () => { cipherView.viewPassword = true; - const cipher = await cipherService.encrypt(cipherView, userId); + const { cipher } = await cipherService.encrypt(cipherView, userId); expect(cipher.key).toBeDefined(); }); @@ -393,7 +379,13 @@ describe("Cipher Service", () => { it("is called when cipher viewPassword is false and original cipher has a key", async () => { cipherView.viewPassword = false; - await cipherService.encrypt(cipherView, userId, undefined, undefined, cipherObj); + await cipherService.encrypt( + cipherView, + userId, + undefined, + undefined, + encryptionContext.cipher, + ); expect(cipherService["encryptCipherWithCipherKey"]).toHaveBeenCalled(); }); @@ -416,22 +408,17 @@ describe("Cipher Service", () => { stateService.getUserId.mockResolvedValue(mockUserId); - const keys = { - userKey: originalUserKey, - } as CipherDecryptionKeys; + const keys = { userKey: originalUserKey } as CipherDecryptionKeys; keyService.cipherDecryptionKeys$.mockReturnValue(of(keys)); - const cipher1 = new CipherView(cipherObj); - cipher1.id = "Cipher 1"; + const cipher1 = new CipherView(encryptionContext.cipher); + cipher1.id = "Cipher 1" as CipherId; cipher1.organizationId = null; - const cipher2 = new CipherView(cipherObj); - cipher2.id = "Cipher 2"; + const cipher2 = new CipherView(encryptionContext.cipher); + cipher2.id = "Cipher 2" as CipherId; cipher2.organizationId = null; - decryptedCiphers = new BehaviorSubject({ - Cipher1: cipher1, - Cipher2: cipher2, - }); + decryptedCiphers = new BehaviorSubject({ [cipher1.id]: cipher1, [cipher2.id]: cipher2 }); jest .spyOn(cipherService, "cipherViews$") .mockImplementation((userId: UserId) => @@ -462,19 +449,19 @@ describe("Cipher Service", () => { }); it("throws if the original user key is null", async () => { - await expect(cipherService.getRotatedData(null, newUserKey, mockUserId)).rejects.toThrow( + await expect(cipherService.getRotatedData(null!, newUserKey, mockUserId)).rejects.toThrow( "Original user key is required to rotate ciphers", ); }); it("throws if the new user key is null", async () => { - await expect(cipherService.getRotatedData(originalUserKey, null, mockUserId)).rejects.toThrow( - "New user key is required to rotate ciphers", - ); + await expect( + cipherService.getRotatedData(originalUserKey, null!, mockUserId), + ).rejects.toThrow("New user key is required to rotate ciphers"); }); it("throws if the user has any failed to decrypt ciphers", async () => { - const badCipher = new CipherView(cipherObj); + const badCipher = new CipherView(encryptionContext.cipher); badCipher.id = "Cipher 3"; badCipher.organizationId = null; badCipher.decryptionFailure = true; @@ -488,12 +475,15 @@ describe("Cipher Service", () => { describe("decrypt", () => { it("should call decrypt method of CipherEncryptionService when feature flag is true", async () => { configService.getFeatureFlag.mockResolvedValue(true); - cipherEncryptionService.decrypt.mockResolvedValue(new CipherView(cipherObj)); + cipherEncryptionService.decrypt.mockResolvedValue(new CipherView(encryptionContext.cipher)); - const result = await cipherService.decrypt(cipherObj, userId); + const result = await cipherService.decrypt(encryptionContext.cipher, userId); - expect(result).toEqual(new CipherView(cipherObj)); - expect(cipherEncryptionService.decrypt).toHaveBeenCalledWith(cipherObj, userId); + expect(result).toEqual(new CipherView(encryptionContext.cipher)); + expect(cipherEncryptionService.decrypt).toHaveBeenCalledWith( + encryptionContext.cipher, + userId, + ); }); it("should call legacy decrypt when feature flag is false", async () => { @@ -501,12 +491,14 @@ describe("Cipher Service", () => { configService.getFeatureFlag.mockResolvedValue(false); cipherService.getKeyForCipherKeyDecryption = jest.fn().mockResolvedValue(mockUserKey); encryptService.decryptToBytes.mockResolvedValue(new Uint8Array(32)); - jest.spyOn(cipherObj, "decrypt").mockResolvedValue(new CipherView(cipherObj)); + jest + .spyOn(encryptionContext.cipher, "decrypt") + .mockResolvedValue(new CipherView(encryptionContext.cipher)); - const result = await cipherService.decrypt(cipherObj, userId); + const result = await cipherService.decrypt(encryptionContext.cipher, userId); - expect(result).toEqual(new CipherView(cipherObj)); - expect(cipherObj.decrypt).toHaveBeenCalledWith(mockUserKey); + expect(result).toEqual(new CipherView(encryptionContext.cipher)); + expect(encryptionContext.cipher.decrypt).toHaveBeenCalledWith(mockUserKey); }); }); diff --git a/libs/common/src/vault/services/cipher.service.ts b/libs/common/src/vault/services/cipher.service.ts index 2693d9d4644..0c948fe0c6b 100644 --- a/libs/common/src/vault/services/cipher.service.ts +++ b/libs/common/src/vault/services/cipher.service.ts @@ -33,7 +33,10 @@ import { CipherId, CollectionId, OrganizationId, UserId } from "../../types/guid import { OrgKey, UserKey } from "../../types/key"; import { filterOutNullish, perUserCache$ } from "../../vault/utils/observable-utilities"; import { CipherEncryptionService } from "../abstractions/cipher-encryption.service"; -import { CipherService as CipherServiceAbstraction } from "../abstractions/cipher.service"; +import { + CipherService as CipherServiceAbstraction, + EncryptionContext, +} from "../abstractions/cipher.service"; import { CipherFileUploadService } from "../abstractions/file-upload/cipher-file-upload.service"; import { FieldType } from "../enums"; import { CipherType } from "../enums/cipher-type"; @@ -196,7 +199,7 @@ export class CipherService implements CipherServiceAbstraction { keyForCipherEncryption?: SymmetricCryptoKey, keyForCipherKeyDecryption?: SymmetricCryptoKey, originalCipher: Cipher = null, - ): Promise<Cipher> { + ): Promise<EncryptionContext> { if (model.id != null) { if (originalCipher == null) { originalCipher = await this.get(model.id, userId); @@ -230,18 +233,24 @@ export class CipherService implements CipherServiceAbstraction { keyForCipherEncryption ||= userOrOrgKey; // If the caller has provided a key for cipher key decryption, use it. Otherwise, use the user or org key. keyForCipherKeyDecryption ||= userOrOrgKey; - return this.encryptCipherWithCipherKey( - model, - cipher, - keyForCipherEncryption, - keyForCipherKeyDecryption, - ); + return { + cipher: await this.encryptCipherWithCipherKey( + model, + cipher, + keyForCipherEncryption, + keyForCipherKeyDecryption, + ), + encryptedFor: userId, + }; } else { keyForCipherEncryption ||= await this.getKeyForCipherKeyDecryption(cipher, userId); // We want to ensure that the cipher key is null if cipher key encryption is disabled // so that decryption uses the proper key. cipher.key = null; - return this.encryptCipher(model, cipher, keyForCipherEncryption); + return { + cipher: await this.encryptCipher(model, cipher, keyForCipherEncryption), + encryptedFor: userId, + }; } } @@ -261,19 +270,14 @@ export class CipherService implements CipherServiceAbstraction { attachment.size = model.size; attachment.sizeName = model.sizeName; attachment.url = model.url; - const promise = this.encryptObjProperty( - model, - attachment, - { - fileName: null, + const promise = this.encryptObjProperty(model, attachment, { fileName: null }, key).then( + async () => { + if (model.key != null) { + attachment.key = await this.encryptService.wrapSymmetricKey(model.key, key); + } + encAttachments.push(attachment); }, - key, - ).then(async () => { - if (model.key != null) { - attachment.key = await this.encryptService.wrapSymmetricKey(model.key, key); - } - encAttachments.push(attachment); - }); + ); promises.push(promise); }); @@ -306,15 +310,7 @@ export class CipherService implements CipherServiceAbstraction { fieldModel.value = "false"; } - await this.encryptObjProperty( - fieldModel, - field, - { - name: null, - value: null, - }, - key, - ); + await this.encryptObjProperty(fieldModel, field, { name: null, value: null }, key); return field; } @@ -345,14 +341,7 @@ export class CipherService implements CipherServiceAbstraction { const ph = new Password(); ph.lastUsedDate = phModel.lastUsedDate; - await this.encryptObjProperty( - phModel, - ph, - { - password: null, - }, - key, - ); + await this.encryptObjProperty(phModel, ph, { password: null }, key); return ph; } @@ -705,9 +694,7 @@ export class CipherService implements CipherServiceAbstraction { if (ciphersLocalData[cipherId]) { ciphersLocalData[cipherId].lastUsedDate = new Date().getTime(); } else { - ciphersLocalData[cipherId] = { - lastUsedDate: new Date().getTime(), - }; + ciphersLocalData[cipherId] = { lastUsedDate: new Date().getTime() }; } await this.localDataState(userId).update(() => ciphersLocalData); @@ -735,10 +722,7 @@ export class CipherService implements CipherServiceAbstraction { } const currentTime = new Date().getTime(); - ciphersLocalData[id as CipherId] = { - lastLaunched: currentTime, - lastUsedDate: currentTime, - }; + ciphersLocalData[id as CipherId] = { lastLaunched: currentTime, lastUsedDate: currentTime }; await this.localDataState(userId).update(() => ciphersLocalData); @@ -770,18 +754,21 @@ export class CipherService implements CipherServiceAbstraction { await this.domainSettingsService.setNeverDomains(domains); } - async createWithServer(cipher: Cipher, orgAdmin?: boolean): Promise<Cipher> { + async createWithServer( + { cipher, encryptedFor }: EncryptionContext, + orgAdmin?: boolean, + ): Promise<Cipher> { let response: CipherResponse; if (orgAdmin && cipher.organizationId != null) { - const request = new CipherCreateRequest(cipher); + const request = new CipherCreateRequest({ cipher, encryptedFor }); response = await this.apiService.postCipherAdmin(request); const data = new CipherData(response, cipher.collectionIds); return new Cipher(data); } else if (cipher.collectionIds != null) { - const request = new CipherCreateRequest(cipher); + const request = new CipherCreateRequest({ cipher, encryptedFor }); response = await this.apiService.postCipherCreate(request); } else { - const request = new CipherRequest(cipher); + const request = new CipherRequest({ cipher, encryptedFor }); response = await this.apiService.postCipher(request); } cipher.id = response.id; @@ -792,15 +779,18 @@ export class CipherService implements CipherServiceAbstraction { return new Cipher(updated[cipher.id as CipherId]); } - async updateWithServer(cipher: Cipher, orgAdmin?: boolean): Promise<Cipher> { + async updateWithServer( + { cipher, encryptedFor }: EncryptionContext, + orgAdmin?: boolean, + ): Promise<Cipher> { let response: CipherResponse; if (orgAdmin) { - const request = new CipherRequest(cipher); + const request = new CipherRequest({ cipher, encryptedFor }); response = await this.apiService.putCipherAdmin(cipher.id, request); const data = new CipherData(response, cipher.collectionIds); return new Cipher(data, cipher.localData); } else if (cipher.edit) { - const request = new CipherRequest(cipher); + const request = new CipherRequest({ cipher, encryptedFor }); response = await this.apiService.putCipher(cipher.id, request); } else { const request = new CipherPartialRequest(cipher); @@ -854,12 +844,12 @@ export class CipherService implements CipherServiceAbstraction { cipher.collectionIds = collectionIds; promises.push( this.encryptSharedCipher(cipher, userId).then((c) => { - encCiphers.push(c); + encCiphers.push(c.cipher); }), ); } await Promise.all(promises); - const request = new CipherBulkShareRequest(encCiphers, collectionIds); + const request = new CipherBulkShareRequest(encCiphers, collectionIds, userId); try { await this.apiService.putShareCiphers(request); } catch (e) { @@ -921,8 +911,8 @@ export class CipherService implements CipherServiceAbstraction { //in order to keep item and it's attachments with the same encryption level if (cipher.key != null && !cipherKeyEncryptionEnabled) { const model = await this.decrypt(cipher, userId); - cipher = await this.encrypt(model, userId); - await this.updateWithServer(cipher); + const reEncrypted = await this.encrypt(model, userId); + await this.updateWithServer(reEncrypted); } const encFileName = await this.encryptService.encryptString(filename, cipherEncKey); @@ -1482,7 +1472,7 @@ export class CipherService implements CipherServiceAbstraction { // In the case of a cipher that is being shared with an organization, we want to decrypt the // cipher key with the user's key and then re-encrypt it with the organization's key. - private async encryptSharedCipher(model: CipherView, userId: UserId): Promise<Cipher> { + private async encryptSharedCipher(model: CipherView, userId: UserId): Promise<EncryptionContext> { const keyForCipherKeyDecryption = await this.keyService.getUserKeyWithLegacySupport(userId); return await this.encrypt(model, userId, null, keyForCipherKeyDecryption); } @@ -1584,10 +1574,7 @@ export class CipherService implements CipherServiceAbstraction { fd.append( "data", Buffer.from(encData.buffer) as any, - { - filepath: encFileName.encryptedString, - contentType: "application/octet-stream", - } as any, + { filepath: encFileName.encryptedString, contentType: "application/octet-stream" } as any, ); } else { throw e; @@ -1649,11 +1636,7 @@ export class CipherService implements CipherServiceAbstraction { await this.encryptObjProperty( model.login, cipher.login, - { - username: null, - password: null, - totp: null, - }, + { username: null, password: null, totp: null }, key, ); @@ -1663,14 +1646,7 @@ export class CipherService implements CipherServiceAbstraction { for (let i = 0; i < model.login.uris.length; i++) { const loginUri = new LoginUri(); loginUri.match = model.login.uris[i].match; - await this.encryptObjProperty( - model.login.uris[i], - loginUri, - { - uri: null, - }, - key, - ); + await this.encryptObjProperty(model.login.uris[i], loginUri, { uri: null }, key); const uriHash = await this.encryptService.hash(model.login.uris[i].uri, "sha256"); loginUri.uriChecksum = await this.encryptService.encryptString(uriHash, key); cipher.login.uris.push(loginUri); @@ -1766,11 +1742,7 @@ export class CipherService implements CipherServiceAbstraction { await this.encryptObjProperty( model.sshKey, cipher.sshKey, - { - privateKey: null, - publicKey: null, - keyFingerprint: null, - }, + { privateKey: null, publicKey: null, keyFingerprint: null }, key, ); return; @@ -1855,15 +1827,7 @@ export class CipherService implements CipherServiceAbstraction { } await Promise.all([ - this.encryptObjProperty( - model, - cipher, - { - name: null, - notes: null, - }, - key, - ), + this.encryptObjProperty(model, cipher, { name: null, notes: null }, key), this.encryptCipherData(cipher, model, key), this.encryptFields(model.fields, key).then((fields) => { cipher.fields = fields; diff --git a/libs/vault/src/cipher-form/services/default-cipher-form.service.ts b/libs/vault/src/cipher-form/services/default-cipher-form.service.ts index 68eac4f0da2..99f853d4c86 100644 --- a/libs/vault/src/cipher-form/services/default-cipher-form.service.ts +++ b/libs/vault/src/cipher-form/services/default-cipher-form.service.ts @@ -29,19 +29,20 @@ export class DefaultCipherFormService implements CipherFormService { async saveCipher(cipher: CipherView, config: CipherFormConfig): Promise<CipherView> { // Passing the original cipher is important here as it is responsible for appending to password history const activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)); - const encryptedCipher = await this.cipherService.encrypt( + const encrypted = await this.cipherService.encrypt( cipher, activeUserId, null, null, config.originalCipher ?? null, ); + const encryptedCipher = encrypted.cipher; let savedCipher: Cipher; // Creating a new cipher if (cipher.id == null) { - savedCipher = await this.cipherService.createWithServer(encryptedCipher, config.admin); + savedCipher = await this.cipherService.createWithServer(encrypted, config.admin); return await this.cipherService.decrypt(savedCipher, activeUserId); } @@ -64,13 +65,13 @@ export class DefaultCipherFormService implements CipherFormService { ); // If the collectionIds are the same, update the cipher normally } else if (isSetEqual(originalCollectionIds, newCollectionIds)) { - savedCipher = await this.cipherService.updateWithServer(encryptedCipher, config.admin); + savedCipher = await this.cipherService.updateWithServer(encrypted, config.admin); } else { // Updating a cipher with collection changes is not supported with a single request currently // First update the cipher with the original collectionIds encryptedCipher.collectionIds = config.originalCipher.collectionIds; await this.cipherService.updateWithServer( - encryptedCipher, + encrypted, config.admin || originalCollectionIds.size === 0, ); diff --git a/libs/vault/src/components/assign-collections.component.ts b/libs/vault/src/components/assign-collections.component.ts index faa2dae072a..4a0bd1fc670 100644 --- a/libs/vault/src/components/assign-collections.component.ts +++ b/libs/vault/src/components/assign-collections.component.ts @@ -506,7 +506,7 @@ export class AssignCollectionsComponent implements OnInit, OnDestroy, AfterViewI private async updateAssignedCollections(cipherView: CipherView, userId: UserId) { const { collections } = this.formGroup.getRawValue(); cipherView.collectionIds = collections.map((i) => i.id as CollectionId); - const cipher = await this.cipherService.encrypt(cipherView, userId); + const { cipher } = await this.cipherService.encrypt(cipherView, userId); if (this.params.isSingleCipherAdmin) { await this.cipherService.saveCollectionsWithServerAdmin(cipher); } else { From eba22cf5f8b7f9bdcbc9e37f820165d6f04819b1 Mon Sep 17 00:00:00 2001 From: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> Date: Fri, 30 May 2025 13:45:31 -0500 Subject: [PATCH 26/33] [PM-21797] Require userID for keyService's getUserKeyFromStorage (#14855) * require userID for keyService's getUserKeyFromStorage --- .../src/abstractions/key.service.ts | 3 +- libs/key-management/src/key.service.spec.ts | 81 +++++++++++++++++++ libs/key-management/src/key.service.ts | 5 +- 3 files changed, 85 insertions(+), 4 deletions(-) diff --git a/libs/key-management/src/abstractions/key.service.ts b/libs/key-management/src/abstractions/key.service.ts index 51a99421967..7a9c076a8bb 100644 --- a/libs/key-management/src/abstractions/key.service.ts +++ b/libs/key-management/src/abstractions/key.service.ts @@ -128,10 +128,11 @@ export abstract class KeyService { * @param keySuffix The desired version of the user's key to retrieve * @param userId The desired user * @returns The user key + * @throws Error when userId is null or undefined. */ abstract getUserKeyFromStorage( keySuffix: KeySuffixOptions, - userId?: string, + userId: string, ): Promise<UserKey | null>; /** diff --git a/libs/key-management/src/key.service.spec.ts b/libs/key-management/src/key.service.spec.ts index 400d7279a30..cd5458e9a1f 100644 --- a/libs/key-management/src/key.service.spec.ts +++ b/libs/key-management/src/key.service.spec.ts @@ -14,6 +14,7 @@ import { KeyGenerationService } from "@bitwarden/common/platform/abstractions/ke import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; +import { KeySuffixOptions } from "@bitwarden/common/platform/enums"; import { Encrypted } from "@bitwarden/common/platform/interfaces/encrypted"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncString, EncryptedString } from "@bitwarden/common/platform/models/domain/enc-string"; @@ -896,4 +897,84 @@ describe("keyService", () => { }); }); }); + + describe("getUserKeyFromStorage", () => { + let mockUserKey: UserKey; + let validateUserKeySpy: jest.SpyInstance; + + beforeEach(() => { + mockUserKey = new SymmetricCryptoKey(new Uint8Array(64)) as UserKey; + validateUserKeySpy = jest.spyOn(keyService, "validateUserKey"); + }); + + afterEach(() => { + validateUserKeySpy.mockRestore(); + }); + + describe("input validation", () => { + const invalidUserIdTestCases = [ + { keySuffix: KeySuffixOptions.Auto, userId: null as unknown as UserId }, + { keySuffix: KeySuffixOptions.Auto, userId: undefined as unknown as UserId }, + { keySuffix: KeySuffixOptions.Pin, userId: null as unknown as UserId }, + { keySuffix: KeySuffixOptions.Pin, userId: undefined as unknown as UserId }, + ]; + + test.each(invalidUserIdTestCases)( + "throws when keySuffix is $keySuffix and userId is $userId", + async ({ keySuffix, userId }) => { + await expect(keyService.getUserKeyFromStorage(keySuffix, userId)).rejects.toThrow( + "UserId is required", + ); + }, + ); + }); + + describe("with Pin keySuffix", () => { + it("returns null and doesn't validate the key", async () => { + const result = await keyService.getUserKeyFromStorage(KeySuffixOptions.Pin, mockUserId); + + expect(result).toBeNull(); + expect(validateUserKeySpy).not.toHaveBeenCalled(); + }); + }); + + describe("with Auto keySuffix", () => { + it("returns validated key from storage when key exists and is valid", async () => { + stateService.getUserKeyAutoUnlock.mockResolvedValue(mockUserKey.keyB64); + validateUserKeySpy.mockResolvedValue(true); + + const result = await keyService.getUserKeyFromStorage(KeySuffixOptions.Auto, mockUserId); + + expect(result).toEqual(mockUserKey); + expect(validateUserKeySpy).toHaveBeenCalledWith(mockUserKey, mockUserId); + expect(stateService.getUserKeyAutoUnlock).toHaveBeenCalledWith({ + userId: mockUserId, + }); + }); + + it("returns null when no key is found in storage", async () => { + stateService.getUserKeyAutoUnlock.mockResolvedValue(null as unknown as string); + + const result = await keyService.getUserKeyFromStorage(KeySuffixOptions.Auto, mockUserId); + + expect(result).toBeNull(); + expect(validateUserKeySpy).not.toHaveBeenCalled(); + }); + + it("clears stored keys when userKey validation fails", async () => { + stateService.getUserKeyAutoUnlock.mockResolvedValue(mockUserKey.keyB64); + validateUserKeySpy.mockResolvedValue(false); + + const result = await keyService.getUserKeyFromStorage(KeySuffixOptions.Auto, mockUserId); + + expect(result).toEqual(mockUserKey); + expect(validateUserKeySpy).toHaveBeenCalledWith(mockUserKey, mockUserId); + expect(logService.warning).toHaveBeenCalledWith("Invalid key, throwing away stored keys"); + expect(pinService.clearPinKeyEncryptedUserKeyEphemeral).toHaveBeenCalledWith(mockUserId); + expect(stateService.setUserKeyAutoUnlock).toHaveBeenCalledWith(null, { + userId: mockUserId, + }); + }); + }); + }); }); diff --git a/libs/key-management/src/key.service.ts b/libs/key-management/src/key.service.ts index fe288adeb88..4a48d00f568 100644 --- a/libs/key-management/src/key.service.ts +++ b/libs/key-management/src/key.service.ts @@ -178,11 +178,10 @@ export class DefaultKeyService implements KeyServiceAbstraction { async getUserKeyFromStorage( keySuffix: KeySuffixOptions, - userId?: UserId, + userId: UserId, ): Promise<UserKey | null> { - userId ??= await firstValueFrom(this.stateProvider.activeUserId$); if (userId == null) { - throw new Error("No active user id found."); + throw new Error("UserId is required"); } const userKey = await this.getKeyFromStorage(keySuffix, userId); From 721657a5c30802edef34a20309c01ae2952b1da1 Mon Sep 17 00:00:00 2001 From: Todd Martin <106564991+trmartin4@users.noreply.github.com> Date: Fri, 30 May 2025 15:31:44 -0400 Subject: [PATCH 27/33] Update syntax for Github. (#14845) --- .../angular/src/platform/view-cache/README.md | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/libs/angular/src/platform/view-cache/README.md b/libs/angular/src/platform/view-cache/README.md index c1f80da5800..d98222c4bde 100644 --- a/libs/angular/src/platform/view-cache/README.md +++ b/libs/angular/src/platform/view-cache/README.md @@ -43,12 +43,9 @@ on any component. The persistence layer ensures that the popup will open at the same route as was active when it closed, provided that none of the lifetime expiration events have occurred. -:::tip Excluding a route - -If a particular route should be excluded from the history and not persisted, add -`doNotSaveUrl: true` to the `data` property on the route. - -::: +> [!TIP] +> If a particular route should be excluded from the history and not persisted, add +> `doNotSaveUrl: true` to the `data` property on the route. ### View data persistence @@ -85,13 +82,10 @@ const mySignal = this.viewCacheService.signal({ mySignal.set("value") ``` -:::note Equality comparison - -By default, signals use `Object.is` to determine equality, and `set()` will only trigger updates if -the updated value is not equal to the current signal state. See documentation -[here](https://angular.dev/guide/signals#signal-equality-functions). - -::: +> [!NOTE] +> By default, signals use `Object.is` to determine equality, and `set()` will only trigger updates if +> the updated value is not equal to the current signal state. See documentation +> [here](https://angular.dev/guide/signals#signal-equality-functions). Putting this together, the most common implementation pattern would be: From f55f315ca15df09772e957e0e8b089a2d45b04f7 Mon Sep 17 00:00:00 2001 From: Kevinw778 <kevinw778@gmail.com> Date: Sat, 31 May 2025 05:18:28 -0400 Subject: [PATCH 28/33] [PM-21868] Send limit reached icon + message now show (#14860) * Send limit reached icon + message now show * Fix en/messages.json --------- Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com> --- apps/browser/src/_locales/en/messages.json | 4 ++++ .../send-list-items-container.component.html | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/libs/tools/send/send-ui/src/send-list-items-container/send-list-items-container.component.html b/libs/tools/send/send-ui/src/send-list-items-container/send-list-items-container.component.html index 9b0f0fca26f..94ebfc3e5e6 100644 --- a/libs/tools/send/send-ui/src/send-list-items-container/send-list-items-container.component.html +++ b/libs/tools/send/send-ui/src/send-list-items-container/send-list-items-container.component.html @@ -26,6 +26,16 @@ ></i> </div> {{ send.name }} + <ng-container *ngIf="send.maxAccessCountReached"> + <i + class="bwi bwi-exclamation-triangle" + appStopProp + title="{{ 'maxAccessCountReached' | i18n }}" + aria-hidden="true" + ></i> + <span class="tw-sr-only">{{ "maxAccessCountReached" | i18n }}</span> + </ng-container> + <span slot="secondary"> {{ "deletionDate" | i18n }}: {{ send.deletionDate | date: "mediumDate" }} </span> From 960f6938f46287e2d336dbe2a125acb075411d2c Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 08:59:32 +0000 Subject: [PATCH 29/33] Autosync the updated translations (#15024) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/desktop/src/locales/zh_CN/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index 4a001fc3b05..9baa14bc03d 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -247,7 +247,7 @@ "message": "记住 SSH 授权" }, "sshAgentPromptBehaviorAlways": { - "message": "总是" + "message": "始终" }, "sshAgentPromptBehaviorNever": { "message": "从不" From 412546506ac5ed51c7cfccba9648d5cf278be0e1 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 08:59:46 +0000 Subject: [PATCH 30/33] Autosync the updated translations (#15025) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/af/messages.json | 13 +++++++++++++ apps/web/src/locales/ar/messages.json | 13 +++++++++++++ apps/web/src/locales/az/messages.json | 17 +++++++++++++++-- apps/web/src/locales/be/messages.json | 13 +++++++++++++ apps/web/src/locales/bg/messages.json | 13 +++++++++++++ apps/web/src/locales/bn/messages.json | 13 +++++++++++++ apps/web/src/locales/bs/messages.json | 13 +++++++++++++ apps/web/src/locales/ca/messages.json | 13 +++++++++++++ apps/web/src/locales/cs/messages.json | 13 +++++++++++++ apps/web/src/locales/cy/messages.json | 13 +++++++++++++ apps/web/src/locales/da/messages.json | 13 +++++++++++++ apps/web/src/locales/de/messages.json | 13 +++++++++++++ apps/web/src/locales/el/messages.json | 13 +++++++++++++ apps/web/src/locales/en_GB/messages.json | 13 +++++++++++++ apps/web/src/locales/en_IN/messages.json | 13 +++++++++++++ apps/web/src/locales/eo/messages.json | 13 +++++++++++++ apps/web/src/locales/es/messages.json | 13 +++++++++++++ apps/web/src/locales/et/messages.json | 13 +++++++++++++ apps/web/src/locales/eu/messages.json | 13 +++++++++++++ apps/web/src/locales/fa/messages.json | 13 +++++++++++++ apps/web/src/locales/fi/messages.json | 13 +++++++++++++ apps/web/src/locales/fil/messages.json | 13 +++++++++++++ apps/web/src/locales/fr/messages.json | 13 +++++++++++++ apps/web/src/locales/gl/messages.json | 13 +++++++++++++ apps/web/src/locales/he/messages.json | 13 +++++++++++++ apps/web/src/locales/hi/messages.json | 13 +++++++++++++ apps/web/src/locales/hr/messages.json | 13 +++++++++++++ apps/web/src/locales/hu/messages.json | 13 +++++++++++++ apps/web/src/locales/id/messages.json | 13 +++++++++++++ apps/web/src/locales/it/messages.json | 13 +++++++++++++ apps/web/src/locales/ja/messages.json | 13 +++++++++++++ apps/web/src/locales/ka/messages.json | 13 +++++++++++++ apps/web/src/locales/km/messages.json | 13 +++++++++++++ apps/web/src/locales/kn/messages.json | 13 +++++++++++++ apps/web/src/locales/ko/messages.json | 13 +++++++++++++ apps/web/src/locales/lv/messages.json | 13 +++++++++++++ apps/web/src/locales/ml/messages.json | 13 +++++++++++++ apps/web/src/locales/mr/messages.json | 13 +++++++++++++ apps/web/src/locales/my/messages.json | 13 +++++++++++++ apps/web/src/locales/nb/messages.json | 13 +++++++++++++ apps/web/src/locales/ne/messages.json | 13 +++++++++++++ apps/web/src/locales/nl/messages.json | 13 +++++++++++++ apps/web/src/locales/nn/messages.json | 13 +++++++++++++ apps/web/src/locales/or/messages.json | 13 +++++++++++++ apps/web/src/locales/pl/messages.json | 13 +++++++++++++ apps/web/src/locales/pt_BR/messages.json | 13 +++++++++++++ apps/web/src/locales/pt_PT/messages.json | 13 +++++++++++++ apps/web/src/locales/ro/messages.json | 13 +++++++++++++ apps/web/src/locales/ru/messages.json | 13 +++++++++++++ apps/web/src/locales/si/messages.json | 13 +++++++++++++ apps/web/src/locales/sk/messages.json | 13 +++++++++++++ apps/web/src/locales/sl/messages.json | 13 +++++++++++++ apps/web/src/locales/sr/messages.json | 13 +++++++++++++ apps/web/src/locales/sr_CS/messages.json | 13 +++++++++++++ apps/web/src/locales/sv/messages.json | 13 +++++++++++++ apps/web/src/locales/te/messages.json | 13 +++++++++++++ apps/web/src/locales/th/messages.json | 13 +++++++++++++ apps/web/src/locales/tr/messages.json | 13 +++++++++++++ apps/web/src/locales/uk/messages.json | 13 +++++++++++++ apps/web/src/locales/vi/messages.json | 13 +++++++++++++ apps/web/src/locales/zh_CN/messages.json | 17 +++++++++++++++-- apps/web/src/locales/zh_TW/messages.json | 13 +++++++++++++ 62 files changed, 810 insertions(+), 4 deletions(-) diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index d1fac1d1357..9e82e573e1a 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index e27a87efa31..94b75a847ed 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index 2faf2cb7e12..e26d3b4ee26 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -10285,7 +10285,7 @@ } }, "updatedRevokeSponsorshipConfirmationForSentSponsorship": { - "message": "$EMAIL$ silinsə, bu Ailələr planı üçün sponsorluq istifadə edilə bilməz. Davam etmək istədiyinizə əminsiniz?", + "message": "$EMAIL$ silsəniz, bu Ailələr planı üçün sponsorluq istifadə edilə bilməz. Davam etmək istədiyinizə əminsiniz?", "placeholders": { "email": { "content": "$1", @@ -10294,7 +10294,7 @@ } }, "updatedRevokeSponsorshipConfirmationForAcceptedSponsorship": { - "message": "$EMAIL$ silinsə, bu Ailə planı üçün sponsorluq bitəcək və saxlanılmış ödəniş üsulundan $DATE$ tarixində $40 + müvafiq vergi tutulacaq. $DATE$ tarixinə qədər yeni bir sponsorluq istifadə edə bilməyəcəksiniz. Davam etmək istədiyinizə əminsiniz?", + "message": "$EMAIL$ silsəniz, bu Ailə planı üçün sponsorluq bitəcək və saxlanılmış ödəniş üsulundan $DATE$ tarixində $40 + müvafiq vergi tutulacaq. $DATE$ tarixinə qədər yeni bir sponsorluq istifadə edə bilməyəcəksiniz. Davam etmək istədiyinizə əminsiniz?", "placeholders": { "email": { "content": "$1", @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Ödəniş üsulunuzu əlavə etmək üçün lütfən Paypal ilə ödəniş et düyməsinə klikləyin." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "$EMAIL$ silsəniz, bu Ailə planı üçün sponsorluq bitəcək. Təşkilatınızın daxilindəki bir yer $DATE$ tarixində sponsorlu təşkilatın yenilənmə tarixindən sonra üzvlər və sponsorluqlar üçün əlçatan olacaq.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index c62928d4bdc..b2de9743a23 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index 436388652f4..9efefaca41b 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Моля, натиснете бутона за плащане с PayPal, за да добавите платежния си метод." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Ако премахнете $EMAIL$, спонсорирането на този семеен план ще бъде прекратено. Едно място в организацията ще стане налично за членове или спонсори след датата за подновяване на спонсорирането на организацията – $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 1a8352a6dbf..1bf290fa314 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 9295e7e5610..3b4881e9050 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index d5001893490..de70c3f03ed 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 9db811ff776..8eedab4e393 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Pro přidání způsobu platby klepněte na tlačítko \"Pay with PayPal\"." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Pokud odeberete $EMAIL$, sponzorství pro tento plán rodiny skončí. Volné místo ve Vaší organizaci bude k dispozici pro členy nebo sponzory po datu obnovení sponzorované organizace na $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 78d1c04a3c9..d823df7f3a0 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index db73ea4784c..cbdf99ad4b7 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index bcf308bedd5..592664e9330 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Bitte klicke auf den Mit PayPal bezahlen Button, um deine Zahlungsmethode hinzuzufügen." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 60aa8db716c..f35efcda015 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index 7dd11351f89..e71495d9e7e 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end. A seat within your organisation will become available for members or sponsorships after the sponsored organisation renewal date on $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index 5b8f0f521fb..37d7d25bc64 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end. A seat within your organisation will become available for members or sponsorships after the sponsored organisation renewal date on $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 14a15e2965c..01379c904d6 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index b8a11b5e543..86ee310b45d 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 85afcc55be1..606699fe6db 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index 5668d987b69..c50cf1776f8 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index b8a71e7b971..06de2bf7bc7 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "لطفاً برای افزودن روش پرداخت خود، روی دکمه پرداخت با پی‌پال کلیک کنید." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 04504a49c2e..4f2394ba2ac 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index 8aeb3d17aa1..eb9b572ab98 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index e8016b547f9..f4181fb7cd3 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Veuillez cliquer sur le bouton Payer avec PayPal pour ajouter votre mode de paiement." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Si vous supprimez $EMAIL$, le parrainage pour ce plan Familles prendra fin. Un siège au sein de votre organisation sera disponible pour les membres ou les parrainages après la date de renouvellement de l'organisation parrainée le $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index 004090b4fab..4ac6f383a6d 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 2f11b460d66..9010e380275 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index 4fbcada7060..3a1be80c3b0 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 501741f494a..87895b822d6 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 42da598459e..0705a7757a5 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Kattintás a Pay with PayPal gombra a fizetési mód hozzáadásához." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "$EMAIL$ eltávolításával a családi csomag szponzorálása véget ér. A szervezeten belüli hely a szponzorált szervezet megújítási dátuma után válik elérhetővé a tagok vagy a szponzorálások számára: $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index 24f095ed094..0cee74fbdc2 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index d1e7f59d3d9..a20d73adb57 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index bc692f4cd78..75a77253542 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index 3f6fe55ffe0..56936e9c9a2 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 09873860bce..a58a8b9b519 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index 518fe2090df..71111cd0d2e 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 991ae2e31b8..42783abed7c 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 5535e23b030..47ba7175fdd 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Lūgums klikšķināt pogu \"Apmaksāt ar PayPal, lai pievienotu savu maksājumu veidu." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index 01c1f6307ee..2e4e47421e1 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 60ddec4332e..53755bd5fcd 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 09873860bce..a58a8b9b519 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 360e59ea70f..4ad9b3f2e77 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index 3dc7ab5b476..23f16436a0a 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index fdb5e68d3b4..789dda16cc9 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Klik op \"Pay with PayPal\" voor het toevoegen van je betaalmethode." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Als je $EMAIL$ verwijdert, zal de sponsoring voor dit Familieplan stoppen. Er komt een zetel beschikbaar binnen je organisatie voor leden of sponsorschap na de vernieuwingsdatum van de gesponsorde organisatie op $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 12c41a6e3db..640bfc5407c 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 09873860bce..a58a8b9b519 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index 7480135bc41..6cba19e3224 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Kliknij przycisk Zapłać za pomocą PayPal, aby dodać metodę płatności." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Jeśli usuniesz $EMAIL$, sponsorowanie tego planu rodzinnego zostanie zakończone. Miejsce w Twojej organizacji stanie się dostępne dla członków lub sponsorów po dacie odnowienia sponsorowanej organizacji w dniu $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index 32d060465a5..8ab519d6ceb 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index 9aa737e6b23..05f518470fe 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Por favor, clique no botão Pagar com PayPal para adicionar o seu método de pagamento." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Se remover $EMAIL$, o patrocínio para este plano Familiar termina. Um lugar na sua organização ficará disponível para membros ou patrocínios após a data de renovação da organização patrocinada a $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 8ea595a4a32..6eaa32f5e8a 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index b353a8d0e61..e281e97e24e 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Пожалуйста, нажмите кнопку \"Оплатить с помощью PayPal\", чтобы добавить свой способ оплаты." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Если вы удалите $EMAIL$, спонсорство по этому семейному плану прекратится. Места в вашей организации станут доступны для участников или спонсорских организаций после даты продления подписки $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index 16542445a85..00cc6a041be 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 127e8cce83e..1f0f52b169f 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Pre pridanie platobnej metódy kliknite prosím na Zaplatiť cez PayPal." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index 0731d963194..f0c2fc1e65f 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index b698ef5e281..39d095c5d51 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Кликните на Pay with PayPal да бисте додали начин лпаћања." + }, + "revokeActiveSponsorshipConfirmation": { + "message": "Ако уклоните $EMAIL$, спонзорство за овај породични план ће се завршити. Седиште у вашој организацији постаће доступно за чланове или спонзорства након што је спонзорисан датум обнове организације на $DATE$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index 34282b8aaeb..de3db031c6e 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 43658ca8129..4f468c55979 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 09873860bce..a58a8b9b519 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index cf6aab45cec..9b6828a5dd9 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index 4192861d6d1..ab0a4154dc3 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index 00871794ac6..76ab990be23 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Натисніть кнопку Сплатити з PayPal, щоб додати спосіб оплати." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 8218dc06ece..944e3d1183d 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index c126e0c533c..b14d0183433 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -6309,7 +6309,7 @@ "message": "您的组织成员有资格获得免费的 Bitwarden 家庭计划。您可以为不是您的 Bitwarden 组织成员的员工赞助免费 Bitwarden 家庭。赞助非成员需要您的组织内有可用的席位。" }, "sponsoredFamiliesRemoveActiveSponsorship": { - "message": "当您移除某个活动赞助时,该赞助席位将在被赞助组织的续费日期后释放给您的组织使用。" + "message": "当您移除某个活动赞助,在被赞助组织的续费日期之后,您的组织中将释放一个可用的席位。" }, "sponsoredFamiliesEligible": { "message": "您和您的家人有资格获得免费的 Bitwarden 家庭版计划。使用您的个人电子邮箱兑换,即使您不在工作中,也能确保您的数据安全。" @@ -6797,7 +6797,7 @@ "description": "This is used by screen readers to indicate the organization that is currently being shown to the user." }, "accountLoggedInAsName": { - "message": "账户:登录为 $NAME$", + "message": "账户:已登录为 $NAME$", "placeholders": { "name": { "content": "$1", @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "请点击「使用 PayPal 付款」按钮以添加您的付款方式。" + }, + "revokeActiveSponsorshipConfirmation": { + "message": "如果您移除 $EMAIL$,此家庭计划的赞助将结束。在被赞助组织的续费日期 $DATE$ 之后,您的组织中将释放一个可用席位,可供成员或赞助使用。", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 4be5bbcfbd3..c18d71978a6 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -10650,5 +10650,18 @@ }, "clickPayWithPayPal": { "message": "Please click the Pay with PayPal button to add your payment method." + }, + "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$.", + "placeholders": { + "email": { + "content": "$1", + "example": "user@example.com" + }, + "date": { + "content": "$2", + "example": "12/31/2024" + } + } } } From 79fa246df29c9ed70e0e59d801c0ac1d93ec5e87 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:00:06 +0000 Subject: [PATCH 31/33] Autosync the updated translations (#15026) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/ar/messages.json | 4 ++++ apps/browser/src/_locales/az/messages.json | 4 ++++ apps/browser/src/_locales/be/messages.json | 4 ++++ apps/browser/src/_locales/bg/messages.json | 4 ++++ apps/browser/src/_locales/bn/messages.json | 4 ++++ apps/browser/src/_locales/bs/messages.json | 4 ++++ apps/browser/src/_locales/ca/messages.json | 4 ++++ apps/browser/src/_locales/cs/messages.json | 4 ++++ apps/browser/src/_locales/cy/messages.json | 4 ++++ apps/browser/src/_locales/da/messages.json | 4 ++++ apps/browser/src/_locales/de/messages.json | 4 ++++ apps/browser/src/_locales/el/messages.json | 4 ++++ apps/browser/src/_locales/en_GB/messages.json | 4 ++++ apps/browser/src/_locales/en_IN/messages.json | 4 ++++ apps/browser/src/_locales/es/messages.json | 4 ++++ apps/browser/src/_locales/et/messages.json | 4 ++++ apps/browser/src/_locales/eu/messages.json | 14 +++++++++----- apps/browser/src/_locales/fa/messages.json | 4 ++++ apps/browser/src/_locales/fi/messages.json | 4 ++++ apps/browser/src/_locales/fil/messages.json | 4 ++++ apps/browser/src/_locales/fr/messages.json | 4 ++++ apps/browser/src/_locales/gl/messages.json | 4 ++++ apps/browser/src/_locales/he/messages.json | 6 +++++- apps/browser/src/_locales/hi/messages.json | 4 ++++ apps/browser/src/_locales/hr/messages.json | 4 ++++ apps/browser/src/_locales/hu/messages.json | 4 ++++ apps/browser/src/_locales/id/messages.json | 4 ++++ apps/browser/src/_locales/it/messages.json | 4 ++++ apps/browser/src/_locales/ja/messages.json | 4 ++++ apps/browser/src/_locales/ka/messages.json | 4 ++++ apps/browser/src/_locales/km/messages.json | 4 ++++ apps/browser/src/_locales/kn/messages.json | 4 ++++ apps/browser/src/_locales/ko/messages.json | 4 ++++ apps/browser/src/_locales/lt/messages.json | 4 ++++ apps/browser/src/_locales/lv/messages.json | 4 ++++ apps/browser/src/_locales/ml/messages.json | 4 ++++ apps/browser/src/_locales/mr/messages.json | 4 ++++ apps/browser/src/_locales/my/messages.json | 4 ++++ apps/browser/src/_locales/nb/messages.json | 4 ++++ apps/browser/src/_locales/ne/messages.json | 4 ++++ apps/browser/src/_locales/nl/messages.json | 4 ++++ apps/browser/src/_locales/nn/messages.json | 4 ++++ apps/browser/src/_locales/or/messages.json | 4 ++++ apps/browser/src/_locales/pl/messages.json | 4 ++++ apps/browser/src/_locales/pt_BR/messages.json | 4 ++++ apps/browser/src/_locales/pt_PT/messages.json | 4 ++++ apps/browser/src/_locales/ro/messages.json | 4 ++++ apps/browser/src/_locales/ru/messages.json | 4 ++++ apps/browser/src/_locales/si/messages.json | 4 ++++ apps/browser/src/_locales/sk/messages.json | 4 ++++ apps/browser/src/_locales/sl/messages.json | 4 ++++ apps/browser/src/_locales/sr/messages.json | 4 ++++ apps/browser/src/_locales/sv/messages.json | 4 ++++ apps/browser/src/_locales/te/messages.json | 4 ++++ apps/browser/src/_locales/th/messages.json | 6 +++++- apps/browser/src/_locales/tr/messages.json | 4 ++++ apps/browser/src/_locales/uk/messages.json | 4 ++++ apps/browser/src/_locales/vi/messages.json | 4 ++++ apps/browser/src/_locales/zh_CN/messages.json | 8 ++++++-- apps/browser/src/_locales/zh_TW/messages.json | 4 ++++ 60 files changed, 249 insertions(+), 9 deletions(-) diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 426dba6ae2c..0a8ba5b1164 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -2677,6 +2677,10 @@ "message": "كل الإرسالات", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "إخفاء النص بشكل افتراضي" }, diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 03a2aa103c6..a38c590e4d4 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -2677,6 +2677,10 @@ "message": "Bütün \"Send\"lər", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maksimal müraciət sayına çatıldı", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Mətni ilkin olaraq gizlət" }, diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 4a6c11763af..888569cd588 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -2677,6 +2677,10 @@ "message": "Усе Send’ы", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index b6bb159b354..ac99ce4376e 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -2677,6 +2677,10 @@ "message": "Всички изпращания", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Достигнат е максималният брой достъпвания", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Скриване на текста по подразбиране" }, diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index f58a878f83c..fe386c53e62 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 0f064076440..b7982ba4981 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 3ea0c595916..005c100f105 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -2677,6 +2677,10 @@ "message": "Tots els Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Amaga el text per defecte" }, diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 354f37268de..6fc2d1ddb34 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -2677,6 +2677,10 @@ "message": "Všechny Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Dosažen maximální počet přístupů", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ve výchozím nastavení skrýt text" }, diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index b26cbf21019..eec15c8ed9a 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -2677,6 +2677,10 @@ "message": "Pob Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index b64655ab399..066ef9c9d9a 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -2677,6 +2677,10 @@ "message": "Alle Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Skjul tekst som standard" }, diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 34fecaadb72..f9818afe58f 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -2677,6 +2677,10 @@ "message": "Alle Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Text standardmäßig ausblenden" }, diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 3d67010a32d..9d55ed3f0c7 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -2677,6 +2677,10 @@ "message": "Όλα τα Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Απόκρυψη κειμένου από προεπιλογή" }, diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index af82196d643..bc9452a7cad 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index d0fc2af6f9b..ef329ac551c 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 536131b6b78..7b970f996a9 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -2677,6 +2677,10 @@ "message": "Todos los Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 1c09897c53b..9ca7d15e72a 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -2677,6 +2677,10 @@ "message": "Kõik Sendid", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index cb855a077bc..3c7192e465e 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -17,7 +17,7 @@ "message": "Saioa hasi edo sortu kontu berri bat zure kutxa gotorrera sartzeko." }, "inviteAccepted": { - "message": "Invitation accepted" + "message": "Gonbidapena onartua" }, "createAccount": { "message": "Sortu kontua" @@ -150,7 +150,7 @@ "message": "Kopiatu segurtasun-kodea" }, "copyName": { - "message": "Copy name" + "message": "Izena kopiatu" }, "copyCompany": { "message": "Copy company" @@ -2677,6 +2677,10 @@ "message": "Send guztiak", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -5190,13 +5194,13 @@ "message": "Lowercase" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Maiuskulak" }, "generatedPassword": { - "message": "Generated password" + "message": "Sortutako pasahitza" }, "compactMode": { - "message": "Compact mode" + "message": "Modu trinkoa" }, "beta": { "message": "Beta" diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 190af9225a3..c40af49d97c 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -2677,6 +2677,10 @@ "message": "همه ارسال ها", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "متن را به‌صورت پیش‌فرض مخفی کن" }, diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 318b80997c9..c93e64a0443 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -2677,6 +2677,10 @@ "message": "Kaikki Sendit", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Piilota teksti oletuksena" }, diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index e4c2c746f80..6106ca7ed62 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -2677,6 +2677,10 @@ "message": "Lahat ng Mga Padala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 5ee6102b550..c9dae571046 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -2677,6 +2677,10 @@ "message": "Tous les Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Masquer le texte par défaut" }, diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index fbe708b1b08..ef99d2cb211 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -2677,6 +2677,10 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ocultar texto por defecto" }, diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index b8f5ec0b0b1..72dcdb70376 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "הלוגו של Bitwarden" }, "extName": { "message": "מנהל הסיסמאות Bitwarden", @@ -2677,6 +2677,10 @@ "message": "כל הסֵנְדים", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "מספר הגישות המרבי הושג", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "הסתר טקסט כברירת מחדל" }, diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index a283bd6f438..06dd2c49390 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -2677,6 +2677,10 @@ "message": "सभी Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index bac097fe112..f94a2e60b79 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -2677,6 +2677,10 @@ "message": "Svi Sendovi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Zadano sakrij tekst" }, diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 0572fc77789..55c2ec433c8 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -2677,6 +2677,10 @@ "message": "Összes Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "A maximális hozzáférések száma elérésre került.", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Szöveg elrejtése alapértelmezetten" }, diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 7f8fea33a2e..ec27c6b6328 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -2677,6 +2677,10 @@ "message": "Semua Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Sembunyikan teks secara bawaan" }, diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index c733192493a..77be022e58c 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -2677,6 +2677,10 @@ "message": "Tutti i Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Nascondi testo come default" }, diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index b4f1fa0132e..e66d0a2454c 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -2677,6 +2677,10 @@ "message": "すべての Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "デフォルトでテキストを隠す" }, diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 21ff426dfc5..afd301305ff 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 2fa7ea8013e..6065dec254f 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -2677,6 +2677,10 @@ "message": "ಎಲ್ಲಾ ಕಳುಹಿಸುತ್ತದೆ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 2655ef688e7..ef3402dc496 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -2677,6 +2677,10 @@ "message": "모든 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "기본적으로 텍스트 숨기기" }, diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 07e26a862b3..82952be642c 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -2677,6 +2677,10 @@ "message": "Visi siuntimai", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 5a8a82c16ed..23e6d015853 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -2677,6 +2677,10 @@ "message": "Visi Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Pēc noklusējuma paslēpt tekstu" }, diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index a56fb396435..cb75a35bf7c 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 416862859c9..c269bef17b6 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 504f98fe44a..3f23ead23e6 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -2677,6 +2677,10 @@ "message": "Alle Send-er", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Skjul tekst som standard" }, diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 4d60287a78e..b98814df45e 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -2677,6 +2677,10 @@ "message": "Alle Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maximum aantal keren benaderd", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Tekst standaard verbergen" }, diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 32d6799493e..80119b2be25 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -2677,6 +2677,10 @@ "message": "Wszystkie wysyłki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maksymalna liczba dostępów została osiągnięta", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Domyślnie ukryj tekst" }, diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 7d70debf128..56a4ce3018b 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -2677,6 +2677,10 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ocultar texto por padrão" }, diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 67db6178ace..50a2aeb20bd 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -2677,6 +2677,10 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Número máximo de acessos atingido", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ocultar texto por predefinição" }, diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 3ed8e876d6f..375f97ef265 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -2677,6 +2677,10 @@ "message": "Toate Send-urile", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index d7f901bf04f..a6c16ca01ce 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -2677,6 +2677,10 @@ "message": "Все Send’ы", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Достигнут максимум обращений", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Скрыть текст по умолчанию" }, diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 2e20f5dc4ce..1b024ddaae8 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -2677,6 +2677,10 @@ "message": "සියලු යවයි", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 8d6f193168e..d25ea28a614 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -2677,6 +2677,10 @@ "message": "Všetky Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Bol dosiahnutý maximálny počet prístupov", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "V predvolenom nastavení skryť text" }, diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 224f31076b8..703563523ac 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -2677,6 +2677,10 @@ "message": "Vse pošiljke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index 54371488c0d..59d72b93173 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -2677,6 +2677,10 @@ "message": "Све „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Достигнут максималан број приступа", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Сакриј текст подразумевано" }, diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 10b9d965cc8..1fcd208136e 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -2677,6 +2677,10 @@ "message": "Alla Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index feb5a7706f3..29223942fd6 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -2677,6 +2677,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index f18f2ac9ba9..87e5be28d79 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -3,7 +3,7 @@ "message": "bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "โลโก้ Bitwarden" }, "extName": { "message": "Bitwarden Password Manager", @@ -2677,6 +2677,10 @@ "message": "Send ทั้งหมด", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index ded4568adaa..a72e3593ff9 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -2677,6 +2677,10 @@ "message": "Tüm Send'ler", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maksimum erişim sayısına ulaşıldı", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Metni varsayılan olarak gizle" }, diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 952c223f262..01c4fa2d73b 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -2677,6 +2677,10 @@ "message": "Усі відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Типово приховувати текст" }, diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 4db1394023d..fcbcb8f7b6d 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -2677,6 +2677,10 @@ "message": "Tất cả mục Gửi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 18cbc9c10d3..e370f7749f6 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -2677,6 +2677,10 @@ "message": "所有 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "已达最大访问次数", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "默认隐藏文本" }, @@ -4558,7 +4562,7 @@ "message": "获取桌面 App" }, "getTheDesktopAppDesc": { - "message": "无需使用浏览器访问您的密码库,在桌面 App 和浏览器扩展中同时设置生物识别解锁,即可实现快速解锁。" + "message": "无需使用浏览器访问您的密码库,然后在桌面 App 和浏览器扩展中同时设置生物识别解锁,即可实现快速解锁。" }, "downloadFromBitwardenNow": { "message": "立即从 bitwarden.com 下载" @@ -4971,7 +4975,7 @@ "message": "自定义超时时间最小为 1 分钟。" }, "additionalContentAvailable": { - "message": "有更多内容可用" + "message": "更多内容可用" }, "fileSavedToDevice": { "message": "文件已保存到设备。可以在设备下载中进行管理。" diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 639469b7cd4..ba8b44dc071 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -2677,6 +2677,10 @@ "message": "所有 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "默認隱藏文字" }, From 4c3c1969b55120244a0739417fe270fd868efc4a Mon Sep 17 00:00:00 2001 From: Github Actions <actions@github.com> Date: Mon, 2 Jun 2025 15:17:52 +0000 Subject: [PATCH 32/33] Bumped client version(s) --- apps/web/package.json | 2 +- package-lock.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 6df2974129e..cbeb012169a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/web-vault", - "version": "2025.5.1", + "version": "2025.6.0", "scripts": { "build:oss": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:bit": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-web/webpack.config.js", diff --git a/package-lock.json b/package-lock.json index fbb4860eb64..0807ea79775 100644 --- a/package-lock.json +++ b/package-lock.json @@ -248,7 +248,7 @@ }, "apps/web": { "name": "@bitwarden/web-vault", - "version": "2025.5.1" + "version": "2025.6.0" }, "libs/admin-console": { "name": "@bitwarden/admin-console", From 37e13050a565c024068aa0e95bf2c537ce47e99b Mon Sep 17 00:00:00 2001 From: Daniel Riera <driera@livefront.com> Date: Mon, 2 Jun 2025 11:24:47 -0400 Subject: [PATCH 33/33] PM-16649 (#14656) --- .../fido2/background/fido2.background.spec.ts | 22 +------------------ .../fido2/background/fido2.background.ts | 13 +---------- .../fido2-page-script-append.mv2.spec.ts | 6 ++--- .../content/fido2-page-script-append.mv2.ts | 17 -------------- .../fido2/enums/fido2-content-script.enum.ts | 1 - .../browser/src/background/main.background.ts | 1 - apps/browser/webpack.config.js | 2 -- libs/common/src/enums/feature-flag.enum.ts | 2 -- 8 files changed, 5 insertions(+), 59 deletions(-) delete mode 100644 apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts diff --git a/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts b/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts index 144af0c0a35..752851b3d37 100644 --- a/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts +++ b/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts @@ -3,7 +3,6 @@ import { BehaviorSubject } from "rxjs"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { Fido2ActiveRequestManager } from "@bitwarden/common/platform/abstractions/fido2/fido2-active-request-manager.abstraction"; import { AssertCredentialParams, @@ -60,7 +59,6 @@ describe("Fido2Background", () => { let fido2ClientService!: MockProxy<Fido2ClientService<BrowserFido2ParentWindowReference>>; let vaultSettingsService!: MockProxy<VaultSettingsService>; let scriptInjectorServiceMock!: MockProxy<BrowserScriptInjectorService>; - let configServiceMock!: MockProxy<ConfigService>; let enablePasskeysMock$!: BehaviorSubject<boolean>; let activeAccountStatusMock$: BehaviorSubject<AuthenticationStatus>; let authServiceMock!: MockProxy<AuthService>; @@ -80,7 +78,6 @@ describe("Fido2Background", () => { abortController = mock<AbortController>(); registeredContentScripsMock = mock<browser.contentScripts.RegisteredContentScript>(); scriptInjectorServiceMock = mock<BrowserScriptInjectorService>(); - configServiceMock = mock<ConfigService>(); enablePasskeysMock$ = new BehaviorSubject(true); vaultSettingsService.enablePasskeys$ = enablePasskeysMock$; @@ -95,7 +92,6 @@ describe("Fido2Background", () => { fido2ClientService, vaultSettingsService, scriptInjectorServiceMock, - configServiceMock, authServiceMock, ); fido2Background["abortManager"] = abortManagerMock; @@ -186,7 +182,7 @@ describe("Fido2Background", () => { expect(scriptInjectorServiceMock.inject).toHaveBeenCalledWith({ tabId: tabMock.id, injectDetails: sharedScriptInjectionDetails, - mv2Details: { file: Fido2ContentScript.PageScriptAppend }, + mv2Details: { file: Fido2ContentScript.PageScriptDelayAppend }, mv3Details: { file: Fido2ContentScript.PageScript, world: "MAIN" }, }); expect(scriptInjectorServiceMock.inject).toHaveBeenCalledWith({ @@ -202,22 +198,6 @@ describe("Fido2Background", () => { enablePasskeysMock$.next(true); await flushPromises(); - expect(BrowserApi.registerContentScriptsMv2).toHaveBeenCalledWith({ - js: [ - { file: Fido2ContentScript.PageScriptAppend }, - { file: Fido2ContentScript.ContentScript }, - ], - ...sharedRegistrationOptions, - }); - }); - - it("registers the page-script-delay-append-mv2.js content script when the DelayFido2PageScriptInitWithinMv2 feature flag is enabled", async () => { - configServiceMock.getFeatureFlag.mockResolvedValue(true); - isManifestVersionSpy.mockImplementation((manifestVersion) => manifestVersion === 2); - - enablePasskeysMock$.next(true); - await flushPromises(); - expect(BrowserApi.registerContentScriptsMv2).toHaveBeenCalledWith({ js: [ { file: Fido2ContentScript.PageScriptDelayAppend }, diff --git a/apps/browser/src/autofill/fido2/background/fido2.background.ts b/apps/browser/src/autofill/fido2/background/fido2.background.ts index e20a0584d20..788c98ca85b 100644 --- a/apps/browser/src/autofill/fido2/background/fido2.background.ts +++ b/apps/browser/src/autofill/fido2/background/fido2.background.ts @@ -5,8 +5,6 @@ import { pairwise } from "rxjs/operators"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { Fido2ActiveRequestManager } from "@bitwarden/common/platform/abstractions/fido2/fido2-active-request-manager.abstraction"; import { AssertCredentialParams, @@ -60,7 +58,6 @@ export class Fido2Background implements Fido2BackgroundInterface { private fido2ClientService: Fido2ClientService<BrowserFido2ParentWindowReference>, private vaultSettingsService: VaultSettingsService, private scriptInjectorService: ScriptInjectorService, - private configService: ConfigService, private authService: AuthService, ) {} @@ -403,14 +400,6 @@ export class Fido2Background implements Fido2BackgroundInterface { * delayed append script if the associated feature flag is enabled. */ private async getFido2PageScriptAppendFileName() { - const shouldDelayInit = await this.configService.getFeatureFlag( - FeatureFlag.DelayFido2PageScriptInitWithinMv2, - ); - - if (shouldDelayInit) { - return Fido2ContentScript.PageScriptDelayAppend; - } - - return Fido2ContentScript.PageScriptAppend; + return Fido2ContentScript.PageScriptDelayAppend; } } diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts index 69e17d26fe5..b444c967080 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts @@ -24,7 +24,7 @@ describe("FIDO2 page-script for manifest v2", () => { // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./fido2-page-script-append.mv2"); + require("./fido2-page-script-delay-append.mv2.ts"); expect(window.document.createElement).not.toHaveBeenCalled(); }); @@ -37,7 +37,7 @@ describe("FIDO2 page-script for manifest v2", () => { // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./fido2-page-script-append.mv2"); + require("./fido2-page-script-delay-append.mv2.ts"); expect(window.document.createElement).toHaveBeenCalledWith("script"); expect(chrome.runtime.getURL).toHaveBeenCalledWith(Fido2ContentScript.PageScript); @@ -54,7 +54,7 @@ describe("FIDO2 page-script for manifest v2", () => { // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./fido2-page-script-append.mv2"); + require("./fido2-page-script-delay-append.mv2.ts"); expect(window.document.createElement).toHaveBeenCalledWith("script"); expect(chrome.runtime.getURL).toHaveBeenCalledWith(Fido2ContentScript.PageScript); diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts deleted file mode 100644 index f835d2f175b..00000000000 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This script handles injection of the FIDO2 override page script into the document. - * This is required for manifest v2, but will be removed when we migrate fully to manifest v3. - */ -(function (globalContext) { - if (globalContext.document.contentType !== "text/html") { - return; - } - - const script = globalContext.document.createElement("script"); - script.src = chrome.runtime.getURL("content/fido2-page-script.js"); - script.async = false; - - const scriptInsertionPoint = - globalContext.document.head || globalContext.document.documentElement; - scriptInsertionPoint.prepend(script); -})(globalThis); diff --git a/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts b/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts index 9d9189c1623..eb20ff5f69c 100644 --- a/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts +++ b/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts @@ -1,6 +1,5 @@ export const Fido2ContentScript = { PageScript: "content/fido2-page-script.js", - PageScriptAppend: "content/fido2-page-script-append-mv2.js", PageScriptDelayAppend: "content/fido2-page-script-delay-append-mv2.js", ContentScript: "content/fido2-content-script.js", } as const; diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index a724f857cd1..6ae6f7f7eb7 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -1156,7 +1156,6 @@ export default class MainBackground { this.fido2ClientService, this.vaultSettingsService, this.scriptInjectorService, - this.configService, this.authService, ); diff --git a/apps/browser/webpack.config.js b/apps/browser/webpack.config.js index 6d9113be7ed..e4f60aaf17a 100644 --- a/apps/browser/webpack.config.js +++ b/apps/browser/webpack.config.js @@ -324,8 +324,6 @@ if (manifestVersion == 2) { // Manifest V2 background pages can be run through the regular build pipeline. // Since it's a standard webpage. mainConfig.entry.background = "./src/platform/background.ts"; - mainConfig.entry["content/fido2-page-script-append-mv2"] = - "./src/autofill/fido2/content/fido2-page-script-append.mv2.ts"; mainConfig.entry["content/fido2-page-script-delay-append-mv2"] = "./src/autofill/fido2/content/fido2-page-script-delay-append.mv2.ts"; diff --git a/libs/common/src/enums/feature-flag.enum.ts b/libs/common/src/enums/feature-flag.enum.ts index 696f7028159..b3b8cc99926 100644 --- a/libs/common/src/enums/feature-flag.enum.ts +++ b/libs/common/src/enums/feature-flag.enum.ts @@ -21,7 +21,6 @@ export enum FeatureFlag { /* Autofill */ BlockBrowserInjectionsByDomain = "block-browser-injections-by-domain", - DelayFido2PageScriptInitWithinMv2 = "delay-fido2-page-script-init-within-mv2", EnableNewCardCombinedExpiryAutofill = "enable-new-card-combined-expiry-autofill", IdpAutoSubmitLogin = "idp-auto-submit-login", NotificationRefresh = "notification-refresh", @@ -87,7 +86,6 @@ export const DefaultFeatureFlagValue = { /* Autofill */ [FeatureFlag.BlockBrowserInjectionsByDomain]: FALSE, - [FeatureFlag.DelayFido2PageScriptInitWithinMv2]: FALSE, [FeatureFlag.EnableNewCardCombinedExpiryAutofill]: FALSE, [FeatureFlag.IdpAutoSubmitLogin]: FALSE, [FeatureFlag.NotificationRefresh]: FALSE,