From 323f0775fd3d2951e9fe31eab4cee417cb923c17 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 16 May 2025 09:14:21 +0200 Subject: [PATCH 01/29] Add bit-web to angular.json (#14798) Bit-web needs to exist in angular.json for migrations to accurately capture those files. --- angular.json | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/angular.json b/angular.json index 665d810cf4e..87ee7dc57b2 100644 --- a/angular.json +++ b/angular.json @@ -6,6 +6,32 @@ "analytics": false }, "projects": { + "bit-web": { + "projectType": "application", + "schematics": { + "@schematics/angular:application": { + "strict": true + } + }, + "root": "bitwarden_license/bit-web", + "sourceRoot": "bitwarden_license/bit-web/src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/web", + "index": "apps/web/src/index.html", + "main": "bitwarden_license/bit-web/src/app/main.ts", + "polyfills": "apps/web/src/polyfills.ts", + "tsConfig": "bitwarden_license/bit-web/tsconfig.json", + "assets": ["apps/web/src/favicon.ico"], + "styles": [], + "scripts": [] + } + } + } + }, "web": { "projectType": "application", "schematics": { @@ -22,8 +48,8 @@ "options": { "outputPath": "dist/web", "index": "apps/web/src/index.html", - "main": "apps/web/src/app/main.ts", - "polyfills": "apps/web/src/app/polyfills.ts", + "main": "apps/web/src/main.ts", + "polyfills": "apps/web/src/polyfills.ts", "tsConfig": "apps/web/tsconfig.json", "assets": ["apps/web/src/favicon.ico"], "styles": [], From 499715cac3db74ce13df9a7ae9b4b0985d457466 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 16 May 2025 09:23:38 +0200 Subject: [PATCH 02/29] Upgrade typescript to 5.5 (#14794) Typescript 5.5 is supported by our existing Angular version and the next major. Since there are some breaking changes we're creating a separate PR to handle this upgrade and tackling the breaking changes. TS seems to have changed how they type infer boolean conditions and it infers into type is which means the overloaded function has a different signature. Explicitly marking the return type as boolean makes the TS compiler happy without the behaviour changing. --- .../organizations/settings/two-factor-setup.component.ts | 2 +- .../settings/two-factor/two-factor-setup.component.ts | 2 +- package-lock.json | 9 ++++----- package.json | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts b/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts index d14e912f83e..020a16dd932 100644 --- a/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts +++ b/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts @@ -119,7 +119,7 @@ export class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent impleme return this.apiService.getTwoFactorOrganizationProviders(this.organizationId); } - protected filterProvider(type: TwoFactorProviderType) { + protected filterProvider(type: TwoFactorProviderType): boolean { return type !== TwoFactorProviderType.OrganizationDuo; } } diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts index d240dc467ae..88c9eea2cb0 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup.component.ts @@ -273,7 +273,7 @@ export class TwoFactorSetupComponent implements OnInit, OnDestroy { return this.apiService.getTwoFactorProviders(); } - protected filterProvider(type: TwoFactorProviderType) { + protected filterProvider(type: TwoFactorProviderType): boolean { return type === TwoFactorProviderType.OrganizationDuo; } diff --git a/package-lock.json b/package-lock.json index 5bb5dc6e852..96cd9c0444a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -172,7 +172,7 @@ "ts-loader": "9.5.2", "tsconfig-paths-webpack-plugin": "4.2.0", "type-fest": "2.19.0", - "typescript": "5.4.2", + "typescript": "5.5.4", "typescript-eslint": "8.31.0", "typescript-strict-plugin": "2.4.4", "url": "0.11.4", @@ -36642,11 +36642,10 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index b1af1abe606..879dfd26eba 100644 --- a/package.json +++ b/package.json @@ -55,10 +55,10 @@ "@storybook/addon-essentials": "8.6.12", "@storybook/addon-interactions": "8.6.12", "@storybook/addon-links": "8.6.12", - "@storybook/test-runner": "0.22.0", "@storybook/addon-themes": "8.6.12", "@storybook/angular": "8.6.12", "@storybook/manager-api": "8.6.12", + "@storybook/test-runner": "0.22.0", "@storybook/theming": "8.6.12", "@storybook/web-components-webpack5": "8.6.12", "@types/argon2-browser": "1.18.4", @@ -138,7 +138,7 @@ "ts-loader": "9.5.2", "tsconfig-paths-webpack-plugin": "4.2.0", "type-fest": "2.19.0", - "typescript": "5.4.2", + "typescript": "5.5.4", "typescript-eslint": "8.31.0", "typescript-strict-plugin": "2.4.4", "url": "0.11.4", From e6109d723d405964145438c53f97690cf56831a3 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 16 May 2025 09:48:02 +0200 Subject: [PATCH 03/29] Cleanup unowned loose components (#14703) Removes "unowned components" from loose-component module as we'd like to clean it up. --- .../environment-selector.component.ts | 5 +++- .../environment-selector.module.ts | 12 ---------- .../app/layouts/frontend-layout.component.ts | 6 ++++- .../app/settings/domain-rules.component.ts | 6 ++++- .../src/app/settings/preferences.component.ts | 7 +++++- .../src/app/shared/loose-components.module.ts | 23 ++++--------------- 6 files changed, 25 insertions(+), 34 deletions(-) delete mode 100644 apps/web/src/app/components/environment-selector/environment-selector.module.ts diff --git a/apps/web/src/app/components/environment-selector/environment-selector.component.ts b/apps/web/src/app/components/environment-selector/environment-selector.component.ts index 3f71a0d719a..ba0f5097b5b 100644 --- a/apps/web/src/app/components/environment-selector/environment-selector.component.ts +++ b/apps/web/src/app/components/environment-selector/environment-selector.component.ts @@ -10,10 +10,13 @@ import { import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { SharedModule } from "../../shared"; + @Component({ selector: "environment-selector", templateUrl: "environment-selector.component.html", - standalone: false, + standalone: true, + imports: [SharedModule], }) export class EnvironmentSelectorComponent implements OnInit { constructor( diff --git a/apps/web/src/app/components/environment-selector/environment-selector.module.ts b/apps/web/src/app/components/environment-selector/environment-selector.module.ts deleted file mode 100644 index 1326d4c9cae..00000000000 --- a/apps/web/src/app/components/environment-selector/environment-selector.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from "@angular/core"; - -import { SharedModule } from "../../../app/shared"; - -import { EnvironmentSelectorComponent } from "./environment-selector.component"; - -@NgModule({ - imports: [SharedModule], - declarations: [EnvironmentSelectorComponent], - exports: [EnvironmentSelectorComponent], -}) -export class EnvironmentSelectorModule {} diff --git a/apps/web/src/app/layouts/frontend-layout.component.ts b/apps/web/src/app/layouts/frontend-layout.component.ts index 9e22ab6d43e..5ccb39b1dc9 100644 --- a/apps/web/src/app/layouts/frontend-layout.component.ts +++ b/apps/web/src/app/layouts/frontend-layout.component.ts @@ -4,10 +4,14 @@ import { Component, OnDestroy, OnInit } from "@angular/core"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { EnvironmentSelectorComponent } from "../components/environment-selector/environment-selector.component"; +import { SharedModule } from "../shared"; + @Component({ selector: "app-frontend-layout", templateUrl: "frontend-layout.component.html", - standalone: false, + standalone: true, + imports: [SharedModule, EnvironmentSelectorComponent], }) export class FrontendLayoutComponent implements OnInit, OnDestroy { version: string; diff --git a/apps/web/src/app/settings/domain-rules.component.ts b/apps/web/src/app/settings/domain-rules.component.ts index 2d570f4aeb4..7656222cfd2 100644 --- a/apps/web/src/app/settings/domain-rules.component.ts +++ b/apps/web/src/app/settings/domain-rules.component.ts @@ -9,10 +9,14 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { HeaderModule } from "../layouts/header/header.module"; +import { SharedModule } from "../shared"; + @Component({ selector: "app-domain-rules", templateUrl: "domain-rules.component.html", - standalone: false, + standalone: true, + imports: [SharedModule, HeaderModule], }) export class DomainRulesComponent implements OnInit { loading = true; diff --git a/apps/web/src/app/settings/preferences.component.ts b/apps/web/src/app/settings/preferences.component.ts index 9ab23c76795..c9efd059271 100644 --- a/apps/web/src/app/settings/preferences.component.ts +++ b/apps/web/src/app/settings/preferences.component.ts @@ -14,6 +14,7 @@ import { tap, } from "rxjs"; +import { VaultTimeoutInputComponent } from "@bitwarden/auth/angular"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { getFirstPolicy } from "@bitwarden/common/admin-console/services/policy/default-policy.service"; @@ -34,10 +35,14 @@ import { Utils } from "@bitwarden/common/platform/misc/utils"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { DialogService } from "@bitwarden/components"; +import { HeaderModule } from "../layouts/header/header.module"; +import { SharedModule } from "../shared"; + @Component({ selector: "app-preferences", templateUrl: "preferences.component.html", - standalone: false, + standalone: true, + imports: [SharedModule, HeaderModule, VaultTimeoutInputComponent], }) export class PreferencesComponent implements OnInit, OnDestroy { // For use in template diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts index ab6c6cc5d72..e59633ee499 100644 --- a/apps/web/src/app/shared/loose-components.module.ts +++ b/apps/web/src/app/shared/loose-components.module.ts @@ -40,20 +40,18 @@ import { VerifyRecoverDeleteComponent } from "../auth/verify-recover-delete.comp import { SponsoredFamiliesComponent } from "../billing/settings/sponsored-families.component"; import { SponsoringOrgRowComponent } from "../billing/settings/sponsoring-org-row.component"; import { DynamicAvatarComponent } from "../components/dynamic-avatar.component"; +// eslint-disable-next-line no-restricted-imports -- Temporarily disabled until DIRT refactors these out of this module import { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from "../dirt/reports/pages/organizations/exposed-passwords-report.component"; +// eslint-disable-next-line no-restricted-imports -- Temporarily disabled until DIRT refactors these out of this module import { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from "../dirt/reports/pages/organizations/inactive-two-factor-report.component"; +// eslint-disable-next-line no-restricted-imports -- Temporarily disabled until DIRT refactors these out of this module import { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from "../dirt/reports/pages/organizations/reused-passwords-report.component"; +// eslint-disable-next-line no-restricted-imports -- Temporarily disabled until DIRT refactors these out of this module import { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from "../dirt/reports/pages/organizations/unsecured-websites-report.component"; +// eslint-disable-next-line no-restricted-imports -- Temporarily disabled until DIRT refactors these out of this module import { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from "../dirt/reports/pages/organizations/weak-passwords-report.component"; import { RemovePasswordComponent } from "../key-management/key-connector/remove-password.component"; -import { FrontendLayoutComponent } from "../layouts/frontend-layout.component"; import { HeaderModule } from "../layouts/header/header.module"; -import { ProductSwitcherModule } from "../layouts/product-switcher/product-switcher.module"; -import { UserLayoutComponent } from "../layouts/user-layout.component"; -import { DomainRulesComponent } from "../settings/domain-rules.component"; -import { PreferencesComponent } from "../settings/preferences.component"; -/* eslint no-restricted-imports: "off" -- Temporarily disabled until Tools refactors these out of this module */ -/* eslint no-restricted-imports: "error" */ import { PremiumBadgeComponent } from "../vault/components/premium-badge.component"; import { FolderAddEditComponent } from "../vault/individual-vault/folder-add-edit.component"; import { OrganizationBadgeModule } from "../vault/individual-vault/organization-badge/organization-badge.module"; @@ -61,7 +59,6 @@ import { PipesModule } from "../vault/individual-vault/pipes/pipes.module"; import { PurgeVaultComponent } from "../vault/settings/purge-vault.component"; import { FreeBitwardenFamiliesComponent } from "./../billing/members/free-bitwarden-families.component"; -import { EnvironmentSelectorModule } from "./../components/environment-selector/environment-selector.module"; import { AccountFingerprintComponent } from "./components/account-fingerprint/account-fingerprint.component"; import { SharedModule } from "./shared.module"; @@ -70,11 +67,9 @@ import { SharedModule } from "./shared.module"; @NgModule({ imports: [ SharedModule, - ProductSwitcherModule, UserVerificationModule, ChangeKdfModule, DynamicAvatarComponent, - EnvironmentSelectorModule, AccountFingerprintComponent, OrganizationBadgeModule, PipesModule, @@ -85,7 +80,6 @@ import { SharedModule } from "./shared.module"; NavigationModule, HeaderModule, OrganizationLayoutComponent, - UserLayoutComponent, VerifyRecoverDeleteOrgComponent, VaultTimeoutInputComponent, ], @@ -96,14 +90,12 @@ import { SharedModule } from "./shared.module"; ChangeEmailComponent, DeauthorizeSessionsComponent, DeleteAccountDialogComponent, - DomainRulesComponent, EmergencyAccessAddEditComponent, EmergencyAccessComponent, EmergencyAccessConfirmComponent, EmergencyAccessTakeoverComponent, EmergencyAccessViewComponent, FolderAddEditComponent, - FrontendLayoutComponent, OrgEventsComponent, OrgExposedPasswordsReportComponent, OrgInactiveTwoFactorReportComponent, @@ -111,7 +103,6 @@ import { SharedModule } from "./shared.module"; OrgUnsecuredWebsitesReportComponent, OrgUserConfirmComponent, OrgWeakPasswordsReportComponent, - PreferencesComponent, PremiumBadgeComponent, ProfileComponent, ChangeAvatarDialogComponent, @@ -139,7 +130,6 @@ import { SharedModule } from "./shared.module"; ChangeEmailComponent, DeauthorizeSessionsComponent, DeleteAccountDialogComponent, - DomainRulesComponent, DynamicAvatarComponent, EmergencyAccessAddEditComponent, EmergencyAccessComponent, @@ -147,7 +137,6 @@ import { SharedModule } from "./shared.module"; EmergencyAccessTakeoverComponent, EmergencyAccessViewComponent, FolderAddEditComponent, - FrontendLayoutComponent, OrganizationLayoutComponent, OrgEventsComponent, OrgExposedPasswordsReportComponent, @@ -156,7 +145,6 @@ import { SharedModule } from "./shared.module"; OrgUnsecuredWebsitesReportComponent, OrgUserConfirmComponent, OrgWeakPasswordsReportComponent, - PreferencesComponent, PremiumBadgeComponent, ProfileComponent, ChangeAvatarDialogComponent, @@ -173,7 +161,6 @@ import { SharedModule } from "./shared.module"; SponsoringOrgRowComponent, UpdateTempPasswordComponent, UpdatePasswordComponent, - UserLayoutComponent, VerifyEmailTokenComponent, VerifyRecoverDeleteComponent, HeaderModule, From df8d184889ef9accf5d07c3d740eb976d30dffea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20=C3=85berg?= Date: Fri, 16 May 2025 11:02:12 +0200 Subject: [PATCH 04/29] PM-21553: Added support for credential.toJSON() (#14734) * Added support for credential.toJSON() * Changed to import type --- .../autofill/fido2/utils/webauthn-utils.ts | 2 + .../platform/services/fido2/fido2-utils.ts | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts b/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts index c8bcf5faa4b..0cccd91876d 100644 --- a/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts +++ b/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts @@ -88,6 +88,7 @@ export class WebauthnUtils { getClientExtensionResults: () => ({ credProps: result.extensions.credProps, }), + toJSON: () => Fido2Utils.createResultToJson(result), } as PublicKeyCredential; // Modify prototype chains to fix `instanceof` calls. @@ -134,6 +135,7 @@ export class WebauthnUtils { } as AuthenticatorAssertionResponse, getClientExtensionResults: () => ({}), authenticatorAttachment: "platform", + toJSON: () => Fido2Utils.getResultToJson(result), } as PublicKeyCredential; // Modify prototype chains to fix `instanceof` calls. diff --git a/libs/common/src/platform/services/fido2/fido2-utils.ts b/libs/common/src/platform/services/fido2/fido2-utils.ts index b9f3c8f8c48..6413eeade04 100644 --- a/libs/common/src/platform/services/fido2/fido2-utils.ts +++ b/libs/common/src/platform/services/fido2/fido2-utils.ts @@ -1,6 +1,45 @@ // FIXME: Update this file to be type safe and remove this and next line +import type { + AssertCredentialResult, + CreateCredentialResult, +} from "../../abstractions/fido2/fido2-client.service.abstraction"; + // @ts-strict-ignore export class Fido2Utils { + static createResultToJson(result: CreateCredentialResult): any { + return { + id: result.credentialId, + rawId: result.credentialId, + response: { + clientDataJSON: result.clientDataJSON, + authenticatorData: result.authData, + transports: result.transports, + publicKey: result.publicKey, + publicKeyAlgorithm: result.publicKeyAlgorithm, + attestationObject: result.attestationObject, + }, + authenticatorAttachment: "platform", + clientExtensionResults: result.extensions, + type: "public-key", + }; + } + + static getResultToJson(result: AssertCredentialResult): any { + return { + id: result.credentialId, + rawId: result.credentialId, + response: { + clientDataJSON: result.clientDataJSON, + authenticatorData: result.authenticatorData, + signature: result.signature, + userHandle: result.userHandle, + }, + authenticatorAttachment: "platform", + clientExtensionResults: {}, + type: "public-key", + }; + } + static bufferToString(bufferSource: BufferSource): string { return Fido2Utils.fromBufferToB64(Fido2Utils.bufferSourceToUint8Array(bufferSource)) .replace(/\+/g, "-") From 07659184ad40b99a9b97ce70b6403e07f6914a4b Mon Sep 17 00:00:00 2001 From: Vicki League Date: Fri, 16 May 2025 09:17:42 -0400 Subject: [PATCH 05/29] [CL-627] Allow menu to open above trigger without blocking trigger (#14675) --- .../src/menu/menu-trigger-for.directive.ts | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/libs/components/src/menu/menu-trigger-for.directive.ts b/libs/components/src/menu/menu-trigger-for.directive.ts index 96d430c5e6a..bc174d14d23 100644 --- a/libs/components/src/menu/menu-trigger-for.directive.ts +++ b/libs/components/src/menu/menu-trigger-for.directive.ts @@ -16,11 +16,7 @@ import { filter, mergeWith } from "rxjs/operators"; import { MenuComponent } from "./menu.component"; -@Directive({ - selector: "[bitMenuTriggerFor]", - exportAs: "menuTrigger", - standalone: true, -}) +@Directive({ selector: "[bitMenuTriggerFor]", exportAs: "menuTrigger", standalone: true }) export class MenuTriggerForDirective implements OnDestroy { @HostBinding("attr.aria-expanded") isOpen = false; @HostBinding("attr.aria-haspopup") get hasPopup(): "menu" | "dialog" { @@ -42,18 +38,10 @@ export class MenuTriggerForDirective implements OnDestroy { .position() .flexibleConnectedTo(this.elementRef) .withPositions([ - { - originX: "start", - originY: "bottom", - overlayX: "start", - overlayY: "top", - }, - { - originX: "end", - originY: "bottom", - overlayX: "end", - overlayY: "top", - }, + { originX: "start", originY: "bottom", overlayX: "start", overlayY: "top" }, + { originX: "end", originY: "bottom", overlayX: "end", overlayY: "top" }, + { originX: "start", originY: "top", overlayX: "start", overlayY: "bottom" }, + { originX: "end", originY: "top", overlayX: "end", overlayY: "bottom" }, ]) .withLockedPosition(true) .withFlexibleDimensions(false) From 3b26713b3aafdb6edb202466d51771e5bd5f3ce2 Mon Sep 17 00:00:00 2001 From: Miles Blackwood Date: Fri, 16 May 2025 09:17:57 -0400 Subject: [PATCH 06/29] Replace fit-content with auto. (#14820) --- .../content/components/notification/confirmation/body.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/browser/src/autofill/content/components/notification/confirmation/body.ts b/apps/browser/src/autofill/content/components/notification/confirmation/body.ts index 8286202b498..8bf8f7cbd93 100644 --- a/apps/browser/src/autofill/content/components/notification/confirmation/body.ts +++ b/apps/browser/src/autofill/content/components/notification/confirmation/body.ts @@ -63,7 +63,7 @@ export function NotificationConfirmationBody({ const iconContainerStyles = (error?: string) => css` > svg { width: ${!error ? "50px" : "40px"}; - height: fit-content; + height: auto; } `; const notificationConfirmationBodyStyles = ({ theme }: { theme: Theme }) => css` From 5beafb876c3090443cb05433d9c5c91f6f2d55a9 Mon Sep 17 00:00:00 2001 From: tangowithfoxtrot <5676771+tangowithfoxtrot@users.noreply.github.com> Date: Fri, 16 May 2025 06:24:08 -0700 Subject: [PATCH 07/29] fix: clear clipboard on close (#14731) --- apps/desktop/src/platform/main/clipboard.main.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/platform/main/clipboard.main.ts b/apps/desktop/src/platform/main/clipboard.main.ts index 5ca6aa29529..3fdbca45822 100644 --- a/apps/desktop/src/platform/main/clipboard.main.ts +++ b/apps/desktop/src/platform/main/clipboard.main.ts @@ -1,16 +1,30 @@ -import { ipcMain } from "electron"; +import { app, ipcMain } from "electron"; import { clipboards } from "@bitwarden/desktop-napi"; import { ClipboardWriteMessage } from "../types/clipboard"; export class ClipboardMain { + lastSavedValue: string | null = null; + init() { + app.on("before-quit", async () => { + if (this.lastSavedValue == null) { + return; + } + + const clipboardNow = await clipboards.read(); + if (clipboardNow == this.lastSavedValue) { + await clipboards.write("", false); + } + }); + ipcMain.handle("clipboard.read", async (_event: any, _message: any) => { return await clipboards.read(); }); ipcMain.handle("clipboard.write", async (_event: any, message: ClipboardWriteMessage) => { + this.lastSavedValue = message.text; return await clipboards.write(message.text, message.password ?? false); }); } From 0ffc2b406ed569f51ac09631f58977629a84312c Mon Sep 17 00:00:00 2001 From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com> Date: Fri, 16 May 2025 15:22:52 +0100 Subject: [PATCH 08/29] Resolve more than one Sponsorship revoke bug (#14818) --- .../free-bitwarden-families.component.ts | 5 +++- ...ion-sponsorship-api.service.abstraction.ts | 6 +++-- .../organization-sponsorship-api.service.ts | 23 +++++++++++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) 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 dddc730168c..da5d2b54f9c 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 @@ -179,7 +179,10 @@ export class FreeBitwardenFamiliesComponent implements OnInit { return; } - await this.organizationSponsorshipApiService.deleteRevokeSponsorship(this.organizationId, true); + await this.organizationSponsorshipApiService.deleteAdminInitiatedRevokeSponsorship( + this.organizationId, + sponsorship.friendlyName, + ); this.toastService.showToast({ variant: "success", diff --git a/libs/common/src/billing/abstractions/organizations/organization-sponsorship-api.service.abstraction.ts b/libs/common/src/billing/abstractions/organizations/organization-sponsorship-api.service.abstraction.ts index 5e69f57ca19..46b11a9332c 100644 --- a/libs/common/src/billing/abstractions/organizations/organization-sponsorship-api.service.abstraction.ts +++ b/libs/common/src/billing/abstractions/organizations/organization-sponsorship-api.service.abstraction.ts @@ -11,8 +11,10 @@ export abstract class OrganizationSponsorshipApiServiceAbstraction { friendlyName?: string, ): Promise; - abstract deleteRevokeSponsorship: ( + abstract deleteRevokeSponsorship: (sponsoringOrganizationId: string) => Promise; + + abstract deleteAdminInitiatedRevokeSponsorship: ( sponsoringOrganizationId: string, - isAdminInitiated?: boolean, + sponsoredFriendlyName: string, ) => Promise; } diff --git a/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts b/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts index 99440b10dec..bba24f7ed75 100644 --- a/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts +++ b/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts @@ -44,11 +44,30 @@ export class OrganizationSponsorshipApiService ): Promise { const basePath = "/organization/sponsorship/"; const hostPath = this.platformUtilsService.isSelfHost() ? "self-hosted/" : ""; - const queryParam = `?isAdminInitiated=${isAdminInitiated}`; return await this.apiService.send( "DELETE", - basePath + hostPath + sponsoringOrganizationId + queryParam, + basePath + hostPath + sponsoringOrganizationId, + null, + true, + false, + ); + } + + async deleteAdminInitiatedRevokeSponsorship( + sponsoringOrganizationId: string, + sponsoredFriendlyName: string, + ): Promise { + const basePath = "/organization/sponsorship/"; + const hostPath = this.platformUtilsService.isSelfHost() ? "self-hosted/" : ""; + return await this.apiService.send( + "DELETE", + basePath + + hostPath + + sponsoringOrganizationId + + "/" + + encodeURIComponent(sponsoredFriendlyName) + + "/revoke", null, true, false, From 1c4ce2a9e6f73c29b09c798cbf124d5198b9c992 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 16:35:21 +0200 Subject: [PATCH 09/29] Autosync the updated translations (#14812) 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 | 90 ++++++++------- apps/desktop/src/locales/be/messages.json | 64 +++++------ apps/desktop/src/locales/bg/messages.json | 64 +++++------ 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 | 72 ++++++------ apps/desktop/src/locales/el/messages.json | 110 +++++++++---------- 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 | 66 ++++++----- 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 | 64 +++++------ 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 | 90 ++++++++------- 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 | 68 ++++++------ 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 | 66 ++++++----- 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 | 64 +++++------ 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 | 68 ++++++------ apps/desktop/src/locales/vi/messages.json | 64 +++++------ apps/desktop/src/locales/zh_CN/messages.json | 68 ++++++------ apps/desktop/src/locales/zh_TW/messages.json | 64 +++++------ 63 files changed, 1951 insertions(+), 2203 deletions(-) diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index c3127cffe00..479f8f47c1f 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Voeg Nuwe Item Toe" }, - "addNewFolder": { - "message": "Voeg Nuwe Vouer Toe" - }, "view": { "message": "Bekyk" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha-bronadres", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Laai toeganklikheidskoekie" - }, - "registerAccessibilityUser": { - "message": "Registreer as toeganklikheidsgebruiker by", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopieer en plak die skakel wat na die e-pos hier onder gestuur is" - }, - "enterhCaptchaUrl": { - "message": "Voer die bronadres in om die toeganklikheidskoekie vir hCaptcha te laai", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha-bronadres word benodig", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Ongeldige bronadres" - }, "done": { "message": "Klaar" }, - "accessibilityCookieSaved": { - "message": "Toeganklikheidskoekie is bewaar!" - }, - "noAccessibilityCookieSaved": { - "message": "Geen toeganklikheidskoekie is bewaar nie" - }, "warning": { "message": "WAARSKUWING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 d9d4241e723..510c1aa918a 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "إضافة عنصر جديد" }, - "addNewFolder": { - "message": "إضافة مجلد جديد" - }, "view": { "message": "عرض" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"كلمة مرور الملف\" و \"تأكيد كلمة مرور الملف\" غير متطابقين." }, - "hCaptchaUrl": { - "message": "رابط hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "تحميل ملف تعريف الارتباط الخاص بإمكانية الوصول" - }, - "registerAccessibilityUser": { - "message": "تسجيل كمستخدم مع إمكانية الوصول في", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "نسخ وصق الرابط المرسل إلى بريدك الإلكتروني أدناه" - }, - "enterhCaptchaUrl": { - "message": "أدخل عنوان URL لتحميل ملف تعريف الارتباط للوصول إلى hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "مطلوب عنوان hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "الرابط غير صالح" - }, "done": { "message": "تم" }, - "accessibilityCookieSaved": { - "message": "تم حفظ ملف تعريف الارتباط الخاص بإمكانية الوصول!" - }, - "noAccessibilityCookieSaved": { - "message": "لم يحفظ ملف تعريف الارتباط الخاص بإمكانية الوصول" - }, "warning": { "message": "تحذير", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "السماح" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 ed96da377ad..0f856661551 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -238,22 +238,22 @@ "message": "SSH agenti, SSH tələblərini birbaşa Bitwarden seyfinizdən imzalamağa imkan verən developerlərə yönəlmiş bir xidmətdir." }, "sshAgentPromptBehavior": { - "message": "Ask for authorization when using SSH agent" + "message": "SSH agentini istifadə edərkən səlahiyyətləndirmə üçün soruş" }, "sshAgentPromptBehaviorDesc": { - "message": "Choose how to handle SSH-agent authorization requests." + "message": "SSH agenti səlahiyyətləndirmə sorğularının necə emal ediləcəyini seçin." }, "sshAgentPromptBehaviorHelp": { - "message": "Remember SSH authorizations" + "message": "SSH səlahiyyətləndirmələrini xatırla" }, "sshAgentPromptBehaviorAlways": { - "message": "Always" + "message": "Həmişə" }, "sshAgentPromptBehaviorNever": { - "message": "Never" + "message": "Heç vaxt" }, "sshAgentPromptBehaviorRememberUntilLock": { - "message": "Remember until vault is locked" + "message": "Seyf kilidlənənə qədər xatırla" }, "premiumRequired": { "message": "Premium üzvlük lazımdır" @@ -446,10 +446,10 @@ "message": "Xana əlavə et" }, "editField": { - "message": "Edit field" + "message": "Xanaya düzəliş et" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Bu qoşmanı birdəfəlik silmək istədiyinizə əminsiniz?" }, "fieldType": { "message": "Xana növü" @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Yeni element əlavə et" }, - "addNewFolder": { - "message": "Yeni qovluq əlavə et" - }, "view": { "message": "Bax" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Fayl parolu\" və \"Fayl parolunu təsdiqlə\" uyuşmur." }, - "hCaptchaUrl": { - "message": "hCaptcha ünvanı", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Əlçatımlılıq çərəzini yüklə" - }, - "registerAccessibilityUser": { - "message": "Əlçatımlılıq istifadəçisi kimi qeydiyyatdan keçin", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "E-poçtunuza göndərilən keçidi kopyalayıb aşağıda yapışdırın" - }, - "enterhCaptchaUrl": { - "message": "hCaptcha əlçatımlılıq çərəzini yükləmək üçün ünvanı daxil edin", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha ünvanı tələb olunur", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Yararsız ünvan" - }, "done": { "message": "Bitdi" }, - "accessibilityCookieSaved": { - "message": "Əlçatımlılıq çərəzi saxlanıldı!" - }, - "noAccessibilityCookieSaved": { - "message": "Əlçatımlılıq çərəzi saxlanılmadı" - }, "warning": { "message": "XƏBƏRDARLIQ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Bilinməyən bilinməyən bir səbəbə görə biometrik kilid açma əlçatmazdır." }, + "itemDetails": { + "message": "Element detalları" + }, + "itemName": { + "message": "Element adı" + }, + "loginCredentials": { + "message": "Giriş məlumatları" + }, + "additionalOptions": { + "message": "Əlavə seçimlər" + }, + "itemHistory": { + "message": "Element tarixçəsi" + }, + "lastEdited": { + "message": "Son düzəliş" + }, + "upload": { + "message": "Yüklə" + }, "authorize": { "message": "Səlahiyyət ver" }, @@ -3719,21 +3706,30 @@ "move": { "message": "Daşı" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Bir veb sayt", "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": "daxil edin ki,", "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": "bu giriş məlumatları avto-doldurma təklifi kimi görünsün.", "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." }, @@ -3759,12 +3755,12 @@ "message": "Gəlişdirici dostu SSH müraciəti" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Açarlarınızı saxlayın və sürətli, şifrələnmiş kimlik doğrulama üçün SSH agentinə bağlayın.", "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 agenti barədə daha ətraflı", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" } diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 5b7b4aebf70..4e2441ac168 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Дадаць новы элемент" }, - "addNewFolder": { - "message": "Дадаць новую папку" - }, "view": { "message": "Прагляд" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "URL-адрас hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Загрузіць cookie спецыяльных магчымасцей" - }, - "registerAccessibilityUser": { - "message": "Зарэгістравацца ў якасці карыстальніка са спецыяльнымі магчымасцямі на", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Скапіюйце і ўстаўце адпраўленую спасылку на вашу электронную пошту" - }, - "enterhCaptchaUrl": { - "message": "Увядзіце URL-адрас для загрузкі cookie спецыяльных магчымасцей для hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Патрабуецца URL-адрас hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Памылковы URL-адрас" - }, "done": { "message": "Гатова" }, - "accessibilityCookieSaved": { - "message": "Cookie са спецыяльнымі магчымасцямі захаваны!" - }, - "noAccessibilityCookieSaved": { - "message": "Адсутнічаюць захаваныя cookie са спецыяльнымі магчымасцямі" - }, "warning": { "message": "ПАПЯРЭДЖАННЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 33cd71c1d5e..3a6054c2b52 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Добавяне на нов елемент" }, - "addNewFolder": { - "message": "Добавяне на нова папка" - }, "view": { "message": "Преглед" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Дънните в полетата „Парола на файла“ и „Потвърждаване на паролата на файла“ не съвпадат." }, - "hCaptchaUrl": { - "message": "Адрес за hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Зареждане на бисквитка за достъпност" - }, - "registerAccessibilityUser": { - "message": "Регистрирайте се като потребител на достъпност на", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Копирайте връзката изпратена на е-пощата Ви и я поставете по-долу" - }, - "enterhCaptchaUrl": { - "message": "Въведете URL за зареждане на бисквитка за достъпност за hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Адресът за hCaptcha е задължителен", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Неправилен адрес" - }, "done": { "message": "Готово" }, - "accessibilityCookieSaved": { - "message": "Бисквитката за достъпност е запазена!" - }, - "noAccessibilityCookieSaved": { - "message": "Няма запазена бисквитка за достъпност" - }, "warning": { "message": "ВНИМАНИЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Отключването с биометрични данни не е налично по неизвестна причина." }, + "itemDetails": { + "message": "Подробности за елемента" + }, + "itemName": { + "message": "Име на елемента" + }, + "loginCredentials": { + "message": "Данни за вписване" + }, + "additionalOptions": { + "message": "Допълнителни настройки" + }, + "itemHistory": { + "message": "История на елемента" + }, + "lastEdited": { + "message": "Последна промяна" + }, + "upload": { + "message": "Качване" + }, "authorize": { "message": "Упълномощаване" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Преместване" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" }, diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index ed7f99f52c9..3ca32f51395 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "নতুন বস্তু জুড়ুন" }, - "addNewFolder": { - "message": "নতুন ফোল্ডার জুড়ুন" - }, "view": { "message": "দেখুন" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "সতর্কতা", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 0a5efded68b..4e77b51467b 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Dodaj novu stavku" }, - "addNewFolder": { - "message": "Dodajte novi folder" - }, "view": { "message": "Prikaz" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Učitaj kolačić pristupačnosti" - }, - "registerAccessibilityUser": { - "message": "Registruj se kao korisnik pristupačnosti na", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopiraj i zalijepi link poslan na e-mail u nastavku" - }, - "enterhCaptchaUrl": { - "message": "Unesi URL za učitavanje kolačića pristupačnosti za hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url je obavezan", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Neispravan Url" - }, "done": { "message": "Gotovo" }, - "accessibilityCookieSaved": { - "message": "Kolačić pristupačnosti spremljen!" - }, - "noAccessibilityCookieSaved": { - "message": "Nije spremljen kolačić pristupačnosti" - }, "warning": { "message": "UPOZORENJE", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 d95d8896a68..2f13de7c33b 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Element nou" }, - "addNewFolder": { - "message": "Carpeta nova" - }, "view": { "message": "Mostra" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Contrasenya del fitxer\" i \"Confirma contrasenya del fitxer\" no coincideixen." }, - "hCaptchaUrl": { - "message": "Url hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Carrega la galeta d'accessibilitat" - }, - "registerAccessibilityUser": { - "message": "Registreu-vos com a usuari d'accessibilitat a", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copieu i enganxeu l'enllaç enviat al vostre correu electrònic a continuació" - }, - "enterhCaptchaUrl": { - "message": "Introduïu l'URL per carregar la galeta d'accessibilitat per a hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Es requereix l'URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "URL no vàlida" - }, "done": { "message": "Fet" }, - "accessibilityCookieSaved": { - "message": "S'ha guardat la galeta d'accessibilitat!" - }, - "noAccessibilityCookieSaved": { - "message": "No s'ha guardat la galeta d'accessibilitat" - }, "warning": { "message": "ADVERTIMENT", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autoritza" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 58b986167a3..5f01551a867 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nová položka" }, - "addNewFolder": { - "message": "Nová složka" - }, "view": { "message": "Zobrazit" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Heslo souboru\" a \"Potvrzení hesla souboru\" se neshodují." }, - "hCaptchaUrl": { - "message": "URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Načíst soubory cookie pro přístupnost" - }, - "registerAccessibilityUser": { - "message": "Registrovat jako uživatele přístupnosti na", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Zkopírujte a vložte odkaz odeslaný na Váš e-mail níže" - }, - "enterhCaptchaUrl": { - "message": "Zadejte URL pro načtení cookie přístupnosti pro hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Je vyžadována adresa URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Neplatná adresa URL" - }, "done": { "message": "Hotovo" }, - "accessibilityCookieSaved": { - "message": "Cookie pro přístupnost byla uložena!" - }, - "noAccessibilityCookieSaved": { - "message": "Žádné cookies pro přístupnost nebyly uloženy" - }, "warning": { "message": "VAROVÁNÍ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometrické odemknutí je momentálně z neznámého důvodu nedostupné." }, + "itemDetails": { + "message": "Detaily položky" + }, + "itemName": { + "message": "Název položky" + }, + "loginCredentials": { + "message": "Přihlašovací údaje" + }, + "additionalOptions": { + "message": "Další volby" + }, + "itemHistory": { + "message": "Historie položky" + }, + "lastEdited": { + "message": "Naposledy upraveno" + }, + "upload": { + "message": "Nahrát" + }, "authorize": { "message": "Autorizovat" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Přesunout" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 b129c97a27a..0031d2de121 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 c7f69e12e10..c92f0caf2d1 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nyt emne" }, - "addNewFolder": { - "message": "Ny mappe" - }, "view": { "message": "Vis" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“Filadgangskode” og “Bekræft filadgangskode“ matcher ikke." }, - "hCaptchaUrl": { - "message": "hCaptcha-URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Indlæs tilgængelighedscookie" - }, - "registerAccessibilityUser": { - "message": "Registrér som tilgængelighedsbruger på", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopiér og indsæt linket, der er sendt til din e-mail, nedenfor" - }, - "enterhCaptchaUrl": { - "message": "Indtast URL for at indlæse tilgængelighedscookie til hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha-URL er obligatorisk", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Ugyldig URL" - }, "done": { "message": "Udført" }, - "accessibilityCookieSaved": { - "message": "Tilgængelighedscookie gemt!" - }, - "noAccessibilityCookieSaved": { - "message": "Ingen tilgængelighedscookie gemt" - }, "warning": { "message": "ADVARSEL", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometrisk oplåsning er p.t. utilgængelig grundet en ukendt årsag." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Godkend" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 7b1ae3521e3..5a01344185a 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -238,13 +238,13 @@ "message": "Der SSH-Agent ist ein Dienst, der sich an Entwickler richtet, mit dem du SSH-Anfragen direkt aus deinem Bitwarden-Tresor aus signieren kannst." }, "sshAgentPromptBehavior": { - "message": "Ask for authorization when using SSH agent" + "message": "Bei der Verwendung des SSH-Agenten nach einer Autorisierung fragen" }, "sshAgentPromptBehaviorDesc": { - "message": "Choose how to handle SSH-agent authorization requests." + "message": "Wähle aus, wie mit Autorisierungs-Anfragen des SSH-Agenten umgegangen werden soll." }, "sshAgentPromptBehaviorHelp": { - "message": "Remember SSH authorizations" + "message": "SSH-Autorisierungen merken" }, "sshAgentPromptBehaviorAlways": { "message": "Immer" @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Neuer Eintrag" }, - "addNewFolder": { - "message": "Neuer Ordner" - }, "view": { "message": "Ansicht" }, @@ -1650,7 +1647,7 @@ "description": "URI match detection for auto-fill." }, "defaultMatchDetection": { - "message": "Standard-Match-Erkennung", + "message": "Standard-Übereinstimmungserkennung", "description": "Default URI match detection for auto-fill." }, "toggleOptions": { @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "„Dateipasswort“ und „Dateipasswort bestätigen“ stimmen nicht überein." }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Barrierefreiheits-Cookie laden" - }, - "registerAccessibilityUser": { - "message": "Als Benutzer für Barrierefreiheit registrieren bei", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopiere und füge den Link aus der an dich gesendeten E-Mail unten ein" - }, - "enterhCaptchaUrl": { - "message": "URL eingeben, um den Barrierefreiheits-Cookie für hCaptcha zu laden", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha-URL ist erforderlich", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Ungültige URL" - }, "done": { "message": "Fertig" }, - "accessibilityCookieSaved": { - "message": "Barrierefreiheits-Cookie gespeichert!" - }, - "noAccessibilityCookieSaved": { - "message": "Kein Barrierefreiheits-Cookie gespeichert" - }, "warning": { "message": "WARNUNG", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometrisches Entsperren ist derzeit aus einem unbekannten Grund nicht verfügbar." }, + "itemDetails": { + "message": "Eintrag-Details" + }, + "itemName": { + "message": "Eintrags-Name" + }, + "loginCredentials": { + "message": "Zugangsdaten" + }, + "additionalOptions": { + "message": "Weitere Optionen" + }, + "itemHistory": { + "message": "Eintragsverlauf" + }, + "lastEdited": { + "message": "Zuletzt bearbeitet" + }, + "upload": { + "message": "Hochladen" + }, "authorize": { "message": "Autorisieren" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Verschieben" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 d721f8bc9b9..1f4462ce4b5 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -247,10 +247,10 @@ "message": "Remember SSH authorizations" }, "sshAgentPromptBehaviorAlways": { - "message": "Always" + "message": "Πάντα" }, "sshAgentPromptBehaviorNever": { - "message": "Never" + "message": "Ποτέ" }, "sshAgentPromptBehaviorRememberUntilLock": { "message": "Remember until vault is locked" @@ -415,13 +415,13 @@ "message": "Authenticator key" }, "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": { @@ -434,31 +434,31 @@ "message": "Website added" }, "addWebsite": { - "message": "Add website" + "message": "Προσθήκη ιστοτόπου" }, "deleteWebsite": { - "message": "Delete website" + "message": "Διαγραφή ιστοτόπου" }, "owner": { - "message": "Owner" + "message": "Ιδιοκτήτης" }, "addField": { - "message": "Add field" + "message": "Προσθήκη πεδίου" }, "editField": { - "message": "Edit field" + "message": "Επεξεργασία πεδίου" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" }, "fieldType": { - "message": "Field type" + "message": "Τύπος πεδίου" }, "fieldLabel": { - "message": "Field label" + "message": "Ετικέτα πεδίου" }, "add": { - "message": "Add" + "message": "Προσθήκη" }, "textHelpText": { "message": "Use text fields for data like security questions" @@ -501,7 +501,7 @@ "description": "This describes a field that is 'linked' (related) to another field." }, "cfTypeCheckbox": { - "message": "Checkbox" + "message": "Πλαίσιο ελέγχου" }, "linkedValue": { "message": "Συνδεδεμένη τιμή", @@ -910,7 +910,7 @@ "message": "Η αυθεντικοποίηση ακυρώθηκε ή διήρκησε πολύ ώρα. Παρακαλώ προσπαθήστε ξανά." }, "openInNewTab": { - "message": "Open in new tab" + "message": "Άνοιγμα σε νέα καρτέλα" }, "invalidVerificationCode": { "message": "Μη έγκυρος κωδικός επαλήθευσης" @@ -1059,7 +1059,7 @@ "message": "Όχι" }, "location": { - "message": "Location" + "message": "Τοποθεσία" }, "overwritePassword": { "message": "Αντικατάσταση κωδικού πρόσβασης" @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Νέο στοιχείο" }, - "addNewFolder": { - "message": "Νέος φάκελος" - }, "view": { "message": "Προβολή" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Το \"Κωδικός πρόσβασης αρχείου\" και το \"Επιβεβαίωση κωδικού πρόσβασης αρχείου\" δεν ταιριάζουν." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Φόρτωση cookie προσβασιμότητας" - }, - "registerAccessibilityUser": { - "message": "Εγγραφείτε ως χρήστης προσβασιμότητας στο", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Αντιγράψτε και επικολλήστε τον σύνδεσμο που στάλθηκε στο email σας παρακάτω" - }, - "enterhCaptchaUrl": { - "message": "Εισαγάγετε τη διεύθυνση URL για τη φόρτωση του cookie προσβασιμότητας για το hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Απαιτείται διεύθυνση URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Μη έγκυρο Url" - }, "done": { "message": "Εγινε" }, - "accessibilityCookieSaved": { - "message": "Το cookie προσβασιμότητας αποθηκεύτηκε!" - }, - "noAccessibilityCookieSaved": { - "message": "Δεν έχει αποθηκευτεί cookie προσβασιμότητας" - }, "warning": { "message": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -2001,7 +1967,7 @@ } }, "cardDetails": { - "message": "Card details" + "message": "Στοιχεία κάρτας" }, "cardBrandDetails": { "message": "$BRAND$ details", @@ -2047,7 +2013,7 @@ } }, "cardExpiredTitle": { - "message": "Expired card" + "message": "Ληγμένη κάρτα" }, "cardExpiredMessage": { "message": "If you've renewed it, update the card's information" @@ -2222,13 +2188,13 @@ "message": "Μια πολιτική οργανισμού έχει αποτρέψει την εισαγωγή αντικειμένων στο ατομικό σας θησαυ/κιο." }, "personalDetails": { - "message": "Personal details" + "message": "Προσωπικά στοιχεία" }, "identification": { - "message": "Identification" + "message": "Ταυτοποίηση" }, "contactInfo": { - "message": "Contact information" + "message": "Στοιχεία επικοινωνίας" }, "allSends": { "message": "Όλα τα Sends", @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Το βιομετρικό ξεκλείδωμα δεν είναι διαθέσιμο για άγνωστο λόγο." }, + "itemDetails": { + "message": "Λεπτομέρειες στοιχείου" + }, + "itemName": { + "message": "Όνομα στοιχείου" + }, + "loginCredentials": { + "message": "Στοιχεία σύνδεσης" + }, + "additionalOptions": { + "message": "Πρόσθετες επιλογές" + }, + "itemHistory": { + "message": "Ιστορικό στοιχείου" + }, + "lastEdited": { + "message": "Τελευταία επεξεργασία" + }, + "upload": { + "message": "Μεταφόρτωση" + }, "authorize": { "message": "Εξουσιοδότηση" }, @@ -3717,7 +3704,16 @@ "message": "Change at-risk password" }, "move": { - "message": "Move" + "message": "Μετακίνηση" + }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, "newLoginNudgeTitle": { "message": "Save time with autofill" @@ -3728,7 +3724,7 @@ "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." }, diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index 117a5baa674..77e4222ac1f 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha URL is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid URL" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorise" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 e07af9017b0..109ace48efa 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Add new item" }, - "addNewFolder": { - "message": "Add new folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorise" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 cd7e4344cd1..51c350831a2 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nova ero" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "Vido" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Preta" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "AVERTO", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -2463,7 +2429,7 @@ "message": "Uzi la ĉefan pasvorton" }, "usePin": { - "message": "Uzi PIN-on." + "message": "Uzi PIN-n" }, "useBiometrics": { "message": "Use biometrics" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 e012c5e2984..3023fdd0359 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Añadir nuevo elemento" }, - "addNewFolder": { - "message": "Añadir nueva carpeta" - }, "view": { "message": "Ver" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Contraseña del archivo\" y \"Confirmar contraseña del archivo\" no coinciden." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Cargar cookie de accesibilidad" - }, - "registerAccessibilityUser": { - "message": "Registrarse como usuario de accesibilidad en", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copia y pega el enlace enviado a tu correo electrónico" - }, - "enterhCaptchaUrl": { - "message": "Introduzca la URL para cargar la cookie de accesibilidad de hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url es obligatorio", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Url inválida" - }, "done": { "message": "Hecho" }, - "accessibilityCookieSaved": { - "message": "¡Cookie de accesibilidad guardada!" - }, - "noAccessibilityCookieSaved": { - "message": "No hay ninguna cookie de accesibilidad guardada" - }, "warning": { "message": "ADVERTENCIA", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autorizar" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Mover" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 bd90fb6a82c..922ab7e36a6 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Lisa uus kirje" }, - "addNewFolder": { - "message": "Lisa uus kaust" - }, "view": { "message": "Vaata" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Faili parool\" ja \"Faili parooli kinnitus\" ei kattu." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Lae juurdepääsetavuse küpsis" - }, - "registerAccessibilityUser": { - "message": "Registreeri juurdepääsetavuse kasutajana lehel", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopeeri ja kleebi link, mis saadeti sinu e-postile" - }, - "enterhCaptchaUrl": { - "message": "Sisesta URL, et laadida ligipääsetavuse küpsis hCaptchale", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url on nõutud", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Vale Url" - }, "done": { "message": "Valmis" }, - "accessibilityCookieSaved": { - "message": "Ligipääsetavuse küpsis on salvestatud!" - }, - "noAccessibilityCookieSaved": { - "message": "Ligipääsetavuse küpsis pole salvestatud" - }, "warning": { "message": "HOIATUS", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 febf716a283..3bc76d8427c 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Gehitu elementu berria" }, - "addNewFolder": { - "message": "Karpeta berria gehitu" - }, "view": { "message": "Erakutsi" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Kargatu erabilerraztasun Cookie-ak" - }, - "registerAccessibilityUser": { - "message": "Erabilerraztasun erabiltzaile erregistratu", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopiatu eta itsatsi bidalitako esteka zure emailera" - }, - "enterhCaptchaUrl": { - "message": "Sartu hCaptcha helbidearen cookiea kargatzeko URLa", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url behar da", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Baliogabeko Url-a" - }, "done": { "message": "Egina" }, - "accessibilityCookieSaved": { - "message": "Erabilerraztasun cookie-a gordeta!" - }, - "noAccessibilityCookieSaved": { - "message": "Ez da erabilerraztasun cookie-rik gorde" - }, "warning": { "message": "KONTUZ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 48e1805b62c..4bcbbd3ac33 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "مورد جدید" }, - "addNewFolder": { - "message": "پوشه جدید" - }, "view": { "message": "مشاهده" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "عدم تطابق \"رمز فایل\" و \"تایید رمز فایل\" با یکدیگر." }, - "hCaptchaUrl": { - "message": "نشانی اینترنتی hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "بارگیری کوکی دسترسی" - }, - "registerAccessibilityUser": { - "message": "ثبت نام به عنوان کاربر قابلیت دسترسی در", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "لینک ارسال شده به ایمیل خود را در زیر کپی و پیست کنید" - }, - "enterhCaptchaUrl": { - "message": "برای بارگیری کوکی دسترسی کپچا نشانی اینترنتی را وارد کنید", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "نشانی اینترنتی کپچا مورد نیاز است", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "نشانی اینترنتی نامعتبر" - }, "done": { "message": "انجام شد" }, - "accessibilityCookieSaved": { - "message": "کوکی دسترسی ذخیره شد!" - }, - "noAccessibilityCookieSaved": { - "message": "هیچ کوکی دسترسی ذخیره نشد" - }, "warning": { "message": "اخطار", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index 8f2e845a51b..14cf9c95ffc 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Uusi kohde" }, - "addNewFolder": { - "message": "Uusi kansio" - }, "view": { "message": "Näytä" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Tiedoston salasana\" ja \"Vahvista tiedoston salasana\" eivät täsmää." }, - "hCaptchaUrl": { - "message": "hCaptcha-URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Lataa esteettömyyseväste" - }, - "registerAccessibilityUser": { - "message": "Rekisteröidy esteettömyyskäyttäjäksi osoitteessa", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopioi ja liitä alla olevaan sähköpostiosoitteeseen lähetetty linkki" - }, - "enterhCaptchaUrl": { - "message": "Lataa hCaptcha-esteettömyyseväste syöttämällä URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha-URL vaaditaan", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Virheellinen URL" - }, "done": { "message": "Valmis" }, - "accessibilityCookieSaved": { - "message": "Esteettömyyseväste tallennettiin!" - }, - "noAccessibilityCookieSaved": { - "message": "Esteettömyysevästettä ei tallennettu" - }, "warning": { "message": "VAROITUS", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometrinen avaus ei ole tällä hetkellä käytettävissä tuntemattomasta syystä." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Valtuuta" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Siirrä" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index 2fdd2d48ed6..b3633cd1694 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Bagong item" }, - "addNewFolder": { - "message": "Bagong folder" - }, "view": { "message": "Tanaw" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "I-load ang accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Magrehistro bilang isang gumagamit ng accessibility sa", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopyahin at i paste ang link na ipinadala sa iyong email sa ibaba" - }, - "enterhCaptchaUrl": { - "message": "Ipasok ang URL upang i load ang accessibility cookie para sa hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url ay kinakailangan", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Imbalidong URL" - }, "done": { "message": "Tapos na" }, - "accessibilityCookieSaved": { - "message": "Nai-save ang Accessibility cookie!" - }, - "noAccessibilityCookieSaved": { - "message": "Walang na-save na accessibility cookie" - }, "warning": { "message": "BABALA", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 50c489d479e..e94f4837d99 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Ajouter un nouvel élément" }, - "addNewFolder": { - "message": "Ajouter un dossier" - }, "view": { "message": "Affichage" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Le \"Mot de passe du fichier\" et la \"Confirmation du mot de passe du fichier\" ne correspondent pas." }, - "hCaptchaUrl": { - "message": "URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Charger le cookie d'accessibilité" - }, - "registerAccessibilityUser": { - "message": "S'inscrire en tant qu'utilisateur avec accessibilité à", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Collez le lien envoyé à votre adresse e-mail ci-dessous" - }, - "enterhCaptchaUrl": { - "message": "Entrez l'URL pour charger le cookie d'accessibilité pour hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "L'URL hCaptcha est nécessaire", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "URL invalide" - }, "done": { "message": "Terminé" }, - "accessibilityCookieSaved": { - "message": "Cookie d'accessibilité enregistré !" - }, - "noAccessibilityCookieSaved": { - "message": "Aucun cookie d'accessibilité enregistré" - }, "warning": { "message": "AVERTISSEMENT", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Le déverrouillage par biométrie n'est pas disponible actuellement pour une raison inconnue." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autoriser" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 a74f71752af..471d7235945 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 2e3b60dfc29..954c50812be 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "פריט חדש" }, - "addNewFolder": { - "message": "תיקייה חדשה" - }, "view": { "message": "הצג" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"סיסמת קובץ\" ו\"אשר סיסמת קובץ\" אינם תואמים." }, - "hCaptchaUrl": { - "message": "כתובת אתר hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "טען עוגיית נגישות" - }, - "registerAccessibilityUser": { - "message": "הירשם כמשתמש נגישות ב-", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "העתק והדבק את הקישור שנשלח לאימייל שלך" - }, - "enterhCaptchaUrl": { - "message": "הזן את כתובת האתר לטעינת עוגיית נגישות עבור hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "יש להזין את כתובת האתר hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "כתובת אתר לא חוקית" - }, "done": { "message": "בוצע" }, - "accessibilityCookieSaved": { - "message": "עוגיית הנגישות נשמרה!" - }, - "noAccessibilityCookieSaved": { - "message": "עוגיית הנגישות לא נשמרה" - }, "warning": { "message": "אזהרה", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "ביטול נעילה ביומטרי אינו זמין כעת מסיבה לא ידועה." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "אשר" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 437b4845bdc..10307cc03ca 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 2b800ad99a2..8bdfcb40534 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nova stavka" }, - "addNewFolder": { - "message": "Nova mapa" - }, "view": { "message": "Prikaz" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Lozinka se ne podudara." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Učitaj kolačić pristupačnosti" - }, - "registerAccessibilityUser": { - "message": "Registriraj se kao korisnik pristupačnosti na", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopiraj i zalijepi vezu poslanu na e-poštu u nastavku" - }, - "enterhCaptchaUrl": { - "message": "Unesi URL za učitavanje kolačića pristupačnosti za hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url je obavezan", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Neispravan Url" - }, "done": { "message": "Gotovo" }, - "accessibilityCookieSaved": { - "message": "Kolačić pristupačnosti spremljen!" - }, - "noAccessibilityCookieSaved": { - "message": "Nije spremljen kolačić pristupačnosti" - }, "warning": { "message": "UPOZORENJE", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometrijsko otključavanje trenutno nije dostupno iz nepoznatog razloga." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autoriziraj" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 0b6f60e9fb2..8091cd72225 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Új elem" }, - "addNewFolder": { - "message": "Új mappa" - }, "view": { "message": "Megtekintés" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "A “Fájl jelszó” és a “Fájl jelszó megerősítés“ nem egyezik." }, - "hCaptchaUrl": { - "message": "hCaptcha webcím", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Akadálymentes süti betöltése" - }, - "registerAccessibilityUser": { - "message": "Regisztrálás akadálymentes felhasználóként:", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Vágólapon át szúrjuk be lentebb a kapott emailben levő hivatkozást." - }, - "enterhCaptchaUrl": { - "message": "Webcím megadása a hCaptcha akadálymentes sütijének betöltéséhez", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "A hCaptcha webcím megadása szükséges", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "A webcím érvénytelen." - }, "done": { "message": "Kész" }, - "accessibilityCookieSaved": { - "message": "Az ajadálymentes süti mentésre került." - }, - "noAccessibilityCookieSaved": { - "message": "Nem lett elmentve akadálymentes süti." - }, "warning": { "message": "FIGYELEM", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "A biometrikus feloldás jelenleg ismeretlen okból nem érhető el." }, + "itemDetails": { + "message": "Elem részletek" + }, + "itemName": { + "message": "Elem név" + }, + "loginCredentials": { + "message": "Bejelentkezési hitelesítések" + }, + "additionalOptions": { + "message": "Kiegészítő opciók" + }, + "itemHistory": { + "message": "Elem előzmény" + }, + "lastEdited": { + "message": "Utoljára szerkesztve" + }, + "upload": { + "message": "Feltöltés" + }, "authorize": { "message": "Hitelesítés" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Áthelyezés" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 a8c6005261b..1eeb32fdcc6 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Tambahkan Item Baru" }, - "addNewFolder": { - "message": "Tambahkan Folder Baru" - }, "view": { "message": "Tampilan" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Muat cookie aksesibilitas" - }, - "registerAccessibilityUser": { - "message": "Daftar sebagai pengguna aksesibilitas di", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Salin dan tempel tautan yang dikirimkan ke email Anda di bawah" - }, - "enterhCaptchaUrl": { - "message": "Masukkan URL untuk memuat cookie aksesibilitas untuk hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "url hCaptcha diperlukan", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Url tidak valid" - }, "done": { "message": "Selesai" }, - "accessibilityCookieSaved": { - "message": "Cookie aksesibilitas disimpan!" - }, - "noAccessibilityCookieSaved": { - "message": "Tidak ada cookie aksesibilitas yang disimpan" - }, "warning": { "message": "PERINGATAN", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 efe520767ab..db70740d96e 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nuovo elemento" }, - "addNewFolder": { - "message": "Nuova cartella" - }, "view": { "message": "Visualizza" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Le due password del file non corrispondono." }, - "hCaptchaUrl": { - "message": "URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Carica cookie di accessibilità" - }, - "registerAccessibilityUser": { - "message": "Registrati come utente di accessibilità su", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copia e incolla il link inviato alla tua email qui sotto" - }, - "enterhCaptchaUrl": { - "message": "Inserisci l'URL per caricare il cookie di accessibilità per hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "URL hCaptcha obbligatorio", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "URL non valido" - }, "done": { "message": "Fatto" }, - "accessibilityCookieSaved": { - "message": "Cookie di accessibilità salvato!" - }, - "noAccessibilityCookieSaved": { - "message": "Nessun cookie di accessibilità salvato" - }, "warning": { "message": "ATTENZIONE", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Lo sblocco biometrico non è attualmente disponibile per un motivo sconosciuto." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autorizza" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 be632f79e12..47ba77508bc 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "新しいアイテムの追加" }, - "addNewFolder": { - "message": "新規フォルダーの追加" - }, "view": { "message": "表示" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "「ファイルパスワード」と「ファイルパスワードの確認」が一致しません。" }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "アクセシビリティクッキーを読み込む" - }, - "registerAccessibilityUser": { - "message": "アクセシビリティユーザーとして登録する", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "以下のメールに送信されたリンクをコピーして貼り付けてください" - }, - "enterhCaptchaUrl": { - "message": "hCaptcha のアクセシビリティクッキーを読み込むための URL を入力してください", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha URL が必要です", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "無効な URL" - }, "done": { "message": "完了" }, - "accessibilityCookieSaved": { - "message": "アクセシビリティクッキーを保存しました!" - }, - "noAccessibilityCookieSaved": { - "message": "アクセシビリティクッキーが保存されていません" - }, "warning": { "message": "警告", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "生体認証によるロック解除は、不明な理由により現在利用できません。" }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "認可" }, @@ -3719,6 +3706,15 @@ "move": { "message": "移動" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 22c12c8b501..6a2912eed10 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "ახალი ჩანაწერი" }, - "addNewFolder": { - "message": "ახალი საქაღალდე" - }, "view": { "message": "ხედი" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "დასრულებული" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "გაფრთხილება", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 a74f71752af..471d7235945 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 ff5310f356d..767cdcf9d03 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "ಐಟಂ ಸೇರಿಸಿ" }, - "addNewFolder": { - "message": "ಹೊಸ ಫೋಲ್ಡರ್ ಸೇರಿಸಿ" - }, "view": { "message": "ವೀಕ್ಷಣೆ" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "ಎಚ್ಚರಿಕೆ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 c25ee35579a..b7b2a82b4b5 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "새 항목 추가" }, - "addNewFolder": { - "message": "새 폴더 추가" - }, "view": { "message": "보기" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "접근성 쿠키 불러오기" - }, - "registerAccessibilityUser": { - "message": "접근성 사용자로 등록", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha URL이 필요합니다", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "잘못된 URL" - }, "done": { "message": "완료" }, - "accessibilityCookieSaved": { - "message": "접근성 쿠키가 저장되었습니다!" - }, - "noAccessibilityCookieSaved": { - "message": "접근성 쿠키가 저장되지 않았습니다" - }, "warning": { "message": "경고", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 c6fe463d7f3..66dcf1da155 100644 --- a/apps/desktop/src/locales/lt/messages.json +++ b/apps/desktop/src/locales/lt/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Naujas elementas" }, - "addNewFolder": { - "message": "Naujas aplankas" - }, "view": { "message": "Peržiūrėti" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha nuoroda", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Užkrauti prieinamumo slapuką" - }, - "registerAccessibilityUser": { - "message": "Registruotis kaip prieinamumo vartotojas", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Nukopijuokite ir įklijuokite adresą atsiųstą į jūsų paštą apačioje" - }, - "enterhCaptchaUrl": { - "message": "Įveskite nuorodą reikalingą hCaptcha prieinamumo slapukui", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha nuoroda yra privaloma", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Klaidingas URL" - }, "done": { "message": "Atlikta" }, - "accessibilityCookieSaved": { - "message": "Prieinamumo slapukai išsaugoti!" - }, - "noAccessibilityCookieSaved": { - "message": "Prieinamumo slapukas neišsaugotas" - }, "warning": { "message": "ĮSPĖJIMAS", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 6527745e5cf..a1e76b5a521 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -110,7 +110,7 @@ "message": "E-pasta adrese" }, "verificationCodeTotp": { - "message": "Apstiprinājuma kods (TOTP)" + "message": "Apliecinājuma kods (TOTP)" }, "website": { "message": "Tīmekļvietne" @@ -573,7 +573,7 @@ "message": "Ievietot vietrādi starpliktuvē" }, "copyVerificationCodeTotp": { - "message": "Ievietot apstiprinājuma kodu (TOTP) starpliktuvē" + "message": "Ievietot Apliecinājuma kodu (TOTP) starpliktuvē" }, "length": { "message": "Garums" @@ -889,7 +889,7 @@ "message": "Nav vienumu, ko parādīt." }, "sendVerificationCode": { - "message": "Sūtīt apstiprinājuma kodu uz e-pastu" + "message": "Nosūtīt apliecinājuma kodu e-pastā" }, "sendCode": { "message": "Nosūtīt kodu" @@ -898,13 +898,13 @@ "message": "Kods nosūtīts" }, "verificationCode": { - "message": "Apstiprinājuma kods" + "message": "Apliecinājuma kods" }, "confirmIdentity": { "message": "Jāapstiprina identitāte, lai turpinātu." }, "verificationCodeRequired": { - "message": "Ir nepieciešams apstiprinājuma kods." + "message": "Apliecinājuma kods ir nepieciešams." }, "webauthnCancelOrTimeout": { "message": "Autentifikācija tika atcelta vai tā aizņēma pārāk daudz laika. Lūgums mēģināt vēlreiz." @@ -913,13 +913,13 @@ "message": "Atvērt jaunā cilnē" }, "invalidVerificationCode": { - "message": "Nederīgs apstiprinājuma kods" + "message": "Nederīgs apliecinājuma kods" }, "continue": { "message": "Turpināt" }, "verificationCodeEmailSent": { - "message": "E-pasts apstiprināšanai nosūtīts uz $EMAIL$.", + "message": "Apliecinājuma e-pasta ziņojums nosūtīts uz $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Pievienot jaunu vienumu" }, - "addNewFolder": { - "message": "Pievienot jaunu mapi" - }, "view": { "message": "Skats" }, @@ -1459,7 +1456,7 @@ "message": "Paroļu higiēnas, konta veselības un datu noplūžu pārskati, lai uzturētu glabātavu drošu." }, "premiumSignUpTotp": { - "message": "TOTP apstiprinājuma koda (2FA) veidotājs glabātavas pieteikšanās vienumiem." + "message": "TOTP apliecinājuma koda (2FA) veidotājs glabātavas pieteikšanās vienumiem." }, "premiumSignUpSupport": { "message": "Priekšrocīgs lietotāju atbalsts." @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Datnes parole\" un \"Apstiprināt datnes paroli\" vērtības nesakrīt." }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Ielādēt piekļūstamības sīkdatni" - }, - "registerAccessibilityUser": { - "message": "Reģistrēties kā piekļūstamības lietotājam", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Ievietot starpliktuvē un zemāk ielīmēt saiti, kas tika nosūtīta e-pastā" - }, - "enterhCaptchaUrl": { - "message": "Ievadīt URL, lai ielādētu hCaptcha piekļūstamības sīkdatni", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Ir nepieciešams hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Nederīgs URL" - }, "done": { "message": "Darīts" }, - "accessibilityCookieSaved": { - "message": "Piekļūstamības sīkdatne saglabāta." - }, - "noAccessibilityCookieSaved": { - "message": "Nav saglabātas piekļūstamības sīkdadnes" - }, "warning": { "message": "UZMANĪBU", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -2022,10 +1988,10 @@ "message": "Padarīt divpakāpju apliecināšanu plūdenu" }, "totpHelper": { - "message": "Bitwarden var glabāt un aizpildīt divpakāpju apliecināšanas kodus. Atslēga jāievieto starpliktuvē un jāielīmē šajā laukā." + "message": "Bitwarden var glabāt un aizpildīt divpakāpju apliecinājuma kodus. Atslēga jāievieto starpliktuvē un jāielīmē šajā laukā." }, "totpHelperWithCapture": { - "message": "Bitwarden var glabāt un aizpildīt divpakāpju apliecināšanas kodus. Jāizvēlas kameras ikona, lai veiktu tīmekļvietnes autentificētāja kvadrātkoda ekrānuzņēmumu, vai jāievieto starpliktuvē atslēga un jāielīmē šajā laukā." + "message": "Bitwarden var glabāt un aizpildīt divpakāpju apliecinājuma kodus. Jāizvēlas kameras ikona, lai veiktu tīmekļvietnes autentificētāja kvadrātkoda ekrānuzņēmumu, vai jāievieto starpliktuvē atslēga un jāielīmē šajā laukā." }, "premium": { "message": "Premium", @@ -2406,13 +2372,13 @@ "message": "Viens vai vairāki apvienības nosacījumi ietekmē Send iespējas." }, "emailVerificationRequired": { - "message": "Nepieciešama e-pasta adreses apstiprināšana" + "message": "Nepieciešama e-pasta adreses apliecināšana" }, "emailVerifiedV2": { "message": "E-pasta adrese ir apliecināta" }, "emailVerificationRequiredDesc": { - "message": "Ir jāapstiprina e-pasta adrese, lai izmantotu šo iespēju." + "message": "Ir jāapliecina sava e-pasta adrese, lai izmantotu šo iespēju." }, "passwordPrompt": { "message": "Galvenās paroles pārvaicāšana" @@ -2442,7 +2408,7 @@ "message": "Jāmēģina vēlreiz" }, "verificationRequiredForActionSetPinToContinue": { - "message": "Šai darbībai ir nepieciešama apliecināšana. Jāiestata PIN, lai turpinātu." + "message": "Šai darbībai ir nepieciešama apliecinājums. Jāiestata PIN, lai turpinātu." }, "setPin": { "message": "Iestatīt PIN" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Atslēgšana ar biometriju pašlaik nav pieejama nezināma iemesla dēļ." }, + "itemDetails": { + "message": "Vienuma dati" + }, + "itemName": { + "message": "Vienuma nosaukums" + }, + "loginCredentials": { + "message": "Pieteikšanās dati" + }, + "additionalOptions": { + "message": "Papildu iespējas" + }, + "itemHistory": { + "message": "Vienuma vēsture" + }, + "lastEdited": { + "message": "Pēdējoreiz labots" + }, + "upload": { + "message": "Augšupielādēt" + }, "authorize": { "message": "Pilnvarot" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Pārvietot" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 35345d8985e..152877fa552 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Dodaj novu stavku" }, - "addNewFolder": { - "message": "Dodaj novu fasciklu" - }, "view": { "message": "Pogled" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "UPOZORENJE", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 69a6bd66d2e..3fcb52bade5 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "പുതിയ ഇനം ചേർക്കുക" }, - "addNewFolder": { - "message": "പുതിയ ഫോൾഡർ ചേർക്കുക" - }, "view": { "message": "പ്രദർശനം" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "മുന്നറിയിപ്പ്", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 a74f71752af..471d7235945 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 37bef7dbf66..724194808cf 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 d5bd0fc976e..5522218037f 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Legg til et nytt objekt" }, - "addNewFolder": { - "message": "Legg til en ny mappe" - }, "view": { "message": "Vis" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "«Filpassord» og «Bekreft filpassord» stemmer ikke overens." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Last inn tilgjengelighetsinformasjonskapsel" - }, - "registerAccessibilityUser": { - "message": "Registrer deg som tilgjengelighetsbruker på", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopier og lim inn linken som er sendt til e-posten din nedenfor" - }, - "enterhCaptchaUrl": { - "message": "Skriv inn URL-adressen for å laste tilgjengelighets-informasjonskapsler for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url er påkrevd", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Ugyldig url" - }, "done": { "message": "Ferdig" }, - "accessibilityCookieSaved": { - "message": "Tilgjengelighets-informasjonskapsel lagret!" - }, - "noAccessibilityCookieSaved": { - "message": "Ingen tilgjengelighets-informasjonskapsel lagret" - }, "warning": { "message": "ADVARSEL", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autoriser" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Flytt" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 dc710b5fbda..a56268aa671 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 d7bb803ed62..cad8a495dbf 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -446,10 +446,10 @@ "message": "Veld toevoegen" }, "editField": { - "message": "Edit field" + "message": "Veld bewerken" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Weet je zeker dat je deze bijlage definitief wilt verwijderen?" }, "fieldType": { "message": "Veldtype" @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nieuw item toevoegen" }, - "addNewFolder": { - "message": "Nieuwe map toevoegen" - }, "view": { "message": "Weergeven" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Bestandswachtwoord\" en \"Bestandswachtwoord bevestigen\" komen niet overeen." }, - "hCaptchaUrl": { - "message": "hCaptcha-URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Toegankelijkheidscookie laden" - }, - "registerAccessibilityUser": { - "message": "Registreer als toegankelijkheidsgebruiker op", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopieer en plak de link die naar uw e-mail is gestuurd hieronder" - }, - "enterhCaptchaUrl": { - "message": "Voer een URL in om toegankelijkheidscookie voor hCaptcha te laden", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha-URL is vereist", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Ongeldige URL" - }, "done": { "message": "Klaar" }, - "accessibilityCookieSaved": { - "message": "Toegankelijkheidscookie opgeslagen!" - }, - "noAccessibilityCookieSaved": { - "message": "Geen toegankelijkheidscookie opgeslagen" - }, "warning": { "message": "WAARSCHUWING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometrisch ontgrendelen is momenteel niet beschikbaar om een onbekende reden." }, + "itemDetails": { + "message": "Itemdetails" + }, + "itemName": { + "message": "Itemnaam" + }, + "loginCredentials": { + "message": "Inloggegevens" + }, + "additionalOptions": { + "message": "Extra opties" + }, + "itemHistory": { + "message": "Itemgeschiedenis" + }, + "lastEdited": { + "message": "Laatst gewijzigd" + }, + "upload": { + "message": "Uploaden" + }, "authorize": { "message": "Autoriseren" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Verplaatsen" }, + "newFolder": { + "message": "Nieuwe map" + }, + "folderName": { + "message": "Mapnaam" + }, + "folderHintText": { + "message": "Je kunt een map onderbrengen door het toevoegen van de naam van de bovenliggende map gevolgd door een \"/\". Voorbeeld: Social/Forums" + }, "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 0a639b209c5..b3f0f0c5d20 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Legg til ei ny oppføring" }, - "addNewFolder": { - "message": "Legg til mappe" - }, "view": { "message": "Vising" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha-nettadresse", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Ei hCaptcha-nettadresse er påkravt", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Ferdig" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "ÅTVARING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 83e1f39d635..d584cd5d117 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 c4978d6c74d..61c438c0425 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nowy element" }, - "addNewFolder": { - "message": "Nowy folder" - }, "view": { "message": "Widok" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“Hasło pliku” i “Potwierdź hasło pliku“ nie pasują do siebie." }, - "hCaptchaUrl": { - "message": "Adres URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Załaduj pliki cookies ułatwień dostępu" - }, - "registerAccessibilityUser": { - "message": "Zarejestruj się jako użytkownik ułatwień dostępu na", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Skopiuj i wklej link wysłany na poniższy adres e-mail" - }, - "enterhCaptchaUrl": { - "message": "Wpisz adres URL, aby załadować pliki cookies ułatwień dostępu dla hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Adres URL hCaptcha jest wymagany", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Adres URL jest nieprawidłowy" - }, "done": { "message": "Gotowe" }, - "accessibilityCookieSaved": { - "message": "Pliki cookies ułatwień dostępu zostały zapisane!" - }, - "noAccessibilityCookieSaved": { - "message": "Brak zapisanych plików cookies ułatwień dostępu" - }, "warning": { "message": "UWAGA", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Odblokowanie biometryczne jest obecnie niedostępne z nieznanego powodu." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autoryzuj" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 591357b109d..e44bb7abc8c 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Adicionar Novo Item" }, - "addNewFolder": { - "message": "Adicionar Nova Pasta" - }, "view": { "message": "Ver" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Senha do arquivo\" e \"Confirmação de senha\" não correspondem." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Carregar Cookie de Acessibilidade" - }, - "registerAccessibilityUser": { - "message": "Registre-se como um usuário de acessibilidade em", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copie e cole o link enviado para o seu email abaixo" - }, - "enterhCaptchaUrl": { - "message": "Digite a URL para carregar o cookie de acessibilidade para hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "O URL do hCaptcha é necessário", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "URL inválida" - }, "done": { "message": "Concluído" }, - "accessibilityCookieSaved": { - "message": "Cookies de acessibilidade salvos!" - }, - "noAccessibilityCookieSaved": { - "message": "Nenhum cookie de acessibilidade salvo" - }, "warning": { "message": "AVISO", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "O desbloqueio por biometria está indisponível por razões desconhecidas." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Autorizar" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Mover" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 a64b06faa68..ef657f1b658 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Novo item" }, - "addNewFolder": { - "message": "Nova pasta" - }, "view": { "message": "Ver" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Palavra-passe do ficheiro\" e \"Confirmar palavra-passe do ficheiro\" não correspondem." }, - "hCaptchaUrl": { - "message": "URL do hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Carregar cookie de acessibilidade" - }, - "registerAccessibilityUser": { - "message": "Registar como utilizador de acessibilidade em", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copie e cole o link enviado para o seu e-mail abaixo" - }, - "enterhCaptchaUrl": { - "message": "Introduza o URL para carregar o cookie de acessibilidade do hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "É necessário o URL do hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "URL inválido" - }, "done": { "message": "Concluído" }, - "accessibilityCookieSaved": { - "message": "Cookie de acessibilidade guardado!" - }, - "noAccessibilityCookieSaved": { - "message": "Nenhum cookie de acessibilidade guardado" - }, "warning": { "message": "AVISO", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "O desbloqueio biométrico está atualmente indisponível por um motivo desconhecido." }, + "itemDetails": { + "message": "Detalhes do item" + }, + "itemName": { + "message": "Nome do item" + }, + "loginCredentials": { + "message": "Credenciais de início de sessão" + }, + "additionalOptions": { + "message": "Opções adicionais" + }, + "itemHistory": { + "message": "Histórico do item" + }, + "lastEdited": { + "message": "Última edição" + }, + "upload": { + "message": "Carregar" + }, "authorize": { "message": "Autorizar" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Mover" }, + "newFolder": { + "message": "Nova pasta" + }, + "folderName": { + "message": "Nome da pasta" + }, + "folderHintText": { + "message": "Crie uma subpasta adicionando o nome da pasta principal seguido de um \"/\". Exemplo: Redes Sociais/Fóruns" + }, "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 f74dbeeb705..9024aaa5533 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Articol nou" }, - "addNewFolder": { - "message": "Dosar nou" - }, "view": { "message": "Afișare" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "Url-ul hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Încărcare cookie de accesibilitate" - }, - "registerAccessibilityUser": { - "message": "Înregistrați-vă ca utilizator de accesibilitate la", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copiați și lipiți linkul trimis pe e-mailul dvs. mai jos" - }, - "enterhCaptchaUrl": { - "message": "Introduceți URL-ul pentru încărcarea cookie-ului de accesibilitate pentru hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Url-ul hCaptcha este necesar", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Url invalid" - }, "done": { "message": "Făcut" }, - "accessibilityCookieSaved": { - "message": "Cookie de accesibilitate salvat!" - }, - "noAccessibilityCookieSaved": { - "message": "Niciun cookie de accesibilitate salvat" - }, "warning": { "message": "AVERTISMENT", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 428d4103039..b61c03462a3 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Новый элемент" }, - "addNewFolder": { - "message": "Новый папка" - }, "view": { "message": "Вид" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Пароль к файлу\" и \"Подтверждение пароля к файлу\" не совпадают." }, - "hCaptchaUrl": { - "message": "URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Загрузить cookie специальных возможностей" - }, - "registerAccessibilityUser": { - "message": "Зарегистрироваться как пользователь специальных возможностей на", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Скопируйте и вставьте ниже ссылку, отправленную на вашу почту" - }, - "enterhCaptchaUrl": { - "message": "Введите URL для загрузки cookie специальных возможностей для hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Требуется URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Неверный URL" - }, "done": { "message": "Готово" }, - "accessibilityCookieSaved": { - "message": "Cookie специальных возможностей сохранены!" - }, - "noAccessibilityCookieSaved": { - "message": "Отсутствуют сохраненные cookie специальных возможностей" - }, "warning": { "message": "ВНИМАНИЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Биометрическая разблокировка в настоящее время недоступна по неизвестной причине." }, + "itemDetails": { + "message": "Информация об элементе" + }, + "itemName": { + "message": "Название элемента" + }, + "loginCredentials": { + "message": "Данные для авторизации" + }, + "additionalOptions": { + "message": "Дополнительные настройки" + }, + "itemHistory": { + "message": "История элемента" + }, + "lastEdited": { + "message": "Последнее изменение" + }, + "upload": { + "message": "Загрузить" + }, "authorize": { "message": "Разрешить" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Переместить" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" }, @@ -3747,7 +3743,7 @@ "message": "Упрощение создания аккаунтов" }, "newIdentityNudgeBody": { - "message": "С помощью личностей можно быстро заполнять длинные регистрационные или контактные формы." + "message": "С помощью личной информации можно быстро заполнять длинные регистрационные или контактные формы." }, "newNoteNudgeTitle": { "message": "Храните ваши конфиденциальные данные в безопасности" diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index e90c27094f8..bb843718e28 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "නව බහාලුමක් එකතු කරන්න" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 3503000b6b0..03c362d2cb3 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Pridať novú položku" }, - "addNewFolder": { - "message": "Vytvoriť nový priečinok" - }, "view": { "message": "Zobraziť" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Heslo súboru\" a \"Potvrdiť heslo súboru\" sa nezhodujú." }, - "hCaptchaUrl": { - "message": "URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Načítať súbor cookie prístupnosti" - }, - "registerAccessibilityUser": { - "message": "Zaregistrujte sa ako používateľ prístupnosti na", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Skopírujte a vložte odkaz zaslaný na váš e-mail nižšie" - }, - "enterhCaptchaUrl": { - "message": "Zadajte adresu URL na načítanie súboru cookie prístupnosti pre hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Vyžaduje sa URL hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Neplatná URL" - }, "done": { "message": "Hotovo" }, - "accessibilityCookieSaved": { - "message": "Súbor cookie prístupnosti uložený!" - }, - "noAccessibilityCookieSaved": { - "message": "Nie je uložený žiadny súbor cookie prístupnosti" - }, "warning": { "message": "UPOZORNENIE", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Odomykanie biometrickými údajmi je z neznámych dôvodov nedostupné." }, + "itemDetails": { + "message": "Podrobnosti o položke" + }, + "itemName": { + "message": "Názov položky" + }, + "loginCredentials": { + "message": "Prihlasovacie údaje" + }, + "additionalOptions": { + "message": "Ďalšie možnosti" + }, + "itemHistory": { + "message": "História položky" + }, + "lastEdited": { + "message": "Posledná úprava" + }, + "upload": { + "message": "Nahrať" + }, "authorize": { "message": "Autorizovať" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Presunúť" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 e81fa844b9b..6cc9e6fc197 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Dodaj nov element" }, - "addNewFolder": { - "message": "Dodaj novo mapo" - }, "view": { "message": "Pogled" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "OPOZORILO", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 1684d188905..7509870b0a0 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Додај нову ставку" }, - "addNewFolder": { - "message": "Додај нову фасциклу" - }, "view": { "message": "Приказ" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Унете лозинке се не подударају." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Учитај колачић приступачности" - }, - "registerAccessibilityUser": { - "message": "Региструјте се као корисник приступачности на", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Копирајте и испод налепите линк који је послат на адресу ваше е-поште" - }, - "enterhCaptchaUrl": { - "message": "Упишите адресу како би се учитао колачић приступачности за hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha адреса је неопходна", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Неисправна адреса" - }, "done": { "message": "Готово" }, - "accessibilityCookieSaved": { - "message": "Колачић приступачности сачуван!" - }, - "noAccessibilityCookieSaved": { - "message": "Нема сачуваног колачића приступачности" - }, "warning": { "message": "УПОЗОРЕЊЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Биометријско откључавање није доступно из непознатог разлога." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Ауторизуј" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Премести" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Уштедите време са ауто-пуњењем" }, diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index a9a1e9b3a03..eb0d2dcd547 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Nytt objekt" }, - "addNewFolder": { - "message": "Ny mapp" - }, "view": { "message": "Visa" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha-URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Ladda tillgänglighets-cookie" - }, - "registerAccessibilityUser": { - "message": "Registrera som en tillgänglighetsanvändare på", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Kopiera och klistra in länken som skickats till din e-post nedan" - }, - "enterhCaptchaUrl": { - "message": "Ange URL för att ladda tillgänglighets-cookie för hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha-URL krävs", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Ogiltig URL" - }, "done": { "message": "Klar" }, - "accessibilityCookieSaved": { - "message": "Tillgänglighets-cookie sparad!" - }, - "noAccessibilityCookieSaved": { - "message": "Ingen tillgänglighets-cookie sparad" - }, "warning": { "message": "VARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 a74f71752af..471d7235945 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "New item" }, - "addNewFolder": { - "message": "New folder" - }, "view": { "message": "View" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Invalid Url" - }, "done": { "message": "Done" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "WARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 62979e4290f..43aaa697a8a 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "เพิ่มรายการใหม่" }, - "addNewFolder": { - "message": "เพิ่มโฟลเดอร์ใหม่" - }, "view": { "message": "แสดง" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“File password” and “Confirm file password“ do not match." }, - "hCaptchaUrl": { - "message": "hCaptcha Url", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Load accessibility cookie" - }, - "registerAccessibilityUser": { - "message": "Register as an accessibility user at", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Copy and paste the link sent to your email below" - }, - "enterhCaptchaUrl": { - "message": "Enter URL to load accessibility cookie for hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha Url is required", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Url ไม่ถูกต้อง" - }, "done": { "message": "เสร็จสิ้น" }, - "accessibilityCookieSaved": { - "message": "Accessibility cookie saved!" - }, - "noAccessibilityCookieSaved": { - "message": "No accessibility cookie saved" - }, "warning": { "message": "คำเตือน", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 2927ef81f5c..35fd2be4706 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Yeni kayıt" }, - "addNewFolder": { - "message": "Yeni klasör" - }, "view": { "message": "Görüntüle" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Dosya parolası\" ile \"Dosya parolasını onaylayın\" eşleşmiyor." }, - "hCaptchaUrl": { - "message": "hCaptcha adresi", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Erişilebilirlik çerezini yükle" - }, - "registerAccessibilityUser": { - "message": "Erişilebilirlik kullanıcısı olarak kaydolun:", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "E-postanıza gönderilen bağlantıyı kopyalayıp aşağıya yapıştırın" - }, - "enterhCaptchaUrl": { - "message": "hCaptcha erişilebilirlik çerezini yüklemek için adresi yazın", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha adresi gereklidir", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Geçersiz adres" - }, "done": { "message": "Tamam" }, - "accessibilityCookieSaved": { - "message": "Erişilebilirlik çerezi kaydedildi." - }, - "noAccessibilityCookieSaved": { - "message": "Erişilebilirlik çerezi kaydedilmedi" - }, "warning": { "message": "UYARI", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Kayıt ayrıntıları" + }, + "itemName": { + "message": "Kayıt adı" + }, + "loginCredentials": { + "message": "Hesap bilgileri" + }, + "additionalOptions": { + "message": "Ek seçenekler" + }, + "itemHistory": { + "message": "Kayıt geçmişi" + }, + "lastEdited": { + "message": "Son düzenlenme" + }, + "upload": { + "message": "Yükle" + }, "authorize": { "message": "Yetkilendir" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Taşı" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 aa75d37f54a..156c8610ba2 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -446,10 +446,10 @@ "message": "Додати поле" }, "editField": { - "message": "Edit field" + "message": "Редагувати поле" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Ви дійсно хочете остаточно видалити це вкладення?" }, "fieldType": { "message": "Тип поля" @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Новий запис" }, - "addNewFolder": { - "message": "Нова тека" - }, "view": { "message": "Переглянути" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Пароль файлу та підтвердження пароля відрізняються." }, - "hCaptchaUrl": { - "message": "URL-адреса hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Завантажити cookie спеціальних можливостей" - }, - "registerAccessibilityUser": { - "message": "Реєстрація користувача зі спеціальними можливостями", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Вставте нижче код, надісланий на вашу е-пошту" - }, - "enterhCaptchaUrl": { - "message": "Введіть URL-адресу для завантаження cookie спеціальних можливостей для hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Необхідно ввести URL-адресу hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Недійсна URL-адреса" - }, "done": { "message": "Виконано" }, - "accessibilityCookieSaved": { - "message": "Cookie спеціальних можливостей збережено!" - }, - "noAccessibilityCookieSaved": { - "message": "Немає збережених cookie особливих можливостей" - }, "warning": { "message": "ПОПЕРЕДЖЕННЯ", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Біометричне розблокування зараз недоступне з невідомої причини." }, + "itemDetails": { + "message": "Подробиці запису" + }, + "itemName": { + "message": "Назва запису" + }, + "loginCredentials": { + "message": "Облікові дані для входу" + }, + "additionalOptions": { + "message": "Додаткові налаштування" + }, + "itemHistory": { + "message": "Історія запису" + }, + "lastEdited": { + "message": "Востаннє редаговано" + }, + "upload": { + "message": "Вивантажити" + }, "authorize": { "message": "Авторизувати" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Перемістити" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Заощаджуйте час з автозаповненням" }, diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index 826b0033aa2..2fd354ed08b 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "Mục mới" }, - "addNewFolder": { - "message": "Thư mục mới" - }, "view": { "message": "Xem" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "“Mật khẩu tập tin” và “Nhập lại mật khẩu tập tin” không khớp." }, - "hCaptchaUrl": { - "message": "Địa chỉ hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "Tải cookie trợ năng" - }, - "registerAccessibilityUser": { - "message": "Đăng ký như người dùng trợ năng tại", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "Sao chép và dán liên kết được gửi tới email của bạn bên dưới" - }, - "enterhCaptchaUrl": { - "message": "Nhập địa chỉ để tải cookie trợ năng cho hCaptcha", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "Địa chỉ hCaptcha là bắt buộc", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "Địa chỉ không hợp lệ" - }, "done": { "message": "Xong" }, - "accessibilityCookieSaved": { - "message": "Đã lưu cookie trợ năng!" - }, - "noAccessibilityCookieSaved": { - "message": "Không có cookie trợ năng nào được lưu" - }, "warning": { "message": "CẢNH BÁO", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "Biometric unlock is currently unavailable for an unknown reason." }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "Authorize" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "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 703680440d8..7146a8698c3 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -446,10 +446,10 @@ "message": "添加字段" }, "editField": { - "message": "Edit field" + "message": "编辑字段" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "确定要永久删除此附件吗?" }, "fieldType": { "message": "字段类型" @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "新增项目" }, - "addNewFolder": { - "message": "新增文件夹" - }, "view": { "message": "查看" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "「文件密码」与「确认文件密码」不一致。" }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "加载无障碍 Cookie" - }, - "registerAccessibilityUser": { - "message": "注册为无障碍用户到", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "复制发送到您电子邮箱的链接然后粘贴在下方" - }, - "enterhCaptchaUrl": { - "message": "输入 URL 以加载 hCaptcha 的无障碍 Cookie", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha URL 必填", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "无效的 URL" - }, "done": { "message": "完成" }, - "accessibilityCookieSaved": { - "message": "无障碍 Cookie 已保存!" - }, - "noAccessibilityCookieSaved": { - "message": "未保存任何无障碍 Cookie!" - }, "warning": { "message": "警告", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "由于某个未知的原因,生物识别解锁当前不可用。" }, + "itemDetails": { + "message": "项目详细信息" + }, + "itemName": { + "message": "项目名称" + }, + "loginCredentials": { + "message": "登录凭据" + }, + "additionalOptions": { + "message": "附加选项" + }, + "itemHistory": { + "message": "项目历史记录" + }, + "lastEdited": { + "message": "最后编辑于" + }, + "upload": { + "message": "上传" + }, "authorize": { "message": "批准" }, @@ -3719,6 +3706,15 @@ "move": { "message": "移动" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "使用自动填充节省时间" }, diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index 0f99d4a3151..eeeaf9b152e 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -1103,9 +1103,6 @@ "addNewItem": { "message": "新增項目" }, - "addNewFolder": { - "message": "新增資料夾" - }, "view": { "message": "檢視" }, @@ -1725,40 +1722,9 @@ "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "「檔案密碼」與「確認檔案密碼」不一致。" }, - "hCaptchaUrl": { - "message": "hCaptcha URL", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "loadAccessibilityCookie": { - "message": "載入無障礙 Cookie" - }, - "registerAccessibilityUser": { - "message": "以無障礙使用者,在下述位置註冊:", - "description": "ex. Register as an accessibility user at hcaptcha.com" - }, - "copyPasteLink": { - "message": "複製寄到您信箱的連結然後貼在下方" - }, - "enterhCaptchaUrl": { - "message": "輸入 URL 以載入 hCaptcha 的無障礙 Cookie", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "hCaptchaUrlRequired": { - "message": "hCaptcha URL 為必填", - "description": "hCaptcha is the name of a website, should not be translated" - }, - "invalidUrl": { - "message": "無效的 URL" - }, "done": { "message": "完成" }, - "accessibilityCookieSaved": { - "message": "已儲存無障礙 Cookie!" - }, - "noAccessibilityCookieSaved": { - "message": "未儲存無障礙 Cookie" - }, "warning": { "message": "警告", "description": "WARNING (should stay in capitalized letters if the language permits)" @@ -3647,6 +3613,27 @@ "biometricsStatusHelptextUnavailableReasonUnknown": { "message": "基於不明原因,生物辨識解鎖無法使用。" }, + "itemDetails": { + "message": "Item details" + }, + "itemName": { + "message": "Item name" + }, + "loginCredentials": { + "message": "Login credentials" + }, + "additionalOptions": { + "message": "Additional options" + }, + "itemHistory": { + "message": "Item history" + }, + "lastEdited": { + "message": "Last edited" + }, + "upload": { + "message": "Upload" + }, "authorize": { "message": "授權" }, @@ -3719,6 +3706,15 @@ "move": { "message": "Move" }, + "newFolder": { + "message": "New folder" + }, + "folderName": { + "message": "Folder Name" + }, + "folderHintText": { + "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + }, "newLoginNudgeTitle": { "message": "Save time with autofill" }, From 5cf93921b579111a6a3736d70c0bee77023d8065 Mon Sep 17 00:00:00 2001 From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com> Date: Fri, 16 May 2025 16:05:17 +0100 Subject: [PATCH 10/29] Resolve the license issue (#14776) --- .../organization/organization-sponsorship-api.service.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts b/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts index bba24f7ed75..de0ff302737 100644 --- a/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts +++ b/libs/common/src/billing/services/organization/organization-sponsorship-api.service.ts @@ -16,7 +16,10 @@ export class OrganizationSponsorshipApiService ): Promise> { const r = await this.apiService.send( "GET", - "/organization/sponsorship/" + sponsoredOrgId + "/sponsored", + "/organization/sponsorship/" + + (this.platformUtilsService.isSelfHost() ? "self-hosted/" : "") + + sponsoredOrgId + + "/sponsored", null, true, true, From c8629b92d3514a376029e44209e2ff08c4faccd6 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 16 May 2025 17:11:18 +0200 Subject: [PATCH 11/29] [CL-694] Remove unused imports (#14795) * Remove unused imports * Remove more unused imports --- apps/web/src/app/layouts/web-layout.component.ts | 3 +-- .../app/dirt/access-intelligence/risk-insights.component.ts | 2 -- .../src/angular/two-factor-auth/two-factor-auth.component.ts | 4 +--- libs/components/src/table/table-scroll.component.ts | 2 -- libs/importer/src/components/import.component.ts | 2 -- .../vault-export-ui/src/components/export.component.ts | 1 - .../send-ui/src/send-form/components/send-form.component.ts | 4 ---- .../additional-options-section.component.ts | 2 -- .../autofill-options/autofill-options.component.ts | 2 -- .../card-details-section/card-details-section.component.ts | 2 -- .../src/cipher-form/components/cipher-form.component.ts | 4 ---- .../components/custom-fields/custom-fields.component.ts | 2 -- .../cipher-form/components/identity/identity.component.ts | 2 -- .../item-details/item-details-section.component.ts | 2 -- .../login-details-section/login-details-section.component.ts | 2 -- .../components/sshkey-section/sshkey-section.component.ts | 2 -- .../additional-options/additional-options.component.ts | 2 -- .../cipher-view/attachments/attachments-v2-view.component.ts | 2 -- .../autofill-options/autofill-options-view.component.ts | 2 -- .../cipher-view/card-details/card-details-view.component.ts | 4 ---- .../cipher-view/custom-fields/custom-fields-v2.component.ts | 2 -- .../cipher-view/item-details/item-details-v2.component.ts | 2 -- .../login-credentials/login-credentials-view.component.ts | 2 -- .../src/cipher-view/sshkey-sections/sshkey-view.component.ts | 5 ----- .../view-identity-sections.component.ts | 2 -- 25 files changed, 2 insertions(+), 59 deletions(-) diff --git a/apps/web/src/app/layouts/web-layout.component.ts b/apps/web/src/app/layouts/web-layout.component.ts index 840beaa2179..aa4de4cfee5 100644 --- a/apps/web/src/app/layouts/web-layout.component.ts +++ b/apps/web/src/app/layouts/web-layout.component.ts @@ -4,13 +4,12 @@ import { Component } from "@angular/core"; import { LayoutComponent } from "@bitwarden/components"; import { ProductSwitcherModule } from "./product-switcher/product-switcher.module"; -import { ToggleWidthComponent } from "./toggle-width.component"; @Component({ selector: "app-layout", templateUrl: "web-layout.component.html", standalone: true, - imports: [CommonModule, LayoutComponent, ProductSwitcherModule, ToggleWidthComponent], + imports: [CommonModule, LayoutComponent, ProductSwitcherModule], }) export class WebLayoutComponent { constructor() {} diff --git a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts index 5aca124a46a..e47e1851099 100644 --- a/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts +++ b/bitwarden_license/bit-web/src/app/dirt/access-intelligence/risk-insights.component.ts @@ -32,7 +32,6 @@ import { HeaderModule } from "@bitwarden/web-vault/app/layouts/header/header.mod import { AllApplicationsComponent } from "./all-applications.component"; import { CriticalApplicationsComponent } from "./critical-applications.component"; -import { NotifiedMembersTableComponent } from "./notified-members-table.component"; import { PasswordHealthMembersURIComponent } from "./password-health-members-uri.component"; import { PasswordHealthMembersComponent } from "./password-health-members.component"; import { PasswordHealthComponent } from "./password-health.component"; @@ -59,7 +58,6 @@ export enum RiskInsightsTabType { PasswordHealthComponent, PasswordHealthMembersComponent, PasswordHealthMembersURIComponent, - NotifiedMembersTableComponent, TabsModule, DrawerComponent, DrawerBodyComponent, diff --git a/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts b/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts index 6db56c8e484..91901fa3544 100644 --- a/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts +++ b/libs/auth/src/angular/two-factor-auth/two-factor-auth.component.ts @@ -10,7 +10,7 @@ import { } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { FormBuilder, ReactiveFormsModule, Validators } from "@angular/forms"; -import { ActivatedRoute, Router, RouterLink } from "@angular/router"; +import { ActivatedRoute, Router } from "@angular/router"; import { lastValueFrom, firstValueFrom } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; @@ -84,10 +84,8 @@ import { ReactiveFormsModule, FormFieldModule, AsyncActionsModule, - RouterLink, CheckboxModule, ButtonModule, - TwoFactorOptionsComponent, // used as dialog TwoFactorAuthAuthenticatorComponent, TwoFactorAuthEmailComponent, TwoFactorAuthDuoComponent, diff --git a/libs/components/src/table/table-scroll.component.ts b/libs/components/src/table/table-scroll.component.ts index e198da1aba0..e83dbbecc60 100644 --- a/libs/components/src/table/table-scroll.component.ts +++ b/libs/components/src/table/table-scroll.component.ts @@ -2,7 +2,6 @@ // @ts-strict-ignore import { CdkVirtualScrollViewport, - CdkVirtualScrollableWindow, CdkFixedSizeVirtualScroll, CdkVirtualForOf, } from "@angular/cdk/scrolling"; @@ -56,7 +55,6 @@ export class BitRowDef { imports: [ CommonModule, CdkVirtualScrollViewport, - CdkVirtualScrollableWindow, CdkFixedSizeVirtualScroll, CdkVirtualForOf, RowDirective, diff --git a/libs/importer/src/components/import.component.ts b/libs/importer/src/components/import.component.ts index 2c6354f5b5a..2fee88852b5 100644 --- a/libs/importer/src/components/import.component.ts +++ b/libs/importer/src/components/import.component.ts @@ -49,7 +49,6 @@ import { ButtonModule, CalloutModule, CardComponent, - ContainerComponent, DialogService, FormFieldModule, IconButtonModule, @@ -119,7 +118,6 @@ const safeProviders: SafeProvider[] = [ ImportLastPassComponent, RadioButtonModule, CardComponent, - ContainerComponent, SectionHeaderComponent, SectionComponent, LinkModule, diff --git a/libs/tools/export/vault-export/vault-export-ui/src/components/export.component.ts b/libs/tools/export/vault-export/vault-export-ui/src/components/export.component.ts index 71599c19ae0..0512b56e20d 100644 --- a/libs/tools/export/vault-export/vault-export-ui/src/components/export.component.ts +++ b/libs/tools/export/vault-export/vault-export-ui/src/components/export.component.ts @@ -80,7 +80,6 @@ import { ExportScopeCalloutComponent } from "./export-scope-callout.component"; CalloutModule, RadioButtonModule, ExportScopeCalloutComponent, - UserVerificationDialogComponent, PasswordStrengthV2Component, GeneratorServicesModule, ], diff --git a/libs/tools/send/send-ui/src/send-form/components/send-form.component.ts b/libs/tools/send/send-ui/src/send-form/components/send-form.component.ts index 3149307bdd5..13c00a6bb78 100644 --- a/libs/tools/send/send-ui/src/send-form/components/send-form.component.ts +++ b/libs/tools/send/send-ui/src/send-form/components/send-form.component.ts @@ -25,10 +25,8 @@ import { AsyncActionsModule, BitSubmitDirective, ButtonComponent, - CardComponent, FormFieldModule, ItemModule, - SectionComponent, SelectModule, ToastService, TypographyModule, @@ -52,8 +50,6 @@ import { SendDetailsComponent } from "./send-details/send-details.component"; ], imports: [ AsyncActionsModule, - CardComponent, - SectionComponent, TypographyModule, ItemModule, FormFieldModule, diff --git a/libs/vault/src/cipher-form/components/additional-options/additional-options-section.component.ts b/libs/vault/src/cipher-form/components/additional-options/additional-options-section.component.ts index 4d72a89e4e1..14f3494652a 100644 --- a/libs/vault/src/cipher-form/components/additional-options/additional-options-section.component.ts +++ b/libs/vault/src/cipher-form/components/additional-options/additional-options-section.component.ts @@ -13,7 +13,6 @@ import { CheckboxModule, FormFieldModule, LinkModule, - SectionComponent, SectionHeaderComponent, TypographyModule, } from "@bitwarden/components"; @@ -28,7 +27,6 @@ import { CustomFieldsComponent } from "../custom-fields/custom-fields.component" standalone: true, imports: [ CommonModule, - SectionComponent, SectionHeaderComponent, TypographyModule, JslibModule, diff --git a/libs/vault/src/cipher-form/components/autofill-options/autofill-options.component.ts b/libs/vault/src/cipher-form/components/autofill-options/autofill-options.component.ts index ac670a39335..ccbc792648e 100644 --- a/libs/vault/src/cipher-form/components/autofill-options/autofill-options.component.ts +++ b/libs/vault/src/cipher-form/components/autofill-options/autofill-options.component.ts @@ -22,7 +22,6 @@ import { FormFieldModule, IconButtonModule, LinkModule, - SectionComponent, SectionHeaderComponent, SelectModule, TypographyModule, @@ -43,7 +42,6 @@ interface UriField { standalone: true, imports: [ DragDropModule, - SectionComponent, SectionHeaderComponent, TypographyModule, JslibModule, diff --git a/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts b/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts index cb00c7d24f5..8086d2bf0c4 100644 --- a/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts +++ b/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts @@ -16,7 +16,6 @@ import { CardComponent, FormFieldModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, SelectModule, TypographyModule, @@ -30,7 +29,6 @@ import { CipherFormContainer } from "../../cipher-form-container"; standalone: true, imports: [ CardComponent, - SectionComponent, TypographyModule, FormFieldModule, ReactiveFormsModule, diff --git a/libs/vault/src/cipher-form/components/cipher-form.component.ts b/libs/vault/src/cipher-form/components/cipher-form.component.ts index eebfca65f36..08dc71c9886 100644 --- a/libs/vault/src/cipher-form/components/cipher-form.component.ts +++ b/libs/vault/src/cipher-form/components/cipher-form.component.ts @@ -26,10 +26,8 @@ import { AsyncActionsModule, BitSubmitDirective, ButtonComponent, - CardComponent, FormFieldModule, ItemModule, - SectionComponent, SelectModule, ToastService, TypographyModule, @@ -63,8 +61,6 @@ import { SshKeySectionComponent } from "./sshkey-section/sshkey-section.componen ], imports: [ AsyncActionsModule, - CardComponent, - SectionComponent, TypographyModule, ItemModule, FormFieldModule, diff --git a/libs/vault/src/cipher-form/components/custom-fields/custom-fields.component.ts b/libs/vault/src/cipher-form/components/custom-fields/custom-fields.component.ts index 49e9e109b74..5d43f52788a 100644 --- a/libs/vault/src/cipher-form/components/custom-fields/custom-fields.component.ts +++ b/libs/vault/src/cipher-form/components/custom-fields/custom-fields.component.ts @@ -37,7 +37,6 @@ import { FormFieldModule, IconButtonModule, LinkModule, - SectionComponent, SectionHeaderComponent, SelectModule, TypographyModule, @@ -79,7 +78,6 @@ export type CustomField = { FormsModule, FormFieldModule, ReactiveFormsModule, - SectionComponent, SectionHeaderComponent, TypographyModule, CardComponent, diff --git a/libs/vault/src/cipher-form/components/identity/identity.component.ts b/libs/vault/src/cipher-form/components/identity/identity.component.ts index f0c73002e97..3cc8e73697f 100644 --- a/libs/vault/src/cipher-form/components/identity/identity.component.ts +++ b/libs/vault/src/cipher-form/components/identity/identity.component.ts @@ -14,7 +14,6 @@ import { CardComponent, FormFieldModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, SelectModule, TypographyModule, @@ -31,7 +30,6 @@ import { CipherFormContainer } from "../../cipher-form-container"; ButtonModule, JslibModule, ReactiveFormsModule, - SectionComponent, SectionHeaderComponent, CardComponent, FormFieldModule, diff --git a/libs/vault/src/cipher-form/components/item-details/item-details-section.component.ts b/libs/vault/src/cipher-form/components/item-details/item-details-section.component.ts index dcbc4e8c92f..82615368b91 100644 --- a/libs/vault/src/cipher-form/components/item-details/item-details-section.component.ts +++ b/libs/vault/src/cipher-form/components/item-details/item-details-section.component.ts @@ -19,7 +19,6 @@ import { CardComponent, FormFieldModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, SelectItemView, SelectModule, @@ -38,7 +37,6 @@ import { CipherFormContainer } from "../../cipher-form-container"; standalone: true, imports: [ CardComponent, - SectionComponent, TypographyModule, FormFieldModule, ReactiveFormsModule, diff --git a/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts b/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts index 1d6ca760d3b..c6b8433dcfa 100644 --- a/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts +++ b/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts @@ -20,7 +20,6 @@ import { IconButtonModule, LinkModule, PopoverModule, - SectionComponent, SectionHeaderComponent, ToastService, TypographyModule, @@ -36,7 +35,6 @@ import { AutofillOptionsComponent } from "../autofill-options/autofill-options.c templateUrl: "./login-details-section.component.html", standalone: true, imports: [ - SectionComponent, ReactiveFormsModule, SectionHeaderComponent, TypographyModule, diff --git a/libs/vault/src/cipher-form/components/sshkey-section/sshkey-section.component.ts b/libs/vault/src/cipher-form/components/sshkey-section/sshkey-section.component.ts index 500bb886f7a..fcf2ba0d9f7 100644 --- a/libs/vault/src/cipher-form/components/sshkey-section/sshkey-section.component.ts +++ b/libs/vault/src/cipher-form/components/sshkey-section/sshkey-section.component.ts @@ -16,7 +16,6 @@ import { CardComponent, FormFieldModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, SelectModule, TypographyModule, @@ -32,7 +31,6 @@ import { CipherFormContainer } from "../../cipher-form-container"; standalone: true, imports: [ CardComponent, - SectionComponent, TypographyModule, FormFieldModule, ReactiveFormsModule, diff --git a/libs/vault/src/cipher-view/additional-options/additional-options.component.ts b/libs/vault/src/cipher-view/additional-options/additional-options.component.ts index 9f8f034d59b..0f2c99800f8 100644 --- a/libs/vault/src/cipher-view/additional-options/additional-options.component.ts +++ b/libs/vault/src/cipher-view/additional-options/additional-options.component.ts @@ -6,7 +6,6 @@ import { IconButtonModule, CardComponent, InputModule, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, @@ -22,7 +21,6 @@ import { CardComponent, IconButtonModule, InputModule, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, diff --git a/libs/vault/src/cipher-view/attachments/attachments-v2-view.component.ts b/libs/vault/src/cipher-view/attachments/attachments-v2-view.component.ts index f2249175f86..04e69fcccd6 100644 --- a/libs/vault/src/cipher-view/attachments/attachments-v2-view.component.ts +++ b/libs/vault/src/cipher-view/attachments/attachments-v2-view.component.ts @@ -15,7 +15,6 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { ItemModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, TypographyModule, } from "@bitwarden/components"; @@ -32,7 +31,6 @@ import { DownloadAttachmentComponent } from "../../components/download-attachmen JslibModule, ItemModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, TypographyModule, DownloadAttachmentComponent, diff --git a/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts b/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts index 9b12139b00e..bab37324993 100644 --- a/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts +++ b/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts @@ -14,7 +14,6 @@ import { CardComponent, FormFieldModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, TypographyModule, } from "@bitwarden/components"; @@ -27,7 +26,6 @@ import { CommonModule, JslibModule, CardComponent, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, diff --git a/libs/vault/src/cipher-view/card-details/card-details-view.component.ts b/libs/vault/src/cipher-view/card-details/card-details-view.component.ts index 95117adaa78..2d1b2800c79 100644 --- a/libs/vault/src/cipher-view/card-details/card-details-view.component.ts +++ b/libs/vault/src/cipher-view/card-details/card-details-view.component.ts @@ -9,8 +9,6 @@ import { EventType } from "@bitwarden/common/enums"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { - CardComponent, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, @@ -26,8 +24,6 @@ import { ReadOnlyCipherCardComponent } from "../read-only-cipher-card/read-only- imports: [ CommonModule, JslibModule, - CardComponent, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, diff --git a/libs/vault/src/cipher-view/custom-fields/custom-fields-v2.component.ts b/libs/vault/src/cipher-view/custom-fields/custom-fields-v2.component.ts index a8f4e1417b4..4d20eceb285 100644 --- a/libs/vault/src/cipher-view/custom-fields/custom-fields-v2.component.ts +++ b/libs/vault/src/cipher-view/custom-fields/custom-fields-v2.component.ts @@ -17,7 +17,6 @@ import { IconButtonModule, FormFieldModule, InputModule, - SectionComponent, SectionHeaderComponent, TypographyModule, CheckboxModule, @@ -37,7 +36,6 @@ import { VaultAutosizeReadOnlyTextArea } from "../../directives/readonly-textare IconButtonModule, FormFieldModule, InputModule, - SectionComponent, SectionHeaderComponent, TypographyModule, CheckboxModule, diff --git a/libs/vault/src/cipher-view/item-details/item-details-v2.component.ts b/libs/vault/src/cipher-view/item-details/item-details-v2.component.ts index 10452272895..1335df74bb9 100644 --- a/libs/vault/src/cipher-view/item-details/item-details-v2.component.ts +++ b/libs/vault/src/cipher-view/item-details/item-details-v2.component.ts @@ -11,7 +11,6 @@ import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { CardComponent, FormFieldModule, - SectionComponent, SectionHeaderComponent, TypographyModule, } from "@bitwarden/components"; @@ -26,7 +25,6 @@ import { OrgIconDirective } from "../../components/org-icon.directive"; CommonModule, JslibModule, CardComponent, - SectionComponent, SectionHeaderComponent, TypographyModule, OrgIconDirective, diff --git a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts index d99ac438f27..5f7d0b32201 100644 --- a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts +++ b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.ts @@ -23,7 +23,6 @@ import { PremiumUpgradePromptService } from "@bitwarden/common/vault/abstraction import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FormFieldModule, - SectionComponent, SectionHeaderComponent, TypographyModule, LinkModule, @@ -47,7 +46,6 @@ type TotpCodeValues = { imports: [ CommonModule, JslibModule, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, diff --git a/libs/vault/src/cipher-view/sshkey-sections/sshkey-view.component.ts b/libs/vault/src/cipher-view/sshkey-sections/sshkey-view.component.ts index d597f4d9408..7ac0f8a6726 100644 --- a/libs/vault/src/cipher-view/sshkey-sections/sshkey-view.component.ts +++ b/libs/vault/src/cipher-view/sshkey-sections/sshkey-view.component.ts @@ -7,15 +7,12 @@ import { JslibModule } from "@bitwarden/angular/jslib.module"; import { SshKeyView } from "@bitwarden/common/vault/models/view/ssh-key.view"; import { CardComponent, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, IconButtonModule, } from "@bitwarden/components"; -import { OrgIconDirective } from "../../components/org-icon.directive"; - @Component({ selector: "app-sshkey-view", templateUrl: "sshkey-view.component.html", @@ -24,10 +21,8 @@ import { OrgIconDirective } from "../../components/org-icon.directive"; CommonModule, JslibModule, CardComponent, - SectionComponent, SectionHeaderComponent, TypographyModule, - OrgIconDirective, FormFieldModule, IconButtonModule, ], diff --git a/libs/vault/src/cipher-view/view-identity-sections/view-identity-sections.component.ts b/libs/vault/src/cipher-view/view-identity-sections/view-identity-sections.component.ts index 80bf78abe6e..3b710812b36 100644 --- a/libs/vault/src/cipher-view/view-identity-sections/view-identity-sections.component.ts +++ b/libs/vault/src/cipher-view/view-identity-sections/view-identity-sections.component.ts @@ -6,7 +6,6 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FormFieldModule, IconButtonModule, - SectionComponent, SectionHeaderComponent, TypographyModule, } from "@bitwarden/components"; @@ -20,7 +19,6 @@ import { ReadOnlyCipherCardComponent } from "../read-only-cipher-card/read-only- imports: [ NgIf, JslibModule, - SectionComponent, SectionHeaderComponent, TypographyModule, FormFieldModule, From 32727e23dbaeaaa5701ebb1880539c67116c851e Mon Sep 17 00:00:00 2001 From: Daniel Riera Date: Fri, 16 May 2025 12:51:11 -0400 Subject: [PATCH 12/29] PM-21688 finalize a11y UX concerns misc (#14805) * PM-21688 finalize a11y UX concerns misc * add Close to close button for SR, handle error new item SR * fix hover state for badge * dynamic update button * fix types * Update apps/browser/src/autofill/content/components/lit-stories/mock-data.ts Co-authored-by: Jonathan Prusik * handle undefined --------- Co-authored-by: Jonathan Prusik --- apps/browser/src/_locales/en/messages.json | 4 ++++ .../content/components/buttons/action-button.ts | 4 ++++ .../content/components/buttons/badge-button.ts | 9 +++++++++ .../content/components/buttons/close-button.ts | 11 +++++++++-- .../content/components/cipher/cipher-action.ts | 6 ++++++ .../autofill/content/components/cipher/cipher-item.ts | 11 +++++++++-- .../lit-stories/buttons/close-button.lit-stories.ts | 2 ++ .../content/components/lit-stories/mock-data.ts | 1 + .../components/notification/confirmation/container.ts | 5 ++++- .../content/components/notification/container.ts | 1 + .../content/components/notification/header.ts | 5 ++++- 11 files changed, 53 insertions(+), 6 deletions(-) diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/autofill/content/components/buttons/action-button.ts b/apps/browser/src/autofill/content/components/buttons/action-button.ts index 41d92a0449d..8d8bfacec77 100644 --- a/apps/browser/src/autofill/content/components/buttons/action-button.ts +++ b/apps/browser/src/autofill/content/components/buttons/action-button.ts @@ -64,6 +64,10 @@ const actionButtonStyles = ({ disabled, theme }: { disabled: boolean; theme: The background-color: ${themes[theme].primary["700"]}; color: ${themes[theme].text.contrast}; } + :focus { + outline: 2px solid ${themes[theme].primary["600"]}; + outline-offset: 1px; + } `} svg { diff --git a/apps/browser/src/autofill/content/components/buttons/badge-button.ts b/apps/browser/src/autofill/content/components/buttons/badge-button.ts index 9852c07d47b..3cdd453ee1a 100644 --- a/apps/browser/src/autofill/content/components/buttons/badge-button.ts +++ b/apps/browser/src/autofill/content/components/buttons/badge-button.ts @@ -8,15 +8,19 @@ import { border, themes, typography, spacing } from "../constants/styles"; export type BadgeButtonProps = { buttonAction: (e: Event) => void; buttonText: string; + itemName: string; disabled?: boolean; theme: Theme; + username?: string; }; export function BadgeButton({ buttonAction, buttonText, disabled = false, + itemName, theme, + username, }: BadgeButtonProps) { const handleButtonClick = (event: Event) => { if (!disabled) { @@ -28,6 +32,7 @@ export function BadgeButton({ `; diff --git a/apps/browser/src/autofill/content/components/cipher/cipher-action.ts b/apps/browser/src/autofill/content/components/cipher/cipher-action.ts index 94bfa2c73c1..34ad5e1c9a9 100644 --- a/apps/browser/src/autofill/content/components/cipher/cipher-action.ts +++ b/apps/browser/src/autofill/content/components/cipher/cipher-action.ts @@ -8,8 +8,10 @@ import { I18n } from "../common-types"; export type CipherActionProps = { handleAction?: (e: Event) => void; i18n: I18n; + itemName: string; notificationType: typeof NotificationTypes.Change | typeof NotificationTypes.Add; theme: Theme; + username?: string; }; export function CipherAction({ @@ -17,14 +19,18 @@ export function CipherAction({ /* no-op */ }, i18n, + itemName, notificationType, theme, + username, }: CipherActionProps) { return notificationType === NotificationTypes.Change ? BadgeButton({ buttonAction: handleAction, buttonText: i18n.notificationUpdate, + itemName, theme, + username, }) : EditButton({ buttonAction: handleAction, diff --git a/apps/browser/src/autofill/content/components/cipher/cipher-item.ts b/apps/browser/src/autofill/content/components/cipher/cipher-item.ts index c290b68a291..ab3b57f535c 100644 --- a/apps/browser/src/autofill/content/components/cipher/cipher-item.ts +++ b/apps/browser/src/autofill/content/components/cipher/cipher-item.ts @@ -32,14 +32,21 @@ export function CipherItem({ notificationType, theme = ThemeTypes.Light, }: CipherItemProps) { - const { icon } = cipher; + const { icon, name, login } = cipher; const uri = (icon.imageEnabled && icon.image) || undefined; let cipherActionButton = null; if (notificationType === NotificationTypes.Change || notificationType === NotificationTypes.Add) { cipherActionButton = html`
- ${CipherAction({ handleAction, i18n, notificationType, theme })} + ${CipherAction({ + handleAction, + i18n, + itemName: name, + notificationType, + theme, + username: login?.username, + })}
`; } diff --git a/apps/browser/src/autofill/content/components/lit-stories/buttons/close-button.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/buttons/close-button.lit-stories.ts index 56e66654cb8..886c16c7515 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/buttons/close-button.lit-stories.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/buttons/close-button.lit-stories.ts @@ -3,6 +3,7 @@ import { Meta, StoryObj } from "@storybook/web-components"; import { ThemeTypes } from "@bitwarden/common/platform/enums/theme-type.enum"; import { CloseButton, CloseButtonProps } from "../../buttons/close-button"; +import { mockI18n } from "../mock-data"; export default { title: "Components/Buttons/Close Button", @@ -15,6 +16,7 @@ export default { handleCloseNotification: () => { alert("Close button clicked!"); }, + i18n: mockI18n, }, parameters: { design: { diff --git a/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts b/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts index 7ca347ecb14..81cdf5a50f3 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts @@ -127,6 +127,7 @@ export const mockI18n = { notificationUnlock: "Unlock", notificationUnlockDesc: "Unlock your Bitwarden vault to complete the autofill request.", notificationViewAria: `View $ITEMNAME$, opens in new window`, + notificationNewItemAria: "New Item, opens in new window", saveAction: "Save", saveAsNewLoginAction: "Save as new login", saveFailure: "Error saving", diff --git a/apps/browser/src/autofill/content/components/notification/confirmation/container.ts b/apps/browser/src/autofill/content/components/notification/confirmation/container.ts index d4d66c7a7be..fc6ae4a353b 100644 --- a/apps/browser/src/autofill/content/components/notification/confirmation/container.ts +++ b/apps/browser/src/autofill/content/components/notification/confirmation/container.ts @@ -45,7 +45,9 @@ export function NotificationConfirmationContainer({ const headerMessage = getHeaderMessage(i18n, type, error); const confirmationMessage = getConfirmationMessage(i18n, type, error); const buttonText = error ? i18n.newItem : i18n.view; - const buttonAria = chrome.i18n.getMessage("notificationViewAria", [itemName]); + const buttonAria = error + ? i18n.notificationNewItemAria + : chrome.i18n.getMessage("notificationViewAria", [itemName]); let messageDetails: string | undefined; let remainingTasksCount: number | undefined; @@ -68,6 +70,7 @@ export function NotificationConfirmationContainer({
${NotificationHeader({ handleCloseNotification, + i18n, message: headerMessage, theme, })} diff --git a/apps/browser/src/autofill/content/components/notification/container.ts b/apps/browser/src/autofill/content/components/notification/container.ts index 94adb1e2549..313e3eecf01 100644 --- a/apps/browser/src/autofill/content/components/notification/container.ts +++ b/apps/browser/src/autofill/content/components/notification/container.ts @@ -53,6 +53,7 @@ export function NotificationContainer({
${NotificationHeader({ handleCloseNotification, + i18n, message: headerMessage, theme, })} diff --git a/apps/browser/src/autofill/content/components/notification/header.ts b/apps/browser/src/autofill/content/components/notification/header.ts index b2f8962917b..3d657b77ecd 100644 --- a/apps/browser/src/autofill/content/components/notification/header.ts +++ b/apps/browser/src/autofill/content/components/notification/header.ts @@ -4,6 +4,7 @@ import { html } from "lit"; import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; import { CloseButton } from "../buttons/close-button"; +import { I18n } from "../common-types"; import { spacing, themes } from "../constants/styles"; import { BrandIconContainer } from "../icons/brand-icon-container"; @@ -16,6 +17,7 @@ const { css } = createEmotion({ }); export type NotificationHeaderProps = { + i18n: I18n; message?: string; standalone?: boolean; theme: Theme; @@ -23,6 +25,7 @@ export type NotificationHeaderProps = { }; export function NotificationHeader({ + i18n, message, standalone = false, theme = ThemeTypes.Light, @@ -35,7 +38,7 @@ export function NotificationHeader({
${showIcon ? BrandIconContainer({ theme }) : null} ${message ? NotificationHeaderMessage({ message, theme }) : null} - ${isDismissable ? CloseButton({ handleCloseNotification, theme }) : null} + ${isDismissable ? CloseButton({ handleCloseNotification, i18n, theme }) : null}
`; } From 27042e8023e4bfabdaea6583417d06fa65518819 Mon Sep 17 00:00:00 2001 From: Brandon Treston Date: Fri, 16 May 2025 12:52:30 -0400 Subject: [PATCH 13/29] add useOrganizationDomains (#14023) --- .../src/admin-console/models/data/organization.data.spec.ts | 1 + .../common/src/admin-console/models/data/organization.data.ts | 2 ++ libs/common/src/admin-console/models/domain/organization.ts | 4 +++- .../models/response/profile-organization.response.ts | 2 ++ .../key-connector/services/key-connector.service.spec.ts | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/common/src/admin-console/models/data/organization.data.spec.ts b/libs/common/src/admin-console/models/data/organization.data.spec.ts index 7d66e7bc0d5..a6a2caa49c7 100644 --- a/libs/common/src/admin-console/models/data/organization.data.spec.ts +++ b/libs/common/src/admin-console/models/data/organization.data.spec.ts @@ -58,6 +58,7 @@ describe("ORGANIZATIONS state", () => { familySponsorshipLastSyncDate: new Date(), userIsManagedByOrganization: false, useRiskInsights: false, + useOrganizationDomains: false, useAdminSponsoredFamilies: false, isAdminInitiated: false, }, diff --git a/libs/common/src/admin-console/models/data/organization.data.ts b/libs/common/src/admin-console/models/data/organization.data.ts index e0783957117..16f6f90f347 100644 --- a/libs/common/src/admin-console/models/data/organization.data.ts +++ b/libs/common/src/admin-console/models/data/organization.data.ts @@ -21,6 +21,7 @@ export class OrganizationData { use2fa: boolean; useApi: boolean; useSso: boolean; + useOrganizationDomains: boolean; useKeyConnector: boolean; useScim: boolean; useCustomPermissions: boolean; @@ -87,6 +88,7 @@ export class OrganizationData { this.use2fa = response.use2fa; this.useApi = response.useApi; this.useSso = response.useSso; + this.useOrganizationDomains = response.useOrganizationDomains; this.useKeyConnector = response.useKeyConnector; this.useScim = response.useScim; this.useCustomPermissions = response.useCustomPermissions; diff --git a/libs/common/src/admin-console/models/domain/organization.ts b/libs/common/src/admin-console/models/domain/organization.ts index 1864d56649b..f8de5293913 100644 --- a/libs/common/src/admin-console/models/domain/organization.ts +++ b/libs/common/src/admin-console/models/domain/organization.ts @@ -28,6 +28,7 @@ export class Organization { use2fa: boolean; useApi: boolean; useSso: boolean; + useOrganizationDomains: boolean; useKeyConnector: boolean; useScim: boolean; useCustomPermissions: boolean; @@ -111,6 +112,7 @@ export class Organization { this.use2fa = obj.use2fa; this.useApi = obj.useApi; this.useSso = obj.useSso; + this.useOrganizationDomains = obj.useOrganizationDomains; this.useKeyConnector = obj.useKeyConnector; this.useScim = obj.useScim; this.useCustomPermissions = obj.useCustomPermissions; @@ -281,7 +283,7 @@ export class Organization { } get canManageDomainVerification() { - return (this.isAdmin || this.permissions.manageSso) && this.useSso; + return (this.isAdmin || this.permissions.manageSso) && this.useOrganizationDomains; } get canManageScim() { diff --git a/libs/common/src/admin-console/models/response/profile-organization.response.ts b/libs/common/src/admin-console/models/response/profile-organization.response.ts index 3a86c764eb8..6e451ce9808 100644 --- a/libs/common/src/admin-console/models/response/profile-organization.response.ts +++ b/libs/common/src/admin-console/models/response/profile-organization.response.ts @@ -14,6 +14,7 @@ export class ProfileOrganizationResponse extends BaseResponse { use2fa: boolean; useApi: boolean; useSso: boolean; + useOrganizationDomains: boolean; useKeyConnector: boolean; useScim: boolean; useCustomPermissions: boolean; @@ -70,6 +71,7 @@ export class ProfileOrganizationResponse extends BaseResponse { this.use2fa = this.getResponseProperty("Use2fa"); this.useApi = this.getResponseProperty("UseApi"); this.useSso = this.getResponseProperty("UseSso"); + this.useOrganizationDomains = this.getResponseProperty("UseOrganizationDomains"); this.useKeyConnector = this.getResponseProperty("UseKeyConnector") ?? false; this.useScim = this.getResponseProperty("UseScim") ?? false; this.useCustomPermissions = this.getResponseProperty("UseCustomPermissions") ?? false; diff --git a/libs/common/src/key-management/key-connector/services/key-connector.service.spec.ts b/libs/common/src/key-management/key-connector/services/key-connector.service.spec.ts index b88ada56129..eff3fc7f47c 100644 --- a/libs/common/src/key-management/key-connector/services/key-connector.service.spec.ts +++ b/libs/common/src/key-management/key-connector/services/key-connector.service.spec.ts @@ -315,6 +315,7 @@ describe("KeyConnectorService", () => { name: "TEST_KEY_CONNECTOR_ORG", usePolicies: true, useSso: true, + useOrganizationDomains: true, useKeyConnector: usesKeyConnector, useScim: true, useGroups: true, From d16a5cb73e54724171202d90d1f6ff1f192befd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20=C3=85berg?= Date: Fri, 16 May 2025 19:30:47 +0200 Subject: [PATCH 14/29] Revert "PM-21553: Added support for credential.toJSON() (#14734)" (#14819) This reverts commit df8d184889ef9accf5d07c3d740eb976d30dffea. --- .../autofill/fido2/utils/webauthn-utils.ts | 2 - .../platform/services/fido2/fido2-utils.ts | 39 ------------------- 2 files changed, 41 deletions(-) diff --git a/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts b/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts index 0cccd91876d..c8bcf5faa4b 100644 --- a/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts +++ b/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts @@ -88,7 +88,6 @@ export class WebauthnUtils { getClientExtensionResults: () => ({ credProps: result.extensions.credProps, }), - toJSON: () => Fido2Utils.createResultToJson(result), } as PublicKeyCredential; // Modify prototype chains to fix `instanceof` calls. @@ -135,7 +134,6 @@ export class WebauthnUtils { } as AuthenticatorAssertionResponse, getClientExtensionResults: () => ({}), authenticatorAttachment: "platform", - toJSON: () => Fido2Utils.getResultToJson(result), } as PublicKeyCredential; // Modify prototype chains to fix `instanceof` calls. diff --git a/libs/common/src/platform/services/fido2/fido2-utils.ts b/libs/common/src/platform/services/fido2/fido2-utils.ts index 6413eeade04..b9f3c8f8c48 100644 --- a/libs/common/src/platform/services/fido2/fido2-utils.ts +++ b/libs/common/src/platform/services/fido2/fido2-utils.ts @@ -1,45 +1,6 @@ // FIXME: Update this file to be type safe and remove this and next line -import type { - AssertCredentialResult, - CreateCredentialResult, -} from "../../abstractions/fido2/fido2-client.service.abstraction"; - // @ts-strict-ignore export class Fido2Utils { - static createResultToJson(result: CreateCredentialResult): any { - return { - id: result.credentialId, - rawId: result.credentialId, - response: { - clientDataJSON: result.clientDataJSON, - authenticatorData: result.authData, - transports: result.transports, - publicKey: result.publicKey, - publicKeyAlgorithm: result.publicKeyAlgorithm, - attestationObject: result.attestationObject, - }, - authenticatorAttachment: "platform", - clientExtensionResults: result.extensions, - type: "public-key", - }; - } - - static getResultToJson(result: AssertCredentialResult): any { - return { - id: result.credentialId, - rawId: result.credentialId, - response: { - clientDataJSON: result.clientDataJSON, - authenticatorData: result.authenticatorData, - signature: result.signature, - userHandle: result.userHandle, - }, - authenticatorAttachment: "platform", - clientExtensionResults: {}, - type: "public-key", - }; - } - static bufferToString(bufferSource: BufferSource): string { return Fido2Utils.fromBufferToB64(Fido2Utils.bufferSourceToUint8Array(bufferSource)) .replace(/\+/g, "-") From afbddeaf86d9e4092d262a0ac275cbf21803d00b Mon Sep 17 00:00:00 2001 From: rr-bw <102181210+rr-bw@users.noreply.github.com> Date: Fri, 16 May 2025 10:41:46 -0700 Subject: [PATCH 15/29] refactor(set-change-password): [Auth/PM-18458] Create new ChangePasswordComponent (#14226) This PR creates a new ChangePasswordComponent. The first use-case of the ChangePasswordComponent is to place it inside a new PasswordSettingsComponent, which is accessed by going to Account Settings > Security. The ChangePasswordComponent will be updated in future PRs to handle more change password scenarios. Feature Flags: PM16117_ChangeExistingPasswordRefactor --- .../core/services/change-password/index.ts | 1 + .../web-change-password.service.spec.ts | 63 +++ .../web-change-password.service.ts | 34 ++ apps/web/src/app/auth/core/services/index.ts | 1 + .../web-registration-finish.service.spec.ts | 28 +- .../settings/change-password.component.ts | 5 +- .../password-settings.component.html | 10 + .../password-settings.component.ts | 35 ++ .../security/security-routing.module.ts | 27 +- .../settings/security/security.component.html | 2 +- .../settings/security/security.component.ts | 9 + .../complete-trial-initiation.component.html | 177 ++++---- .../complete-trial-initiation.component.ts | 5 +- apps/web/src/app/core/core.module.ts | 13 + apps/web/src/locales/en/messages.json | 4 +- .../src/services/jslib-services.module.ts | 11 + .../change-password.component.html | 20 + .../change-password.component.ts | 110 +++++ .../change-password.service.abstraction.ts | 36 ++ .../default-change-password.service.spec.ts | 177 ++++++++ .../default-change-password.service.ts | 59 +++ libs/auth/src/angular/index.ts | 5 + .../input-password.component.html | 36 +- .../input-password.component.ts | 411 ++++++++++++++---- .../angular/input-password/input-password.mdx | 169 +++++-- .../input-password/input-password.stories.ts | 94 +++- .../input-password/password-input-result.ts | 19 +- ...efault-registration-finish.service.spec.ts | 14 +- .../default-registration-finish.service.ts | 6 +- .../registration-finish.component.html | 2 +- .../registration-finish.component.ts | 3 +- .../default-set-password-jit.service.spec.ts | 14 +- .../default-set-password-jit.service.ts | 26 +- .../set-password-jit.component.html | 5 +- .../set-password-jit.component.ts | 14 +- .../set-password-jit.service.abstraction.ts | 12 +- libs/common/src/enums/feature-flag.enum.ts | 2 + 37 files changed, 1349 insertions(+), 310 deletions(-) create mode 100644 apps/web/src/app/auth/core/services/change-password/index.ts create mode 100644 apps/web/src/app/auth/core/services/change-password/web-change-password.service.spec.ts create mode 100644 apps/web/src/app/auth/core/services/change-password/web-change-password.service.ts create mode 100644 apps/web/src/app/auth/settings/security/password-settings/password-settings.component.html create mode 100644 apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts create mode 100644 libs/auth/src/angular/change-password/change-password.component.html create mode 100644 libs/auth/src/angular/change-password/change-password.component.ts create mode 100644 libs/auth/src/angular/change-password/change-password.service.abstraction.ts create mode 100644 libs/auth/src/angular/change-password/default-change-password.service.spec.ts create mode 100644 libs/auth/src/angular/change-password/default-change-password.service.ts diff --git a/apps/web/src/app/auth/core/services/change-password/index.ts b/apps/web/src/app/auth/core/services/change-password/index.ts new file mode 100644 index 00000000000..9b2aa1c0143 --- /dev/null +++ b/apps/web/src/app/auth/core/services/change-password/index.ts @@ -0,0 +1 @@ +export * from "./web-change-password.service"; diff --git a/apps/web/src/app/auth/core/services/change-password/web-change-password.service.spec.ts b/apps/web/src/app/auth/core/services/change-password/web-change-password.service.spec.ts new file mode 100644 index 00000000000..45abfe4720a --- /dev/null +++ b/apps/web/src/app/auth/core/services/change-password/web-change-password.service.spec.ts @@ -0,0 +1,63 @@ +import { mock, MockProxy } from "jest-mock-extended"; + +import { ChangePasswordService } from "@bitwarden/auth/angular"; +import { Account } from "@bitwarden/common/auth/abstractions/account.service"; +import { MasterPasswordApiService } from "@bitwarden/common/auth/abstractions/master-password-api.service.abstraction"; +import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; +import { UserId } from "@bitwarden/common/types/guid"; +import { KeyService } from "@bitwarden/key-management"; +import { UserKeyRotationService } from "@bitwarden/web-vault/app/key-management/key-rotation/user-key-rotation.service"; + +import { WebChangePasswordService } from "./web-change-password.service"; + +describe("WebChangePasswordService", () => { + let keyService: MockProxy; + let masterPasswordApiService: MockProxy; + let masterPasswordService: MockProxy; + let userKeyRotationService: MockProxy; + + let sut: ChangePasswordService; + + const userId = "userId" as UserId; + const user: Account = { + id: userId, + email: "email", + emailVerified: false, + name: "name", + }; + + const currentPassword = "currentPassword"; + const newPassword = "newPassword"; + const newPasswordHint = "newPasswordHint"; + + beforeEach(() => { + keyService = mock(); + masterPasswordApiService = mock(); + masterPasswordService = mock(); + userKeyRotationService = mock(); + + sut = new WebChangePasswordService( + keyService, + masterPasswordApiService, + masterPasswordService, + userKeyRotationService, + ); + }); + + describe("rotateUserKeyMasterPasswordAndEncryptedData()", () => { + it("should call the method with the same name on the UserKeyRotationService with the correct arguments", async () => { + // Arrange & Act + await sut.rotateUserKeyMasterPasswordAndEncryptedData( + currentPassword, + newPassword, + user, + newPasswordHint, + ); + + // Assert + expect( + userKeyRotationService.rotateUserKeyMasterPasswordAndEncryptedData, + ).toHaveBeenCalledWith(currentPassword, newPassword, user, newPasswordHint); + }); + }); +}); diff --git a/apps/web/src/app/auth/core/services/change-password/web-change-password.service.ts b/apps/web/src/app/auth/core/services/change-password/web-change-password.service.ts new file mode 100644 index 00000000000..b75aef0f1fc --- /dev/null +++ b/apps/web/src/app/auth/core/services/change-password/web-change-password.service.ts @@ -0,0 +1,34 @@ +import { ChangePasswordService, DefaultChangePasswordService } from "@bitwarden/auth/angular"; +import { Account } from "@bitwarden/common/auth/abstractions/account.service"; +import { MasterPasswordApiService } from "@bitwarden/common/auth/abstractions/master-password-api.service.abstraction"; +import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; +import { KeyService } from "@bitwarden/key-management"; +import { UserKeyRotationService } from "@bitwarden/web-vault/app/key-management/key-rotation/user-key-rotation.service"; + +export class WebChangePasswordService + extends DefaultChangePasswordService + implements ChangePasswordService +{ + constructor( + protected keyService: KeyService, + protected masterPasswordApiService: MasterPasswordApiService, + protected masterPasswordService: InternalMasterPasswordServiceAbstraction, + private userKeyRotationService: UserKeyRotationService, + ) { + super(keyService, masterPasswordApiService, masterPasswordService); + } + + override async rotateUserKeyMasterPasswordAndEncryptedData( + currentPassword: string, + newPassword: string, + user: Account, + newPasswordHint: string, + ): Promise { + await this.userKeyRotationService.rotateUserKeyMasterPasswordAndEncryptedData( + currentPassword, + newPassword, + user, + newPasswordHint, + ); + } +} diff --git a/apps/web/src/app/auth/core/services/index.ts b/apps/web/src/app/auth/core/services/index.ts index 11c8dd98872..5539e3b76ea 100644 --- a/apps/web/src/app/auth/core/services/index.ts +++ b/apps/web/src/app/auth/core/services/index.ts @@ -1,3 +1,4 @@ +export * from "./change-password"; export * from "./login"; export * from "./login-decryption-options"; export * from "./webauthn-login"; diff --git a/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts b/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts index edce551342e..fe3b0837aa8 100644 --- a/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts +++ b/apps/web/src/app/auth/core/services/registration/web-registration-finish.service.spec.ts @@ -185,11 +185,11 @@ describe("WebRegistrationFinishService", () => { emailVerificationToken = "emailVerificationToken"; masterKey = new SymmetricCryptoKey(new Uint8Array(64).buffer as CsprngArray) as MasterKey; passwordInputResult = { - masterKey: masterKey, - serverMasterKeyHash: "serverMasterKeyHash", - localMasterKeyHash: "localMasterKeyHash", + newMasterKey: masterKey, + newServerMasterKeyHash: "newServerMasterKeyHash", + newLocalMasterKeyHash: "newLocalMasterKeyHash", kdfConfig: DEFAULT_KDF_CONFIG, - hint: "hint", + newPasswordHint: "newPasswordHint", newPassword: "newPassword", }; @@ -231,8 +231,8 @@ describe("WebRegistrationFinishService", () => { expect.objectContaining({ email, emailVerificationToken: emailVerificationToken, - masterPasswordHash: passwordInputResult.serverMasterKeyHash, - masterPasswordHint: passwordInputResult.hint, + masterPasswordHash: passwordInputResult.newServerMasterKeyHash, + masterPasswordHint: passwordInputResult.newPasswordHint, userSymmetricKey: userKeyEncString.encryptedString, userAsymmetricKeys: { publicKey: userKeyPair[0], @@ -267,8 +267,8 @@ describe("WebRegistrationFinishService", () => { expect.objectContaining({ email, emailVerificationToken: undefined, - masterPasswordHash: passwordInputResult.serverMasterKeyHash, - masterPasswordHint: passwordInputResult.hint, + masterPasswordHash: passwordInputResult.newServerMasterKeyHash, + masterPasswordHint: passwordInputResult.newPasswordHint, userSymmetricKey: userKeyEncString.encryptedString, userAsymmetricKeys: { publicKey: userKeyPair[0], @@ -308,8 +308,8 @@ describe("WebRegistrationFinishService", () => { expect.objectContaining({ email, emailVerificationToken: undefined, - masterPasswordHash: passwordInputResult.serverMasterKeyHash, - masterPasswordHint: passwordInputResult.hint, + masterPasswordHash: passwordInputResult.newServerMasterKeyHash, + masterPasswordHint: passwordInputResult.newPasswordHint, userSymmetricKey: userKeyEncString.encryptedString, userAsymmetricKeys: { publicKey: userKeyPair[0], @@ -351,8 +351,8 @@ describe("WebRegistrationFinishService", () => { expect.objectContaining({ email, emailVerificationToken: undefined, - masterPasswordHash: passwordInputResult.serverMasterKeyHash, - masterPasswordHint: passwordInputResult.hint, + masterPasswordHash: passwordInputResult.newServerMasterKeyHash, + masterPasswordHint: passwordInputResult.newPasswordHint, userSymmetricKey: userKeyEncString.encryptedString, userAsymmetricKeys: { publicKey: userKeyPair[0], @@ -396,8 +396,8 @@ describe("WebRegistrationFinishService", () => { expect.objectContaining({ email, emailVerificationToken: undefined, - masterPasswordHash: passwordInputResult.serverMasterKeyHash, - masterPasswordHint: passwordInputResult.hint, + masterPasswordHash: passwordInputResult.newServerMasterKeyHash, + masterPasswordHint: passwordInputResult.newPasswordHint, userSymmetricKey: userKeyEncString.encryptedString, userAsymmetricKeys: { publicKey: userKeyPair[0], diff --git a/apps/web/src/app/auth/settings/change-password.component.ts b/apps/web/src/app/auth/settings/change-password.component.ts index f1ba9281f69..1d95a498694 100644 --- a/apps/web/src/app/auth/settings/change-password.component.ts +++ b/apps/web/src/app/auth/settings/change-password.component.ts @@ -29,6 +29,9 @@ import { KdfConfigService, KeyService } from "@bitwarden/key-management"; import { UserKeyRotationService } from "../../key-management/key-rotation/user-key-rotation.service"; +/** + * @deprecated use the auth `PasswordSettingsComponent` instead + */ @Component({ selector: "app-change-password", templateUrl: "change-password.component.html", @@ -132,7 +135,7 @@ export class ChangePasswordComponent content: this.i18nService.t("updateEncryptionKeyWarning") + " " + - this.i18nService.t("updateEncryptionKeyExportWarning") + + this.i18nService.t("updateEncryptionKeyAccountExportWarning") + " " + this.i18nService.t("rotateEncKeyConfirmation"), type: "warning", 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 new file mode 100644 index 00000000000..94cf08b5871 --- /dev/null +++ b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.html @@ -0,0 +1,10 @@ +
+

{{ "changeMasterPassword" | i18n }}

+
+ +
+ {{ "loggedOutWarning" | i18n }} + +
+ + diff --git a/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts new file mode 100644 index 00000000000..ee30543fba2 --- /dev/null +++ b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts @@ -0,0 +1,35 @@ +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { firstValueFrom } from "rxjs"; + +import { ChangePasswordComponent, InputPasswordFlow } from "@bitwarden/auth/angular"; +import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; +import { CalloutModule } from "@bitwarden/components"; +import { I18nPipe } from "@bitwarden/ui-common"; + +import { WebauthnLoginSettingsModule } from "../../webauthn-login-settings"; + +@Component({ + standalone: true, + selector: "app-password-settings", + templateUrl: "password-settings.component.html", + imports: [CalloutModule, ChangePasswordComponent, I18nPipe, WebauthnLoginSettingsModule], +}) +export class PasswordSettingsComponent implements OnInit { + inputPasswordFlow = InputPasswordFlow.ChangePasswordWithOptionalUserKeyRotation; + + constructor( + private router: Router, + private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, + ) {} + + async ngOnInit() { + const userHasMasterPassword = await firstValueFrom( + this.userDecryptionOptionsService.hasMasterPassword$, + ); + if (!userHasMasterPassword) { + await this.router.navigate(["/settings/security/two-factor"]); + return; + } + } +} diff --git a/apps/web/src/app/auth/settings/security/security-routing.module.ts b/apps/web/src/app/auth/settings/security/security-routing.module.ts index 6ed21605184..14d4aab8a36 100644 --- a/apps/web/src/app/auth/settings/security/security-routing.module.ts +++ b/apps/web/src/app/auth/settings/security/security-routing.module.ts @@ -1,10 +1,14 @@ import { NgModule } from "@angular/core"; import { RouterModule, Routes } from "@angular/router"; +import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; + import { ChangePasswordComponent } from "../change-password.component"; import { TwoFactorSetupComponent } from "../two-factor/two-factor-setup.component"; import { DeviceManagementComponent } from "./device-management.component"; +import { PasswordSettingsComponent } from "./password-settings/password-settings.component"; import { SecurityKeysComponent } from "./security-keys.component"; import { SecurityComponent } from "./security.component"; @@ -14,10 +18,31 @@ const routes: Routes = [ component: SecurityComponent, data: { titleId: "security" }, children: [ - { path: "", pathMatch: "full", redirectTo: "change-password" }, + { path: "", pathMatch: "full", redirectTo: "password" }, { path: "change-password", component: ChangePasswordComponent, + canActivate: [ + canAccessFeature( + FeatureFlag.PM16117_ChangeExistingPasswordRefactor, + false, + "/settings/security/password", + false, + ), + ], + data: { titleId: "masterPassword" }, + }, + { + path: "password", + component: PasswordSettingsComponent, + canActivate: [ + canAccessFeature( + FeatureFlag.PM16117_ChangeExistingPasswordRefactor, + true, + "/settings/security/change-password", + false, + ), + ], data: { titleId: "masterPassword" }, }, { diff --git a/apps/web/src/app/auth/settings/security/security.component.html b/apps/web/src/app/auth/settings/security/security.component.html index 6bd7c1daf36..355a33d4427 100644 --- a/apps/web/src/app/auth/settings/security/security.component.html +++ b/apps/web/src/app/auth/settings/security/security.component.html @@ -1,7 +1,7 @@ - {{ "masterPassword" | i18n }} + {{ "masterPassword" | i18n }} {{ "twoStepLogin" | i18n }} {{ "devices" | i18n }} diff --git a/apps/web/src/app/auth/settings/security/security.component.ts b/apps/web/src/app/auth/settings/security/security.component.ts index 4f70a19e378..41b1af17abb 100644 --- a/apps/web/src/app/auth/settings/security/security.component.ts +++ b/apps/web/src/app/auth/settings/security/security.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; @Component({ @@ -10,6 +11,7 @@ import { ConfigService } from "@bitwarden/common/platform/abstractions/config/co }) export class SecurityComponent implements OnInit { showChangePassword = true; + changePasswordRoute = "change-password"; constructor( private userVerificationService: UserVerificationService, @@ -18,5 +20,12 @@ export class SecurityComponent implements OnInit { async ngOnInit() { this.showChangePassword = await this.userVerificationService.hasMasterPassword(); + + const changePasswordRefreshFlag = await this.configService.getFeatureFlag( + FeatureFlag.PM16117_ChangeExistingPasswordRefactor, + ); + if (changePasswordRefreshFlag) { + this.changePasswordRoute = "password"; + } } } diff --git a/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.html b/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.html index 078c926891a..7f093842b6a 100644 --- a/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.html +++ b/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.html @@ -1,89 +1,100 @@ -
- -
- + + + + + + + +
+} diff --git a/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts b/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts index 93f2bc021cd..215035a0d16 100644 --- a/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts +++ b/apps/web/src/app/billing/trial-initiation/complete-trial-initiation/complete-trial-initiation.component.ts @@ -52,7 +52,8 @@ export type InitiationPath = export class CompleteTrialInitiationComponent implements OnInit, OnDestroy { @ViewChild("stepper", { static: false }) verticalStepper: VerticalStepperComponent; - InputPasswordFlow = InputPasswordFlow; + inputPasswordFlow = InputPasswordFlow.AccountRegistration; + initializing = true; /** Password Manager or Secrets Manager */ product: ProductType; @@ -203,6 +204,8 @@ export class CompleteTrialInitiationComponent implements OnInit, OnDestroy { .subscribe(() => { this.orgInfoFormGroup.controls.name.markAsTouched(); }); + + this.initializing = false; } ngOnDestroy(): void { diff --git a/apps/web/src/app/core/core.module.ts b/apps/web/src/app/core/core.module.ts index 48e884f252c..e812edd8f32 100644 --- a/apps/web/src/app/core/core.module.ts +++ b/apps/web/src/app/core/core.module.ts @@ -34,6 +34,7 @@ import { LoginDecryptionOptionsService, TwoFactorAuthComponentService, TwoFactorAuthDuoComponentService, + ChangePasswordService, } from "@bitwarden/auth/angular"; import { InternalUserDecryptionOptionsServiceAbstraction, @@ -110,6 +111,7 @@ import { DefaultSshImportPromptService, SshImportPromptService } from "@bitwarde import { flagEnabled } from "../../utils/flags"; import { PolicyListService } from "../admin-console/core/policy-list.service"; import { + WebChangePasswordService, WebSetPasswordJitService, WebRegistrationFinishService, WebLoginComponentService, @@ -123,6 +125,7 @@ import { AcceptOrganizationInviteService } from "../auth/organization-invite/acc import { HtmlStorageService } from "../core/html-storage.service"; import { I18nService } from "../core/i18n.service"; import { WebFileDownloadService } from "../core/web-file-download.service"; +import { UserKeyRotationService } from "../key-management/key-rotation/user-key-rotation.service"; import { WebLockComponentService } from "../key-management/lock/services/web-lock-component.service"; import { WebProcessReloadService } from "../key-management/services/web-process-reload.service"; import { WebBiometricsService } from "../key-management/web-biometric.service"; @@ -373,6 +376,16 @@ const safeProviders: SafeProvider[] = [ useClass: DefaultSshImportPromptService, deps: [DialogService, ToastService, PlatformUtilsService, I18nServiceAbstraction], }), + safeProvider({ + provide: ChangePasswordService, + useClass: WebChangePasswordService, + deps: [ + KeyServiceAbstraction, + MasterPasswordApiService, + InternalMasterPasswordServiceAbstraction, + UserKeyRotationService, + ], + }), ]; @NgModule({ diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index cf2174cc1db..d526b2b76ff 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -4549,8 +4549,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 920d35a1017..a8638efba18 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -27,6 +27,8 @@ import { TwoFactorAuthComponentService, TwoFactorAuthEmailComponentService, TwoFactorAuthWebAuthnComponentService, + ChangePasswordService, + DefaultChangePasswordService, } from "@bitwarden/auth/angular"; import { AuthRequestApiService, @@ -1538,6 +1540,15 @@ const safeProviders: SafeProvider[] = [ useClass: DefaultCipherEncryptionService, deps: [SdkService, LogService], }), + safeProvider({ + provide: ChangePasswordService, + useClass: DefaultChangePasswordService, + deps: [ + KeyService, + MasterPasswordApiServiceAbstraction, + InternalMasterPasswordServiceAbstraction, + ], + }), ]; @NgModule({ diff --git a/libs/auth/src/angular/change-password/change-password.component.html b/libs/auth/src/angular/change-password/change-password.component.html new file mode 100644 index 00000000000..fff873225be --- /dev/null +++ b/libs/auth/src/angular/change-password/change-password.component.html @@ -0,0 +1,20 @@ +@if (initializing) { + + {{ "loading" | i18n }} +} @else { + + +} diff --git a/libs/auth/src/angular/change-password/change-password.component.ts b/libs/auth/src/angular/change-password/change-password.component.ts new file mode 100644 index 00000000000..51c4d03d16f --- /dev/null +++ b/libs/auth/src/angular/change-password/change-password.component.ts @@ -0,0 +1,110 @@ +import { Component, Input, OnInit } from "@angular/core"; +import { firstValueFrom } from "rxjs"; + +import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { MasterPasswordPolicyOptions } from "@bitwarden/common/admin-console/models/domain/master-password-policy-options"; +import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { SyncService } from "@bitwarden/common/platform/sync"; +import { UserId } from "@bitwarden/common/types/guid"; +import { ToastService } from "@bitwarden/components"; +import { I18nPipe } from "@bitwarden/ui-common"; + +import { + InputPasswordComponent, + InputPasswordFlow, +} from "../input-password/input-password.component"; +import { PasswordInputResult } from "../input-password/password-input-result"; + +import { ChangePasswordService } from "./change-password.service.abstraction"; + +@Component({ + standalone: true, + selector: "auth-change-password", + templateUrl: "change-password.component.html", + imports: [InputPasswordComponent, I18nPipe], +}) +export class ChangePasswordComponent implements OnInit { + @Input() inputPasswordFlow: InputPasswordFlow = InputPasswordFlow.ChangePassword; + + activeAccount: Account | null = null; + email?: string; + userId?: UserId; + masterPasswordPolicyOptions?: MasterPasswordPolicyOptions; + initializing = true; + submitting = false; + + constructor( + private accountService: AccountService, + private changePasswordService: ChangePasswordService, + private i18nService: I18nService, + private messagingService: MessagingService, + private policyService: PolicyService, + private toastService: ToastService, + private syncService: SyncService, + ) {} + + async ngOnInit() { + this.activeAccount = await firstValueFrom(this.accountService.activeAccount$); + this.userId = this.activeAccount?.id; + this.email = this.activeAccount?.email; + + if (!this.userId) { + throw new Error("userId not found"); + } + + this.masterPasswordPolicyOptions = await firstValueFrom( + this.policyService.masterPasswordPolicyOptions$(this.userId), + ); + + this.initializing = false; + } + + async handlePasswordFormSubmit(passwordInputResult: PasswordInputResult) { + this.submitting = true; + + try { + if (passwordInputResult.rotateUserKey) { + if (this.activeAccount == null) { + throw new Error("activeAccount not found"); + } + + if (passwordInputResult.currentPassword == null) { + throw new Error("currentPassword not found"); + } + + await this.syncService.fullSync(true); + + await this.changePasswordService.rotateUserKeyMasterPasswordAndEncryptedData( + passwordInputResult.currentPassword, + passwordInputResult.newPassword, + this.activeAccount, + passwordInputResult.newPasswordHint, + ); + } else { + if (!this.userId) { + throw new Error("userId not found"); + } + + await this.changePasswordService.changePassword(passwordInputResult, this.userId); + + this.toastService.showToast({ + variant: "success", + title: this.i18nService.t("masterPasswordChanged"), + message: this.i18nService.t("masterPasswordChangedDesc"), + }); + + this.messagingService.send("logout"); + } + } catch { + this.toastService.showToast({ + variant: "error", + title: "", + message: this.i18nService.t("errorOccurred"), + }); + } finally { + this.submitting = false; + } + } +} diff --git a/libs/auth/src/angular/change-password/change-password.service.abstraction.ts b/libs/auth/src/angular/change-password/change-password.service.abstraction.ts new file mode 100644 index 00000000000..b036db439f8 --- /dev/null +++ b/libs/auth/src/angular/change-password/change-password.service.abstraction.ts @@ -0,0 +1,36 @@ +import { PasswordInputResult } from "@bitwarden/auth/angular"; +import { Account } from "@bitwarden/common/auth/abstractions/account.service"; +import { UserId } from "@bitwarden/common/types/guid"; + +export abstract class ChangePasswordService { + /** + * Creates a new user key and re-encrypts all required data with it. + * - does so by calling the underlying method on the `UserKeyRotationService` + * - implemented in Web only + * + * @param currentPassword the current password + * @param newPassword the new password + * @param user the user account + * @param newPasswordHint the new password hint + * @throws if called from a non-Web client + */ + abstract rotateUserKeyMasterPasswordAndEncryptedData( + currentPassword: string, + newPassword: string, + user: Account, + newPasswordHint: string, + ): Promise; + + /** + * Changes the user's password and re-encrypts the user key with the `newMasterKey`. + * - Specifically, this method uses credentials from the `passwordInputResult` to: + * 1. Decrypt the user key with the `currentMasterKey` + * 2. Re-encrypt that user key with the `newMasterKey`, resulting in a `newMasterKeyEncryptedUserKey` + * 3. Build a `PasswordRequest` object that gets POSTed to `"/accounts/password"` + * + * @param passwordInputResult credentials object received from the `InputPasswordComponent` + * @param userId the `userId` + * @throws if the `userId`, `currentMasterKey`, or `currentServerMasterKeyHash` is not found + */ + abstract changePassword(passwordInputResult: PasswordInputResult, userId: UserId): Promise; +} diff --git a/libs/auth/src/angular/change-password/default-change-password.service.spec.ts b/libs/auth/src/angular/change-password/default-change-password.service.spec.ts new file mode 100644 index 00000000000..ab993859d70 --- /dev/null +++ b/libs/auth/src/angular/change-password/default-change-password.service.spec.ts @@ -0,0 +1,177 @@ +import { mock, MockProxy } from "jest-mock-extended"; + +import { Account } from "@bitwarden/common/auth/abstractions/account.service"; +import { MasterPasswordApiService } from "@bitwarden/common/auth/abstractions/master-password-api.service.abstraction"; +import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; +import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; +import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { UserId } from "@bitwarden/common/types/guid"; +import { MasterKey, UserKey } from "@bitwarden/common/types/key"; +import { KeyService, PBKDF2KdfConfig } from "@bitwarden/key-management"; + +import { PasswordInputResult } from "../input-password/password-input-result"; + +import { ChangePasswordService } from "./change-password.service.abstraction"; +import { DefaultChangePasswordService } from "./default-change-password.service"; + +describe("DefaultChangePasswordService", () => { + let keyService: MockProxy; + let masterPasswordApiService: MockProxy; + let masterPasswordService: MockProxy; + + let sut: ChangePasswordService; + + const userId = "userId" as UserId; + + const user: Account = { + id: userId, + email: "email", + emailVerified: false, + name: "name", + }; + + const passwordInputResult: PasswordInputResult = { + currentMasterKey: new SymmetricCryptoKey(new Uint8Array(32)) as MasterKey, + currentServerMasterKeyHash: "currentServerMasterKeyHash", + + newPassword: "newPassword", + newPasswordHint: "newPasswordHint", + newMasterKey: new SymmetricCryptoKey(new Uint8Array(32)) as MasterKey, + newServerMasterKeyHash: "newServerMasterKeyHash", + newLocalMasterKeyHash: "newLocalMasterKeyHash", + + kdfConfig: new PBKDF2KdfConfig(), + }; + + const decryptedUserKey = new SymmetricCryptoKey(new Uint8Array(64)) as UserKey; + const newMasterKeyEncryptedUserKey: [UserKey, EncString] = [ + decryptedUserKey, + { encryptedString: "newMasterKeyEncryptedUserKey" } as EncString, + ]; + + beforeEach(() => { + keyService = mock(); + masterPasswordApiService = mock(); + masterPasswordService = mock(); + + sut = new DefaultChangePasswordService( + keyService, + masterPasswordApiService, + masterPasswordService, + ); + + masterPasswordService.decryptUserKeyWithMasterKey.mockResolvedValue(decryptedUserKey); + keyService.encryptUserKeyWithMasterKey.mockResolvedValue(newMasterKeyEncryptedUserKey); + }); + + describe("changePassword()", () => { + it("should call the postPassword() API method with a the correct PasswordRequest credentials", async () => { + // Act + await sut.changePassword(passwordInputResult, userId); + + // Assert + expect(masterPasswordApiService.postPassword).toHaveBeenCalledWith( + expect.objectContaining({ + masterPasswordHash: passwordInputResult.currentServerMasterKeyHash, + masterPasswordHint: passwordInputResult.newPasswordHint, + newMasterPasswordHash: passwordInputResult.newServerMasterKeyHash, + key: newMasterKeyEncryptedUserKey[1].encryptedString, + }), + ); + }); + + it("should call decryptUserKeyWithMasterKey and encryptUserKeyWithMasterKey", async () => { + // Act + await sut.changePassword(passwordInputResult, userId); + + // Assert + expect(masterPasswordService.decryptUserKeyWithMasterKey).toHaveBeenCalledWith( + passwordInputResult.currentMasterKey, + userId, + ); + expect(keyService.encryptUserKeyWithMasterKey).toHaveBeenCalledWith( + passwordInputResult.newMasterKey, + decryptedUserKey, + ); + }); + + it("should throw if a userId was not found", async () => { + // Arrange + const userId: null = null; + + // Act + const testFn = sut.changePassword(passwordInputResult, userId); + + // Assert + await expect(testFn).rejects.toThrow("userId not found"); + }); + + it("should throw if a currentMasterKey was not found", async () => { + // Arrange + const incorrectPasswordInputResult = { ...passwordInputResult }; + incorrectPasswordInputResult.currentMasterKey = null; + + // Act + const testFn = sut.changePassword(incorrectPasswordInputResult, userId); + + // Assert + await expect(testFn).rejects.toThrow( + "currentMasterKey or currentServerMasterKeyHash not found", + ); + }); + + it("should throw if a currentServerMasterKeyHash was not found", async () => { + // Arrange + const incorrectPasswordInputResult = { ...passwordInputResult }; + incorrectPasswordInputResult.currentServerMasterKeyHash = null; + + // Act + const testFn = sut.changePassword(incorrectPasswordInputResult, userId); + + // Assert + await expect(testFn).rejects.toThrow( + "currentMasterKey or currentServerMasterKeyHash not found", + ); + }); + + it("should throw an error if user key decryption fails", async () => { + // Arrange + masterPasswordService.decryptUserKeyWithMasterKey.mockResolvedValue(null); + + // Act + const testFn = sut.changePassword(passwordInputResult, userId); + + // Assert + await expect(testFn).rejects.toThrow("Could not decrypt user key"); + }); + + it("should throw an error if postPassword() fails", async () => { + // Arrange + masterPasswordApiService.postPassword.mockRejectedValueOnce(new Error("error")); + + // Act + const testFn = sut.changePassword(passwordInputResult, userId); + + // Assert + await expect(testFn).rejects.toThrow("Could not change password"); + expect(masterPasswordApiService.postPassword).toHaveBeenCalled(); + }); + }); + + describe("rotateUserKeyMasterPasswordAndEncryptedData()", () => { + it("should throw an error (the method is only implemented in Web)", async () => { + // Act + const testFn = sut.rotateUserKeyMasterPasswordAndEncryptedData( + "currentPassword", + "newPassword", + user, + "newPasswordHint", + ); + + // Assert + await expect(testFn).rejects.toThrow( + "rotateUserKeyMasterPasswordAndEncryptedData() is only implemented in Web", + ); + }); + }); +}); diff --git a/libs/auth/src/angular/change-password/default-change-password.service.ts b/libs/auth/src/angular/change-password/default-change-password.service.ts new file mode 100644 index 00000000000..315f979aad9 --- /dev/null +++ b/libs/auth/src/angular/change-password/default-change-password.service.ts @@ -0,0 +1,59 @@ +import { PasswordInputResult, ChangePasswordService } from "@bitwarden/auth/angular"; +import { Account } from "@bitwarden/common/auth/abstractions/account.service"; +import { MasterPasswordApiService } from "@bitwarden/common/auth/abstractions/master-password-api.service.abstraction"; +import { PasswordRequest } from "@bitwarden/common/auth/models/request/password.request"; +import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; +import { UserId } from "@bitwarden/common/types/guid"; +import { KeyService } from "@bitwarden/key-management"; + +export class DefaultChangePasswordService implements ChangePasswordService { + constructor( + protected keyService: KeyService, + protected masterPasswordApiService: MasterPasswordApiService, + protected masterPasswordService: InternalMasterPasswordServiceAbstraction, + ) {} + + async rotateUserKeyMasterPasswordAndEncryptedData( + currentPassword: string, + newPassword: string, + user: Account, + hint: string, + ): Promise { + throw new Error("rotateUserKeyMasterPasswordAndEncryptedData() is only implemented in Web"); + } + + async changePassword(passwordInputResult: PasswordInputResult, userId: UserId) { + if (!userId) { + throw new Error("userId not found"); + } + if (!passwordInputResult.currentMasterKey || !passwordInputResult.currentServerMasterKeyHash) { + throw new Error("currentMasterKey or currentServerMasterKeyHash not found"); + } + + const decryptedUserKey = await this.masterPasswordService.decryptUserKeyWithMasterKey( + passwordInputResult.currentMasterKey, + userId, + ); + + if (decryptedUserKey == null) { + throw new Error("Could not decrypt user key"); + } + + const newMasterKeyEncryptedUserKey = await this.keyService.encryptUserKeyWithMasterKey( + passwordInputResult.newMasterKey, + decryptedUserKey, + ); + + const request = new PasswordRequest(); + request.masterPasswordHash = passwordInputResult.currentServerMasterKeyHash; + request.newMasterPasswordHash = passwordInputResult.newServerMasterKeyHash; + request.masterPasswordHint = passwordInputResult.newPasswordHint; + request.key = newMasterKeyEncryptedUserKey[1].encryptedString as string; + + try { + await this.masterPasswordApiService.postPassword(request); + } catch { + throw new Error("Could not change password"); + } + } +} diff --git a/libs/auth/src/angular/index.ts b/libs/auth/src/angular/index.ts index 91d34a34838..f4f6cc71a42 100644 --- a/libs/auth/src/angular/index.ts +++ b/libs/auth/src/angular/index.ts @@ -8,6 +8,11 @@ export * from "./anon-layout/anon-layout-wrapper.component"; export * from "./anon-layout/anon-layout-wrapper-data.service"; export * from "./anon-layout/default-anon-layout-wrapper-data.service"; +// change password +export * from "./change-password/change-password.component"; +export * from "./change-password/change-password.service.abstraction"; +export * from "./change-password/default-change-password.service"; + // fingerprint dialog export * from "./fingerprint-dialog/fingerprint-dialog.component"; diff --git a/libs/auth/src/angular/input-password/input-password.component.html b/libs/auth/src/angular/input-password/input-password.component.html index 39995f9f44f..8955a7b40b1 100644 --- a/libs/auth/src/angular/input-password/input-password.component.html +++ b/libs/auth/src/angular/input-password/input-password.component.html @@ -6,8 +6,8 @@ {{ "currentMasterPass" | i18n }} @@ -58,12 +58,12 @@
- {{ "confirmMasterPassword" | i18n }} + {{ "confirmNewMasterPass" | i18n }} - - - `, + template: ``, }) class StoryDialogComponent { constructor(public dialogService: DialogService) {} @@ -41,14 +31,6 @@ class StoryDialogComponent { }, }); } - - openDrawer() { - this.dialogService.openDrawer(StoryDialogContentComponent, { - data: { - animal: "panda", - }, - }); - } } @Component({ @@ -83,37 +65,25 @@ export default { title: "Component Library/Dialogs/Service", component: StoryDialogComponent, decorators: [ - positionFixedWrapperDecorator(), moduleMetadata({ declarations: [StoryDialogContentComponent], imports: [ SharedModule, ButtonModule, - NoopAnimationsModule, DialogModule, IconButtonModule, DialogCloseDirective, DialogComponent, DialogTitleContainerDirective, - RouterTestingModule, - LayoutComponent, ], - providers: [DialogService], - }), - applicationConfig({ providers: [ + DialogService, { provide: I18nService, useFactory: () => { return new I18nMockService({ close: "Close", - search: "Search", - skipToContent: "Skip to content", - submenu: "submenu", - toggleCollapse: "toggle collapse", - toggleSideNavigation: "Toggle side navigation", - yes: "Yes", - no: "No", + loading: "Loading", }); }, }, @@ -130,21 +100,4 @@ export default { type Story = StoryObj; -export const Default: Story = { - play: async (context) => { - const canvas = context.canvasElement; - - const button = getAllByRole(canvas, "button")[0]; - await userEvent.click(button); - }, -}; - -/** Drawers must be a descendant of `bit-layout`. */ -export const Drawer: Story = { - play: async (context) => { - const canvas = context.canvasElement; - - const button = getAllByRole(canvas, "button")[1]; - await userEvent.click(button); - }, -}; +export const Default: Story = {}; diff --git a/libs/components/src/dialog/dialog.service.ts b/libs/components/src/dialog/dialog.service.ts index 409bf0a5b55..83aaaff470e 100644 --- a/libs/components/src/dialog/dialog.service.ts +++ b/libs/components/src/dialog/dialog.service.ts @@ -1,25 +1,31 @@ +// FIXME: Update this file to be type safe and remove this and next line +// @ts-strict-ignore import { - Dialog as CdkDialog, - DialogConfig as CdkDialogConfig, - DialogRef as CdkDialogRefBase, - DIALOG_DATA, - DialogCloseOptions, + DEFAULT_DIALOG_CONFIG, + Dialog, + DialogConfig, + DialogRef, + DIALOG_SCROLL_STRATEGY, } from "@angular/cdk/dialog"; -import { ComponentType, ScrollStrategy } from "@angular/cdk/overlay"; -import { ComponentPortal, Portal } from "@angular/cdk/portal"; -import { Injectable, Injector, TemplateRef, inject } from "@angular/core"; -import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; +import { ComponentType, Overlay, OverlayContainer, ScrollStrategy } from "@angular/cdk/overlay"; +import { + Inject, + Injectable, + Injector, + OnDestroy, + Optional, + SkipSelf, + TemplateRef, +} from "@angular/core"; import { NavigationEnd, Router } from "@angular/router"; -import { filter, firstValueFrom, map, Observable, Subject, switchMap } from "rxjs"; +import { filter, firstValueFrom, Subject, switchMap, takeUntil } from "rxjs"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { DrawerService } from "../drawer/drawer.service"; - import { SimpleConfigurableDialogComponent } from "./simple-dialog/simple-configurable-dialog/simple-configurable-dialog.component"; -import { SimpleDialogOptions } from "./simple-dialog/types"; +import { SimpleDialogOptions, Translation } from "./simple-dialog/types"; /** * The default `BlockScrollStrategy` does not work well with virtual scrolling. @@ -42,163 +48,61 @@ class CustomBlockScrollStrategy implements ScrollStrategy { detach() {} } -export abstract class DialogRef - implements Pick, "close" | "closed" | "disableClose" | "componentInstance"> -{ - abstract readonly isDrawer?: boolean; - - // --- From CdkDialogRef --- - abstract close(result?: R, options?: DialogCloseOptions): void; - abstract readonly closed: Observable; - abstract disableClose: boolean | undefined; - /** - * @deprecated - * Does not work with drawer dialogs. - **/ - abstract componentInstance: C | null; -} - -export type DialogConfig = Pick< - CdkDialogConfig, - "data" | "disableClose" | "ariaModal" | "positionStrategy" | "height" | "width" ->; - -class DrawerDialogRef implements DialogRef { - readonly isDrawer = true; - - private _closed = new Subject(); - closed = this._closed.asObservable(); - disableClose = false; - - /** The portal containing the drawer */ - portal?: Portal; - - constructor(private drawerService: DrawerService) {} - - close(result?: R, _options?: DialogCloseOptions): void { - if (this.disableClose) { - return; - } - this.drawerService.close(this.portal!); - this._closed.next(result); - this._closed.complete(); - } - - componentInstance: C | null = null; -} - -/** - * DialogRef that delegates functionality to the CDK implementation - **/ -export class CdkDialogRef implements DialogRef { - readonly isDrawer = false; - - /** This is not available until after construction, @see DialogService.open. */ - cdkDialogRefBase!: CdkDialogRefBase; - - // --- Delegated to CdkDialogRefBase --- - - close(result?: R, options?: DialogCloseOptions): void { - this.cdkDialogRefBase.close(result, options); - } - - get closed(): Observable { - return this.cdkDialogRefBase.closed; - } - - get disableClose(): boolean | undefined { - return this.cdkDialogRefBase.disableClose; - } - set disableClose(value: boolean | undefined) { - this.cdkDialogRefBase.disableClose = value; - } - - // Delegate the `componentInstance` property to the CDK DialogRef - get componentInstance(): C | null { - return this.cdkDialogRefBase.componentInstance; - } -} - @Injectable() -export class DialogService { - private dialog = inject(CdkDialog); - private drawerService = inject(DrawerService); - private injector = inject(Injector); - private router = inject(Router, { optional: true }); - private authService = inject(AuthService, { optional: true }); - private i18nService = inject(I18nService); +export class DialogService extends Dialog implements OnDestroy { + private _destroy$ = new Subject(); private backDropClasses = ["tw-fixed", "tw-bg-black", "tw-bg-opacity-30", "tw-inset-0"]; - private defaultScrollStrategy = new CustomBlockScrollStrategy(); - private activeDrawer: DrawerDialogRef | null = null; - constructor() { - /** - * TODO: This logic should exist outside of `libs/components`. - * @see https://bitwarden.atlassian.net/browse/CL-657 - **/ + private defaultScrollStrategy = new CustomBlockScrollStrategy(); + + constructor( + /** Parent class constructor */ + _overlay: Overlay, + _injector: Injector, + @Optional() @Inject(DEFAULT_DIALOG_CONFIG) _defaultOptions: DialogConfig, + @Optional() @SkipSelf() _parentDialog: Dialog, + _overlayContainer: OverlayContainer, + @Inject(DIALOG_SCROLL_STRATEGY) scrollStrategy: any, + + /** Not in parent class */ + @Optional() router: Router, + @Optional() authService: AuthService, + + protected i18nService: I18nService, + ) { + super(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy); + /** Close all open dialogs if the vault locks */ - if (this.router && this.authService) { - this.router.events + if (router && authService) { + router.events .pipe( filter((event) => event instanceof NavigationEnd), - switchMap(() => this.authService!.getAuthStatus()), + switchMap(() => authService.getAuthStatus()), filter((v) => v !== AuthenticationStatus.Unlocked), - takeUntilDestroyed(), + takeUntil(this._destroy$), ) .subscribe(() => this.closeAll()); } } - open( + override ngOnDestroy(): void { + this._destroy$.next(); + this._destroy$.complete(); + super.ngOnDestroy(); + } + + override open( componentOrTemplateRef: ComponentType | TemplateRef, config?: DialogConfig>, ): DialogRef { - /** - * This is a bit circular in nature: - * We need the DialogRef instance for the DI injector that is passed *to* `Dialog.open`, - * but we get the base CDK DialogRef instance *from* `Dialog.open`. - * - * To break the circle, we define CDKDialogRef as a wrapper for the CDKDialogRefBase. - * This allows us to create the class instance and provide the base instance later, almost like "deferred inheritance". - **/ - const ref = new CdkDialogRef(); - const injector = this.createInjector({ - data: config?.data, - dialogRef: ref, - }); - - // Merge the custom config with the default config - const _config = { + config = { backdropClass: this.backDropClasses, scrollStrategy: this.defaultScrollStrategy, - injector, ...config, }; - ref.cdkDialogRefBase = this.dialog.open(componentOrTemplateRef, _config); - return ref; - } - - /** Opens a dialog in the side drawer */ - openDrawer( - component: ComponentType, - config?: DialogConfig>, - ): DialogRef { - this.activeDrawer?.close(); - /** - * This is also circular. When creating the DrawerDialogRef, we do not yet have a portal instance to provide to the injector. - * Similar to `this.open`, we get around this with mutability. - */ - this.activeDrawer = new DrawerDialogRef(this.drawerService); - const portal = new ComponentPortal( - component, - null, - this.createInjector({ data: config?.data, dialogRef: this.activeDrawer }), - ); - this.activeDrawer.portal = portal; - this.drawerService.open(portal); - return this.activeDrawer; + return super.open(componentOrTemplateRef, config); } /** @@ -209,7 +113,8 @@ export class DialogService { */ async openSimpleDialog(simpleDialogOptions: SimpleDialogOptions): Promise { const dialogRef = this.openSimpleDialogRef(simpleDialogOptions); - return firstValueFrom(dialogRef.closed.pipe(map((v: boolean | undefined) => !!v))); + + return firstValueFrom(dialogRef.closed); } /** @@ -229,29 +134,20 @@ export class DialogService { }); } - /** Close all open dialogs */ - closeAll(): void { - return this.dialog.closeAll(); - } + protected translate(translation: string | Translation, defaultKey?: string): string { + if (translation == null && defaultKey == null) { + return null; + } - /** The injector that is passed to the opened dialog */ - private createInjector(opts: { data: unknown; dialogRef: DialogRef }): Injector { - return Injector.create({ - providers: [ - { - provide: DIALOG_DATA, - useValue: opts.data, - }, - { - provide: DialogRef, - useValue: opts.dialogRef, - }, - { - provide: CdkDialogRefBase, - useValue: opts.dialogRef, - }, - ], - parent: this.injector, - }); + if (translation == null) { + return this.i18nService.t(defaultKey); + } + + // Translation interface use implies we must localize. + if (typeof translation === "object") { + return this.i18nService.t(translation.key, ...(translation.placeholders ?? [])); + } + + return translation; } } diff --git a/libs/components/src/dialog/dialog/dialog.component.html b/libs/components/src/dialog/dialog/dialog.component.html index eaf7fc2beec..01f05985127 100644 --- a/libs/components/src/dialog/dialog/dialog.component.html +++ b/libs/components/src/dialog/dialog/dialog.component.html @@ -1,22 +1,12 @@ -@let isDrawer = dialogRef?.isDrawer;
- @let showHeaderBorder = !isDrawer || background === "alt" || bodyHasScrolledFrom().top;
-

} -

+
@@ -151,6 +90,72 @@ class KitchenSinkDialog { + + + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+ + What did foo say to bar? + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur + sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+
+
`, }) export class KitchenSinkMainComponent { @@ -163,7 +168,7 @@ export class KitchenSinkMainComponent { } openDrawer() { - this.dialogService.openDrawer(KitchenSinkDialog); + this.drawerOpen.set(true); } navItems = [ diff --git a/libs/components/src/stories/kitchen-sink/kitchen-sink.stories.ts b/libs/components/src/stories/kitchen-sink/kitchen-sink.stories.ts index d318e1b5f0e..f57a9de4e68 100644 --- a/libs/components/src/stories/kitchen-sink/kitchen-sink.stories.ts +++ b/libs/components/src/stories/kitchen-sink/kitchen-sink.stories.ts @@ -14,6 +14,7 @@ import { import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { DialogService } from "../../dialog"; import { LayoutComponent } from "../../layout"; import { I18nMockService } from "../../utils/i18n-mock.service"; import { positionFixedWrapperDecorator } from "../storybook-decorators"; @@ -38,20 +39,8 @@ export default { KitchenSinkTable, KitchenSinkToggleList, ], - }), - applicationConfig({ providers: [ - provideNoopAnimations(), - importProvidersFrom( - RouterModule.forRoot( - [ - { path: "", redirectTo: "bitwarden", pathMatch: "full" }, - { path: "bitwarden", component: KitchenSinkMainComponent }, - { path: "virtual-scroll", component: DialogVirtualScrollBlockComponent }, - ], - { useHash: true }, - ), - ), + DialogService, { provide: I18nService, useFactory: () => { @@ -69,6 +58,21 @@ export default { }, ], }), + applicationConfig({ + providers: [ + provideNoopAnimations(), + importProvidersFrom( + RouterModule.forRoot( + [ + { path: "", redirectTo: "bitwarden", pathMatch: "full" }, + { path: "bitwarden", component: KitchenSinkMainComponent }, + { path: "virtual-scroll", component: DialogVirtualScrollBlockComponent }, + ], + { useHash: true }, + ), + ), + ], + }), ], } as Meta; diff --git a/libs/components/src/table/table-scroll.component.html b/libs/components/src/table/table-scroll.component.html index 523912cd7ac..8f2c88ba3ad 100644 --- a/libs/components/src/table/table-scroll.component.html +++ b/libs/components/src/table/table-scroll.component.html @@ -1,5 +1,5 @@ diff --git a/libs/components/src/table/table-scroll.component.ts b/libs/components/src/table/table-scroll.component.ts index e83dbbecc60..9d81e3ffe83 100644 --- a/libs/components/src/table/table-scroll.component.ts +++ b/libs/components/src/table/table-scroll.component.ts @@ -20,8 +20,6 @@ import { TrackByFunction, } from "@angular/core"; -import { ScrollLayoutDirective } from "../layout"; - import { RowDirective } from "./row.directive"; import { TableComponent } from "./table.component"; @@ -58,7 +56,6 @@ export class BitRowDef { CdkFixedSizeVirtualScroll, CdkVirtualForOf, RowDirective, - ScrollLayoutDirective, ], }) export class TableScrollComponent diff --git a/libs/components/src/table/table.mdx b/libs/components/src/table/table.mdx index 59bf5b773a3..8d784190ed9 100644 --- a/libs/components/src/table/table.mdx +++ b/libs/components/src/table/table.mdx @@ -142,7 +142,7 @@ dataSource.filter = (data) => data.orgType === "family"; Rudimentary string filtering is supported out of the box with `TableDataSource.simpleStringFilter`. It works by converting each entry into a string of it's properties. The provided string is then -compared against the filter value using a simple `indexOf` check. For convenience, you can also just +compared against the filter value using a simple `indexOf` check. For convienence, you can also just pass a string directly. ```ts @@ -153,7 +153,7 @@ dataSource.filter = "search value"; ### Virtual Scrolling -It's heavily advised to use virtual scrolling if you expect the table to have any significant amount +It's heavily adviced to use virtual scrolling if you expect the table to have any significant amount of data. This is done by using the `bit-table-scroll` component instead of the `bit-table` component. This component behaves slightly different from the `bit-table` component. Instead of using the `*ngFor` directive to render the rows, you provide a `bitRowDef` template that will be @@ -178,14 +178,6 @@ height and align vertically. ``` -#### Deprecated approach - -Before `bit-table-scroll` was introduced, virtual scroll in tables was implemented manually via -constructs from Angular CDK. This included wrapping the table with a `cdk-virtual-scroll-viewport` -and targeting with `bit-layout`'s scroll container with the `bitScrollLayout` directive. - -This pattern is deprecated in favor of `bit-table-scroll`. - ## Accessibility - Always include a row or column header with your table; this allows assistive technology to better diff --git a/libs/components/src/table/table.stories.ts b/libs/components/src/table/table.stories.ts index d696e6077dd..e8ab24ee8b7 100644 --- a/libs/components/src/table/table.stories.ts +++ b/libs/components/src/table/table.stories.ts @@ -1,13 +1,6 @@ -import { RouterTestingModule } from "@angular/router/testing"; import { Meta, moduleMetadata, StoryObj } from "@storybook/angular"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; - import { countries } from "../form/countries"; -import { LayoutComponent } from "../layout"; -import { mockLayoutI18n } from "../layout/mocks"; -import { positionFixedWrapperDecorator } from "../stories/storybook-decorators"; -import { I18nMockService } from "../utils"; import { TableDataSource } from "./table-data-source"; import { TableModule } from "./table.module"; @@ -15,17 +8,8 @@ import { TableModule } from "./table.module"; export default { title: "Component Library/Table", decorators: [ - positionFixedWrapperDecorator(), moduleMetadata({ - imports: [TableModule, LayoutComponent, RouterTestingModule], - providers: [ - { - provide: I18nService, - useFactory: () => { - return new I18nMockService(mockLayoutI18n); - }, - }, - ], + imports: [TableModule], }), ], argTypes: { @@ -132,20 +116,18 @@ export const Scrollable: Story = { trackBy: (index: number, item: any) => item.id, }, template: ` - - - - Id - Name - Other - - - {{ row.id }} - {{ row.name }} - {{ row.other }} - - - + + + Id + Name + Other + + + {{ row.id }} + {{ row.name }} + {{ row.other }} + + `, }), }; @@ -162,19 +144,17 @@ export const Filterable: Story = { sortFn: (a: any, b: any) => a.id - b.id, }, template: ` - - - - - Name - Value - - - {{ row.name }} - {{ row.value }} - - - + + + + Name + Value + + + {{ row.name }} + {{ row.value }} + + `, }), }; diff --git a/libs/components/src/utils/has-scrolled-from.ts b/libs/components/src/utils/has-scrolled-from.ts deleted file mode 100644 index 44c73465bdd..00000000000 --- a/libs/components/src/utils/has-scrolled-from.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { CdkScrollable } from "@angular/cdk/scrolling"; -import { Signal, inject, signal } from "@angular/core"; -import { toObservable, toSignal } from "@angular/core/rxjs-interop"; -import { map, startWith, switchMap } from "rxjs"; - -export type ScrollState = { - /** `true` when the scrollbar is not at the top-most position */ - top: boolean; - - /** `true` when the scrollbar is not at the bottom-most position */ - bottom: boolean; -}; - -/** - * Check if a `CdkScrollable` instance has been scrolled - * @param scrollable The instance to check, defaults to the one provided by the current injector - * @returns {Signal} - */ -export const hasScrolledFrom = (scrollable?: Signal): Signal => { - const _scrollable = scrollable ?? signal(inject(CdkScrollable)); - const scrollable$ = toObservable(_scrollable); - - const scrollState$ = scrollable$.pipe( - switchMap((_scrollable) => - _scrollable.elementScrolled().pipe( - startWith(null), - map(() => ({ - top: _scrollable.measureScrollOffset("top") > 0, - bottom: _scrollable.measureScrollOffset("bottom") > 0, - })), - ), - ), - ); - - return toSignal(scrollState$, { - initialValue: { - top: false, - bottom: false, - }, - }); -}; From b7bbf99682b58f38810b56f680ec05c26e2596e7 Mon Sep 17 00:00:00 2001 From: SmithThe4th Date: Fri, 16 May 2025 17:33:33 -0400 Subject: [PATCH 24/29] Handle null or undefined fields (#14832) --- libs/common/src/vault/models/domain/fido2-credential.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/common/src/vault/models/domain/fido2-credential.ts b/libs/common/src/vault/models/domain/fido2-credential.ts index 7002a58150d..e4e874e367b 100644 --- a/libs/common/src/vault/models/domain/fido2-credential.ts +++ b/libs/common/src/vault/models/domain/fido2-credential.ts @@ -164,8 +164,8 @@ export class Fido2Credential extends Domain { keyCurve: this.keyCurve.toJSON(), keyValue: this.keyValue.toJSON(), rpId: this.rpId.toJSON(), - userHandle: this.userHandle.toJSON(), - userName: this.userName.toJSON(), + userHandle: this.userHandle?.toJSON(), + userName: this.userName?.toJSON(), counter: this.counter.toJSON(), rpName: this.rpName?.toJSON(), userDisplayName: this.userDisplayName?.toJSON(), From 0ec7ab47041bbf1406e2b50f3adc6faa876e80c3 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 19:04:06 +0000 Subject: [PATCH 25/29] Autosync the updated translations (#14834) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/desktop/src/locales/az/messages.json | 6 +++--- apps/desktop/src/locales/bg/messages.json | 6 +++--- apps/desktop/src/locales/cs/messages.json | 6 +++--- apps/desktop/src/locales/de/messages.json | 6 +++--- apps/desktop/src/locales/hu/messages.json | 6 +++--- apps/desktop/src/locales/lv/messages.json | 6 +++--- apps/desktop/src/locales/ru/messages.json | 6 +++--- apps/desktop/src/locales/sk/messages.json | 6 +++--- apps/desktop/src/locales/tr/messages.json | 6 +++--- apps/desktop/src/locales/zh_CN/messages.json | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index 0f856661551..459458bdb2a 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -3707,13 +3707,13 @@ "message": "Daşı" }, "newFolder": { - "message": "New folder" + "message": "Yeni qovluq" }, "folderName": { - "message": "Folder Name" + "message": "Qovluq adı" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Ana qovluğun adından sonra \"/\" əlavə edərək qovluğu ardıcıl yerləşdirin. Nümunə: Social/Forums" }, "newLoginNudgeTitle": { "message": "Avto-doldurma ilə vaxta qənaət edin" diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index 3a6054c2b52..6300ed3391f 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -3707,13 +3707,13 @@ "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": "Можете да вложите една папка в друга като въведете името на горната папка, а след това „/“. Пример: Социални/Форуми" }, "newLoginNudgeTitle": { "message": "Спестете време с автоматично попълване" diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index 5f01551a867..49cfc8823b7 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -3707,13 +3707,13 @@ "message": "Přesunout" }, "newFolder": { - "message": "New folder" + "message": "Nová složka" }, "folderName": { - "message": "Folder Name" + "message": "Název složky" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "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" }, "newLoginNudgeTitle": { "message": "Ušetřete čas s automatickým vyplňováním" diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index 5a01344185a..da1272ef300 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -3707,13 +3707,13 @@ "message": "Verschieben" }, "newFolder": { - "message": "New folder" + "message": "Neuer Ordner" }, "folderName": { - "message": "Folder Name" + "message": "Ordnername" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Verschachtel einen Ordner, indem du den Namen des übergeordneten Ordners hinzufügst, gefolgt von einem „/“. Beispiel: Sozial/Foren" }, "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index 8091cd72225..e56b62f9840 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -3707,13 +3707,13 @@ "message": "Áthelyezés" }, "newFolder": { - "message": "New folder" + "message": "Új mappa" }, "folderName": { - "message": "Folder Name" + "message": "Mappanév" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "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" }, "newLoginNudgeTitle": { "message": "Idő megtakarítás automatikus kitöltéssel" diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index a1e76b5a521..437aba39714 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -3707,13 +3707,13 @@ "message": "Pārvietot" }, "newFolder": { - "message": "New folder" + "message": "Jauna mape" }, "folderName": { - "message": "Folder Name" + "message": "Mapes nosaukums" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Apakšmapes var izveidot, ja pievieno iekļaujošās mapes nosaukumu, aiz kura ir \"/\". Piemēram: Tīklošanās/Forumi" }, "newLoginNudgeTitle": { "message": "Laika ietaupīšana ar automātisko aizpildi" diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index b61c03462a3..0e58487ae88 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -3707,13 +3707,13 @@ "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": "Создайте вложенную папку, добавив название родительской папки и символ \"/\". Пример: Сообщества/Форумы" }, "newLoginNudgeTitle": { "message": "Экономьте время с помощью автозаполнения" diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index 03c362d2cb3..d84b164e749 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -3707,13 +3707,13 @@ "message": "Presunúť" }, "newFolder": { - "message": "New folder" + "message": "Nový priečinok" }, "folderName": { - "message": "Folder Name" + "message": "Názov priečinka" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Vnorte priečinok pridaním názvu nadradeného priečinka a znaku \"/\". Príklad: Sociálne siete/Fóra" }, "newLoginNudgeTitle": { "message": "Ušetrite čas s automatickým vypĺňaním" diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 35fd2be4706..c6a59afda23 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -3707,13 +3707,13 @@ "message": "Taşı" }, "newFolder": { - "message": "New folder" + "message": "Yeni klasör" }, "folderName": { - "message": "Folder Name" + "message": "Klasör adı" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Üst klasörün adının sonuna “/” ekleyerek klasörleri iç içe koyabilirsiniz. Örnek: Sosyal/Forumlar" }, "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index 7146a8698c3..90cdb33fde5 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -3707,13 +3707,13 @@ "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": "通过在父文件夹名后面添加「/」来嵌套文件夹。示例:Social/Forums" }, "newLoginNudgeTitle": { "message": "使用自动填充节省时间" From dc776de2eb85ec5da104f87a84b85b9c3ab0ad9a Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 19:04:29 +0000 Subject: [PATCH 26/29] Autosync the updated translations (#14833) 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 | 8 +- apps/browser/src/_locales/be/messages.json | 4 + apps/browser/src/_locales/bg/messages.json | 8 +- 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 | 6 +- apps/browser/src/_locales/cy/messages.json | 4 + apps/browser/src/_locales/da/messages.json | 4 + apps/browser/src/_locales/de/messages.json | 18 +- 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 | 4 + apps/browser/src/_locales/fa/messages.json | 180 +++++++++--------- 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 | 4 + apps/browser/src/_locales/hi/messages.json | 4 + apps/browser/src/_locales/hr/messages.json | 4 + apps/browser/src/_locales/hu/messages.json | 6 +- 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 | 6 +- 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 | 6 +- 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 | 6 +- apps/browser/src/_locales/si/messages.json | 4 + apps/browser/src/_locales/sk/messages.json | 6 +- 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 | 4 + apps/browser/src/_locales/tr/messages.json | 6 +- apps/browser/src/_locales/uk/messages.json | 4 + apps/browser/src/_locales/vi/messages.json | 4 + apps/browser/src/_locales/zh_CN/messages.json | 6 +- apps/browser/src/_locales/zh_TW/messages.json | 4 + apps/browser/store/locales/fa/copy.resx | 60 +++--- 61 files changed, 377 insertions(+), 137 deletions(-) diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 3502f0fff4e..c96f4a5803b 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 81cbdfd8040..51eb1345466 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Yeni element, yeni bir pəncərədə açılır", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Saxlamazdan əvvəl düzəliş et", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1097,7 +1101,7 @@ "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "$ITEMTYPE$, $ITEMNAME$ seç", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Bu girişi saxlamaq üçün kilidi açın", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 1c7fb4ff57c..a51b96547da 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index e61e8c8567e..09e5260f9b3 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Нов елемент, отваря се в нов прозорец", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Редактиране преди запазване", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1097,7 +1101,7 @@ "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": { @@ -1117,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": { diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index ab9b880109e..5e19936e975 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 940c886fab5..f48037814e5 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index e8d276e67e7..151412c02ed 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index aa22beab63a..effc4c950c6 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Nová položka, otevře se v novém okně", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Upravit před uložením", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Odemknout pro uložení tohoto přihlášení", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index 3e037ae58d7..047b45dd9b8 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index edba6e56f4e..e6233b1f8db 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index a739a568479..1eac22c919c 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Neuer Eintrag, öffnet sich in neuem Fenster", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Vor dem Speichern bearbeiten", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1097,7 +1101,7 @@ "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "$ITEMTYPE$, $ITEMNAME$ auswählen", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Entsperren, um diese Zugangsdaten zu speichern", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -5265,7 +5269,7 @@ "message": "Speicher eine unbegrenzte Anzahl von Passwörtern auf unbegrenzt vielen Geräten mit Bitwarden-Apps für Smartphones, Browser und Desktop." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 Benachrichtigung" }, "emptyVaultNudgeTitle": { "message": "Vorhandene Passwörter importieren" @@ -5280,13 +5284,13 @@ "message": "Willkommen in deinem Tresor!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Einträge für die aktuelle Seite automatisch ausfüllen" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Favoriten-Einträge für einfachen Zugriff" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Deinen Tresor nach etwas anderem durchsuchen" }, "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" @@ -5338,6 +5342,6 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Du hast keine Berechtigung, diese Seite anzuzeigen. Versuche dich mit einem anderen Konto anzumelden." } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 723631f4d53..faad1a90a07 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index ac95545676c..d131d3ec33d 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index 008c93e4397..aa1c076b2e9 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 1ab96b99154..3018cd36ed4 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 15e07b5c508..5bce2142219 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 0c9af65128b..54b7b9b234c 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 2e2ce5203aa..f132b61fc4e 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "لوگو Bitwarden" }, "extName": { "message": "مدیریت رمز عبور Bitwarden", @@ -17,22 +17,22 @@ "message": "وارد شوید یا یک حساب کاربری بسازید تا به گاوصندوق امن‌تان دسترسی یابید." }, "inviteAccepted": { - "message": "Invitation accepted" + "message": "دعوتنامه پذیرفته شد" }, "createAccount": { "message": "ایجاد حساب کاربری" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "در Bitwarden تازه وارد هستید؟" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "با کلید عبور وارد شوید" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "استفاده از ورود تک مرحله‌ای" }, "welcomeBack": { - "message": "Welcome back" + "message": "خوش آمدید" }, "setAStrongPassword": { "message": "تنظیم رمز عبور قوی" @@ -65,7 +65,7 @@ "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", @@ -84,7 +84,7 @@ "message": "یادآور کلمه عبور اصلی (اختیاری)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "امتیاز قدرت کلمه عبور $SCORE$", "placeholders": { "score": { "content": "$1", @@ -93,10 +93,10 @@ } }, "joinOrganization": { - "message": "Join organization" + "message": "به سازمان بپیوندید" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "به $ORGANIZATIONNAME$ بپیوندید", "placeholders": { "organizationName": { "content": "$1", @@ -105,7 +105,7 @@ } }, "finishJoiningThisOrganizationBySettingAMasterPassword": { - "message": "Finish joining this organization by setting a master password." + "message": "با تعیین یک کلمه عبور اصلی، عضویت خود در این سازمان را کامل کنید." }, "tab": { "message": "زبانه" @@ -132,7 +132,7 @@ "message": "کپی کلمه عبور" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "کپی عبارت عبور" }, "copyNote": { "message": "کپی یادداشت" @@ -150,31 +150,31 @@ "message": "کپی کد امنیتی" }, "copyName": { - "message": "Copy name" + "message": "کپی نام" }, "copyCompany": { - "message": "Copy company" + "message": "کپی شرکت" }, "copySSN": { - "message": "Copy Social Security number" + "message": "کپی شماره کد ملی" }, "copyPassportNumber": { - "message": "Copy passport number" + "message": "کپی شماره گذرنامه" }, "copyLicenseNumber": { - "message": "Copy license number" + "message": "کپی شماره گواهینامه" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "کپی کلید خصوصی" }, "copyPublicKey": { - "message": "Copy public key" + "message": "کپی کلید عمومی" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "کپی اثر انگشت" }, "copyCustomField": { - "message": "Copy $FIELD$", + "message": "کپی $FIELD$", "placeholders": { "field": { "content": "$1", @@ -183,17 +183,17 @@ } }, "copyWebsite": { - "message": "Copy website" + "message": "کپی وب‌سایت" }, "copyNotes": { - "message": "Copy notes" + "message": "کپی یادداشت‌ها" }, "copy": { - "message": "Copy", + "message": "کپی", "description": "Copy to clipboard" }, "fill": { - "message": "Fill", + "message": "پر کردن", "description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible." }, "autoFill": { @@ -209,10 +209,10 @@ "message": "پر کردن خودکار هویت" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "پر کردن کد تأیید" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "پر کردن کد تأیید", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -255,16 +255,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": "دریافت یادآور کلمه عبور اصلی" @@ -291,13 +291,13 @@ "message": "تغییر کلمه عبور اصلی" }, "continueToWebApp": { - "message": "Continue to web app?" + "message": "با برنامه وب ادامه می‌دهید؟" }, "continueToWebAppDesc": { "message": "ویژگی‌های بیشتر حساب Bitwarden خود را در برنامه وب کاوش کنید." }, "continueToHelpCenter": { - "message": "Continue to Help Center?" + "message": "به مرکز راهنمایی ادامه می‌دهید؟" }, "continueToHelpCenterDesc": { "message": "درباره استفاده از Bitwarden در مرکز راهنما بیشتر بیاموزید." @@ -309,7 +309,7 @@ "message": "به دیگران کمک کنید تا بفهمند آیا Bitwarden برایشان مناسب است یا نه. به فروشگاه افزونه مرورگر خود بروید و نظر خود را به اشتراک بگذارید." }, "changeMasterPasswordOnWebConfirmation": { - "message": "You can change your master password on the Bitwarden web app." + "message": "می‌توانید کلمه عبور اصلی خود را در برنامه وب Bitwarden تغییر دهید." }, "fingerprintPhrase": { "message": "عبارت اثر انگشت", @@ -332,10 +332,10 @@ "message": "درباره" }, "moreFromBitwarden": { - "message": "More from Bitwarden" + "message": "موارد بیشتر از Bitwarden" }, "continueToBitwardenDotCom": { - "message": "Continue to bitwarden.com?" + "message": "به bitwarden.com ادامه می‌دهید؟" }, "bitwardenForBusiness": { "message": "Bitwarden برای کسب و کارها" @@ -344,25 +344,25 @@ "message": "تاییدکننده هویت Bitwarden" }, "continueToAuthenticatorPageDesc": { - "message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website" + "message": "احراز هویت کننده Bitwarden به شما امکان می‌دهد کلیدهای احراز هویت را ذخیره کرده و کدهای TOTP را برای فرآیندهای تأیید دومرحله‌ای تولید کنید. برای اطلاعات بیشتر به وب‌سایت bitwarden.com مراجعه کنید" }, "bitwardenSecretsManager": { - "message": "Bitwarden Secrets Manager" + "message": "مدیر اسرار Bitwarden" }, "continueToSecretsManagerPageDesc": { - "message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website." + "message": "اسرار توسعه دهنده را با مدیر اسرا Bitwarden به‌صورت ایمن ذخیره، مدیریت و به اشتراک بگذارید. برای اطلاعات بیشتر به وب‌سایت bitwarden.com مراجعه کنید." }, "passwordlessDotDev": { "message": "Passwordless.dev" }, "continueToPasswordlessDotDevPageDesc": { - "message": "Create smooth and secure login experiences free from traditional passwords with Passwordless.dev. Learn more on the bitwarden.com website." + "message": "با استفاده از Passwordless.dev تجربه‌های ورود روان و ایمنی را بدون نیاز به کلمات عبور سنتی ایجاد کنید. برای اطلاعات بیشتر به وب‌سایت bitwarden.com مراجعه کنید." }, "freeBitwardenFamilies": { "message": "خانواده‌های رایگان Bitwarden" }, "freeBitwardenFamiliesPageDesc": { - "message": "You are eligible for Free Bitwarden Families. Redeem this offer today in the web app." + "message": "شما واجد شرایط استفاده رایگان از Bitwarden Families هستید. این پیشنهاد را امروز در نسخه وب دریافت کنید." }, "version": { "message": "نسخه" @@ -383,7 +383,7 @@ "message": "ويرايش پوشه" }, "editFolderWithName": { - "message": "Edit folder: $FOLDERNAME$", + "message": "ویرایش پوشه: $FOLDERNAME$", "placeholders": { "foldername": { "content": "$1", @@ -392,22 +392,22 @@ } }, "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": "برای تو در تو کردن یک پوشه، نام پوشه والد را وارد کرده و سپس یک “/” اضافه کنید. مثال: Social/Forums" }, "noFoldersAdded": { - "message": "No folders added" + "message": "هیچ پوشه‌ای اضافه نشد" }, "createFoldersToOrganize": { - "message": "Create folders to organize your vault items" + "message": "برای سامان‌دهی موردهای گاوصندوق خود پوشه ایجاد کنید" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "مطمئنید می‌خواهید این پوشه را برای همیشه پاک کنید؟" }, "deleteFolder": { "message": "حذف پوشه" @@ -450,7 +450,7 @@ "message": "به طور خودکار کلمه‌های عبور قوی و منحصر به فرد برای ورود به سیستم خود ایجاد کنید." }, "bitWebVaultApp": { - "message": "Bitwarden web app" + "message": "برنامه وب Bitwarden" }, "importItems": { "message": "درون ریزی موارد" @@ -462,19 +462,19 @@ "message": "تولید کلمه عبور" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "تولید عبارت عبور" }, "passwordGenerated": { - "message": "Password generated" + "message": "کلمه عبور تولید شد" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "عبارت عبور تولید شد" }, "usernameGenerated": { - "message": "Username generated" + "message": "نام کاربری تولید شد" }, "emailGenerated": { - "message": "Email generated" + "message": "ایمیل تولید شد" }, "regeneratePassword": { "message": "تولید مجدد کلمه عبور" @@ -486,11 +486,11 @@ "message": "طول" }, "include": { - "message": "Include", + "message": "شامل", "description": "Card header for password generator include block" }, "uppercaseDescription": { - "message": "Include uppercase characters", + "message": "شامل حروف بزرگ باشد", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -498,7 +498,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": { @@ -506,7 +506,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": { @@ -514,7 +514,7 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Include special characters", + "message": "افزودن کاراکترهای خاص", "description": "Full description for the password generator special characters checkbox" }, "numWords": { @@ -537,11 +537,11 @@ "message": "حداقل حرف خاص" }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "از کاراکترهای مبهم خودداری کن", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "نیازمندی‌های سیاست سازمانی بر گزینه‌های تولید کننده شما اعمال شده‌اند.", "description": "Indicates that a policy limits the credential generator screen." }, "searchVault": { @@ -566,7 +566,7 @@ "message": "کلمه عبور" }, "totp": { - "message": "Authenticator secret" + "message": "کلید مخفی احراز کننده هویت‌" }, "passphrase": { "message": "عبارت عبور" @@ -587,7 +587,7 @@ "message": "یادداشت‌ها" }, "privateNote": { - "message": "Private note" + "message": "یادداشت خصوصی" }, "note": { "message": "یادداشت" @@ -608,10 +608,10 @@ "message": "راه اندازی" }, "launchWebsite": { - "message": "Launch website" + "message": "باز کردن وب‌سایت" }, "launchWebsiteName": { - "message": "Launch website $ITEMNAME$", + "message": "باز کردن وب‌سایت $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -632,19 +632,19 @@ "message": "ساير" }, "unlockMethods": { - "message": "Unlock options" + "message": "باز کردن امکانات" }, "unlockMethodNeededToChangeTimeoutActionDesc": { "message": "یک روش بازگشایی برای پایان زمان مجاز تنظیم کنید." }, "unlockMethodNeeded": { - "message": "Set up an unlock method in Settings" + "message": "یک روش باز کردن قفل را در تنظیمات راه‌اندازی کنید" }, "sessionTimeoutHeader": { - "message": "Session timeout" + "message": "پایان زمان نشست" }, "vaultTimeoutHeader": { - "message": "Vault timeout" + "message": "متوقف شدن گاو‌صندوق" }, "otherOptions": { "message": "سایر گزینه‌ها" @@ -656,25 +656,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": "ادامه ورود" }, "yourVaultIsLocked": { "message": "گاوصندوق شما قفل شده است. برای ادامه هویت خود را تأیید کنید." }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "گاوصندوق‌تان قفل شد" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "حساب شما قفل شده است" }, "or": { - "message": "or" + "message": "یا" }, "unlock": { "message": "باز کردن قفل" @@ -699,13 +699,13 @@ "message": "متوقف شدن گاو‌صندوق" }, "vaultTimeout1": { - "message": "Timeout" + "message": "پایان زمان" }, "lockNow": { "message": "الان قفل شود" }, "lockAll": { - "message": "Lock all" + "message": "قفل کردن همه" }, "immediately": { "message": "بلافاصله" @@ -753,16 +753,16 @@ "message": "امنیت" }, "confirmMasterPassword": { - "message": "Confirm master password" + "message": "تأیید کلمه عبور اصلی" }, "masterPassword": { - "message": "Master password" + "message": "کلمه عبور اصلی" }, "masterPassImportant": { - "message": "Your master password cannot be recovered if you forget it!" + "message": "کلمه‌های عبور اصلی در صورت فراموشی قابل بازیابی نیستند!" }, "masterPassHintLabel": { - "message": "Master password hint" + "message": "یادآور کلمه عبور اصلی" }, "errorOccurred": { "message": "خطایی رخ داده است" @@ -796,10 +796,10 @@ "message": "حساب کاربری جدید شما ساخته شد! حالا می‌توانید وارد شوید." }, "newAccountCreated2": { - "message": "Your new account has been created!" + "message": "حساب جدید شما ایجاد شده است!" }, "youHaveBeenLoggedIn": { - "message": "You have been logged in!" + "message": "شما با موفقیت وارد شدید!" }, "youSuccessfullyLoggedIn": { "message": "شما با موفقیت وارد شدید" @@ -814,7 +814,7 @@ "message": "کد تأیید مورد نیاز است." }, "webauthnCancelOrTimeout": { - "message": "The authentication was cancelled or took too long. Please try again." + "message": "احراز هویت لغو شد یا بیش از حد طول کشید. لطفاً دوباره تلاش کنید." }, "invalidVerificationCode": { "message": "کد تأیید نامعتبر است" @@ -833,7 +833,7 @@ "message": "ناتوان در پر کردن خودکار مورد انتخاب شده در این صفحه. اطلاعات را کپی و جای‌گذاری کنید." }, "totpCaptureError": { - "message": "Unable to scan QR code from the current webpage" + "message": "امکان اسکن کد QR از صفحه وب فعلی وجود ندارد" }, "totpCaptureSuccess": { "message": "کلید احراز هویت اضافه شد" @@ -890,10 +890,10 @@ "message": "Follow the steps below to finish logging in with your security key." }, "restartRegistration": { - "message": "Restart registration" + "message": "ثبت‌نام را دوباره آغاز کنید" }, "expiredLink": { - "message": "Expired link" + "message": "پیوند منقضی شد" }, "pleaseRestartRegistrationOrTryLoggingIn": { "message": "Please restart registration or try logging in." @@ -911,7 +911,7 @@ "message": "خیر" }, "location": { - "message": "Location" + "message": "موقعیت" }, "unexpectedError": { "message": "یک خطای غیر منتظره رخ داده است." @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index f28d82c201e..ead59384ff8 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Muokkaa ennen tallentamista", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index b15713a07a4..a7734899843 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 125cb19ea25..8a825082b5f 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index f65a26d2d1d..91a5121db16 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index d25d7c9f2dd..2e42a819b65 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 77a0b90c6be..8af1aa70cc3 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 8bf191cf6ec..557e465ea19 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index eabc67cde49..b47093bc2ee 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Új elem, megnyitás új ablakban", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Szerkesztés mentés előtt", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Feloldás a bejelentkezés mentéséhez", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 8d71d7a6ba2..03e47fca575 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Sunting sebelum menyimpan", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 16b77251cf4..d3d0dc9ec43 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 29455d9515b..e9c22c1286f 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index a888e84a154..d8397db5da8 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 737d91430b5..0459e007126 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index fd957ef5061..8add57d61ec 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 46b8eaddee1..06ff7cda8fa 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 24887061e71..e9044f4c041 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Jauns vienums, atvērsies jaunā logā", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Labot pirms saglabāšanas", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Jāatslēdz, lai saglabātu šo pieteikšanās vienumu", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 02c6e5ee14c..e6de809dfbd 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 4b418eff676..dd347d822c7 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index c4319d140da..62b55eb6501 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Rediger før du lagrer", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index d16080d962a..af637b2f4cd 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Nieuw Item, opent in nieuw venster", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Bewerken voor opslaan", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index bf6b4d8b70c..16696e5f828 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Nowy element, otwiera się w nowym oknie", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edytuj przed zapisaniem", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Odblokuj, aby zapisać ten login", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 293e72b6dc0..e5ca45500a5 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index d29f5848153..a4ed095c4db 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Novo item, abre numa nova janela", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Editar antes de guardar", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 08b0c93b2db..71990435ad2 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index f4e53e8c0d6..2d23c5352e5 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Новый элемент, откроется в новом окне", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Изменить перед сохранением", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,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": { diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index da35b2cc13f..308404946b3 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index a71aed7a8a2..e8d2993a8df 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Nová položka, otvorí sa v novom okne", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Upraviť pred uložením", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Odomknúť na uloženie prihlasovacích údajov", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 8ef5f1aef09..65ee31c888c 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index a60766ca944..255b8dfb924 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Уреди пре сачувавања", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index c6280ce5a44..3a063f8f066 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 61a6d73e52c..f436c45ab75 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index e528897676d..19430463090 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 0899f4bb196..700e9b73881 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "Yeni kayıt (yeni pencerede açılır)", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Kaydetmeden önce düzenle", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Bu hesabı kaydetmek için kilidi açın", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 6b7e6a18aaf..b0c78a17106 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Редагувати перед збереженням", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index afd801839a8..14649828aaf 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 73c7b9a4b0d..e0bc34bd47d 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "新增项目,在新窗口中打开", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "保存前编辑", "description": "Tooltip and Aria label for edit button on cipher item" @@ -1117,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": { diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 4d58c479838..e9eab0a726d 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -1071,6 +1071,10 @@ }, "description": "Aria label for the view button in notification bar confirmation message" }, + "notificationNewItemAria": { + "message": "New Item, opens in new window", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, "notificationEditTooltip": { "message": "Edit before saving", "description": "Tooltip and Aria label for edit button on cipher item" diff --git a/apps/browser/store/locales/fa/copy.resx b/apps/browser/store/locales/fa/copy.resx index 69816ce3590..2d45e114719 100644 --- a/apps/browser/store/locales/fa/copy.resx +++ b/apps/browser/store/locales/fa/copy.resx @@ -118,58 +118,58 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - مدیریت رمز عبور Bitwarden + مدیر کلمه عبور Bitwarden - در خانه، محل کار، یا در حال حرکت، Bitwarden به سادگی تمامی رمزهای عبور، passkeyها، و اطلاعات حساس شما را امن نگاه می‌دارد. + در خانه، محل کار، یا در حال حرکت، Bitwarden به سادگی تمامی کلمات عبور، کلیدها، و اطلاعات حساس شما را امن نگاه می‌دارد. - Recognized as the best password manager by PCMag, WIRED, The Verge, CNET, G2, and more! + شناخته‌شده به‌عنوان بهترین مدیر کلمه عبور توسط PCMag، WIRED، The Verge، CNET، G2 و دیگر منابع! -SECURE YOUR DIGITAL LIFE -Secure your digital life and protect against data breaches by generating and saving unique, strong passwords for every account. Maintain everything in an end-to-end encrypted password vault that only you can access. +امنیت زندگی دیجیتال شما +زندگی دیجیتال خود را ایمن کنید و با تولید و ذخیره کلمات عبور قوی و منحصر به فرد برای هر حساب کاربری، از نشت اطلاعات جلوگیری نمایید. همه چیز را در یک گاوصندوق کلمه عبور با رمزگذاری سرتاسری ذخیره کنید که فقط شما به آن دسترسی دارید. -ACCESS YOUR DATA, ANYWHERE, ANYTIME, ON ANY DEVICE -Easily manage, store, secure, and share unlimited passwords across unlimited devices without restrictions. +دسترسی به داده‌های شما، در هر زمان، در هر مکان، روی هر دستگاه +کلمات عبور را به‌صورت نامحدود روی دستگاه‌های مختلف مدیریت، ذخیره، ایمن‌سازی و به اشتراک بگذارید بدون هیچ محدودیتی. -EVERYONE SHOULD HAVE THE TOOLS TO STAY SAFE ONLINE -Utilize Bitwarden for free with no ads or selling data. Bitwarden believes everyone should have the ability to stay safe online. Premium plans offer access to advanced features. +همه باید ابزارهای ایمنی آنلاین را در اختیار داشته باشند +از Bitwarden به‌صورت رایگان استفاده کنید، بدون تبلیغات یا فروش داده‌ها. Bitwarden باور دارد که همه باید بتوانند در فضای آنلاین ایمن بمانند. طرح‌های پریمیوم، ویژگی‌های پیشرفته‌تری ارائه می‌دهند. -EMPOWER YOUR TEAMS WITH BITWARDEN -Plans for Teams and Enterprise come with professional business features. Some examples include SSO integration, self-hosting, directory integration and SCIM provisioning, global policies, API access, event logs, and more. +توانمندسازی تیم‌ها با Bitwarden +طرح‌های ویژه تیم‌ها و سازمان‌ها شامل ویژگی‌های حرفه‌ای برای کسب‌وکار هستند، مانند: ادغام SSO، میزبانی شخصی، ادغام با دایرکتوری و فراهم‌سازی SCIM، سیاست‌های جهانی، دسترسی API، گزارش رویدادها و موارد دیگر. -Use Bitwarden to secure your workforce and share sensitive information with colleagues. +از Bitwarden برای ایمن‌سازی محیط کاری و اشتراک‌گذاری اطلاعات حساس با همکاران استفاده کنید. +دلایل بیشتر برای انتخاب Bitwarden: -More reasons to choose Bitwarden: +رمزگذاری سطح جهانی + کلمات عبور با رمزگذاری پیشرفته سرتاسری (AES-256 بیت، هش نمکی، و PBKDF2 SHA-256) محافظت می‌شوند تا داده‌های شما امن و خصوصی باقی بمانند. -World-Class Encryption -Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private. +ممیزی‌های امنیتی توسط اشخاص ثالث + Bitwarden به‌طور منظم توسط شرکت‌های معتبر امنیتی مورد ارزیابی و تست نفوذ قرار می‌گیرد. این بررسی‌ها شامل بررسی کد منبع و تست‌های امنیتی روی IPها، سرورها و اپلیکیشن‌های وب Bitwarden است. -3rd-party Audits -Bitwarden regularly conducts comprehensive third-party security audits with notable security firms. These annual audits include source code assessments and penetration testing across Bitwarden IPs, servers, and web applications. - -Advanced 2FA -Secure your login with a third-party authenticator, emailed codes, or FIDO2 WebAuthn credentials such as a hardware security key or passkey. +احراز هویت دومرحله‌ای پیشرفته (2FA) + ورود امن با استفاده از احراز هویت‌کننده‌های شخص ثالث، کدهای ایمیلی، یا گواهی‌نامه‌های FIDO2 WebAuthn مانند کلید امنیتی سخت‌افزاری یا کلید عبور. Bitwarden Send -Transmit data directly to others while maintaining end-to-end encrypted security and limiting exposure. + ارسال مستقیم داده‌ها با رمزگذاری سرتاسری، با امکان محدودسازی دسترسی و مدت زمان مشاهده. -Built-in Generator -Create long, complex, and distinct passwords and unique usernames for every site you visit. Integrate with email alias providers for additional privacy. +مولد داخلی + تولید کلمات عبور بلند، پیچیده و منحصربه‌فرد و همچنین نام‌های کاربری برای هر وب‌سایتی که بازدید می‌کنید. امکان ادغام با ارائه‌دهندگان ایمیل مستعار برای حفظ بیشتر حریم خصوصی. -Global Translations -Bitwarden translations exist for more than 60 languages, translated by the global community though Crowdin. +ترجمه‌های جهانی + Bitwarden به بیش از ۶۰ زبان در دسترس است که توسط جامعه جهانی از طریق Crowdin ترجمه شده‌اند. -Cross-Platform Applications -Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more. +اپلیکیشن‌های چند سکویی + ایمن‌سازی و اشتراک‌گذاری داده‌ها از طریق هر مرورگر، دستگاه موبایل یا سیستم‌عامل دسکتاپ و موارد دیگر. -Bitwarden secures more than just passwords -End-to-end encrypted credential management solutions from Bitwarden empower organizations to secure everything, including developer secrets and passkey experiences. Visit Bitwarden.com to learn more about Bitwarden Secrets Manager and Bitwarden Passwordless.dev! +Bitwarden فقط کلمات عبور را ایمن نمی‌کند +راهکارهای مدیریت اعتبارات با رمزگذاری سرتاسری از Bitwarden به سازمان‌ها کمک می‌کند تا همه چیز را ایمن کنند، از جمله اسرار توسعه‌دهنده و تجربه‌های بدون کلمات عبور. +برای اطلاعات بیشتر درباره Bitwarden Secrets Manager و Bitwarden Passwordless.dev به وب‌سایت Bitwarden.com مراجعه کنید! - در خانه، محل کار، یا در حال حرکت، Bitwarden به سادگی تمامی رمزهای عبور، passkeyها، و اطلاعات حساس شما را امن نگاه می‌دارد. + در خانه، محل کار، یا در حال حرکت، Bitwarden به سادگی تمامی کلمات عبور، کلیدها، و اطلاعات حساس شما را امن نگاه می‌دارد. همگام‌سازی و دسترسی به گاوصندوق خود از دستگاه های مختلف From 4079607a3e07cadd5ce5289225c4b5faa30bac47 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Sat, 17 May 2025 21:38:05 +0200 Subject: [PATCH 27/29] Autosync the updated translations (#14835) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/af/messages.json | 7 +- apps/web/src/locales/ar/messages.json | 7 +- apps/web/src/locales/az/messages.json | 7 +- apps/web/src/locales/be/messages.json | 7 +- apps/web/src/locales/bg/messages.json | 7 +- apps/web/src/locales/bn/messages.json | 7 +- apps/web/src/locales/bs/messages.json | 7 +- apps/web/src/locales/ca/messages.json | 7 +- apps/web/src/locales/cs/messages.json | 7 +- apps/web/src/locales/cy/messages.json | 7 +- apps/web/src/locales/da/messages.json | 7 +- apps/web/src/locales/de/messages.json | 15 +- apps/web/src/locales/el/messages.json | 7 +- apps/web/src/locales/en_GB/messages.json | 7 +- apps/web/src/locales/en_IN/messages.json | 7 +- apps/web/src/locales/eo/messages.json | 59 +++---- apps/web/src/locales/es/messages.json | 7 +- apps/web/src/locales/et/messages.json | 7 +- apps/web/src/locales/eu/messages.json | 7 +- apps/web/src/locales/fa/messages.json | 7 +- apps/web/src/locales/fi/messages.json | 7 +- apps/web/src/locales/fil/messages.json | 7 +- apps/web/src/locales/fr/messages.json | 7 +- apps/web/src/locales/gl/messages.json | 7 +- apps/web/src/locales/he/messages.json | 7 +- apps/web/src/locales/hi/messages.json | 7 +- apps/web/src/locales/hr/messages.json | 7 +- apps/web/src/locales/hu/messages.json | 7 +- apps/web/src/locales/id/messages.json | 7 +- apps/web/src/locales/it/messages.json | 7 +- apps/web/src/locales/ja/messages.json | 7 +- apps/web/src/locales/ka/messages.json | 7 +- apps/web/src/locales/km/messages.json | 7 +- apps/web/src/locales/kn/messages.json | 7 +- apps/web/src/locales/ko/messages.json | 7 +- apps/web/src/locales/lv/messages.json | 7 +- apps/web/src/locales/ml/messages.json | 7 +- apps/web/src/locales/mr/messages.json | 7 +- apps/web/src/locales/my/messages.json | 7 +- apps/web/src/locales/nb/messages.json | 7 +- apps/web/src/locales/ne/messages.json | 7 +- apps/web/src/locales/nl/messages.json | 7 +- apps/web/src/locales/nn/messages.json | 7 +- apps/web/src/locales/or/messages.json | 7 +- apps/web/src/locales/pl/messages.json | 7 +- apps/web/src/locales/pt_BR/messages.json | 7 +- apps/web/src/locales/pt_PT/messages.json | 7 +- apps/web/src/locales/ro/messages.json | 189 ++++++++++++----------- apps/web/src/locales/ru/messages.json | 7 +- apps/web/src/locales/si/messages.json | 7 +- apps/web/src/locales/sk/messages.json | 9 +- apps/web/src/locales/sl/messages.json | 7 +- apps/web/src/locales/sr/messages.json | 7 +- apps/web/src/locales/sr_CS/messages.json | 7 +- apps/web/src/locales/sv/messages.json | 7 +- apps/web/src/locales/te/messages.json | 7 +- apps/web/src/locales/th/messages.json | 7 +- apps/web/src/locales/tr/messages.json | 7 +- apps/web/src/locales/uk/messages.json | 7 +- apps/web/src/locales/vi/messages.json | 7 +- apps/web/src/locales/zh_CN/messages.json | 9 +- apps/web/src/locales/zh_TW/messages.json | 7 +- 62 files changed, 433 insertions(+), 247 deletions(-) diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index fe109d6c2f0..152eb51d7d1 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Enige geënkripteerde uitsture wat u bewaar het word ook ongeldig." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Intekening" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index b12ff40f7a6..c84858fce08 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index fa35fc3e6ed..3518898335e 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Şifrələmə açarını güncəllədikdən sonra, hazırda istifadə etdiyiniz (mobil tətbiq və ya brauzer uzantıları kimi) bütün Bitwarden tətbiqlərində çıxış edib yenidən giriş etməlisiniz. Çıxış edib təkrar giriş etməmək (yeni şifrələmə açarının endirilməsi prosesi) dataların zədələnməsi ilə nəticələnə bilər. Avtomatik olaraq çıxış etməyə çalışacağıq, bu gecikə bilər." }, - "updateEncryptionKeyExportWarning": { - "message": "Saxladığınız bütün şifrələmə ixracları da yararsız olacaq." + "updateEncryptionKeyAccountExportWarning": { + "message": "Məhdudiyyətli hesablara aid saxladığınız xaricə köçürmələr yararsız olacaq." }, "subscription": { "message": "Abunəlik" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Bank hesabı ilə ödəniş, yalnız Amerika Birləşmiş Ştatlarındakı müştərilər üçün əlçatandır. Bank hesabınızı doğrulamağınız tələb olunacaq. Növbəti 1-2 iş günü ərzində mikro depozit qoyacağıq. Bank hesabını doğrulamaq üçün bu depozitdəki çıxarış deskriptor kodunu təşkilatın abunəlik səhifəsində daxil edin. Bank hesabı doğrulanmadıqda ödəniş buraxılacaq və abunəliyiniz dayandırılacaq." + }, + "clickPayWithPayPal": { + "message": "Ödəniş üsulunuzu əlavə etmək üçün lütfən Paypal ilə ödəniş et düyməsinə klikləyin." } } diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 3e78155f7ba..789f292aeaf 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Пасля абнаўлення вашага ключа шыфравання вам неабходна выйсці з сістэмы, а потым выканаць паўторны ўваход ва ўсе праграмы Bitwarden, якія вы зараз выкарыстоўваеце (напрыклад, мабільныя праграмы або пашырэнні для браўзераў). Збой пры выхадзе і паўторным уваходзе (пры гэтым спампоўваецца ваш новы ключ шыфравання) можа стаць прычынай пашкоджання даных. Мы паспрабуем аўтаматычна ажыццявіць завяршэнне ўсіх вашых сеансаў, але гэта можа адбывацца з затрымкай." }, - "updateEncryptionKeyExportWarning": { - "message": "Любыя зашыфраваныя экспартаванні, якія вы захавалі, таксама стануць памылковымі." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Падпіска" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index ee858d0a23f..b26d6a21578 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "След смяната на ключа за шифриране ще трябва да се отпишете и след това да се впишете в регистрацията си във всички приложения на Битуорден, които ползвате (като мобилното приложение и разширенията за браузъри). Ако не се отпишете и впишете повторно (за да получите достъп до новия ключ), рискувате да повредите записите си. Сега ще се пробва да бъдете отписани автоматично, това обаче може да се забави." }, - "updateEncryptionKeyExportWarning": { - "message": "Всички шифрирани вече изнесени данни ще станат безполезни." + "updateEncryptionKeyAccountExportWarning": { + "message": "Всички изнасяния ограничени от акаунта, които сте запазили, ще станат невалидни." }, "subscription": { "message": "Абонамент" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Плащането чрез банкова сметка е налично само за клиенти от САЩ. Ще трябва да потвърдите банковата си сметка. В следващите 1-2 работни дни ще направим малък депозит. Въведете кода от описанието на трансакцията в страницата за абонаменти на доставчика, за да потвърдите банковата сметка. Ако не потвърдите банковата сметка, може да пропуснете плащането и абонаментът Ви да бъде спрян." + }, + "clickPayWithPayPal": { + "message": "Моля, натиснете бутона за плащане с PayPal, за да добавите платежния си метод." } } diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index d09919e0f3c..bb71e44f09d 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 35d8401a8d2..a05e84245e8 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index d74d707735b..f24353d69b3 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Després d'actualitzar la vostra clau de xifratge, heu de tancar la sessió i tornar a entrar a totes les aplicacions de Bitwarden que esteu utilitzant actualment (com ara l'aplicació mòbil o les extensions del navegador). Si no es tanca i torna a iniciar la sessió (la qual descarrega la vostra nova clau de xifratge) pot provocar corrupció en les dades. Intentarem registrar-vos automàticament, però, es pot retardar." }, - "updateEncryptionKeyExportWarning": { - "message": "Totes les exportacions xifrades que hàgeu desat també seran no vàlides." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscripció" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 9f10b3c6404..4ba5a9c3fea 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Po aktualizace šifrovacího klíče dojde k odhlášení a budete se muset opětovně přihlásit do všech aplikací Bitwardenu, které aktuálně používáte (např. mobilní aplikace či rozšíření pro prohlížeč). Nezdaří-li se odhlášení a opětovné přihlášení (během něhož bude stažen nový šifrovací klíč), může dojít k poškození dat. Pokusíme se Vás automaticky odhlásit, nicméně, může to chvíli trvat." }, - "updateEncryptionKeyExportWarning": { - "message": "Jakékoli šifrované exporty, které jste uložili, budou také neplatné." + "updateEncryptionKeyAccountExportWarning": { + "message": "Všechny uložené exporty s omezením účtu se stanou neplatnými." }, "subscription": { "message": "Předplatné" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Platba bankovním účtem je dostupná jen pro zákazníky ve Spojených státech. Budete požádáni o ověření svého bankovního účtu. Mikrovklad provedeme během následujících 1-2 pracovních dnů. Pro ověření bankovního účtu zadejte kód popisu výpisu z této zálohy na stránce předplatného poskytovatele. Pokud bankovní účet neověříte, bude to mít za následek zmeškání platby a pozastavení předplatného." + }, + "clickPayWithPayPal": { + "message": "Pro přidání způsobu platby klepněte na tlačítko \"Pay with PayPal\"." } } diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 39dba259cc2..f91dc727a84 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index 40c1283cb24..f40daec488f 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Efter opdatering af din krypteringsnøgle skal du logge ud og ind igen i alle Bitwarden-programmer, du bruger i øjeblikket (f.eks. mobilapp eller browserudvidelser). Hvis du ikke logger ud og ind (som downloader din nye krypteringsnøgle), kan det resultere i data korruption. Vi vil forsøge at logge dig ud automatisk, men det kan blive forsinket." }, - "updateEncryptionKeyExportWarning": { - "message": "Enhver krypteret eksport du har gemt, vil også blive utilgængelig." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Abonnement" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index 7cdc0adc7d8..f39bb85a082 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -99,7 +99,7 @@ "message": "Anwendung als kritisch markieren" }, "applicationsMarkedAsCriticalSuccess": { - "message": "Applications marked as critical" + "message": "Als kritisch markierte Anwendungen" }, "application": { "message": "Anwendung" @@ -141,13 +141,13 @@ "message": "Diese Mitglieder melden sich bei Anwendungen mit schwachen, kompromittierten oder wiederverwendeten Passwörtern an." }, "atRiskMembersDescriptionNone": { - "message": "These are no members logging into applications with weak, exposed, or reused passwords." + "message": "Dies sind keine Mitglieder, die sich in Anwendungen mit schwachen, kompromittierten oder wiederverwendeten Passwörtern anmelden." }, "atRiskApplicationsDescription": { "message": "Diese Anwendungen haben schwache, kompromittierte oder wiederverwendete Passwörter." }, "atRiskApplicationsDescriptionNone": { - "message": "These are no applications with weak, exposed, or reused passwords." + "message": "Dies sind keine Anwendungen mit schwachen, kompromittierten oder wiederverwendeten Passwörtern." }, "atRiskMembersDescriptionWithApp": { "message": "Diese Mitglieder melden sich bei $APPNAME$ mit schwachen, kompromittierten oder wiederverwendeten Passwörtern an.", @@ -159,7 +159,7 @@ } }, "atRiskMembersDescriptionWithAppNone": { - "message": "There are no at risk members for $APPNAME$.", + "message": "Es gibt keine gefährdeten Mitglieder für $APPNAME$.", "placeholders": { "appname": { "content": "$1", @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Nach der Aktualisierung Ihres Verschlüsselungsschlüssels musst du dich bei allen Bitwarden-Anwendungen, die du momentan benutzt, erneut anmelden (wie z.B. die mobile App oder die Browser-Erweiterungen). Fehler bei Ab- und Anmeldung (die deinen neuen Verschlüsselungsschlüssel herunterlädt) könnte zu einer Beschädigung der Daten führen. Wir werden versuchen dich automatisch abzumelden, was jedoch verzögert geschehen kann." }, - "updateEncryptionKeyExportWarning": { - "message": "Alle verschlüsselten Exporte, die du gespeichert hast, werden ebenfalls ungültig." + "updateEncryptionKeyAccountExportWarning": { + "message": "Alle von dir gespeicherten Exporte mit Konto-Beschränkungen werden ungültig." }, "subscription": { "message": "Abo" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Die Zahlung mit einem Bankkonto ist nur für Kunden in den Vereinigten Staaten möglich. Du musst dein Bankkonto verifizieren. Wir werden innerhalb der nächsten 1-2 Werktage eine Mikro-Einzahlung vornehmen. Gib den Code aus der Beschreibung dieser Einzahlung auf der Abonnementseite des Anbieters ein, um das Bankkonto zu verifizieren. Schlägt die Verifizierung des Bankkontos fehl, wird dies als versäumte Zahlung gewertet und dein Abonnement gesperrt." + }, + "clickPayWithPayPal": { + "message": "Bitte klicke auf den Mit PayPal bezahlen Button, um deine Zahlungsmethode hinzuzufügen." } } diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index a7c423c91e0..24de28d39be 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Μετά την ενημέρωση του κλειδιού κρυπτογράφησης, πρέπει να αποσυνδεθείτε και να επιστρέψετε σε όλες τις εφαρμογές Bitwarden που χρησιμοποιείτε αυτήν τη στιγμή (όπως η εφαρμογή για κινητά ή οι επεκτάσεις του προγράμματος περιήγησης). Η αποτυχία αποσύνδεσης και επαναφοράς (στην οποία γίνεται λήψη του νέου κλειδιού κρυπτογράφησης) ενδέχεται να προκαλέσει καταστροφή δεδομένων. Θα προσπαθήσουμε να αποσυνδεθείτε αυτόματα, ωστόσο αυτό μπορεί να καθυστερήσει." }, - "updateEncryptionKeyExportWarning": { - "message": "Οποιεσδήποτε κρυπτογραφημένες εξαγωγές που έχετε αποθηκεύσει θα είναι επίσης άκυρες." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Συνδρομή" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index 460501615e9..d6a1b01f1d5 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, although this may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index 3a3b4391a56..a0e9f4de149 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, although this may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 0e3985b4d40..5b5e1f21582 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -925,10 +925,10 @@ "message": "Maksimuma dosiergrandeco estas 500 MB." }, "addedItem": { - "message": "La ero aldoniĝis" + "message": "Ero aldoniĝis" }, "editedItem": { - "message": "La ero redaktiĝis" + "message": "Ero redaktiĝis" }, "movedItemToOrg": { "message": "$ITEMNAME$ moviĝis al $ORGNAME$", @@ -944,7 +944,7 @@ } }, "itemsMovedToOrg": { - "message": "La eroj moviĝis al $ORGNAME$", + "message": "Eroj moviĝis al $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -953,7 +953,7 @@ } }, "itemMovedToOrg": { - "message": "La ero moviĝis al $ORGNAME$", + "message": "Ero moviĝis al $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -986,7 +986,7 @@ "message": "Ĉu vi certe volas anstataŭigi la nunan pasvorton?" }, "editedFolder": { - "message": "La dosierujo konserviĝis" + "message": "`Dosierujo konserviĝis" }, "addedFolder": { "message": "Dosierujo aldoniĝis" @@ -2866,7 +2866,7 @@ "message": "Ĉu vi certas, ke vi volas nuligi? Vi perdos aliron al ĉiuj funkcioj de ĉi tiu abono fine de ĉi tiu faktura ciklo." }, "canceledSubscription": { - "message": "La abono estis nuligita." + "message": "Abono nuliĝis" }, "neverExpires": { "message": "Neniam eksvalidiĝis" @@ -4248,7 +4248,7 @@ "message": "La organizo kaj ĉiuj rilataj datumoj estis forigitaj." }, "organizationUpdated": { - "message": "La organizo ĝisdatiĝis" + "message": "Organizo konserviĝis" }, "taxInformation": { "message": "Impostaj Informoj" @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Post ĝisdatigi vian ĉifradan ŝlosilon, vi devas elsaluti kaj reeniri al ĉiuj Bitwarden-aplikaĵoj, kiujn vi nun uzas (kiel la poŝtelefona programo aŭ retumila etendaĵoj). Malsukceso elsaluti kaj reeniri (kiu elŝutas via nova ĉifra ŝlosilo) povas rezultigi korupton de datumoj. Ni provos elsaluti vin aŭtomate, tamen ĝi eble prokrastos. " }, - "updateEncryptionKeyExportWarning": { - "message": "Ĉiuj ĉifritaj eksportaĵoj, kiujn vi konservis, ankaŭ malvalidiĝos." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Abono" @@ -4878,7 +4878,7 @@ "description": "Name of the password generator policy that overrides the user's password/passphrase selection." }, "userPreference": { - "message": "La prefero de uzanto" + "message": "Prefero de la uzanto" }, "vaultTimeoutAction": { "message": "Volta Tempolima Ago" @@ -4949,7 +4949,7 @@ "message": "Eroj rehaviĝis" }, "restoredItemId": { - "message": "La ero $ID$ rehaviĝis", + "message": "Restariĝis ero $ID$.", "placeholders": { "id": { "content": "$1", @@ -8694,7 +8694,7 @@ } }, "collectionManagement": { - "message": "Collection management" + "message": "Administrado de kolekto" }, "collectionManagementDesc": { "message": "Manage the collection behavior for the organization" @@ -8770,13 +8770,13 @@ "message": "At least one member or group must have can manage permission." }, "typePasskey": { - "message": "Passkey" + "message": "Pasŝlosilo" }, "passkeyNotCopied": { - "message": "Passkey will not be copied" + "message": "Pasŝlosilo ne estos kopiita" }, "passkeyNotCopiedAlert": { - "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" + "message": "La pasŝlosilo ne estos kopiita al la klonaĵo. Ĉu vi volas daŭrigi la klonadon de ĉi tiu ero?" }, "modifiedCollectionManagement": { "message": "Modified collection management setting $ID$.", @@ -8792,13 +8792,13 @@ "description": "This is followed a by a hyperlink to the help website." }, "installBrowserExtension": { - "message": "Install browser extension" + "message": "Instali la retumilan etendaĵon" }, "installBrowserExtensionDetails": { - "message": "Use the extension to quickly save logins and auto-fill forms without opening the web app." + "message": "Uzu la etendaĵon por rapide konservi salutilojn kaj aŭtomate plenigi la kampojn sen malfermo de la reteja apo." }, "projectAccessUpdated": { - "message": "Project access updated" + "message": "Projekto-alirebleco ĝisdatiĝis" }, "unexpectedErrorSend": { "message": "An unexpected error has occurred while loading this Send. Try again later." @@ -8813,7 +8813,7 @@ "message": "Seat limit has been reached. Contact your provider to purchase additional seats." }, "collectionAccessRestricted": { - "message": "Collection access is restricted" + "message": "La aliro al kolekto estas limigita" }, "readOnlyCollectionAccess": { "message": "You do not have access to manage this collection." @@ -9057,15 +9057,15 @@ "message": "Machine accounts cannot be created in suspended organizations. Please contact your organization owner for assistance." }, "machineAccount": { - "message": "Machine account", + "message": "Maŝina konto", "description": "A machine user which can be used to automate processes and access secrets in the system." }, "machineAccounts": { - "message": "Machine accounts", + "message": "Maŝinaj kontoj", "description": "The title for the section that deals with machine accounts." }, "newMachineAccount": { - "message": "New machine account", + "message": "Nova maŝina konto", "description": "Title for creating a new machine account." }, "machineAccountsNoItemsMessage": { @@ -9073,23 +9073,23 @@ "description": "Message to encourage the user to start creating machine accounts." }, "machineAccountsNoItemsTitle": { - "message": "Nothing to show yet", + "message": "Ankoraŭ neniu por montri", "description": "Title to indicate that there are no machine accounts to display." }, "deleteMachineAccounts": { - "message": "Delete machine accounts", + "message": "Forĵeti maŝinan konton", "description": "Title for the action to delete one or multiple machine accounts." }, "deleteMachineAccount": { - "message": "Delete machine account", + "message": "Forĵeti maŝinajn kontojn", "description": "Title for the action to delete a single machine account." }, "viewMachineAccount": { - "message": "View machine account", + "message": "Vidi maŝinan konton", "description": "Action to view the details of a machine account." }, "deleteMachineAccountDialogMessage": { - "message": "Deleting machine account $MACHINE_ACCOUNT$ is permanent and irreversible.", + "message": "Forĵeti la maŝinan konton $MACHINE_ACCOUNT$ estas poreterne kaj neinverseble.", "placeholders": { "machine_account": { "content": "$1", @@ -10102,7 +10102,7 @@ "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations." }, "deleteOrganizationUser": { - "message": "Delete $NAME$", + "message": "Fo", "placeholders": { "name": { "content": "$1", @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index c53a464402e..a535b45e721 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Una vez actualices tu clave de cifrado, será necesario que cierres sesión y vuelvas a identificarte en todas las aplicaciones de Bitwarden que estés utilizando (como la aplicación móvil o la extensión de navegador). Si la reautenticación falla (la cual descargaría la nueva clave de cifrad) puede producirse corrupción de datos. Intentaremos cerrar tu sesión automáticamente, pero puede tardar un tiempo." }, - "updateEncryptionKeyExportWarning": { - "message": "Cualquier exportación cifrada que hayas guardado también será inválida." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Suscripción" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 3d71fbdf9e9..9ed4db4b0e3 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Pärast krüpteerimisvõtme uuendamist pead kõikides seadmetes, kus Bitwardeni rakendust kasutad, oma kontosse uuesti sisse logima (nt nutitelefonis ja brauseris). Välja- ja sisselogimise (mis ühtlasi laadib ka uue krüpteerimisvõtme) nurjumine võib tingida andmete riknemise. Üritame sinu seadmetest ise välja logida, aga see võib võtta natukene aega." }, - "updateEncryptionKeyExportWarning": { - "message": "Mistahes krüpteeritud, eksporditud andmed muutuvad samuti vigaseks." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Tellimus" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index 7feb54a6adb..29f132852eb 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Zifratze-gakoa eguneratu ondoren, saioa hasi eta erabiltzen ari zaren Bitwarden aplikazio guztietara itzuli behar duzu (adibidez, aplikazio mugikorra edo nabigatzailearen gehigarriak). Saioa berriro hasteak huts egiten badu (zifratze-gako berria deskargatzea dakar) datuen korrupzioa ekar lezake. Automatikoki saioa ixten saiatuko gara, baina atzeratu egin daiteke." }, - "updateEncryptionKeyExportWarning": { - "message": "Gorde duzun edozein esportazio zifratu ez da baliozkoa izango." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Harpidetza" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index e2e939d1e40..2fbacc8dca2 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "پس از به‌روزرسانی کلید رمزگذاری، باید از سیستم خارج شوید و دوباره به همه برنامه‌های Bitwarden که در حال حاضر استفاده می‌کنید (مانند برنامه تلفن همراه یا برنامه‌های افزودنی مرورگر) وارد شوید. عدم خروج و ورود مجدد (که کلید رمزگذاری جدید شما را دانلود می‌کند) ممکن است منجر به خراب شدن داده‌ها شود. ما سعی خواهیم کرد شما را به طور خودکار از سیستم خارج کنیم، اما ممکن است با تأخیر انجام شود." }, - "updateEncryptionKeyExportWarning": { - "message": "هر برون ریزی رمزگذاری شده ای که ذخیره کرده اید نیز نامعتبر خواهد بود." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "اشتراک" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 041b54601e0..83efcc197fc 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Salausavaimesi päivityksen jälkeen, sinun tulee kirjautua ulos ja sitten takaisin sisään kaikissa Bitwarden-sovelluksissa, jotka ovat käytössäsi (esim. mobiilisovellus ja selainlaajennukset). Uudelleenkirjautumisen (joka lataa uuden salausavaimen) suorittamatta jättäminen saattaa johtaa tietojen vaurioitumiseen. Yritämme kirjata sinut ulos autmaattisesti, mutta tämä voi tapahtua vasta jonkin ajan kuluttua." }, - "updateEncryptionKeyExportWarning": { - "message": "Tallentamistasi salatuista vienneistä tulee käyttökelvottomia." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Tilaus" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index 3cf1f3bcf7b..15e0793d6ce 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Matapos i update ang iyong key sa pag encrypt, kinakailangan kang mag log out at bumalik sa lahat ng mga application ng Bitwarden na kasalukuyang ginagamit mo (tulad ng mobile app o mga extension ng browser). Ang kabiguan na mag log out at bumalik sa (na nag download ng iyong bagong key ng pag encrypt) ay maaaring magresulta sa pagkasira ng data. Susubukan naming awtomatikong mag log out sa iyo, gayunpaman, maaari itong maantala." }, - "updateEncryptionKeyExportWarning": { - "message": "Ang anumang naka encrypt na pag export na iyong nai save ay magiging hindi wasto din." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subskripsyon" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index 3374312e8cd..39fe5b3c1cf 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Après avoir mis à jour votre clé de chiffrement, vous devez vous déconnecter et vous reconnecter à toutes les applications Bitwarden que vous utilisez actuellement (comme l'application mobile ou les extensions de navigateur). Si vous ne vous déconnectez pas et ne vous reconnectez pas (ce qui télécharge votre nouvelle clé de chiffrement), cela peut entraîner une corruption des données. Nous tenterons de vous déconnecter automatiquement, mais cela peut être retardé." }, - "updateEncryptionKeyExportWarning": { - "message": "Tous les exports chiffrés que vous avez enregistrés deviendront également invalides." + "updateEncryptionKeyAccountExportWarning": { + "message": "Toutes les exportations restreintes du compte que vous avez enregistrées seront invalides." }, "subscription": { "message": "Abonnement" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Le paiement avec un compte bancaire est seulement disponible pour les clients aux États-Unis. Vous devrez procéder à la vérification de votre compte bancaire. Nous effectuerons un micro-dépôt dans les 1-2 prochains jours ouvrables. Entrez le code de la transaction de ce dépôt sur la page d'abonnement de votre fournisseur pour compléter la vérification du compte bancaire. Si vous ne complétez pas la vérification de votre compte bancaire résultera en un paiement manqué et votre abonnement sera suspendu." + }, + "clickPayWithPayPal": { + "message": "Veuillez cliquer sur le bouton Payer avec PayPal pour ajouter votre mode de paiement." } } diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index bfbd2983950..eae36865876 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index aa16586a707..286276f96e5 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "לאחר עדכון מפתחות ההצפנה שלך, תתבקש לצאת ולהכנס שוב בכל אפליקציות Bitwarden שאתה משתמש בהן (האפליקציה לפלאפון או ההרחבה לדפדפן). אם לא תצא ותכנס שוב (פעולת הכניסה מורידה את המפתח החדש), יתכן שתתקל במידע שגוי. אנו ננסה לגרום ליציאה אוטומטית, אך יתכן שהדבר לא יקרה מיידית." }, - "updateEncryptionKeyExportWarning": { - "message": "כל הייצואים המוצפנים ששמרת יהפכו גם הם ללא תקפים." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "מנוי" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index dbf2b839ad9..dd2073a924f 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 36ba847012b..4f1c4c981b2 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Nakon ažuriranja svojeg ključa za šifriranje, obavezno se trebaš odjaviti i ponovno prijaviti u sve Bitwarden aplikacije koje trenutno koristiš (npr. mobilna aplikacija, proširenje preglednika, ...). Ako se ne odjaviš i ponovno prijaviš (čime se preuzima tvoj novi ključ za šifriranje) može doći do oštećenja spremljenih podataka. Pokušati ćemo te automatski odjaviti, no, to bi možda moglo potrajati." }, - "updateEncryptionKeyExportWarning": { - "message": "Svi spremljeni šifrirani izvozi također će postati nevažeći." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Pretplata" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index e83e65e2ded..12fd95bbbaa 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "A titkosítási kulcs frissítése után ki kell jelentkezni és vissza kell jelentkezni az összes jelenleg használt Bitwarden alkalmazásba (például a mobilalkalmazás vagy a böngésző bővítmények). A kijelentkezés és a bejelentkezés elmulasztása (amely letölti az új titkosítási kulcsot) adatvesztést okozhat. Megkíséreljük az automatikusan kijelentkeztetést, azonban ez késhet." }, - "updateEncryptionKeyExportWarning": { - "message": "Az el nem mentett titkosított exportok szintén érvénytelenné válnak." + "updateEncryptionKeyAccountExportWarning": { + "message": "A fiókhoz korlátozottan mentett exportálások érvénytelenek lesznek." }, "subscription": { "message": "Előfizetés" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "A bankszámlával történő fizetés csak az Egyesült Államokban élő ügyfelek számára érhető el. A bankszámlát igazolni kell. A fejlesztők a következő 1-2 munkanapon belül mikrobetétet teljesítenek. A bankszámla ellenőrzéséhez írjuk be az utalás leíró kódját a szervezet számlázási oldalán. Ha elmulasztjuk a bankszámla igazolását, az a fizetés elmaradását és az előfizetés felfüggesztését vonja maga után." + }, + "clickPayWithPayPal": { + "message": "Kattintás a Pay with PayPal gombra a fizetési mód hozzáadásához." } } diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index f29ef18ed3b..3706fb73f63 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Setelah memperbarui kunci enkripsi Anda, Anda diminta untuk keluar dan masuk kembali ke semua aplikasi Bitwarden yang saat ini Anda gunakan (seperti aplikasi seluler atau ekstensi browser). Kegagalan untuk keluar dan masuk kembali (yang mengunduh kunci enkripsi baru Anda) dapat menyebabkan kerusakan data. Kami akan mencoba mengeluarkan Anda secara otomatis, namun, hal itu mungkin tertunda." }, - "updateEncryptionKeyExportWarning": { - "message": "Ekspor terenkripsi apa pun yang telah Anda simpan juga akan menjadi tidak valid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Langganan" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index b336a29df48..a30c1f81f93 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Dopo aver aggiornato la tua chiave di crittografia, devi uscire ed entrare di nuovo in tutte le app Bitwarden che stai usando (come l'app mobile o l'estensione del browser). Se non si esce e rientra (per scaricare la nuova chiave di crittografia) i dati della tua cassaforte potrebbero essere danneggiati. Cercheremo di farti uscire automaticamente, ma potrebbe esserci un ritardo." }, - "updateEncryptionKeyExportWarning": { - "message": "Anche le esportazioni crittografate che hai salvato non saranno più valide." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Abbonamento" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 3ec7d6a3ffe..1bb8bf364b0 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "暗号化キーの更新後は、モバイルアプリやブラウザ拡張機能など現在利用中のすべてのBitwardenアプリで再ログインが必要となります。再ログインしないと(新しい暗号化キーをダウンロードすると)データが破損する可能性があります。自動的にログアウトを試みますが、遅延することがあります。" }, - "updateEncryptionKeyExportWarning": { - "message": "保存済みの暗号化されたエクスポートも無効になります。" + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "契約" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index 6ebe9759a29..72e9066806c 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 7a206aca2e3..38740c78cba 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index d4847a51bad..2758b022b64 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "ನಿಮ್ಮ ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀಲಿಯನ್ನು ನವೀಕರಿಸಿದ ನಂತರ, ನೀವು ಪ್ರಸ್ತುತ ಬಳಸುತ್ತಿರುವ (ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಬ್ರೌಸರ್ ವಿಸ್ತರಣೆಗಳಂತಹ) ಎಲ್ಲಾ ಬಿಟ್‌ವಾರ್ಡೆನ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ನೀವು ಲಾಗ್ ಔಟ್ ಮತ್ತು ಬ್ಯಾಕ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಲಾಗ್ and ಟ್ ಮಾಡಲು ಮತ್ತು ಹಿಂತಿರುಗಲು ವಿಫಲವಾದರೆ (ಅದು ನಿಮ್ಮ ಹೊಸ ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಕೀಲಿಯನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುತ್ತದೆ) ಡೇಟಾ ಭ್ರಷ್ಟಾಚಾರಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು. ನಾವು ನಿಮ್ಮನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಲಾಗ್ ಔಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತೇವೆ, ಆದಾಗ್ಯೂ, ಇದು ವಿಳಂಬವಾಗಬಹುದು." }, - "updateEncryptionKeyExportWarning": { - "message": "ನೀವು ಉಳಿಸಿದ ಯಾವುದೇ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ರಫ್ತು ಸಹ ಅಮಾನ್ಯವಾಗುತ್ತದೆ." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "ಚಂದಾದಾರಿಕೆ" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 24fc6dad11a..ee089584adf 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "암호화 키를 업데이트하고난 후 현재 사용 중인 모든 Bitwarden 애플리케이션(예. 모바일 앱 혹은 브라우저 확장 기능)에서 로그아웃 후 다시 로그인해야 합니다. 재로그인하지 않으면 (새 암호화 키를 다운로드받는 경우) 데이터 손실이 발생할 수 있습니다. 자동으로 로그아웃을 시도하지만 지연될 수 있습니다." }, - "updateEncryptionKeyExportWarning": { - "message": "이전에 암호화 상태로 내보내기하여 저장한 데이터도 무효화됩니다." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "구독" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 0e561cec5c6..61ff8651c72 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Pēc šifrēšanas atslēgas atjaunināšanas ir nepieciešams atteikties un tad pieteikties visās Bitwarden lietotnēs, kas pašreiz tiek izmantotas (piemēram, tālruņa lietotnē vai pārlūku paplašinājumā). Ja tas netiks darīts (tā tiek lejupielādēta jaunā šifrēšanas atslēga), dati var tikt bojāti. Tiks veikts automātisks atteikšanās mēģinājums, tomēr tas var notikt ar aizkavi." }, - "updateEncryptionKeyExportWarning": { - "message": "Arī katra šifrētā izguve, kas ir saglabāta, kļūs nederīga." + "updateEncryptionKeyAccountExportWarning": { + "message": "Jebkuras konta ierobežotās izguves, kas ir saglabātas, kļūs nederīgas." }, "subscription": { "message": "Abonements" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Apmaksa ar bankas kontu ir pieejama tikai klientiem Savienotajās Valstīs. Būs nepieciešams apliecināt savu bankas kontu. Mēs veiksim sīkiemaksu nākamās darba dienas vai divu laikā. Pēc tam šīs iemaksas uzdevuma aprakstā esošais kods būs jāievada pakalpojuma sniedzēja abonēšanas lapā, lai apliecinātu bankas kontu. Bankas konta apliecināšanas neveikšana beigsies ar nokavētu maksājumu un apturētu abonementu." + }, + "clickPayWithPayPal": { + "message": "Lūgums klikšķināt pogu \"Apmaksāt ar PayPal, lai pievienotu savu maksājumu veidu." } } diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index a447cc360b3..dd4ca0b94cf 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "സബ്സ്ക്രിപ്ഷൻ" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 7a206aca2e3..38740c78cba 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 7a206aca2e3..38740c78cba 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 8f019081d67..93df01f3440 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Etter å ha oppdatert krypteringsnøkkelen din, er du påkrevd å logge av og på på alle Bitwarden-appene og -programmene som du bruker for øyeblikket (deriblant mobilappen og nettleserutvidelsene). Å ikke logge av og på igjen (noe som vil laste ned din nye krypteringsnøkkel) kan føre til datakorrumpering. Vi vil forsøke å logge deg av automatisk, men det kan kanskje bli forsinket." }, - "updateEncryptionKeyExportWarning": { - "message": "Eventuelle krypterte eksporter som du har lagret blir også ugyldig." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Abonnement" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index 579022bfb93..215ebaf1849 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index 7939d444d32..9d192639377 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Na het bijwerken van je encryptiesleutel moet je je afmelden en weer aanmelden bij alle Bitwarden-applicaties die je gebruikt (zoals de mobiele app of browserextensies). Als je niet opnieuw inlogt (wat je nieuwe encryptiesleutel downloadt), kan dit gegevensbeschadiging tot gevolg hebben. We proberen je automatisch uit te loggen, maar het kan zijn dat dit met enige vertraging gebeurt." }, - "updateEncryptionKeyExportWarning": { - "message": "Elke versleutelde export die je hebt bewaard wordt onbruikbaar." + "updateEncryptionKeyAccountExportWarning": { + "message": "Alle account-beperkte bewaarde exports die je hebt opgeslagen worden ongeldig." }, "subscription": { "message": "Abonnement" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Betaling met een bankrekening is alleen beschikbaar voor klanten in de Verenigde Staten. Je moet je bankrekening verifiëren. We zullen binnen 1-2 werkdagen een microbetaling uitvoeren. Voer de code van het bankafschrift uit deze storting in op de factuurpagina van de provider om de bankrekening te verifiëren. Als de bankrekening niet wordt geverifieerd, wordt er een betaling gemist en wordt je abonnement opgeschort." + }, + "clickPayWithPayPal": { + "message": "Klik op \"Pay with PayPal\" voor het toevoegen van je betaalmethode." } } diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 8de39adc8c4..3c03b2e7cb2 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 7a206aca2e3..38740c78cba 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index 5e8ac7f9fe3..ab471e892ef 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Po zaktualizowaniu klucza szyfrowania, musisz ponownie zalogować się do wszystkich aplikacji Bitwarden, z których obecnie korzystasz (na przykład aplikacje mobilne lub rozszerzenia przeglądarki). Niepowodzenie logowania (podczas którego pobierany jest nowy klucz szyfrowania) może spowodować uszkodzenie danych. Postaramy się wylogować Ciebie automatycznie, jednak może to chwilę potrwać." }, - "updateEncryptionKeyExportWarning": { - "message": "Wszystkie zaszyfrowane pliki eksportu, które wcześniej zapisałeś, staną się nieprawidłowe." + "updateEncryptionKeyAccountExportWarning": { + "message": "Wszystkie zapisane eksporty objęte ograniczeniami konta zostaną unieważnione." }, "subscription": { "message": "Subskrypcja" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Płatność za pomocą konta bankowego jest dostępna tylko dla klientów w Stanach Zjednoczonych. Będziesz musiał/musiała zweryfikować swoje konto bankowe. W ciągu najbliższych 1-2 dni roboczych dokonamy mikrowpłaty. Wprowadź kod deskryptora z tej wpłaty na stronie dostawcy subskrypcji, aby zweryfikować konto bankowe. Niezweryfikowanie konta bankowego spowoduje brak płatności i zawieszenie Twojej subskrypcji." + }, + "clickPayWithPayPal": { + "message": "Kliknij przycisk Zapłać za pomocą PayPal, aby dodać metodę płatności." } } diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index a3f5038d178..b3f6dd37a8c 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Depois de atualizar sua chave de criptografia, é necessário encerrar e iniciar a sessão em todos os aplicativos do Bitwarden que você está usando atualmente (como o aplicativo móvel ou as extensões do navegador). Não encerrar e iniciar sessão (que baixa sua nova chave de criptografia) pode resultar em corrupção de dados. Nós tentaremos desconectá-lo automaticamente, mas isso pode demorar um pouco." }, - "updateEncryptionKeyExportWarning": { - "message": "Quaisquer exportações criptografadas que você tenha salvo também se tornarão inválidas." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Assinatura" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index 2a72ced6496..5f1e02c82e3 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Depois de atualizar a sua chave de encriptação, é necessário terminar sessão e voltar a iniciar em todas as aplicações Bitwarden que está a utilizar atualmente (como a aplicação móvel ou as extensões do navegador). A falha em terminar sessão e voltar a iniciar (que descarrega a sua nova chave de encriptação) pode resultar em corrupção de dados. Tentaremos terminar a sua sessão automaticamente, no entanto, pode demorar." }, - "updateEncryptionKeyExportWarning": { - "message": "Quaisquer exportações encriptadas que tenha guardado também se tornarão inválidas." + "updateEncryptionKeyAccountExportWarning": { + "message": "Todas as exportações com restrições de conta que tenha guardado tornar-se-ão inválidas." }, "subscription": { "message": "Subscrição" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "O pagamento com uma conta bancária só está disponível para clientes nos Estados Unidos. Ser-lhe-á pedido que verifique a sua conta bancária. Efetuaremos um micro-depósito nos próximos 1-2 dias úteis. Introduza o código descritor do extrato deste depósito na página de subscrição do fornecedor para verificar a conta bancária. A não verificação da conta bancária resultará na falta de pagamento e na suspensão da sua subscrição." + }, + "clickPayWithPayPal": { + "message": "Por favor, clique no botão Pagar com PayPal para adicionar o seu método de pagamento." } } diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 2c825332283..64eb05dad22 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -9,7 +9,7 @@ "message": "Aplicațiile critice" }, "noCriticalAppsAtRisk": { - "message": "No critical applications at risk" + "message": "Nicio aplicație critică în pericol" }, "accessIntelligence": { "message": "Access Intelligence" @@ -18,7 +18,7 @@ "message": "Risk Insights" }, "passwordRisk": { - "message": "Password Risk" + "message": "Risc Parola" }, "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." @@ -33,19 +33,19 @@ } }, "notifiedMembers": { - "message": "Notified members" + "message": "Membri notificați" }, "revokeMembers": { - "message": "Revoke members" + "message": "Revocare utilizatori" }, "restoreMembers": { - "message": "Restore members" + "message": "Restabilire utilizatori" }, "cannotRestoreAccessError": { - "message": "Cannot restore organization access" + "message": "Nu se poate restaura accesul organizației" }, "allApplicationsWithCount": { - "message": "All applications ($COUNT$)", + "message": "Toate aplicațiile ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -87,31 +87,31 @@ "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." }, "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "message": "Nu ai marcat nicio aplicație drept critică" }, "noCriticalAppsDescription": { "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." }, "markCriticalApps": { - "message": "Mark critical apps" + "message": "Marchează aplicațiile critice" }, "markAppAsCritical": { - "message": "Mark app as critical" + "message": "Marchează aplicația drept critică" }, "applicationsMarkedAsCriticalSuccess": { - "message": "Applications marked as critical" + "message": "Aplicații marcate drept critice" }, "application": { - "message": "Application" + "message": "Aplicație" }, "atRiskPasswords": { "message": "At-risk passwords" }, "requestPasswordChange": { - "message": "Request password change" + "message": "Solicită modificarea parolei" }, "totalPasswords": { - "message": "Total passwords" + "message": "Total parole" }, "searchApps": { "message": "Search applications" @@ -168,13 +168,13 @@ } }, "totalMembers": { - "message": "Total members" + "message": "Total membri" }, "atRiskApplications": { - "message": "At-risk applications" + "message": "Aplicații cu risc" }, "totalApplications": { - "message": "Total applications" + "message": "Toate aplicațiile" }, "unmarkAsCriticalApp": { "message": "Unmark as critical app" @@ -220,10 +220,10 @@ "message": "Note" }, "privateNote": { - "message": "Private note" + "message": "Notă privată" }, "note": { - "message": "Note" + "message": "Notă" }, "customFields": { "message": "Câmpuri particularizate" @@ -232,22 +232,22 @@ "message": "Numele titularului cardului" }, "loginCredentials": { - "message": "Login credentials" + "message": "Date de logare" }, "personalDetails": { - "message": "Personal details" + "message": "Detalii personale" }, "identification": { - "message": "Identification" + "message": "Identificare" }, "contactInfo": { - "message": "Contact info" + "message": "Informații contact" }, "cardDetails": { - "message": "Card details" + "message": "Detalii card" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "Detalii $BRAND$", "placeholders": { "brand": { "content": "$1", @@ -256,16 +256,16 @@ } }, "itemHistory": { - "message": "Item history" + "message": "Istoricul articolului" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "Cheie de autentificare" }, "autofillOptions": { - "message": "Autofill options" + "message": "Opțiuni de completare automată" }, "websiteUri": { - "message": "Website (URI)" + "message": "Site web (URI)" }, "websiteUriCount": { "message": "Website (URI) $COUNT$", @@ -278,13 +278,13 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Site web adăugat" }, "addWebsite": { - "message": "Add website" + "message": "Adăugare site" }, "deleteWebsite": { - "message": "Delete website" + "message": "Ștergere site" }, "defaultLabel": { "message": "Default ($VALUE$)", @@ -315,7 +315,7 @@ } }, "autoFillOnPageLoad": { - "message": "Autofill on page load?" + "message": "Completare automată la încărcarea paginii?" }, "number": { "message": "Număr card" @@ -330,7 +330,7 @@ "message": "Cod de securitate (CVV)" }, "securityCodeSlashCVV": { - "message": "Security code / CVV" + "message": "Cod de securitate (CVV)" }, "identityName": { "message": "Numele identității" @@ -408,10 +408,10 @@ "message": "Dr." }, "cardExpiredTitle": { - "message": "Expired card" + "message": "Card expirat" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "Dacă l-ați reînnoit, actualizați informațiile cardului" }, "expirationMonth": { "message": "Luna expirării" @@ -457,10 +457,10 @@ "description": "This describes a field that is 'linked' (related) to another field." }, "fieldType": { - "message": "Field type" + "message": "Tipul câmpului" }, "fieldLabel": { - "message": "Field label" + "message": "Eticheta câmp" }, "remove": { "message": "Ștergere" @@ -473,7 +473,7 @@ "description": "This is the folder for uncategorized items" }, "selfOwnershipLabel": { - "message": "You", + "message": "Tu", "description": "Used as a label to indicate that the user is the owner of an item." }, "addFolder": { @@ -496,10 +496,10 @@ } }, "newFolder": { - "message": "New folder" + "message": "Folder nou" }, "folderName": { - "message": "Folder name" + "message": "Numele folderului" }, "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" @@ -551,7 +551,7 @@ "message": "Generare parolă" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Generare parolă" }, "checkPassword": { "message": "Verificați dacă parola a fost dezvăluită." @@ -606,11 +606,11 @@ "description": "Search Login type" }, "searchCard": { - "message": "Search cards", + "message": "Căutare carduri", "description": "Search Card type" }, "searchIdentity": { - "message": "Search identities", + "message": "Caută identități", "description": "Search Identity type" }, "searchSecureNote": { @@ -624,7 +624,7 @@ "message": "Caută în seiful meu" }, "searchOrganization": { - "message": "Cauta organizatie" + "message": "Caută organizație" }, "searchMembers": { "message": "Caută membri" @@ -654,7 +654,7 @@ "message": "Notă securizată" }, "typeSshKey": { - "message": "SSH key" + "message": "Cheie SSH" }, "typeLoginPlural": { "message": "Conectări" @@ -687,7 +687,7 @@ "message": "Numele complet" }, "address": { - "message": "Address" + "message": "Adresă" }, "address1": { "message": "Adresă 1" @@ -759,7 +759,7 @@ } }, "new": { - "message": "New", + "message": "Nou", "description": "for adding new items" }, "item": { @@ -850,22 +850,22 @@ "message": "Copy phone" }, "copyEmail": { - "message": "Copy email" + "message": "Copiere e-mail" }, "copyCompany": { - "message": "Copy company" + "message": "Copiază firma" }, "copySSN": { "message": "Copy Social Security number" }, "copyPassportNumber": { - "message": "Copy passport number" + "message": "Copiați numărul pașaportului" }, "copyLicenseNumber": { - "message": "Copy license number" + "message": "Copiați numărul de licență" }, "copyName": { - "message": "Copy name" + "message": "Copiați numele" }, "me": { "message": "Eu" @@ -886,7 +886,7 @@ "message": "Articolele seifului" }, "filter": { - "message": "Filter" + "message": "Filtru" }, "deleteSelected": { "message": "Ștergere selecție" @@ -998,37 +998,37 @@ "message": "Dosar șters" }, "editInfo": { - "message": "Edit info" + "message": "Editează info" }, "access": { - "message": "Access" + "message": "Acces" }, "accessLevel": { - "message": "Access level" + "message": "Nivel de acces" }, "accessing": { - "message": "Accessing" + "message": "Accesare" }, "loggedOut": { "message": "Deconectat" }, "loggedOutDesc": { - "message": "You have been logged out of your account." + "message": "Ai fost deconectat din contul tău." }, "loginExpired": { "message": "Sesiunea de autentificare a expirat." }, "restartRegistration": { - "message": "Restart registration" + "message": "Reporniți înregistrarea" }, "expiredLink": { - "message": "Expired link" + "message": "Link expirat" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Please restart registration or try logging in." + "message": "Vă rugăm să reporniți înregistrarea sau să încercați să vă conectați." }, "youMayAlreadyHaveAnAccount": { - "message": "You may already have an account" + "message": "Este posibil să aveți deja un cont" }, "logOutConfirmation": { "message": "Sigur doriți să vă deconectați?" @@ -1046,7 +1046,7 @@ "message": "Nu" }, "location": { - "message": "Location" + "message": "Locație" }, "loginOrCreateNewAccount": { "message": "Autentificați-vă sau creați un cont nou pentru a accesa seiful dvs. securizat." @@ -1058,31 +1058,31 @@ "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Selectezi o altă opțiune?" }, "loginWithMasterPassword": { "message": "Autentificați-vă cu parola principală" }, "readingPasskeyLoading": { - "message": "Reading passkey..." + "message": "Citire parolă..." }, "readingPasskeyLoadingInfo": { - "message": "Keep this window open and follow prompts from your browser." + "message": "Păstrează această fereastră deschisă și urmează instrucțiunile din browser-ul tău." }, "useADifferentLogInMethod": { - "message": "Use a different log in method" + "message": "Folosiți o metodă diferită de autentificare" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Autentificare cu parolă" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Autentificare unică" }, "welcomeBack": { - "message": "Welcome back" + "message": "Bine ați revenit!" }, "invalidPasskeyPleaseTryAgain": { - "message": "Invalid Passkey. Please try again." + "message": "Parolă nevalidă. Vă rugăm să încercați din nou." }, "twoFactorForPasskeysNotSupportedOnClientUpdateToLogIn": { "message": "2FA for passkeys is not supported. Update the app to log in." @@ -1091,7 +1091,7 @@ "message": "Use a generated passkey that will automatically log you in without a password. Biometrics, like facial recognition or fingerprint, or another FIDO2 security method will verify your identity." }, "newPasskey": { - "message": "New passkey" + "message": "Cheie parolă nouă" }, "learnMoreAboutPasswordless": { "message": "Learn more about passwordless" @@ -1106,31 +1106,31 @@ "message": "Error creating passkey" }, "errorCreatingPasskeyInfo": { - "message": "There was a problem creating your passkey." + "message": "A apărut o eroare la crearea parolei." }, "passkeySuccessfullyCreated": { - "message": "Passkey successfully created!" + "message": "Parola a fost creata!" }, "customPasskeyNameInfo": { - "message": "Name your passkey to help you identify it." + "message": "Numiți cheia de acces pentru a vă ajuta să o identificați." }, "useForVaultEncryption": { - "message": "Use for vault encryption" + "message": "Utilizat pentru criptarea seifului" }, "useForVaultEncryptionInfo": { "message": "Log in and unlock on supported devices without your master password. Follow the prompts from your browser to finalize setup." }, "useForVaultEncryptionErrorReadingPasskey": { - "message": "Error reading passkey. Try again or uncheck this option." + "message": "Eroare la citirea parolei. Încercați din nou sau debifați această opțiune." }, "encryptionNotSupported": { - "message": "Encryption not supported" + "message": "Criptare neacceptată" }, "enablePasskeyEncryption": { - "message": "Set up encryption" + "message": "Configurare criptare" }, "usedForEncryption": { - "message": "Used for encryption" + "message": "Folosit pentru criptare" }, "loginWithPasskeyEnabled": { "message": "Log in with passkey turned on" @@ -1145,10 +1145,10 @@ } }, "passkeyRemoved": { - "message": "Passkey removed" + "message": "Parolă eliminată" }, "removePasskey": { - "message": "Remove passkey" + "message": "Înlăturare parolă" }, "removePasskeyInfo": { "message": "If all passkeys are removed, you will be unable to log into new devices without your master password." @@ -1157,16 +1157,16 @@ "message": "Passkey limit reached. Remove a passkey to add another." }, "tryAgain": { - "message": "Try again" + "message": "Încercați din nou" }, "createAccount": { "message": "Creare cont" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Nou pe Bitwarden?" }, "setAStrongPassword": { - "message": "Set a strong password" + "message": "Setați o parolă puternică" }, "finishCreatingYourAccountBySettingAPassword": { "message": "Finish creating your account by setting a password" @@ -1184,10 +1184,10 @@ "message": "Log in to Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Introdu codul trimis la emailul tău" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Introdu codul din aplicația de autentificare" }, "pressYourYubiKeyToAuthenticate": { "message": "Press your YubiKey to authenticate" @@ -1199,13 +1199,13 @@ "message": "The authentication session timed out. Please restart the login process." }, "verifyYourIdentity": { - "message": "Verify your Identity" + "message": "Verificați identitatea" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Dispozitiv nerecunoscut. Introdu codul trimis pe email pentru a verifica identitatea." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "Continuă autentificarea" }, "whatIsADevice": { "message": "What is a device?" @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "După actualizarea cheii de criptare, trebuie să vă reconectați în toate aplicațiile Bitwarden pe care le utilizați în prezent (cum ar fi aplicația mobilă sau extensiile browserului). Faptul de a nu vă deconecta și reconecta (care descarcă noua cheie de criptare) poate duce la corupția datelor. Vom încerca să vă deconectăm automat, însă ar putea fi întârziat." }, - "updateEncryptionKeyExportWarning": { - "message": "Orice export criptat pe care l-ați salvat va deveni, de asemenea, nevalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Abonament" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index bf35c9a916a..aaccc3b2145 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "После обновления ключа шифрования необходимо выйти из всех приложений Bitwarden, которые вы используете (например, из мобильного приложения или расширения браузера). Если этого не сделать, могут повредиться данные (так как при выходе и последующем входе загружается ваш новый ключ шифрования). Мы попытаемся автоматически осуществить завершение ваших сессий, однако это может произойти с задержкой." }, - "updateEncryptionKeyExportWarning": { - "message": "Любые зашифрованные экспортированные данные, которые вы сохранили, также станут недействительными." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Подписка" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Оплата с помощью банковского счета доступна только для клиентов в США. Вам потребуется подтвердить свой банковский счет. Мы сделаем микродепозит в течение следующих 1-2 рабочих дней. Введите код дескриптора выписки из этого депозита на странице подписки провайдера для подтверждения банковского счета. Неподтверждение банковского счета приведет к пропуску платежа и приостановке подписки." + }, + "clickPayWithPayPal": { + "message": "Пожалуйста, нажмите кнопку \"Оплатить с помощью PayPal\", чтобы добавить свой способ оплаты." } } diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index a8ddb31d50a..2d270a54731 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 3192cdd9644..6bbf765ba78 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -99,7 +99,7 @@ "message": "Označiť aplikáciu ako kritickú" }, "applicationsMarkedAsCriticalSuccess": { - "message": "Applications marked as critical" + "message": "Aplikácie označené ako kritické" }, "application": { "message": "Aplikácia" @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Po aktualizácii šifrovacieho kľúča budete požiadaní o opätovné prihlásenie do všetkých Bitwarden aplikácii ktoré momentálne používate (napríklad mobilné aplikácie, alebo rozšírenia v prehliadači). Ak sa opätovne neprihlásite (touto operáciou sa stiahnu nové šifrovacie kľúče), mohlo by to viesť k poškodeniu uložených dát. Pokúsime sa odhlásiť vás automaticky, ale môže to chvíľu trvať." }, - "updateEncryptionKeyExportWarning": { - "message": "Všetky uložené šifrované exporty sa tiež stanú neplatnými." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Predplatné" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Platba prostredníctvom bankového účtu je dostupná len pre zákazníkov v Spojených Štátoch. Budete musieť overiť svoj bankový účet. V priebehu nasledujúcich 1-2 pracovných dní vykonáme mikro vklad. Na overenie bankového účtu zadajte kód popisu výpisu z tohto vkladu na fakturačnej stránke poskytovateľa. Neoverenie bankového účtu bude mať za následok neuskutočnenie platby a pozastavenie vášho predplatného." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index a3605be29ef..06c5339ad98 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Naročnina" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index e1099d2c5f8..2ca7e72e227 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Након ажурирања кључа за шифровање, мораћете да се одјавите и вратите у све Bitwarden апликације које тренутно користите (као што су мобилна апликација или додаци прегледача). Ако се не одјавите и поново пријавите (чиме се преузима ваш нови кључ за шифровање), може доћи до оштећења података. Покушаћемо аутоматски да се одјавимо, али може доћи до одлагања." }, - "updateEncryptionKeyExportWarning": { - "message": "Сваки шифровани извоз који сте сачували такође ће постати неважећи." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Претплата" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Плаћање са банковним рачуном доступно је само купцима у Сједињеним Државама. Од вас ће бити потребно да проверите свој банковни рачун. Направит ћемо микро депозит у наредних 1-2 радна дана. Унесите кôд за дескриптор изјаве са овог депозита на претплатничкој страници провајдера да бисте потврдили банковни рачун. Неуспех у верификацији банковног рачуна резултираће пропуштеним плаћањем и претплатом је суспендовано." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index 13a974031cc..6b10fd30018 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 634a709762b..1ca059f95ec 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Efter att ha uppdaterat din krypteringsnyckel, måste du logga ut och in igen i alla Bitwarden-program som du använder (t.ex. mobilappen och webbläsartillägget). Att inte logga ut och in igen (vilket hämtar din nya krypteringsnyckel) kan resultera i datakorruption. Vi kommer försöka logga ut dig automatiskt, men det kan vara fördröjt." }, - "updateEncryptionKeyExportWarning": { - "message": "Alla krypterade exporter som du har sparat kommer också bli ogiltiga." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Prenumeration" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 7a206aca2e3..38740c78cba 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index 4fff9ab837e..393442e42e5 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Subscription" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index 3f82a6d6c15..c59f33bba45 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Şifreleme anahtarınızı güncelledikten sonra, şu anda kullanmakta olduğunuz tüm Bitwarden uygulamalarında (mobil uygulama veya tarayıcı uzantıları gibi) oturumunuzu kapatıp tekrar açmanız gerekir. Yeni şifreleme anahtarınızı indirme için oturumu kapatıp tekrar açmamamız verilerin bozulmasına neden olabilir. Oturumunuzu otomatik olarak kapatmaya çalışacağız, ancak bu gecikebilir." }, - "updateEncryptionKeyExportWarning": { - "message": "Şifrelenmiş dışa aktarmalarınız da geçersiz olacaktır." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Abonelik" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index cdeaacf5fb4..288e8e840a0 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "Після оновлення вашого ключа шифрування вам необхідно вийти з системи і потім виконати повторний вхід у всіх програмах Bitwarden, які ви використовуєте. Збій при виході та повторному вході може призвести до пошкодження даних. Ми спробуємо завершити ваші сеанси автоматично, однак, цей процес може відбутися із затримкою." }, - "updateEncryptionKeyExportWarning": { - "message": "Будь-які зашифровані експортування, які ви зберегли, також стануть недійсними." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Передплата" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "Оплата з банківським рахунком доступна тільки для клієнтів у США. Вам необхідно буде підтвердити свій банківський рахунок. Ми здійснимо мікродепозит протягом наступних 1–2 робочих днів. Введіть код дескриптора з цього депозиту на сторінці передплати провайдера, щоб підтвердити банківський рахунок. Неможливість засвідчення банківського рахунку призведе до втрати платежу та припинення вашої передплати." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 7204365cb21..cee1bf8ebbd 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." }, - "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "Gói" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index af785810c7f..9805eaac5fd 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -2836,7 +2836,7 @@ "message": "支付卡" }, "paypalClickSubmit": { - "message": "点击 PayPal 按钮登录您的 PayPal 账户,然后点击下面的提交按钮继续。" + "message": "选择 PayPal 按钮登录您的 PayPal 账户,然后点击下面的「提交」按钮继续。" }, "cancelSubscription": { "message": "取消订阅" @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "更新加密密钥后,您需要注销所有当前使用的 Bitwarden 应用程序(例如移动 App 或浏览器扩展)然后重新登录。注销或者重新登录(这将下载新的加密密钥)失败可能会导致数据损坏。我们会尝试自动为您注销,但可能会有所延迟。" }, - "updateEncryptionKeyExportWarning": { - "message": "您保存的任何已加密导出也将变为无效。" + "updateEncryptionKeyAccountExportWarning": { + "message": "您已保存的所有账户限制的导出文件将失效。" }, "subscription": { "message": "订阅" @@ -10610,5 +10610,8 @@ }, "verifyProviderBankAccountWithStatementDescriptorWarning": { "message": "使用银行账户付款仅对美国用户开放。您将被要求验证您的银行账户。我们将在 1-2 个工作日内进行一笔小额转账,请在提供商的订阅页面输入该转账的对账单描述符代码以验证银行账户。验证银行账户失败将会错过支付,您的订阅将失效。" + }, + "clickPayWithPayPal": { + "message": "请点击「使用 PayPal 付款」按钮以添加您的付款方式。" } } diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 59e77927862..57dd4c8631f 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -4548,8 +4548,8 @@ "updateEncryptionKeyWarning": { "message": "更新加密金鑰後,您需要登出並重新登入目前使用的所有 Bitwarden 應用程式(如行動應用程式或瀏覽器擴充套件)。登出和重新登入(這會下載新的加密金鑰)失敗可能會導致資料損毀。我們將嘗試自動登出,但可能會有所延遲。" }, - "updateEncryptionKeyExportWarning": { - "message": "您儲存的任何已加密匯出的檔案也將變成無效。" + "updateEncryptionKeyAccountExportWarning": { + "message": "Any account restricted exports you have saved will become invalid." }, "subscription": { "message": "訂閱" @@ -10610,5 +10610,8 @@ }, "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." + }, + "clickPayWithPayPal": { + "message": "Please click the Pay with PayPal button to add your payment method." } } From a02c230e4d9f16f93c295ae857e6618349338f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Sat, 17 May 2025 22:17:36 +0200 Subject: [PATCH 28/29] Pin rust toolchain (#14817) * Pin rust toolchain * Always install targets in build script * Delete installed toolchains --- .github/renovate.json5 | 6 +++++ .github/workflows/build-desktop.yml | 26 ++----------------- apps/desktop/desktop_native/Cargo.lock | 16 ++++++------ apps/desktop/desktop_native/build.js | 6 +++++ .../desktop_native/rust-toolchain.toml | 4 +++ 5 files changed, 26 insertions(+), 32 deletions(-) create mode 100644 apps/desktop/desktop_native/rust-toolchain.toml diff --git a/.github/renovate.json5 b/.github/renovate.json5 index d0066ddd7ba..12ae415c6a1 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -51,6 +51,12 @@ commitMessagePrefix: "[deps] BRE:", addLabels: ["hold"], }, + { + // Enable support for Rust toolchain updates. + matchManagers: ["custom.regex"], + matchDepNames: ["rust"], + commitMessageTopic: "Rust", + }, { // By default, we send patch updates to the Dependency Dashboard and do not generate a PR. // We want to generate PRs for a select number of dependencies to ensure we stay up to date on these. diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 86dc74f7351..fab0df693cb 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -428,12 +428,6 @@ jobs: - name: Set up environmentF run: choco install checksum --no-progress - - name: Rust - shell: pwsh - run: | - rustup target install i686-pc-windows-msvc - rustup target install aarch64-pc-windows-msvc - - name: Print environment run: | node --version @@ -681,10 +675,6 @@ jobs: - name: Set up Node-gyp run: python3 -m pip install setuptools - - name: Rust - shell: pwsh - run: rustup target install aarch64-apple-darwin - - name: Print environment run: | node --version @@ -890,10 +880,6 @@ jobs: - name: Set up Node-gyp run: python3 -m pip install setuptools - - name: Rust - shell: pwsh - run: rustup target install aarch64-apple-darwin - - name: Print environment run: | node --version @@ -1040,9 +1026,7 @@ jobs: - name: Build Native Module if: steps.cache.outputs.cache-hit != 'true' working-directory: apps/desktop/desktop_native - run: | - rustup target add aarch64-apple-darwin - node build.js cross-platform + run: node build.js cross-platform - name: Build if: steps.build-cache.outputs.cache-hit != 'true' @@ -1139,10 +1123,6 @@ jobs: - name: Set up Node-gyp run: python3 -m pip install setuptools - - name: Rust - shell: pwsh - run: rustup target install aarch64-apple-darwin - - name: Print environment run: | node --version @@ -1296,9 +1276,7 @@ jobs: - name: Build Native Module if: steps.cache.outputs.cache-hit != 'true' working-directory: apps/desktop/desktop_native - run: | - rustup target add aarch64-apple-darwin - node build.js cross-platform + run: node build.js cross-platform - name: Build if: steps.build-cache.outputs.cache-hit != 'true' diff --git a/apps/desktop/desktop_native/Cargo.lock b/apps/desktop/desktop_native/Cargo.lock index 115947f1a81..f3db03f8639 100644 --- a/apps/desktop/desktop_native/Cargo.lock +++ b/apps/desktop/desktop_native/Cargo.lock @@ -889,7 +889,7 @@ dependencies = [ "ssh-encoding", "ssh-key", "sysinfo", - "thiserror 1.0.69", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", @@ -931,7 +931,7 @@ dependencies = [ "cc", "core-foundation", "glob", - "thiserror 1.0.69", + "thiserror 2.0.12", "tokio", ] @@ -2480,7 +2480,7 @@ checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror 2.0.11", + "thiserror 2.0.12", ] [[package]] @@ -2971,11 +2971,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.12", ] [[package]] @@ -2991,9 +2991,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", diff --git a/apps/desktop/desktop_native/build.js b/apps/desktop/desktop_native/build.js index da61da15f9d..2edd0e89616 100644 --- a/apps/desktop/desktop_native/build.js +++ b/apps/desktop/desktop_native/build.js @@ -45,6 +45,10 @@ function buildProxyBin(target, release = true) { } } +function installTarget(target) { + child_process.execSync(`rustup target add ${target}`, { stdio: 'inherit', cwd: __dirname }); +} + if (!crossPlatform && !target) { console.log(`Building native modules in ${mode} mode for the native architecture`); buildNapiModule(false, mode === "release"); @@ -54,6 +58,7 @@ if (!crossPlatform && !target) { if (target) { console.log(`Building for target: ${target} in ${mode} mode`); + installTarget(target); buildNapiModule(target, mode === "release"); buildProxyBin(target, mode === "release"); return; @@ -70,6 +75,7 @@ if (process.platform === "linux") { } platformTargets.forEach(([target, _]) => { + installTarget(target); buildNapiModule(target); buildProxyBin(target); }); diff --git a/apps/desktop/desktop_native/rust-toolchain.toml b/apps/desktop/desktop_native/rust-toolchain.toml new file mode 100644 index 00000000000..898a61f3f4b --- /dev/null +++ b/apps/desktop/desktop_native/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "1.85.0" +components = [ "rustfmt", "clippy" ] +profile = "minimal" From 21f77b6aab03903cbca285de87097131610b2981 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 30 May 2025 12:04:28 +0200 Subject: [PATCH 29/29] Remove legacy biometrics protocol --- .../background/nativeMessaging.background.ts | 55 +---------- .../background-browser-biometrics.service.ts | 92 +++++-------------- .../src/biometrics/biometrics-commands.ts | 4 - 3 files changed, 27 insertions(+), 124 deletions(-) diff --git a/apps/browser/src/background/nativeMessaging.background.ts b/apps/browser/src/background/nativeMessaging.background.ts index 7172b98d727..03876dba673 100644 --- a/apps/browser/src/background/nativeMessaging.background.ts +++ b/apps/browser/src/background/nativeMessaging.background.ts @@ -1,4 +1,4 @@ -import { delay, filter, firstValueFrom, from, map, race, timer } from "rxjs"; +import { firstValueFrom } from "rxjs"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; @@ -11,7 +11,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; -import { KeyService, BiometricStateService, BiometricsCommands } from "@bitwarden/key-management"; +import { KeyService, BiometricStateService } from "@bitwarden/key-management"; import { BrowserApi } from "../platform/browser/browser-api"; @@ -81,9 +81,6 @@ export class NativeMessagingBackground { private messageId = 0; private callbacks = new Map(); - - isConnectedToOutdatedDesktopClient = true; - constructor( private keyService: KeyService, private encryptService: EncryptService, @@ -137,7 +134,6 @@ export class NativeMessagingBackground { // Safari has a bundled native component which is always available, no need to // check if the desktop app is running. if (this.platformUtilsService.isSafari()) { - this.isConnectedToOutdatedDesktopClient = false; connectedCallback(); } @@ -189,14 +185,6 @@ export class NativeMessagingBackground { this.secureChannel.sharedSecret = new SymmetricCryptoKey(decrypted); this.logService.info("[Native Messaging IPC] Secure channel established"); - if ("messageId" in message) { - this.logService.info("[Native Messaging IPC] Non-legacy desktop client"); - this.isConnectedToOutdatedDesktopClient = false; - } else { - this.logService.info("[Native Messaging IPC] Legacy desktop client"); - this.isConnectedToOutdatedDesktopClient = true; - } - this.secureChannel.setupResolve(); break; } @@ -286,29 +274,6 @@ export class NativeMessagingBackground { async callCommand(message: Message): Promise { const messageId = this.messageId++; - if ( - message.command == BiometricsCommands.Unlock || - message.command == BiometricsCommands.IsAvailable - ) { - // TODO remove after 2025.3 - // wait until there is no other callbacks, or timeout - const call = await firstValueFrom( - race( - from([false]).pipe(delay(5000)), - timer(0, 100).pipe( - filter(() => this.callbacks.size === 0), - map(() => true), - ), - ), - ); - if (!call) { - this.logService.info( - `[Native Messaging IPC] Message of type ${message.command} did not get a response before timing out`, - ); - return; - } - } - const callback = new Promise((resolver, rejecter) => { this.callbacks.set(messageId, { resolver, rejecter }); }); @@ -417,22 +382,6 @@ export class NativeMessagingBackground { const messageId = message.messageId; - if ( - message.command == BiometricsCommands.Unlock || - message.command == BiometricsCommands.IsAvailable - ) { - this.logService.info( - `[Native Messaging IPC] Received legacy message of type ${message.command}`, - ); - const messageId: number | undefined = this.callbacks.keys().next().value; - if (messageId != null) { - const resolver = this.callbacks.get(messageId); - this.callbacks.delete(messageId); - resolver!.resolver(message); - } - return; - } - if (this.callbacks.has(messageId)) { const callback = this.callbacks!.get(messageId)!; this.callbacks.delete(messageId); diff --git a/apps/browser/src/key-management/biometrics/background-browser-biometrics.service.ts b/apps/browser/src/key-management/biometrics/background-browser-biometrics.service.ts index a8a89d45274..ef01ade7390 100644 --- a/apps/browser/src/key-management/biometrics/background-browser-biometrics.service.ts +++ b/apps/browser/src/key-management/biometrics/background-browser-biometrics.service.ts @@ -35,17 +35,10 @@ export class BackgroundBrowserBiometricsService extends BiometricsService { try { await this.ensureConnected(); - if (this.nativeMessagingBackground().isConnectedToOutdatedDesktopClient) { - const response = await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.Unlock, - }); - return response.response == "unlocked"; - } else { - const response = await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.AuthenticateWithBiometrics, - }); - return response.response; - } + const response = await this.nativeMessagingBackground().callCommand({ + command: BiometricsCommands.AuthenticateWithBiometrics, + }); + return response.response; } catch (e) { this.logService.info("Biometric authentication failed", e); return false; @@ -60,23 +53,12 @@ export class BackgroundBrowserBiometricsService extends BiometricsService { try { await this.ensureConnected(); - if (this.nativeMessagingBackground().isConnectedToOutdatedDesktopClient) { - const response = await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.IsAvailable, - }); - const resp = - response.response == "available" - ? BiometricsStatus.Available - : BiometricsStatus.HardwareUnavailable; - return resp; - } else { - const response = await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.GetBiometricsStatus, - }); + const response = await this.nativeMessagingBackground().callCommand({ + command: BiometricsCommands.GetBiometricsStatus, + }); - if (response.response) { - return response.response; - } + if (response.response) { + return response.response; } return BiometricsStatus.Available; // FIXME: Remove when updating file. Eslint update @@ -90,43 +72,23 @@ export class BackgroundBrowserBiometricsService extends BiometricsService { try { await this.ensureConnected(); - // todo remove after 2025.3 - if (this.nativeMessagingBackground().isConnectedToOutdatedDesktopClient) { - const response = await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.Unlock, - }); - if (response.response == "unlocked") { - const decodedUserkey = Utils.fromB64ToArray(response.userKeyB64); - const userKey = new SymmetricCryptoKey(decodedUserkey) as UserKey; - if (await this.keyService.validateUserKey(userKey, userId)) { - await this.biometricStateService.setBiometricUnlockEnabled(true); - await this.keyService.setUserKey(userKey, userId); - // to update badge and other things - this.messagingService.send("switchAccount", { userId }); - return userKey; - } - } else { - return null; + const response = await this.nativeMessagingBackground().callCommand({ + command: BiometricsCommands.UnlockWithBiometricsForUser, + userId: userId, + }); + if (response.response) { + // In case the requesting foreground context dies (popup), the userkey should still be set, so the user is unlocked / the setting should be enabled + const decodedUserkey = Utils.fromB64ToArray(response.userKeyB64); + const userKey = new SymmetricCryptoKey(decodedUserkey) as UserKey; + if (await this.keyService.validateUserKey(userKey, userId)) { + await this.biometricStateService.setBiometricUnlockEnabled(true); + await this.keyService.setUserKey(userKey, userId); + // to update badge and other things + this.messagingService.send("switchAccount", { userId }); + return userKey; } } else { - const response = await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.UnlockWithBiometricsForUser, - userId: userId, - }); - if (response.response) { - // In case the requesting foreground context dies (popup), the userkey should still be set, so the user is unlocked / the setting should be enabled - const decodedUserkey = Utils.fromB64ToArray(response.userKeyB64); - const userKey = new SymmetricCryptoKey(decodedUserkey) as UserKey; - if (await this.keyService.validateUserKey(userKey, userId)) { - await this.biometricStateService.setBiometricUnlockEnabled(true); - await this.keyService.setUserKey(userKey, userId); - // to update badge and other things - this.messagingService.send("switchAccount", { userId }); - return userKey; - } - } else { - return null; - } + return null; } } catch (e) { this.logService.info("Biometric unlock for user failed", e); @@ -140,10 +102,6 @@ export class BackgroundBrowserBiometricsService extends BiometricsService { try { await this.ensureConnected(); - if (this.nativeMessagingBackground().isConnectedToOutdatedDesktopClient) { - return await this.getBiometricsStatus(); - } - return ( await this.nativeMessagingBackground().callCommand({ command: BiometricsCommands.GetBiometricsStatusForUser, @@ -161,7 +119,7 @@ export class BackgroundBrowserBiometricsService extends BiometricsService { private async ensureConnected() { if (!this.nativeMessagingBackground().connected) { await this.nativeMessagingBackground().callCommand({ - command: BiometricsCommands.IsAvailable, + command: BiometricsCommands.GetBiometricsStatus, }); } } diff --git a/libs/key-management/src/biometrics/biometrics-commands.ts b/libs/key-management/src/biometrics/biometrics-commands.ts index 1ef31a31fb4..38a666e45e5 100644 --- a/libs/key-management/src/biometrics/biometrics-commands.ts +++ b/libs/key-management/src/biometrics/biometrics-commands.ts @@ -12,8 +12,4 @@ export enum BiometricsCommands { /** Checks whether the biometric unlock can be enabled. */ CanEnableBiometricUnlock = "canEnableBiometricUnlock", - - // legacy - Unlock = "biometricUnlock", - IsAvailable = "biometricUnlockAvailable", }