From 40943b5929c81b0ed3bfdb85811afea0aecdb7c3 Mon Sep 17 00:00:00 2001 From: Jonathan Prusik Date: Thu, 19 Dec 2024 16:47:55 -0500 Subject: [PATCH 01/18] [CL-510] Create slot for banners in popup-page component (#12279) * add full-width-notice slot to popup page component * update storybook popup layout docs with notice example * remove unneeded container/classes --- .../platform/popup/layout/popup-layout.mdx | 27 ++++++++++++++++ .../popup/layout/popup-layout.stories.ts | 31 +++++++++++++++++++ .../popup/layout/popup-page.component.html | 1 + 3 files changed, 59 insertions(+) diff --git a/apps/browser/src/platform/popup/layout/popup-layout.mdx b/apps/browser/src/platform/popup/layout/popup-layout.mdx index aa11b4099a..5723bef44b 100644 --- a/apps/browser/src/platform/popup/layout/popup-layout.mdx +++ b/apps/browser/src/platform/popup/layout/popup-layout.mdx @@ -44,6 +44,9 @@ page looks nice when the extension is popped out. - `above-scroll-area` - When the page content overflows, this content will be "stuck" to the top of the page upon scrolling. +- `full-width-notice` + - Similar to `above-scroll-area`, this content will display before `above-scroll-area` without + container margin or padding. - default - Whatever content you want in `main`. @@ -108,6 +111,30 @@ Common interactive elements to insert into the `end` slot are: - "Add" button: this can be accomplished with the Button component and any custom functionality for that particular page +### Notice + + + + + +Common interactive elements to insert into the `full-width-notice` slot are: + +- `bit-banner`: shows a full-width notice + +Usage example: + +```html + + + + This is an important note about these ciphers + + + + + +``` + ## Popup footer Popup footer should be used when the page displays action buttons. It functions similarly to the diff --git a/apps/browser/src/platform/popup/layout/popup-layout.stories.ts b/apps/browser/src/platform/popup/layout/popup-layout.stories.ts index 11f2d34df5..cd467cecbd 100644 --- a/apps/browser/src/platform/popup/layout/popup-layout.stories.ts +++ b/apps/browser/src/platform/popup/layout/popup-layout.stories.ts @@ -11,6 +11,7 @@ import { SendService } from "@bitwarden/common/tools/send/services/send.service. import { AvatarModule, BadgeModule, + BannerModule, ButtonModule, I18nMockService, IconButtonModule, @@ -125,6 +126,18 @@ class MockCurrentAccountComponent {} }) class MockSearchComponent {} +@Component({ + selector: "mock-banner", + template: ` + + This is an important note about these ciphers + + `, + standalone: true, + imports: [BannerModule], +}) +class MockBannerComponent {} + @Component({ selector: "mock-vault-page", template: ` @@ -298,6 +311,8 @@ export default { CommonModule, RouterModule, ExtensionContainerComponent, + MockBannerComponent, + MockSearchComponent, MockVaultSubpageComponent, MockVaultPageComponent, MockSendPageComponent, @@ -517,6 +532,22 @@ export const TransparentHeader: Story = { }), }; +export const Notice: Story = { + render: (args) => ({ + props: args, + template: /* HTML */ ` + + + + + + + + + `, + }), +}; + export const WidthOptions: Story = { render: (args) => ({ props: args, diff --git a/apps/browser/src/platform/popup/layout/popup-page.component.html b/apps/browser/src/platform/popup/layout/popup-page.component.html index 8eefc14ab5..ba9a108a50 100644 --- a/apps/browser/src/platform/popup/layout/popup-page.component.html +++ b/apps/browser/src/platform/popup/layout/popup-page.component.html @@ -1,5 +1,6 @@
+
Date: Thu, 19 Dec 2024 22:49:45 +0100 Subject: [PATCH 02/18] Run clippy and rustfmt on CI (#12388) * Run clippy and rustfmt on CI * Error on warnings and fix a couple of missed lints * Move import inside function * Fix unix lints * Fix windows lints * Missed some async tests * Remove unneeded reference --- .github/workflows/lint.yml | 28 +++++ .../desktop_native/core/src/autofill/mod.rs | 1 + .../desktop_native/core/src/autofill/unix.rs | 2 +- .../core/src/autofill/windows.rs | 2 +- .../desktop_native/core/src/biometric/mod.rs | 5 +- .../desktop_native/core/src/biometric/unix.rs | 14 +-- .../core/src/biometric/windows.rs | 29 ++--- .../desktop_native/core/src/crypto/crypto.rs | 10 +- .../desktop_native/core/src/crypto/mod.rs | 1 + .../desktop_native/core/src/password/macos.rs | 10 +- .../desktop_native/core/src/password/mod.rs | 1 + .../desktop_native/core/src/password/unix.rs | 4 +- .../core/src/password/windows.rs | 2 +- .../core/src/powermonitor/mod.rs | 1 + .../core/src/powermonitor/unimplemented.rs | 2 +- .../core/src/process_isolation/mod.rs | 1 + .../core/src/ssh_agent/generator.rs | 8 +- .../core/src/ssh_agent/importer.rs | 108 +++++++----------- .../desktop_native/core/src/ssh_agent/mod.rs | 8 +- .../ssh_agent/named_pipe_listener_stream.rs | 2 +- apps/desktop/desktop_native/napi/src/lib.rs | 14 +-- apps/desktop/desktop_native/objc/build.rs | 3 +- apps/desktop/desktop_native/objc/src/lib.rs | 4 +- 23 files changed, 132 insertions(+), 128 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 9dc72c7fdd..a907618bd3 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -58,3 +58,31 @@ jobs: run: | npm ci npm run lint + + rust: + name: Run Rust lint on ${{ matrix.os }} + runs-on: ${{ matrix.os || 'ubuntu-latest' }} + + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + + steps: + - name: Checkout repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Check Rust version + run: rustup --version + + - name: Run cargo fmt + working-directory: ./apps/desktop/desktop_native + run: cargo fmt --check + + - name: Run Clippy + working-directory: ./apps/desktop/desktop_native + run: cargo clippy --all-features --tests + env: + RUSTFLAGS: "-D warnings" diff --git a/apps/desktop/desktop_native/core/src/autofill/mod.rs b/apps/desktop/desktop_native/core/src/autofill/mod.rs index 5997add240..aacec852e9 100644 --- a/apps/desktop/desktop_native/core/src/autofill/mod.rs +++ b/apps/desktop/desktop_native/core/src/autofill/mod.rs @@ -1,3 +1,4 @@ +#[allow(clippy::module_inception)] #[cfg_attr(target_os = "linux", path = "unix.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")] diff --git a/apps/desktop/desktop_native/core/src/autofill/unix.rs b/apps/desktop/desktop_native/core/src/autofill/unix.rs index d77130176a..a6a961f46b 100644 --- a/apps/desktop/desktop_native/core/src/autofill/unix.rs +++ b/apps/desktop/desktop_native/core/src/autofill/unix.rs @@ -1,5 +1,5 @@ use anyhow::Result; -pub async fn run_command(value: String) -> Result { +pub async fn run_command(_value: String) -> Result { todo!("Unix does not support autofill"); } diff --git a/apps/desktop/desktop_native/core/src/autofill/windows.rs b/apps/desktop/desktop_native/core/src/autofill/windows.rs index 2e442263c1..6e0543af36 100644 --- a/apps/desktop/desktop_native/core/src/autofill/windows.rs +++ b/apps/desktop/desktop_native/core/src/autofill/windows.rs @@ -1,5 +1,5 @@ use anyhow::Result; -pub async fn run_command(value: String) -> Result { +pub async fn run_command(_value: String) -> Result { todo!("Windows does not support autofill"); } diff --git a/apps/desktop/desktop_native/core/src/biometric/mod.rs b/apps/desktop/desktop_native/core/src/biometric/mod.rs index dd480f817b..7ad9bcb032 100644 --- a/apps/desktop/desktop_native/core/src/biometric/mod.rs +++ b/apps/desktop/desktop_native/core/src/biometric/mod.rs @@ -1,6 +1,7 @@ use aes::cipher::generic_array::GenericArray; use anyhow::{anyhow, Result}; +#[allow(clippy::module_inception)] #[cfg_attr(target_os = "linux", path = "unix.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")] @@ -41,6 +42,7 @@ pub trait BiometricTrait { ) -> Result; } +#[allow(unused)] fn encrypt(secret: &str, key_material: &KeyMaterial, iv_b64: &str) -> Result { let iv = base64_engine .decode(iv_b64)? @@ -52,9 +54,10 @@ fn encrypt(secret: &str, key_material: &KeyMaterial, iv_b64: &str) -> Result Result { if let CipherString::AesCbc256_B64 { iv, data } = secret { - let decrypted = crypto::decrypt_aes256(&iv, &data, key_material.derive_key()?)?; + let decrypted = crypto::decrypt_aes256(iv, data, key_material.derive_key()?)?; Ok(String::from_utf8(decrypted)?) } else { diff --git a/apps/desktop/desktop_native/core/src/biometric/unix.rs b/apps/desktop/desktop_native/core/src/biometric/unix.rs index 5153fc5ed8..e57b77515e 100644 --- a/apps/desktop/desktop_native/core/src/biometric/unix.rs +++ b/apps/desktop/desktop_native/core/src/biometric/unix.rs @@ -33,12 +33,10 @@ impl super::BiometricTrait for Biometric { .await; match result { - Ok(result) => { - return Ok(result.is_authorized); - } + Ok(result) => Ok(result.is_authorized), Err(e) => { println!("polkit biometric error: {:?}", e); - return Ok(false); + Ok(false) } } } @@ -52,7 +50,7 @@ impl super::BiometricTrait for Biometric { return Ok(true); } } - return Ok(false); + Ok(false) } fn derive_key_material(challenge_str: Option<&str>) -> Result { @@ -68,8 +66,8 @@ impl super::BiometricTrait for Biometric { // so we use a a key derived from the iv. this key is not intended to add any security // but only a place-holder let key = Sha256::digest(challenge); - let key_b64 = base64_engine.encode(&key); - let iv_b64 = base64_engine.encode(&challenge); + let key_b64 = base64_engine.encode(key); + let iv_b64 = base64_engine.encode(challenge); Ok(OsDerivedKey { key_b64, iv_b64 }) } @@ -100,7 +98,7 @@ impl super::BiometricTrait for Biometric { let encrypted_secret = crate::password::get_password(service, account).await?; let secret = CipherString::from_str(&encrypted_secret)?; - return Ok(decrypt(&secret, &key_material)?); + decrypt(&secret, &key_material) } } diff --git a/apps/desktop/desktop_native/core/src/biometric/windows.rs b/apps/desktop/desktop_native/core/src/biometric/windows.rs index d17ea75287..c91b379c22 100644 --- a/apps/desktop/desktop_native/core/src/biometric/windows.rs +++ b/apps/desktop/desktop_native/core/src/biometric/windows.rs @@ -88,14 +88,14 @@ impl super::BiometricTrait for Biometric { let bitwarden = h!("Bitwarden"); let result = KeyCredentialManager::RequestCreateAsync( - &bitwarden, + bitwarden, KeyCredentialCreationOption::FailIfExists, )? .get()?; let result = match result.Status()? { KeyCredentialStatus::CredentialAlreadyExists => { - KeyCredentialManager::OpenAsync(&bitwarden)?.get()? + KeyCredentialManager::OpenAsync(bitwarden)?.get()? } KeyCredentialStatus::Success => result, _ => return Err(anyhow!("Failed to create key credential")), @@ -116,8 +116,8 @@ impl super::BiometricTrait for Biometric { CryptographicBuffer::CopyToByteArray(&signature_buffer, &mut signature_value)?; let key = Sha256::digest(&*signature_value); - let key_b64 = base64_engine.encode(&key); - let iv_b64 = base64_engine.encode(&challenge); + let key_b64 = base64_engine.encode(key); + let iv_b64 = base64_engine.encode(challenge); Ok(OsDerivedKey { key_b64, iv_b64 }) } @@ -151,12 +151,12 @@ impl super::BiometricTrait for Biometric { Ok(secret) => { // If the secret is a CipherString, it is encrypted and we need to decrypt it. let secret = decrypt(&secret, &key_material)?; - return Ok(secret); + Ok(secret) } Err(_) => { // If the secret is not a CipherString, it is not encrypted and we can return it // directly. - return Ok(encrypted_secret); + Ok(encrypted_secret) } } } @@ -206,8 +206,8 @@ fn set_focus(window: HWND) { pressed = true; keybd_event(VK_MENU.0 as u8, 0, KEYEVENTF_EXTENDEDKEY, 0); } - SetForegroundWindow(window); - SetFocus(window); + let _ = SetForegroundWindow(window); + let _ = SetFocus(window); if pressed { keybd_event( VK_MENU.0 as u8, @@ -245,20 +245,21 @@ mod tests { assert_eq!(iv.len(), 16); } - #[test] + #[tokio::test] #[cfg(feature = "manual_test")] - fn test_prompt() { + async fn test_prompt() { ::prompt( vec![0, 0, 0, 0, 0, 0, 0, 0], String::from("Hello from Rust"), ) + .await .unwrap(); } - #[test] + #[tokio::test] #[cfg(feature = "manual_test")] - fn test_available() { - assert!(::available().unwrap()) + async fn test_available() { + assert!(::available().await.unwrap()) } #[test] @@ -275,7 +276,7 @@ mod tests { match secret { CipherString::AesCbc256_B64 { iv, data: _ } => { - assert_eq!(iv_b64, base64_engine.encode(&iv)); + assert_eq!(iv_b64, base64_engine.encode(iv)); } _ => panic!("Invalid cipher string"), } diff --git a/apps/desktop/desktop_native/core/src/crypto/crypto.rs b/apps/desktop/desktop_native/core/src/crypto/crypto.rs index 4427138cb1..a254d34c43 100644 --- a/apps/desktop/desktop_native/core/src/crypto/crypto.rs +++ b/apps/desktop/desktop_native/core/src/crypto/crypto.rs @@ -9,13 +9,9 @@ use crate::error::{CryptoError, KdfParamError, Result}; use super::CipherString; -pub fn decrypt_aes256( - iv: &[u8; 16], - data: &Vec, - key: GenericArray, -) -> Result> { +pub fn decrypt_aes256(iv: &[u8; 16], data: &[u8], key: GenericArray) -> Result> { let iv = GenericArray::from_slice(iv); - let mut data = data.clone(); + let mut data = data.to_vec(); let decrypted_key_slice = cbc::Decryptor::::new(&key, iv) .decrypt_padded_mut::(&mut data) .map_err(|_| CryptoError::KeyDecrypt)?; @@ -54,7 +50,7 @@ pub fn argon2( let mut hash = [0u8; 32]; argon - .hash_password_into(secret, &salt, &mut hash) + .hash_password_into(secret, salt, &mut hash) .map_err(|e| KdfParamError::InvalidParams(format!("Argon2 hashing failed: {e}",)))?; // Argon2 is using some stack memory that is not zeroed. Eventually some function will diff --git a/apps/desktop/desktop_native/core/src/crypto/mod.rs b/apps/desktop/desktop_native/core/src/crypto/mod.rs index 13ac4b947b..72f189509f 100644 --- a/apps/desktop/desktop_native/core/src/crypto/mod.rs +++ b/apps/desktop/desktop_native/core/src/crypto/mod.rs @@ -2,4 +2,5 @@ pub use cipher_string::*; pub use crypto::*; mod cipher_string; +#[allow(clippy::module_inception)] mod crypto; diff --git a/apps/desktop/desktop_native/core/src/password/macos.rs b/apps/desktop/desktop_native/core/src/password/macos.rs index b69854905d..1af005acb4 100644 --- a/apps/desktop/desktop_native/core/src/password/macos.rs +++ b/apps/desktop/desktop_native/core/src/password/macos.rs @@ -4,18 +4,18 @@ use security_framework::passwords::{ }; pub async fn get_password(service: &str, account: &str) -> Result { - let result = String::from_utf8(get_generic_password(&service, &account)?)?; + let result = String::from_utf8(get_generic_password(service, account)?)?; Ok(result) } pub async fn set_password(service: &str, account: &str, password: &str) -> Result<()> { - let result = set_generic_password(&service, &account, password.as_bytes())?; - Ok(result) + set_generic_password(service, account, password.as_bytes())?; + Ok(()) } pub async fn delete_password(service: &str, account: &str) -> Result<()> { - let result = delete_generic_password(&service, &account)?; - Ok(result) + delete_generic_password(service, account)?; + Ok(()) } pub async fn is_available() -> Result { diff --git a/apps/desktop/desktop_native/core/src/password/mod.rs b/apps/desktop/desktop_native/core/src/password/mod.rs index 3cc0c28e04..351e896c40 100644 --- a/apps/desktop/desktop_native/core/src/password/mod.rs +++ b/apps/desktop/desktop_native/core/src/password/mod.rs @@ -1,3 +1,4 @@ +#[allow(clippy::module_inception)] #[cfg_attr(target_os = "linux", path = "unix.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")] diff --git a/apps/desktop/desktop_native/core/src/password/unix.rs b/apps/desktop/desktop_native/core/src/password/unix.rs index f73b41de8c..c02ef61962 100644 --- a/apps/desktop/desktop_native/core/src/password/unix.rs +++ b/apps/desktop/desktop_native/core/src/password/unix.rs @@ -13,7 +13,7 @@ async fn get_password_new(service: &str, account: &str) -> Result { let keyring = oo7::Keyring::new().await?; let attributes = HashMap::from([("service", service), ("account", account)]); let results = keyring.search_items(&attributes).await?; - let res = results.get(0); + let res = results.first(); match res { Some(res) => { let secret = res.secret().await?; @@ -31,7 +31,7 @@ async fn get_password_legacy(service: &str, account: &str) -> Result { let keyring = oo7::Keyring::DBus(collection); let attributes = HashMap::from([("service", service), ("account", account)]); let results = keyring.search_items(&attributes).await?; - let res = results.get(0); + let res = results.first(); match res { Some(res) => { let secret = res.secret().await?; diff --git a/apps/desktop/desktop_native/core/src/password/windows.rs b/apps/desktop/desktop_native/core/src/password/windows.rs index 2a66640286..32300b9f81 100644 --- a/apps/desktop/desktop_native/core/src/password/windows.rs +++ b/apps/desktop/desktop_native/core/src/password/windows.rs @@ -42,7 +42,7 @@ pub async fn get_password<'a>(service: &str, account: &str) -> Result { .to_string_lossy() }; - Ok(String::from(password)) + Ok(password) } pub async fn set_password(service: &str, account: &str, password: &str) -> Result<()> { diff --git a/apps/desktop/desktop_native/core/src/powermonitor/mod.rs b/apps/desktop/desktop_native/core/src/powermonitor/mod.rs index 2a99639550..8329b29117 100644 --- a/apps/desktop/desktop_native/core/src/powermonitor/mod.rs +++ b/apps/desktop/desktop_native/core/src/powermonitor/mod.rs @@ -1,3 +1,4 @@ +#[allow(clippy::module_inception)] #[cfg_attr(target_os = "linux", path = "linux.rs")] #[cfg_attr(target_os = "windows", path = "unimplemented.rs")] #[cfg_attr(target_os = "macos", path = "unimplemented.rs")] diff --git a/apps/desktop/desktop_native/core/src/powermonitor/unimplemented.rs b/apps/desktop/desktop_native/core/src/powermonitor/unimplemented.rs index 0078c0bf92..efe36bcb3c 100644 --- a/apps/desktop/desktop_native/core/src/powermonitor/unimplemented.rs +++ b/apps/desktop/desktop_native/core/src/powermonitor/unimplemented.rs @@ -3,5 +3,5 @@ pub async fn on_lock(_: tokio::sync::mpsc::Sender<()>) -> Result<(), Box bool { - return false; + false } diff --git a/apps/desktop/desktop_native/core/src/process_isolation/mod.rs b/apps/desktop/desktop_native/core/src/process_isolation/mod.rs index 7c9aaf3bcf..30f4dbf689 100644 --- a/apps/desktop/desktop_native/core/src/process_isolation/mod.rs +++ b/apps/desktop/desktop_native/core/src/process_isolation/mod.rs @@ -1,3 +1,4 @@ +#[allow(clippy::module_inception)] #[cfg_attr(target_os = "linux", path = "linux.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")] diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/generator.rs b/apps/desktop/desktop_native/core/src/ssh_agent/generator.rs index fe639f20e7..f532d0ab28 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/generator.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/generator.rs @@ -19,24 +19,24 @@ pub async fn generate_keypair(key_algorithm: String) -> Result return Err(anyhow::anyhow!("Unsupported RSA key size")), }; let rsa_keypair = ssh_key::private::RsaKeypair::random(&mut rng, bits) - .or_else(|e| Err(anyhow::anyhow!(e.to_string())))?; + .map_err(|e| anyhow::anyhow!(e.to_string()))?; let private_key = ssh_key::PrivateKey::new( ssh_key::private::KeypairData::from(rsa_keypair), "".to_string(), ) - .or_else(|e| Err(anyhow::anyhow!(e.to_string())))?; + .map_err(|e| anyhow::anyhow!(e.to_string()))?; Ok(private_key) } _ => { return Err(anyhow::anyhow!("Unsupported key algorithm")); } } - .or_else(|e| Err(anyhow::anyhow!(e.to_string())))?; + .map_err(|e| anyhow::anyhow!(e.to_string()))?; let private_key_openssh = key .to_openssh(LineEnding::LF) - .or_else(|e| Err(anyhow::anyhow!(e.to_string())))?; + .map_err(|e| anyhow::anyhow!(e.to_string()))?; Ok(SshKey { private_key: private_key_openssh.to_string(), public_key: key.public_key().to_string(), diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/importer.rs b/apps/desktop/desktop_native/core/src/ssh_agent/importer.rs index c9f66107cc..52464487ec 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/importer.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/importer.rs @@ -27,61 +27,43 @@ pub fn import_key( password: String, ) -> Result { match encoded_key.lines().next() { - Some(PKCS1_HEADER) => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::UnsupportedKeyType, + Some(PKCS1_HEADER) => Ok(SshKeyImportResult { + status: SshKeyImportStatus::UnsupportedKeyType, + ssh_key: None, + }), + Some(PKCS8_UNENCRYPTED_HEADER) => match import_pkcs8_key(encoded_key, None) { + Ok(result) => Ok(result), + Err(_) => Ok(SshKeyImportResult { + status: SshKeyImportStatus::ParsingError, ssh_key: None, - }); - } - Some(PKCS8_UNENCRYPTED_HEADER) => { - return match import_pkcs8_key(encoded_key, None) { - Ok(result) => Ok(result), - Err(_) => Ok(SshKeyImportResult { + }), + }, + Some(PKCS8_ENCRYPTED_HEADER) => match import_pkcs8_key(encoded_key, Some(password)) { + Ok(result) => Ok(result), + Err(err) => match err { + SshKeyImportError::PasswordRequired => Ok(SshKeyImportResult { + status: SshKeyImportStatus::PasswordRequired, + ssh_key: None, + }), + SshKeyImportError::WrongPassword => Ok(SshKeyImportResult { + status: SshKeyImportStatus::WrongPassword, + ssh_key: None, + }), + SshKeyImportError::ParsingError => Ok(SshKeyImportResult { status: SshKeyImportStatus::ParsingError, ssh_key: None, }), - }; - } - Some(PKCS8_ENCRYPTED_HEADER) => match import_pkcs8_key(encoded_key, Some(password)) { - Ok(result) => { - return Ok(result); - } - Err(err) => match err { - SshKeyImportError::PasswordRequired => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::PasswordRequired, - ssh_key: None, - }); - } - SshKeyImportError::WrongPassword => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::WrongPassword, - ssh_key: None, - }); - } - SshKeyImportError::ParsingError => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::ParsingError, - ssh_key: None, - }); - } }, }, - Some(OPENSSH_HEADER) => { - return import_openssh_key(encoded_key, password); - } - Some(_) => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::ParsingError, - ssh_key: None, - }); - } - None => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::ParsingError, - ssh_key: None, - }); - } + Some(OPENSSH_HEADER) => import_openssh_key(encoded_key, password), + Some(_) => Ok(SshKeyImportResult { + status: SshKeyImportStatus::ParsingError, + ssh_key: None, + }), + None => Ok(SshKeyImportResult { + status: SshKeyImportStatus::ParsingError, + ssh_key: None, + }), } } @@ -152,14 +134,14 @@ fn import_pkcs8_key( let pk: Ed25519Keypair = Ed25519Keypair::from(Ed25519PrivateKey::from_bytes(&pk.secret_key)); let private_key = ssh_key::private::PrivateKey::from(pk); - return Ok(SshKeyImportResult { + Ok(SshKeyImportResult { status: SshKeyImportStatus::Success, ssh_key: Some(SshKey { private_key: private_key.to_openssh(LineEnding::LF).unwrap().to_string(), public_key: private_key.public_key().to_string(), key_fingerprint: private_key.fingerprint(HashAlg::Sha256).to_string(), }), - }); + }) } KeyType::Rsa => { let pk: rsa::RsaPrivateKey = match password { @@ -179,7 +161,7 @@ fn import_pkcs8_key( match rsa_keypair { Ok(rsa_keypair) => { let private_key = ssh_key::private::PrivateKey::from(rsa_keypair); - return Ok(SshKeyImportResult { + Ok(SshKeyImportResult { status: SshKeyImportStatus::Success, ssh_key: Some(SshKey { private_key: private_key @@ -189,22 +171,18 @@ fn import_pkcs8_key( public_key: private_key.public_key().to_string(), key_fingerprint: private_key.fingerprint(HashAlg::Sha256).to_string(), }), - }); - } - Err(_) => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::ParsingError, - ssh_key: None, - }); + }) } + Err(_) => Ok(SshKeyImportResult { + status: SshKeyImportStatus::ParsingError, + ssh_key: None, + }), } } - _ => { - return Ok(SshKeyImportResult { - status: SshKeyImportStatus::UnsupportedKeyType, - ssh_key: None, - }); - } + _ => Ok(SshKeyImportResult { + status: SshKeyImportStatus::UnsupportedKeyType, + ssh_key: None, + }), } } diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs b/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs index 82b90c7bff..eced6e8954 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs @@ -129,7 +129,7 @@ impl BitwardenDesktopAgent { .store(true, std::sync::atomic::Ordering::Relaxed); for (key, name, cipher_id) in new_keys.iter() { - match parse_key_safe(&key) { + match parse_key_safe(key) { Ok(private_key) => { let public_key_bytes = private_key .public_key() @@ -187,10 +187,8 @@ impl BitwardenDesktopAgent { return 0; } - let request_id = self - .request_id - .fetch_add(1, std::sync::atomic::Ordering::Relaxed); - request_id + self.request_id + .fetch_add(1, std::sync::atomic::Ordering::Relaxed) } pub fn is_running(&self) -> bool { diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/named_pipe_listener_stream.rs b/apps/desktop/desktop_native/core/src/ssh_agent/named_pipe_listener_stream.rs index 1358abe32e..094144effe 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/named_pipe_listener_stream.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/named_pipe_listener_stream.rs @@ -61,7 +61,7 @@ impl NamedPipeServerStream { } }; - let peer_info = peerinfo::gather::get_peer_info(pid as u32); + let peer_info = peerinfo::gather::get_peer_info(pid); let peer_info = match peer_info { Err(err) => { println!("Failed getting process info for pid {} {}", pid, err); diff --git a/apps/desktop/desktop_native/napi/src/lib.rs b/apps/desktop/desktop_native/napi/src/lib.rs index 170d7bca4f..3ceef666d8 100644 --- a/apps/desktop/desktop_native/napi/src/lib.rs +++ b/apps/desktop/desktop_native/napi/src/lib.rs @@ -89,11 +89,9 @@ pub mod biometrics { account: String, key_material: Option, ) -> napi::Result { - let result = - Biometric::get_biometric_secret(&service, &account, key_material.map(|m| m.into())) - .await - .map_err(|e| napi::Error::from_reason(e.to_string())); - result + Biometric::get_biometric_secret(&service, &account, key_material.map(|m| m.into())) + .await + .map_err(|e| napi::Error::from_reason(e.to_string())) } /// Derives key material from biometric data. Returns a string encoded with a @@ -409,8 +407,8 @@ pub mod powermonitors { .await .map_err(|e| napi::Error::from_reason(e.to_string()))?; tokio::spawn(async move { - while let Some(message) = rx.recv().await { - callback.call(Ok(message.into()), ThreadsafeFunctionCallMode::NonBlocking); + while let Some(()) = rx.recv().await { + callback.call(Ok(()), ThreadsafeFunctionCallMode::NonBlocking); } }); Ok(()) @@ -812,6 +810,6 @@ pub mod crypto { desktop_core::crypto::argon2(&secret, &salt, iterations, memory, parallelism) .map_err(|e| napi::Error::from_reason(e.to_string())) .map(|v| v.to_vec()) - .map(|v| Buffer::from(v)) + .map(Buffer::from) } } diff --git a/apps/desktop/desktop_native/objc/build.rs b/apps/desktop/desktop_native/objc/build.rs index 57f3b626bf..1f9be6bc02 100644 --- a/apps/desktop/desktop_native/objc/build.rs +++ b/apps/desktop/desktop_native/objc/build.rs @@ -1,7 +1,6 @@ -use glob::glob; - #[cfg(target_os = "macos")] fn main() { + use glob::glob; let mut builder = cc::Build::new(); // Auto compile all .m files in the src/native directory diff --git a/apps/desktop/desktop_native/objc/src/lib.rs b/apps/desktop/desktop_native/objc/src/lib.rs index 64475b7956..eb969cb5f5 100644 --- a/apps/desktop/desktop_native/objc/src/lib.rs +++ b/apps/desktop/desktop_native/objc/src/lib.rs @@ -100,7 +100,7 @@ mod objc { } }; - return true; + true } } @@ -115,7 +115,7 @@ pub async fn run_command(input: String) -> Result { unsafe { objc::runCommand(context.as_ptr(), c_input.as_ptr()) }; // Convert output from ObjC code to Rust string - let objc_output = rx.await?.try_into()?; + let objc_output = rx.await?; // Convert output from ObjC code to Rust string // let objc_output = output.try_into()?; From 69d42a73e38822d3bed53a08cdd09457b9b7a65d Mon Sep 17 00:00:00 2001 From: Shane Melton Date: Thu, 19 Dec 2024 14:47:58 -0800 Subject: [PATCH 03/18] [PM-16194] Do not sort Favorite ciphers by last used date (#12466) * [PM-16194] Do not sort Favorite ciphers by last used date * [PM-16194] Remove test --- .../vault/popup/services/vault-popup-items.service.spec.ts | 7 ------- .../src/vault/popup/services/vault-popup-items.service.ts | 5 +---- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts b/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts index 1900d35d9d..5b0eb63998 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts @@ -262,13 +262,6 @@ describe("VaultPopupItemsService", () => { }); }); - it("should sort by last used then by name", (done) => { - service.favoriteCiphers$.subscribe((ciphers) => { - expect(cipherServiceMock.sortCiphersByLastUsedThenName).toHaveBeenCalled(); - done(); - }); - }); - it("should filter favoriteCiphers$ down to search term", (done) => { const cipherList = Object.values(allCiphers); const searchText = "Card 2"; diff --git a/apps/browser/src/vault/popup/services/vault-popup-items.service.ts b/apps/browser/src/vault/popup/services/vault-popup-items.service.ts index b093fa7131..93aa8cdaba 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-items.service.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-items.service.ts @@ -164,16 +164,13 @@ export class VaultPopupItemsService { /** * List of favorite ciphers that are not currently suggested for autofill. - * Ciphers are sorted by last used date, then by name. + * Ciphers are sorted by name. */ favoriteCiphers$: Observable = this.autoFillCiphers$.pipe( withLatestFrom(this._filteredCipherList$), map(([autoFillCiphers, ciphers]) => ciphers.filter((cipher) => cipher.favorite && !autoFillCiphers.includes(cipher)), ), - map((ciphers) => - ciphers.sort((a, b) => this.cipherService.sortCiphersByLastUsedThenName(a, b)), - ), shareReplay({ refCount: false, bufferSize: 1 }), ); From 40ac5132ba93c4e34e9f804412e58a7b4c8bd23e Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:01:35 +0100 Subject: [PATCH 04/18] Autosync the updated translations (#12493) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/ar/messages.json | 42 ++- apps/browser/src/_locales/az/messages.json | 50 +++- apps/browser/src/_locales/be/messages.json | 42 ++- apps/browser/src/_locales/bg/messages.json | 42 ++- apps/browser/src/_locales/bn/messages.json | 42 ++- apps/browser/src/_locales/bs/messages.json | 42 ++- apps/browser/src/_locales/ca/messages.json | 42 ++- apps/browser/src/_locales/cs/messages.json | 42 ++- apps/browser/src/_locales/cy/messages.json | 42 ++- apps/browser/src/_locales/da/messages.json | 42 ++- apps/browser/src/_locales/de/messages.json | 42 ++- apps/browser/src/_locales/el/messages.json | 42 ++- apps/browser/src/_locales/en_GB/messages.json | 42 ++- apps/browser/src/_locales/en_IN/messages.json | 42 ++- apps/browser/src/_locales/es/messages.json | 42 ++- apps/browser/src/_locales/et/messages.json | 42 ++- apps/browser/src/_locales/eu/messages.json | 42 ++- apps/browser/src/_locales/fa/messages.json | 42 ++- apps/browser/src/_locales/fi/messages.json | 42 ++- apps/browser/src/_locales/fil/messages.json | 42 ++- apps/browser/src/_locales/fr/messages.json | 42 ++- apps/browser/src/_locales/gl/messages.json | 42 ++- apps/browser/src/_locales/he/messages.json | 42 ++- apps/browser/src/_locales/hi/messages.json | 42 ++- apps/browser/src/_locales/hr/messages.json | 264 ++++++++++-------- apps/browser/src/_locales/hu/messages.json | 42 ++- apps/browser/src/_locales/id/messages.json | 220 +++++++++------ apps/browser/src/_locales/it/messages.json | 42 ++- apps/browser/src/_locales/ja/messages.json | 240 +++++++++------- apps/browser/src/_locales/ka/messages.json | 42 ++- apps/browser/src/_locales/km/messages.json | 42 ++- apps/browser/src/_locales/kn/messages.json | 42 ++- apps/browser/src/_locales/ko/messages.json | 58 +++- apps/browser/src/_locales/lt/messages.json | 42 ++- apps/browser/src/_locales/lv/messages.json | 42 ++- apps/browser/src/_locales/ml/messages.json | 42 ++- apps/browser/src/_locales/mr/messages.json | 42 ++- apps/browser/src/_locales/my/messages.json | 42 ++- apps/browser/src/_locales/nb/messages.json | 42 ++- apps/browser/src/_locales/ne/messages.json | 42 ++- apps/browser/src/_locales/nl/messages.json | 42 ++- apps/browser/src/_locales/nn/messages.json | 42 ++- apps/browser/src/_locales/or/messages.json | 42 ++- apps/browser/src/_locales/pl/messages.json | 182 +++++++----- apps/browser/src/_locales/pt_BR/messages.json | 42 ++- apps/browser/src/_locales/pt_PT/messages.json | 44 ++- apps/browser/src/_locales/ro/messages.json | 42 ++- apps/browser/src/_locales/ru/messages.json | 42 ++- apps/browser/src/_locales/si/messages.json | 42 ++- apps/browser/src/_locales/sk/messages.json | 42 ++- apps/browser/src/_locales/sl/messages.json | 42 ++- apps/browser/src/_locales/sr/messages.json | 42 ++- apps/browser/src/_locales/sv/messages.json | 42 ++- apps/browser/src/_locales/te/messages.json | 42 ++- apps/browser/src/_locales/th/messages.json | 42 ++- apps/browser/src/_locales/tr/messages.json | 62 +++- apps/browser/src/_locales/uk/messages.json | 42 ++- apps/browser/src/_locales/vi/messages.json | 42 ++- apps/browser/src/_locales/zh_CN/messages.json | 48 +++- apps/browser/src/_locales/zh_TW/messages.json | 42 ++- 60 files changed, 2735 insertions(+), 575 deletions(-) diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 725eef3bd0..7ba554b13b 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "قيِّم هذه الإضافة" }, - "rateExtensionDesc": { - "message": "يرجى النظر في مساعدتنا بكتابة تعليق إيجابي!" - }, "browserNotSupportClipboard": { "message": "متصفح الويب الخاص بك لا يدعم خاصية النسخ السهل. يرجى استخدام النسخ اليدوي." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 4b83341dce..aea4e46abe 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -193,10 +193,10 @@ "message": "Kimliyi avto-doldur" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Doğrulama kodunu doldur" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Doğrulama Kodunu Doldur", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -648,9 +648,6 @@ "rateExtension": { "message": "Uzantını qiymətləndir" }, - "rateExtensionDesc": { - "message": "Gözəl bir rəy ilə bizə dəstək ola bilərsiniz!" - }, "browserNotSupportClipboard": { "message": "Veb brauzeriniz lövhəyə kopyalamağı dəstəkləmir. Əvəzində əllə kopyalayın." }, @@ -3588,11 +3585,11 @@ "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "Vaxt əsaslı Təkistifadəlik Parol Doğrulama Kodu", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Hazırkı TOTP-nin bitməsinə qalan vaxt", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Uzantı ikonunda giriş üçün avto-doldurma təklif sayını göstər" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "İlkin sistem" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Vacib bildiriş" + }, + "setupTwoStepLogin": { + "message": "İki addımlı girişi qur" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden, 2025-ci ilin Fevral ayından etibarən yeni cihazlardan gələn girişləri doğrulamaq üçün hesabınızın e-poçtuna bir kod göndərəcək." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Hesabınızı qorumaq üçün alternativ bir yol kimi iki addımlı girişi qura və ya e-poçtunuzu müraciət edə biləcəyiniz e-poçtla dəyişdirə bilərsiniz." + }, + "remindMeLater": { + "message": "Daha sonra xatırlat" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "$EMAIL$ e-poçtunuza güvənli şəkildə müraciət edə bilirsiniz?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Xeyr, edə bilmirəm" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Bəli, e-poçtuma güvənli şəkildə müraciət edə bilirəm" + }, + "turnOnTwoStepLogin": { + "message": "İki addımlı girişi işə sal" + }, + "changeAcctEmail": { + "message": "Hesabın e-poçtunu dəyişdir" + }, "extensionWidth": { "message": "Uzantı eni" }, diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 3010bb6b6c..37b234105c 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Ацаніць пашырэнне" }, - "rateExtensionDesc": { - "message": "Падумайце пра тое, каб дапамагчы нам добрым водгукам!" - }, "browserNotSupportClipboard": { "message": "Ваш вэб-браўзер не падтрымлівае капіяванне даных у буфер абмену. Скапіюйце іх уручную." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 56d2ce80ea..554650d580 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Оценяване на разширението" }, - "rateExtensionDesc": { - "message": "Молим да ни помогнете, като оставите положителен отзив!" - }, "browserNotSupportClipboard": { "message": "Браузърът не поддържа копиране в буфера, затова копирайте на ръка." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Показване на броя предложения за автоматично попълване на данни за вписване върху иконката на добавката" }, + "showQuickCopyActions": { + "message": "Показване на действията за бързо копиране в трезора" + }, "systemDefault": { "message": "По подразбиране за системата" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Бета" }, + "importantNotice": { + "message": "Важно съобщение" + }, + "setupTwoStepLogin": { + "message": "Настройте двустепенно удостоверяване" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Битуорден ще изпрати код до е-пощата Ви, за потвърждаване на вписването от нови устройства. Това ще започне от февруари 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Можете да настроите двустепенно удостоверяване, като различен метод на защита, или ако е необходимо да промените е-пощата си с такава, до която имате достъп." + }, + "remindMeLater": { + "message": "Напомнете ми по-късно" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Имате ли сигурен достъп до е-пощата си – $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Не, нямам" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Да, имам достъп до е-пощата си" + }, + "turnOnTwoStepLogin": { + "message": "Включване на двустепенното удостоверяване" + }, + "changeAcctEmail": { + "message": "Промяна на е-пощата" + }, "extensionWidth": { "message": "Ширина на разширението" }, diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index a03e86b860..c31f3511a5 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "এক্সটেনশনটি মূল্যায়ন করুন" }, - "rateExtensionDesc": { - "message": "দয়া করে একটি ভাল পর্যালোচনার মাধ্যমে সাহায্য করতে আমাদের বিবেচনা করুন!" - }, "browserNotSupportClipboard": { "message": "আপনার ওয়েব ব্রাউজার সহজে ক্লিপবোর্ড অনুলিপি সমর্থন করে না। পরিবর্তে এটি নিজেই অনুলিপি করুন।" }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 97997f677b..d6cb591a52 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 9ca06f2b50..e405a18f88 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Valora aquesta extensió" }, - "rateExtensionDesc": { - "message": "Considereu ajudar-nos amb una bona valoració!" - }, "browserNotSupportClipboard": { "message": "El vostre navegador web no admet la còpia fàcil del porta-retalls. Copieu-ho manualment." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index b74fe0c9cf..cf3ae3e2fd 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Ohodnotit rozšíření" }, - "rateExtensionDesc": { - "message": "Pomozte nám napsáním dobré recenze!" - }, "browserNotSupportClipboard": { "message": "Váš webový prohlížeč nepodporuje automatické kopírování do schránky. Musíte ho zkopírovat ručně." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Zobrazit počet návrhů automatického vyplňování přihlášení na ikoně rozšíření" }, + "showQuickCopyActions": { + "message": "Zobrazit akce rychlé kopie v trezoru" + }, "systemDefault": { "message": "Systémový výchozí" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Důležité upozornění" + }, + "setupTwoStepLogin": { + "message": "Nastavit dvoufázové přihlášení" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden odešle kód na e-mail Vašeho účtu pro ověření přihlášení z nových zařízení počínaje únorem 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Dvoufázové přihlášení můžete nastavit jako alternativní způsob ochrany Vašeho účtu nebo změnit svůj e-mail na ten, k němuž můžete přistupovat." + }, + "remindMeLater": { + "message": "Připomenout později" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Máte spolehlivý přístup ke svému e-mailu $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Ne, nemám" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ano, ke svému e-mailu mám přístup" + }, + "turnOnTwoStepLogin": { + "message": "Zapnout dvoufázové přihlášení" + }, + "changeAcctEmail": { + "message": "Změnit e-mail účtu" + }, "extensionWidth": { "message": "Šířka rozšíření" }, diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index 3d3866097f..3d4f1c73c0 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rhoi eich barn ar yr estyniad" }, - "rateExtensionDesc": { - "message": "Ystyriwch ein helpu ni gydag adolygiad da!" - }, "browserNotSupportClipboard": { "message": "Dyw eich porwr gwe ddim yn cefnogi copïo drwy'r clipfwrdd yn hawdd. Copïwch â llaw yn lle." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 7822908223..207f409378 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Bedøm udvidelsen" }, - "rateExtensionDesc": { - "message": "Overvej om du vil hjælpe os med en god anmeldelse!" - }, "browserNotSupportClipboard": { "message": "Din webbrowser understøtter ikke udklipsholder kopiering. Kopiér det manuelt i stedet." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Vis antal login-autoudfyldningsforslag på udvidelsesikon" }, + "showQuickCopyActions": { + "message": "Vis hurtig-kopihandlinger på Boks" + }, "systemDefault": { "message": "Systemstandard" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Vigtig notits" + }, + "setupTwoStepLogin": { + "message": "Opsæt totrins-login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Startende i februar 2025, sender Bitwarden en kode til kontoe-mailadressen for at bekræfte logins fra nye enheder." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Man kan opsætte totrins-login som en alternativ måde at beskytte sin konto på eller ændre sin e-mail til en, man kan tilgå." + }, + "remindMeLater": { + "message": "Påmind senere" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Er der pålidelig adgang til e-mailadressen, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nej, jeg gør ikke" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ja, e-mailadressen kan pålideligt tilgås" + }, + "turnOnTwoStepLogin": { + "message": "Slå totrins-login til" + }, + "changeAcctEmail": { + "message": "Skift kontoe-mailadresse" + }, "extensionWidth": { "message": "Udvidelsesbredde" }, diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 098af701cd..169cdf6aa7 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Erweiterung bewerten" }, - "rateExtensionDesc": { - "message": "Wir würden uns freuen, wenn du uns mit einer positiven Bewertung helfen könntest!" - }, "browserNotSupportClipboard": { "message": "Den Browser unterstützt das einfache Kopieren nicht. Bitte kopiere es manuell." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Anzahl der Vorschläge zum Auto-Ausfüllen von Zugangsdaten auf dem Erweiterungssymbol anzeigen" }, + "showQuickCopyActions": { + "message": "Schnellkopier-Aktionen im Tresor anzeigen" + }, "systemDefault": { "message": "Systemstandard" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Wichtiger Hinweis" + }, + "setupTwoStepLogin": { + "message": "Richte die zweistufige Anmeldung ein" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden wird einen Code an deine Konto-E-Mail-Adresse senden, um Anmeldungen von neuen Geräten ab Februar 2025 zu überprüfen." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Du kannst die zweistufige Anmeldung als eine alternative Methode einrichten, um deinen Account zu schützen, oder ändere deine E-Mail-Adresse zu einer, auf die du zugreifen kannst." + }, + "remindMeLater": { + "message": "Erinnere mich später" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Hast du zuverlässigen Zugriff auf deine E-Mail-Adresse $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nein, habe ich nicht" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ja, ich kann zuverlässig auf meine E-Mails zugreifen" + }, + "turnOnTwoStepLogin": { + "message": "Aktiviere die zweistufige Anmeldung" + }, + "changeAcctEmail": { + "message": "Ändere die E-Mail-Adresse des Kontos" + }, "extensionWidth": { "message": "Breite der Erweiterung" }, diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index be85392240..d6ae3c5233 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Βαθμολογήστε την επέκταση" }, - "rateExtensionDesc": { - "message": "Παρακαλούμε σκεφτείτε να μας βοηθήσετε με μια καλή κριτική!" - }, "browserNotSupportClipboard": { "message": "Το πρόγραμμα περιήγησης ιστού δεν υποστηρίζει εύκολη αντιγραφή πρόχειρου. Αντιγράψτε το με το χέρι αντ'αυτού." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Εμφάνιση αριθμού προτάσεων αυτόματης συμπλήρωσης σύνδεσης στο εικονίδιο επέκτασης" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Προεπιλογή συστήματος" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 13db7b5080..a771b390b1 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index 173fe8e788..17c06b57c2 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 4b3dc12f68..eaff576d94 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Valora la extensión" }, - "rateExtensionDesc": { - "message": "¡Por favor, considera ayudarnos con una buena reseña!" - }, "browserNotSupportClipboard": { "message": "Tu navegador web no soporta copiar al portapapeles facilmente. Cópialo manualmente." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 4f17a30263..c772a7b23e 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Hinda seda laiendust" }, - "rateExtensionDesc": { - "message": "Soovi korral võid meid positiivse hinnanguga toetada!" - }, "browserNotSupportClipboard": { "message": "Kasutatav brauser ei toeta lihtsat lõikelaua kopeerimist. Kopeeri see käsitsi." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index d98ae43081..117751b379 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Baloratu gehigarria" }, - "rateExtensionDesc": { - "message": "Mesedez, aipu on batekin lagundu!" - }, "browserNotSupportClipboard": { "message": "Zure web nabigatzaileak ez du onartzen arbelean erraz kopiatzea. Eskuz kopiatu." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 6b88d9e523..47bf414db2 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "به این افزونه امتیاز دهید" }, - "rateExtensionDesc": { - "message": "لطفاً با یک بررسی خوب به ما کمک کنید!" - }, "browserNotSupportClipboard": { "message": "مرورگر شما از کپی کلیپ بورد آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 0a2313d7dc..f0104488d3 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Arvioi laajennus" }, - "rateExtensionDesc": { - "message": "Harkitse tukemistamme hyvällä arvostelulla!" - }, "browserNotSupportClipboard": { "message": "Selaimesi ei tue helppoa leikepöydälle kopiointia. Kopioi kohde manuaalisesti." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Näytä automaattitäytön ehdotusten määrä laajennuksen kuvakkeessa" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Järjestelmän oletus" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Laajennuksen leveys" }, diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 33cc408a0d..ebaf884a14 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "I-rate ang extension" }, - "rateExtensionDesc": { - "message": "Paki-isipan ang pagtulong sa amin sa pamamagitan ng isang magandang review!" - }, "browserNotSupportClipboard": { "message": "Hindi suportado ng iyong web browser ang madaling pag-copy ng clipboard. Kopya ito manually sa halip." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 679b624803..0ff35958be 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Noter l'extension" }, - "rateExtensionDesc": { - "message": "Merci de nous aider en mettant une bonne note !" - }, "browserNotSupportClipboard": { "message": "Votre navigateur web ne supporte pas la copie rapide depuis le presse-papier. Copiez-le manuellement à la place." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Afficher le nombre de suggestions de saisie automatique d'identifiant sur l'icône d'extension" }, + "showQuickCopyActions": { + "message": "Afficher les actions de copie rapide dans le coffre" + }, "systemDefault": { "message": "Par défaut" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Largeur de l'extension" }, diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index 7240d88a58..beeae76232 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Valorar a extensión" }, - "rateExtensionDesc": { - "message": "Por favor, considera axudarnos cunha boa recensión!" - }, "browserNotSupportClipboard": { "message": "O teu navegador web non soporta copia doada ao portapapeis. Cópiao manualmente no seu lugar." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index cb2c8782c9..a069afdc69 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "דירוג הרחבה" }, - "rateExtensionDesc": { - "message": "אם נהנית מהתוכנה, בבקשה דרג את התוכנה וכתוב דירוג עם חוות דעת טובה!" - }, "browserNotSupportClipboard": { "message": "הדפדפן שלך לא תומך בהעתקה ללוח. אנא העתק בצורה ידנית." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index b14aa89def..288aa1171c 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the Extension" }, - "rateExtensionDesc": { - "message": "कृपया एक अच्छी समीक्षा के साथ हमारी मदत करने पर विचार करें!" - }, "browserNotSupportClipboard": { "message": "आपका वेब ब्राउज़र आसान क्लिपबोर्ड कॉपीिंग का समर्थन नहीं करता है। इसके बजाय इसे मैन्युअल रूप से कॉपी करें।" }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 4e280dcff4..a8c680ac66 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -20,16 +20,16 @@ "message": "Stvori račun" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Novi u Bitwardenu?" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Prijava pristupnim ključem" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Jedinstvena prijava (SSO)" }, "welcomeBack": { - "message": "Welcome back" + "message": "Dobro došli natrag" }, "setAStrongPassword": { "message": "Postavi jaku lozinku" @@ -84,7 +84,7 @@ "message": "Pridruži se organizaciji" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "Pidruži se $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -120,7 +120,7 @@ "message": "Kopiraj lozinku" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "Kopiraj fraznu lozinku" }, "copyNote": { "message": "Kopiraj bilješku" @@ -153,13 +153,13 @@ "message": "Kopiraj OIB" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "Kopiraj privatni ključ" }, "copyPublicKey": { - "message": "Copy public key" + "message": "Kopiraj javni ključ" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "Kopiraj otisak prsta" }, "copyCustomField": { "message": "Kopiraj $FIELD$", @@ -177,7 +177,7 @@ "message": "Kopiraj bilješke" }, "fill": { - "message": "Fill", + "message": "Ispuni", "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": { @@ -193,10 +193,10 @@ "message": "Auto-ispuna identiteta" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Ispuni kôd za provjeru" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Ispuni kôd za provjeru", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -284,7 +284,7 @@ "message": "Nastavi na web aplikaciju?" }, "continueToWebAppDesc": { - "message": "Pronađi viđe značajki svojeg Bitwarden računa u web aplikaciji." + "message": "Pronađi više značajki svojeg Bitwarden računa u web aplikaciji." }, "continueToHelpCenter": { "message": "Nastavi u centar za pomoć?" @@ -349,10 +349,10 @@ "message": "Stvori laka i sigurna iskustva prijave bez tradicionalnih lozinki uz Passwordless.dev. Saznaj više na web stranici bitwarden.com." }, "freeBitwardenFamilies": { - "message": "Besplatan obiteljski Bitwarden" + "message": "Besplatni Bitwarden Families" }, "freeBitwardenFamiliesPageDesc": { - "message": "Ispunjavaš uvjete za besplatni obiteljski Bitwarden. Iskoristi ovu ponudu u web aplikaciji već danas." + "message": "Ispunjavaš uvjete za besplatni Bitwarden Families. Iskoristi ovu ponudu u web aplikaciji već danas." }, "version": { "message": "Verzija" @@ -443,7 +443,7 @@ "message": "Generiraj lozinku" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Generiraj frazu lozinke" }, "regeneratePassword": { "message": "Ponovno generiraj lozinku" @@ -607,7 +607,7 @@ "message": "Pokreni web stranicu" }, "launchWebsiteName": { - "message": "Launch website $ITEMNAME$", + "message": "Otvori stranicu $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -648,9 +648,6 @@ "rateExtension": { "message": "Ocijeni proširenje" }, - "rateExtensionDesc": { - "message": "Razmotri da nam pomogneš dobrom recenzijom!" - }, "browserNotSupportClipboard": { "message": "Web preglednik ne podržava jednostavno kopiranje međuspremnika. Umjesto toga ručno kopirajte." }, @@ -804,7 +801,7 @@ "message": "Poslali smo e-poštu s podsjetnikom glavne lozinke." }, "verificationCodeRequired": { - "message": "Potvrdni kôd je obavezan." + "message": "Kôd za provjeru je obavezan." }, "webauthnCancelOrTimeout": { "message": "Autentifikacija je otkazana ili je trajala predugo. Molimo pokušaj ponovno." @@ -862,7 +859,7 @@ "message": "Prijavi se" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Prijavi se u Bitwarden" }, "restartRegistration": { "message": "Ponovno pokreni registraciju" @@ -1133,7 +1130,7 @@ "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { - "message": "Warning", + "message": "Upozorenje", "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { @@ -1312,7 +1309,7 @@ "message": "Automatski kopiraj TOTP" }, "disableAutoTotpCopyDesc": { - "message": "Ako za prijavu postoji autentifikatorski ključ, kopiraj TOTP kontrolni kôd u međuspremnik nakon auto-ispune prijave." + "message": "Ako za prijavu postoji autentifikatorski ključ, kopiraj TOTP kôd za provjeru u međuspremnik nakon auto-ispune prijave." }, "enableAutoBiometricsPrompt": { "message": "Traži biometrijsku autentifikaciju pri pokretanju" @@ -1324,16 +1321,16 @@ "message": "Za korištenje ove značajke potrebno je Premium članstvo." }, "enterVerificationCodeApp": { - "message": "Unesi 6-znamenkasti kontrolni kôd iz autentifikatorske aplikacije." + "message": "Unesi 6-znamenkasti kôd za provjeru iz autentifikatorske aplikacije." }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Istek vremena za autentifikaciju" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "Sesija za autentifikaciju je istekla. Ponovi proces prijave." }, "enterVerificationCodeEmail": { - "message": "Unesi 6-znamenkasti kontrolni kôd poslan e-poštom na $EMAIL$.", + "message": "Unesi 6-znamenkasti kôd za provjeru poslan e-poštom na $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -1450,7 +1447,7 @@ "message": "URL poslužitelja" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "URL vlastitog poslužitelja", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1482,10 +1479,10 @@ "message": "Prikaži prijedloge auto-ispune na poljima obrazaca" }, "showInlineMenuIdentitiesLabel": { - "message": "Display identities as suggestions" + "message": "Prikaži identitete kao prijedloge" }, "showInlineMenuCardsLabel": { - "message": "Display cards as suggestions" + "message": "Prikaži platne kartice kao prijedloge" }, "showInlineMenuOnIconSelectionLabel": { "message": "Prikaži prijedloge kada je odabrana ikona" @@ -1604,7 +1601,7 @@ "description": "This describes a value that is 'linked' (tied) to another value." }, "popup2faCloseMessage": { - "message": "Ako klikneš izvan iskočnog prozora, za provjeru kontrolnog kôda iz e-pošte, on će se zatvoriti. Želiš li ovaj iskočni prozor otvoriti u novom prozoru kako se ne bi zatvorio?" + "message": "Ako klikneš izvan iskočnog prozora, za provjeru kôda za provjeru iz e-pošte, on će se zatvoriti. Želiš li ovaj iskočni prozor otvoriti u novom prozoru kako se ne bi zatvorio?" }, "popupU2fCloseMessage": { "message": "Ovaj preglednik ne može obraditi U2F zahtjeve u ovom iskočnom prozoru. Želiš li otvoriti ovaj iskočni prozor u novom prozoru za prijavu putem U2F?" @@ -1679,7 +1676,7 @@ "message": "prosinac" }, "securityCode": { - "message": "Kontrolni broj" + "message": "Sigurnosni kôd" }, "ex": { "message": "npr." @@ -1778,7 +1775,7 @@ "message": "Identitet" }, "typeSshKey": { - "message": "SSH key" + "message": "SSH ključ" }, "newItemHeader": { "message": "Novi $TYPE$", @@ -1811,13 +1808,13 @@ "message": "Povijest" }, "generatorHistory": { - "message": "Generator history" + "message": "Povijest generatora" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "Očisti povijest generatora" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Cijela povijest generatora biti će trajno izbirsana. Sigurno želiš nastaviti?" }, "back": { "message": "Natrag" @@ -1856,7 +1853,7 @@ "message": "Sigurne bilješke" }, "sshKeys": { - "message": "SSH Keys" + "message": "SSH ključevi" }, "clear": { "message": "Očisti", @@ -1939,10 +1936,10 @@ "message": "Očisti povijest" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Ništa za prikazati" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Ništa nije generirano" }, "remove": { "message": "Ukloni" @@ -2531,7 +2528,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "Dodaj opcionalnu lozinku za primatelje ovog Senda.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { @@ -2729,7 +2726,7 @@ "description": "Used as a card title description on the set password page to explain why the user is there" }, "cardMetrics": { - "message": "out of $TOTAL$", + "message": "od $TOTAL$", "placeholders": { "total": { "content": "$1", @@ -2894,10 +2891,10 @@ "message": "Generiraj korisničko ime" }, "generateEmail": { - "message": "Generate email" + "message": "Generiraj e-poštu" }, "spinboxBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$.", + "message": "Vrijednost mora biti u rasponu $MIN$ - $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2911,7 +2908,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "message": " Koristi $RECOMMENDED$ i više znakova za generiranje jake lozinke.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -2921,7 +2918,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": " Koristi $RECOMMENDED$ i više riječi za generiranje jake frazne lozinke.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -2971,11 +2968,11 @@ "message": "Generiraj pseudonim e-pošte s vanjskom uslugom prosljeđivanja." }, "forwarderDomainName": { - "message": "Email domain", + "message": "Domena e-pošte", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Odaberi domenu koju podržava odabrani servis", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3178,25 +3175,25 @@ "message": "Ponovno pošalji obavijest" }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "Pogledaj sve mogućnosti prijave" }, "viewAllLoginOptionsV1": { - "message": "View all log in options" + "message": "Pogledaj sve mogućnosti prijave" }, "notificationSentDevice": { "message": "Obavijest je poslana na tvoj uređaj." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "Obavijest je poslana na tvoj uređaj" }, "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { - "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + "message": "Provjeri je li trezor otključan i slaže li se jedinstvena fraza s drugim uređajem" }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "Dobiti ćeš obavijest kada je tvoj zahtjev odobren" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Trebaš drugu opciju?" }, "loginInitiated": { "message": "Prijava pokrenuta" @@ -3292,16 +3289,16 @@ "message": "Otvara u novom prozoru" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "Zapamti ovaj uređaj kako bi buduće prijave bile brže" }, "deviceApprovalRequired": { "message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "Potrebno odobrenje uređaja" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "Odaberi opciju odobrenja" }, "rememberThisDevice": { "message": "Zapamti ovaj uređaj" @@ -3377,7 +3374,7 @@ "message": "Nedostaje e-pošta korisnika" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "Nije pronađena e-pošta aktivnog korisnika. Odjava u tijeku..." }, "deviceTrusted": { "message": "Uređaj pouzdan" @@ -3588,11 +3585,11 @@ "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "Kôd za provjeru jednokratne lozinka zasnovane na vremenu (TOTP) ", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Preostalo vrijeme koda za provjeru", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3824,7 +3821,7 @@ "message": "Pristupanje" }, "loggedInExclamation": { - "message": "Logged in!" + "message": "Prijava uspješna!" }, "passkeyNotCopied": { "message": "Pristupni ključ neće biti kopiran" @@ -4288,7 +4285,7 @@ "message": "Najveća veličina datoteke je 500 MB" }, "deleteAttachmentName": { - "message": "Izbriši privitak", + "message": "Izbriši privitak $NAME$", "placeholders": { "name": { "content": "$1", @@ -4318,13 +4315,13 @@ "message": "Filtri" }, "filterVault": { - "message": "Filter vault" + "message": "Filtriraj trezor" }, "filterApplied": { - "message": "One filter applied" + "message": "Uključen jedan filter" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "Uključeno filtera: $COUNT$", "placeholders": { "count": { "content": "$1", @@ -4656,13 +4653,13 @@ "message": "Lokacija stavke" }, "fileSend": { - "message": "File Send" + "message": "Send datoteke" }, "fileSends": { "message": "Send datoteke" }, "textSend": { - "message": "Text Send" + "message": "Send teksta" }, "textSends": { "message": "Send tekstovi" @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Prikaži broj prijedloga auto-ispune na ikoni proširenja" }, + "showQuickCopyActions": { + "message": "Prikaži akcije brzog kopiranja na trezoru" + }, "systemDefault": { "message": "Zadano sustavom" }, @@ -4686,16 +4686,16 @@ "message": "Pravila tvrtke primijenjena su na ovu postavku" }, "sshPrivateKey": { - "message": "Private key" + "message": "Privatni ključ" }, "sshPublicKey": { - "message": "Public key" + "message": "Javni ključ" }, "sshFingerprint": { - "message": "Fingerprint" + "message": "Otisak prsta" }, "sshKeyAlgorithm": { - "message": "Key type" + "message": "Vrsta ključa" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -4752,171 +4752,207 @@ "message": "Autentifikacija" }, "fillGeneratedPassword": { - "message": "Fill generated password", + "message": "Ispuni generiranu lozinku", "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { - "message": "Password regenerated", + "message": "Lozinka re-generirana", "description": "Notification message for when a password has been regenerated" }, "saveLoginToBitwarden": { - "message": "Save login to Bitwarden?", + "message": "Spremi prijavu u Bitwarden?", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { - "message": "Space", + "message": "Razmak", "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { - "message": "Tilde", + "message": "znak ˜", "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "znak `", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { - "message": "Exclamation mark", + "message": "znak !", "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "znak @", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "znak #", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "znak $", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "znak %", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Caret", + "message": "znak ^", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "znak &", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { - "message": "Asterisk", + "message": "znak *", "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "lijeva zagrada (", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "desna zagrada )", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "donja crtica _", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "crtica -", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { - "message": "Plus", + "message": "znak +", "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "znak =", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "znak {", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "znak }", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "znak [", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "zank ]", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pipe", + "message": "znak |", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Back slash", + "message": "znak \\", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "znak :", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "znak ;", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "znak \"", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "znak '", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "znak <", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "znak >", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "znak ,", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "znak .", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { - "message": "Question mark", + "message": "znak ?", "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { - "message": "Forward slash", + "message": "znak /", "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { - "message": "Lowercase" + "message": "Mala slova" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Velika slova" }, "generatedPassword": { - "message": "Generated password" + "message": "Generiraj lozinku" }, "compactMode": { - "message": "Compact mode" + "message": "Kompaktni način" }, "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { - "message": "Extension width" + "message": "Širina proširenja" }, "wide": { - "message": "Wide" + "message": "Široko" }, "extraWide": { - "message": "Extra wide" + "message": "Ekstra široko" } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 04644910c6..07662b8315 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Bővítmény értékelése" }, - "rateExtensionDesc": { - "message": "Kérlek, fontold meg egy jó értékelés hagyását, ezzel segítve nekünk!" - }, "browserNotSupportClipboard": { "message": "A webböngésződ nem támogat könnyű vágólap másolást. Másold manuálisan inkább." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Az automatikus bejelentkezési kitöltési javaslatok számának megjelenítése a bővítmény ikonján" }, + "showQuickCopyActions": { + "message": "Gyors másolási műveletek megjelenítése a Széfen" + }, "systemDefault": { "message": "Rendszer alapértelmezett" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Béta" }, + "importantNotice": { + "message": "Fontos megjegyzés" + }, + "setupTwoStepLogin": { + "message": "Kétlépéses bejelentkezés beüzemelése" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "A Bitwarden 2025 februárjától kódot küld a fiókhoz tartozó email-címre, amellyel ellenőrizhetők az új eszközökről történő bejelentkezések." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "A fiók védelmének alternatív módjaként beállíthatunk kétlépcsős bejelentkezést vagy módosíthatjuk az email címet egy elérhetőre." + }, + "remindMeLater": { + "message": "Emlékeztetés később" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Megbízható a hozzáférés $EMAIL$ email címhez?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nem, nem érem el" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Igen, megbízhatóan hozzáférek az emailjeimhez" + }, + "turnOnTwoStepLogin": { + "message": "Kétlépéses bejelentkezés bekapcsolása" + }, + "changeAcctEmail": { + "message": "Fiók email cím megváltoztatása" + }, "extensionWidth": { "message": "Kiterjesztés szélesség" }, diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 7de07f17f1..ef8e143128 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "extName": { - "message": "Bitwarden Pengelola Sandi", + "message": "Pengelola Sandi Bitwarden", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { @@ -193,10 +193,10 @@ "message": "Autofill identitas" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Isikan kode verifikasi" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Isikan Kode Verifikasi", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -648,9 +648,6 @@ "rateExtension": { "message": "Nilai Ekstensi" }, - "rateExtensionDesc": { - "message": "Mohon pertimbangkan membantu kami dengan ulasan yang baik!" - }, "browserNotSupportClipboard": { "message": "Peramban Anda tidak mendukung menyalin clipboard dengan mudah. Salin secara manual." }, @@ -3181,7 +3178,7 @@ "message": "Lihat semua pilihan masuk" }, "viewAllLoginOptionsV1": { - "message": "View all log in options" + "message": "Lihat semua pilihan masuk" }, "notificationSentDevice": { "message": "Sebuah pemberitahuan dikirim ke perangkat Anda." @@ -3588,11 +3585,11 @@ "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "Kode Verifikasi Kata Sandi Sekali-Waktu Berbasis Waktu", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Waktu tersisa sebelum TOTP sekarang kadaluwarsa", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -4339,10 +4336,10 @@ "message": "Pengenalan" }, "contactInfo": { - "message": "Contact info" + "message": "Info kontak" }, "downloadAttachment": { - "message": "Download - $ITEMNAME$", + "message": "Unduh - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -4351,23 +4348,23 @@ } }, "cardNumberEndsWith": { - "message": "card number ends with", + "message": "nomor kartu berakhiran", "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher." }, "loginCredentials": { - "message": "Login credentials" + "message": "Kredensial login" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "Kunci Otentikator" }, "autofillOptions": { - "message": "Autofill options" + "message": "Pilihan isi otomatis" }, "websiteUri": { - "message": "Website (URI)" + "message": "Situs web (URI)" }, "websiteUriCount": { - "message": "Website (URI) $COUNT$", + "message": "$COUNT$ Situs web (URI)", "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": { @@ -4377,16 +4374,16 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Situs web ditambahkan" }, "addWebsite": { - "message": "Add website" + "message": "Tambah situs web" }, "deleteWebsite": { - "message": "Delete website" + "message": "Hapus situs web" }, "defaultLabel": { - "message": "Default ($VALUE$)", + "message": "Bawaan ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -4396,7 +4393,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "Tampilkan deteksi kecocokan $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4405,7 +4402,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "Sembunyikan deteksi kecocokan $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4414,19 +4411,19 @@ } }, "autoFillOnPageLoad": { - "message": "Autofill on page load?" + "message": "Isi otomatis ketika halaman dimuat?" }, "cardExpiredTitle": { - "message": "Expired card" + "message": "Kartu kadaluwarsa" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "Jika Anda telah memperpanjangnya, perbarui informasi kartu" }, "cardDetails": { - "message": "Card details" + "message": "Rincian kartu" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "Rincian $BRAND$", "placeholders": { "brand": { "content": "$1", @@ -4435,43 +4432,43 @@ } }, "enableAnimations": { - "message": "Enable animations" + "message": "Nyalakan animasi" }, "showAnimations": { - "message": "Show animations" + "message": "Tampilkan animasi" }, "addAccount": { - "message": "Add account" + "message": "Tambah akun" }, "loading": { - "message": "Loading" + "message": "Memuat" }, "data": { "message": "Data" }, "passkeys": { - "message": "Passkeys", + "message": "Kunci sandi", "description": "A section header for a list of passkeys." }, "passwords": { - "message": "Passwords", + "message": "Kata Sandi", "description": "A section header for a list of passwords." }, "logInWithPasskeyAriaLabel": { - "message": "Log in with passkey", + "message": "Masuk dengan kunci sandi", "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { - "message": "Assign" + "message": "Terapkan" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Only organization members with access to these collections will be able to see the item." + "message": "Hanya anggota organisasi dengan akses ke koleksi berikut yang dapat melihat isinya." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Only organization members with access to these collections will be able to see the items." + "message": "Hanya anggota organisasi dengan akses ke koleksi berikut yang dapat melihat isinya." }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "Anda telah memilih $TOTAL_COUNT$ benda. Anda tidak dapat memperbarui $READONLY_COUNT$ dari benda karena Anda tidak memiliki izin untuk menyunting.", "placeholders": { "total_count": { "content": "$1", @@ -4483,37 +4480,37 @@ } }, "addField": { - "message": "Add field" + "message": "Tambahkan bidang" }, "add": { - "message": "Add" + "message": "Tambah" }, "fieldType": { - "message": "Field type" + "message": "Jenis bidang" }, "fieldLabel": { - "message": "Field label" + "message": "Label bidang" }, "textHelpText": { - "message": "Use text fields for data like security questions" + "message": "Gunakan bidang teks untuk data seperti pertanyaan keamanan" }, "hiddenHelpText": { - "message": "Use hidden fields for sensitive data like a password" + "message": "Gunakan bidang tersembunyi untuk data sensitif seperti kata sandi" }, "checkBoxHelpText": { - "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email" + "message": "Gunakan kotak centang jika Anda ingin mengisi sebuah kotak centang di formullir, seperti mengingat surel" }, "linkedHelpText": { - "message": "Use a linked field when you are experiencing autofill issues for a specific website." + "message": "Gunakan bidang tertaut ketika Anda mengalami masalah pengisian otomatis untuk situs web tertentu." }, "linkedLabelHelpText": { - "message": "Enter the the field's html id, name, aria-label, or placeholder." + "message": "Masukkan id, name, aria-label, atau placeholder html dari bidang." }, "editField": { - "message": "Edit field" + "message": "Sunting bidang" }, "editFieldLabel": { - "message": "Edit $LABEL$", + "message": "Sunting $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4522,7 +4519,7 @@ } }, "deleteCustomField": { - "message": "Delete $LABEL$", + "message": "Hapus $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4531,7 +4528,7 @@ } }, "fieldAdded": { - "message": "$LABEL$ added", + "message": "$LABEL$ ditambahkan", "placeholders": { "label": { "content": "$1", @@ -4540,7 +4537,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "Urutkan $LABEL$. Gunakan tombol panah untuk memindahkan benda ke atas atau ke bawah.", "placeholders": { "label": { "content": "$1", @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4768,155 +4768,191 @@ "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { - "message": "Tilde", + "message": "Tanda gelombang", "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "Tanda petik terbalik", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { - "message": "Exclamation mark", + "message": "Tanda seru", "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "Tanda pada", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "Tanda pagar", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "Tanda dolar", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "Tanda persen", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Caret", + "message": "Tanda sisipan", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "Tanda dan", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { - "message": "Asterisk", + "message": "Tanda bintang", "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "Tanda kurung kiri", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "Tanda kurung kanan", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "Garis bawah", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "Tanda penghubung", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { - "message": "Plus", + "message": "Tanda tambah", "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "Tanda sama dengan", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "Kurung kurawal kiri", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "Kurung kurawal kanan", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "Tanda kurung siku kiri", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "Tanda kurung siku kanan", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pipe", + "message": "Garis tegak lurus", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Back slash", + "message": "Garis miring terbalik", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "Tanda titik dua", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "Tanda titik koma", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "Tanda petik ganda", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "Tanda petik tunggal", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "Tanda kurang dari", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "Tanda lebih besar dari", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "Tanda koma", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "Tanda titik", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { - "message": "Question mark", + "message": "Tanda tanya", "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { - "message": "Forward slash", + "message": "Tanda garis miring ke depan", "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { - "message": "Lowercase" + "message": "Huruf kecil" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Huruf kapital" }, "generatedPassword": { - "message": "Generated password" + "message": "Kata sandi yang dihasilkan" }, "compactMode": { - "message": "Compact mode" + "message": "Mode ringkas" }, "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { - "message": "Extension width" + "message": "Lebar ekstensi" }, "wide": { - "message": "Wide" + "message": "Lebar" }, "extraWide": { - "message": "Extra wide" + "message": "Ekstra lebar" } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 1261106cf3..5b563d69f7 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Valuta l'estensione" }, - "rateExtensionDesc": { - "message": "Aiutaci lasciando una buona recensione!" - }, "browserNotSupportClipboard": { "message": "Il tuo browser non supporta copiare dagli appunti. Copialo manualmente." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Mostra il numero di suggerimenti di riempimento automatico sull'icona dell'estensione" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Predefinito del sistema" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index f0f80b745a..f5998a02f8 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -20,16 +20,16 @@ "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": "強力なパスワードを設定する" @@ -84,7 +84,7 @@ "message": "組織に参加" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "$ORGANIZATIONNAME$ に参加", "placeholders": { "organizationName": { "content": "$1", @@ -120,7 +120,7 @@ "message": "パスワードをコピー" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "パスフレーズをコピー" }, "copyNote": { "message": "メモをコピー" @@ -153,13 +153,13 @@ "message": "免許証番号をコピー" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "秘密鍵をコピー" }, "copyPublicKey": { - "message": "Copy public key" + "message": "公開鍵をコピー" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "フィンガープリントをコピー" }, "copyCustomField": { "message": "$FIELD$ をコピー", @@ -177,7 +177,7 @@ "message": "メモをコピー" }, "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": { @@ -193,10 +193,10 @@ "message": "自動入力 ID" }, "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": { @@ -443,7 +443,7 @@ "message": "パスワードの自動生成" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "パスフレーズを生成" }, "regeneratePassword": { "message": "パスワードの再生成" @@ -607,7 +607,7 @@ "message": "ウェブサイトを開く" }, "launchWebsiteName": { - "message": "Launch website $ITEMNAME$", + "message": "ウェブサイト $ITEMNAME$ を開く", "placeholders": { "itemname": { "content": "$1", @@ -648,9 +648,6 @@ "rateExtension": { "message": "拡張機能の評価" }, - "rateExtensionDesc": { - "message": "良いレビューで私たちを助けてください!" - }, "browserNotSupportClipboard": { "message": "お使いのブラウザはクリップボードへのコピーに対応していません。手動でコピーしてください" }, @@ -862,7 +859,7 @@ "message": "ログイン" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Bitwarden にログイン" }, "restartRegistration": { "message": "登録を再度始める" @@ -1133,7 +1130,7 @@ "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { - "message": "Warning", + "message": "注意", "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { @@ -1327,10 +1324,10 @@ "message": "認証アプリに表示された6桁の認証コードを入力してください。" }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "認証のタイムアウト" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "認証セッションの有効期限が切れました。ログインプロセスを再開してください。" }, "enterVerificationCodeEmail": { "message": "$EMAIL$に送信された6桁の認証コードを入力してください。", @@ -1450,7 +1447,7 @@ "message": "サーバー URL" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "自己ホスト型サーバー URL", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1778,7 +1775,7 @@ "message": "ID" }, "typeSshKey": { - "message": "SSH key" + "message": "SSH 鍵" }, "newItemHeader": { "message": "$TYPE$ を新規作成", @@ -1811,13 +1808,13 @@ "message": "パスワードの履歴" }, "generatorHistory": { - "message": "Generator history" + "message": "生成履歴" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "生成履歴を消去" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "続行すると、すべてのエントリは生成履歴から完全に削除されます。続行してもよろしいですか?" }, "back": { "message": "戻る" @@ -1856,7 +1853,7 @@ "message": "セキュアメモ" }, "sshKeys": { - "message": "SSH Keys" + "message": "SSH 鍵" }, "clear": { "message": "消去する", @@ -1939,10 +1936,10 @@ "message": "履歴を消去" }, "nothingToShow": { - "message": "Nothing to show" + "message": "表示するものがありません" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "最近生成したものはありません" }, "remove": { "message": "削除" @@ -2531,7 +2528,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "受信者がこの Send にアクセスするための任意のパスワードを追加します。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { @@ -2894,10 +2891,10 @@ "message": "ユーザー名を生成" }, "generateEmail": { - "message": "Generate email" + "message": "メールアドレスを生成" }, "spinboxBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$.", + "message": "値は $MIN$ から $MAX$ の間でなければなりません。", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -2911,7 +2908,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "message": " 強力なパスワードを生成するには、 $RECOMMENDED$ 文字以上を使用してください。", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -2921,7 +2918,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": " 強力なパスフレーズを生成するには、 $RECOMMENDED$ 単語以上を使用してください。", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -2971,11 +2968,11 @@ "message": "外部転送サービスを使用してメールエイリアスを生成します。" }, "forwarderDomainName": { - "message": "Email domain", + "message": "メールアドレスのドメイン", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "選択したサービスでサポートされているドメインを選択してください", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3178,25 +3175,25 @@ "message": "通知を再送信する" }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "すべてのログインオプションを表示" }, "viewAllLoginOptionsV1": { - "message": "View all log in options" + "message": "すべてのログインオプションを表示" }, "notificationSentDevice": { "message": "デバイスに通知を送信しました。" }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "お使いのデバイスに通知が送信されました" }, "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { - "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + "message": "アカウントがロック解除されていることと、フィンガープリントフレーズが他の端末で一致していることを確認してください" }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "リクエストが承認されると通知されます" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "別の選択肢が必要ですか?" }, "loginInitiated": { "message": "ログイン開始" @@ -3292,16 +3289,16 @@ "message": "新しいウィンドウで開く" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "このデバイスを記憶して今後のログインをシームレスにする" }, "deviceApprovalRequired": { "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "デバイスの承認が必要です" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "以下の承認オプションを選択してください" }, "rememberThisDevice": { "message": "このデバイスを記憶する" @@ -3377,7 +3374,7 @@ "message": "ユーザーのメールアドレスがありません" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "アクティブなユーザーメールアドレスが見つかりません。ログアウトします。" }, "deviceTrusted": { "message": "信頼されたデバイス" @@ -3588,11 +3585,11 @@ "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "時間ベースのワンタイムパスワード認証コード", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "現在の TOTP 有効期限が切れるまでの残り時間", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3824,7 +3821,7 @@ "message": "アクセス中" }, "loggedInExclamation": { - "message": "Logged in!" + "message": "ログインしました!" }, "passkeyNotCopied": { "message": "パスキーはコピーされません" @@ -4318,13 +4315,13 @@ "message": "フィルター" }, "filterVault": { - "message": "Filter vault" + "message": "保管庫をフィルター" }, "filterApplied": { - "message": "One filter applied" + "message": "1 個のフィルタを適用しました" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "$COUNT$ 個のフィルタを適用しました", "placeholders": { "count": { "content": "$1", @@ -4656,13 +4653,13 @@ "message": "アイテムの場所" }, "fileSend": { - "message": "File Send" + "message": "ファイル Send" }, "fileSends": { "message": "ファイル Send" }, "textSend": { - "message": "Text Send" + "message": "テキスト Send" }, "textSends": { "message": "テキスト Send" @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "拡張機能アイコンにログイン自動入力の候補の数を表示する" }, + "showQuickCopyActions": { + "message": "保管庫にクイックコピー操作を表示する" + }, "systemDefault": { "message": "システムのデフォルト" }, @@ -4686,16 +4686,16 @@ "message": "エンタープライズポリシー要件がこの設定に適用されました" }, "sshPrivateKey": { - "message": "Private key" + "message": "秘密鍵" }, "sshPublicKey": { - "message": "Public key" + "message": "公開鍵" }, "sshFingerprint": { - "message": "Fingerprint" + "message": "フィンガープリント" }, "sshKeyAlgorithm": { - "message": "Key type" + "message": "鍵の種類" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -4752,171 +4752,207 @@ "message": "認証中" }, "fillGeneratedPassword": { - "message": "Fill generated password", + "message": "生成したパスワードを入力", "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { - "message": "Password regenerated", + "message": "パスワードを再生成しました", "description": "Notification message for when a password has been regenerated" }, "saveLoginToBitwarden": { - "message": "Save login to Bitwarden?", + "message": "Bitwarden にログイン情報を保存しますか?", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { - "message": "Space", + "message": "スペース", "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { - "message": "Tilde", + "message": "チルダ", "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "バッククォート", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { - "message": "Exclamation mark", + "message": "エクスクラメーションマーク", "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "アットマーク", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "ハッシュ記号", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "ドル記号", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "パーセント記号", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Caret", + "message": "キャレット", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "アンパサンド", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { - "message": "Asterisk", + "message": "アスタリスク", "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "左かっこ", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "右かっこ", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "アンダースコア", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "ハイフン", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { - "message": "Plus", + "message": "プラス", "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "イコール", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "左中かっこ", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "右中かっこ", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "左大かっこ", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "右大かっこ", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pipe", + "message": "パイプ", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Back slash", + "message": "バックスラッシュ", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "コロン", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "セミコロン", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "ダブルクォート", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "シングルクォート", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "小なり", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "大なり", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "コンマ", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "ピリオド", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { - "message": "Question mark", + "message": "クエスチョンマーク", "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { - "message": "Forward slash", + "message": "スラッシュ", "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { - "message": "Lowercase" + "message": "小文字" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "大文字" }, "generatedPassword": { - "message": "Generated password" + "message": "生成したパスワード" }, "compactMode": { - "message": "Compact mode" + "message": "コンパクトモード" }, "beta": { - "message": "Beta" + "message": "ベータ" + }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" }, "extensionWidth": { - "message": "Extension width" + "message": "拡張機能の幅" }, "wide": { - "message": "Wide" + "message": "ワイド" }, "extraWide": { - "message": "Extra wide" + "message": "エクストラワイド" } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 33ccbdbb1a..8cef6ece78 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "სისტემურად ნაგულისხმევი" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 779ff91757..8f7673803c 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 8b21fc61e5..7507e25444 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "ವಿಸ್ತರಣೆಯನ್ನು ರೇಟ್ ಮಾಡಿ" }, - "rateExtensionDesc": { - "message": "ಉತ್ತಮ ವಿಮರ್ಶೆಯೊಂದಿಗೆ ನಮಗೆ ಸಹಾಯ ಮಾಡಲು ದಯವಿಟ್ಟು ಪರಿಗಣಿಸಿ!" - }, "browserNotSupportClipboard": { "message": "ನಿಮ್ಮ ವೆಬ್ ಬ್ರೌಸರ್ ಸುಲಭವಾದ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ನಕಲು ಮಾಡುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ ಅದನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಕಲಿಸಿ." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 91207cd0e3..6ab1a46747 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -193,10 +193,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": { @@ -648,9 +648,6 @@ "rateExtension": { "message": "확장 프로그램 평가" }, - "rateExtensionDesc": { - "message": "좋은 리뷰를 남겨 저희를 도와주세요!" - }, "browserNotSupportClipboard": { "message": "사용하고 있는 웹 브라우저가 쉬운 클립보드 복사를 지원하지 않습니다. 직접 복사하세요." }, @@ -2069,11 +2066,11 @@ "message": "보안 비밀번호가 생성되었습니다! 웹사이트에서 비밀번호를 업데이트하는 것도 잊지 마세요." }, "useGeneratorHelpTextPartOne": { - "message": "생성기를 사용하세요", + "message": "생성기를 사용하여", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "useGeneratorHelpTextPartTwo": { - "message": "강력한 고유 비밀번호를 만들기 위해서는", + "message": "강력한 고유 비밀번호를 만드세요", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultTimeoutAction": { @@ -3181,7 +3178,7 @@ "message": "모든 로그인 방식 보기" }, "viewAllLoginOptionsV1": { - "message": "View all log in options" + "message": "모든 로그인 옵션 보기" }, "notificationSentDevice": { "message": "기기에 알림이 전송되었습니다." @@ -3588,11 +3585,11 @@ "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "TOTP 인증 코드", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "TOTP 만료까지 남은 시간", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3669,7 +3666,7 @@ "message": "데이터 가져오기 성공" }, "importSuccessNumberOfItems": { - "message": "A total of $AMOUNT$ items were imported.", + "message": "총 $AMOUNT$개의 항목을 가져왔습니다.", "placeholders": { "amount": { "content": "$1", @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "확장 아이콘에 로그인 자동 완성 제안 수 표시" }, + "showQuickCopyActions": { + "message": "보관함에서 빠른 복사 기능 표시" + }, "systemDefault": { "message": "시스템 기본 설정" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "베타" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "확장 폭" }, diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 7fd47194b7..f55fb8b3e2 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Įvertinkite šį plėtinį" }, - "rateExtensionDesc": { - "message": "Apsvarstykite galimybę mums padėti palikdami gerą atsiliepimą!" - }, "browserNotSupportClipboard": { "message": "Jūsų žiniatinklio naršyklė nepalaiko automatinio kopijavimo. Vietoj to nukopijuokite rankiniu būdu." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 3fa9085d00..7d0f789280 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Novērtēt paplašinājumu" }, - "rateExtensionDesc": { - "message": "Lūgums apsvērt palīdzēt mums ar labu atsauksmi." - }, "browserNotSupportClipboard": { "message": "Pārlūks neatbalsta vienkāršo ievietošanu starpliktuvē. Tā vietā tas jāievieto starpliktuvē pašrocīgi." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Paplašinājuma ikonā rādīt pieteikšanās automātiskās aizpildes ieteikumu skaitu" }, + "showQuickCopyActions": { + "message": "Glabātavā rādīt ātrās kopēšanas darbības" + }, "systemDefault": { "message": "Sistēmas noklusējums" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Paplašinājuma platums" }, diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 80e8cd9005..e3c377b2e8 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "എക്സ്റ്റൻഷൻ റേറ്റ് ചെയ്യുക " }, - "rateExtensionDesc": { - "message": "ഒരു നല്ല അവലോകനത്തിന് ഞങ്ങളെ സഹായിക്കുന്നത് പരിഗണിക്കുക!" - }, "browserNotSupportClipboard": { "message": "നിങ്ങളുടെ ബ്രൌസർ എളുപ്പമുള്ള ക്ലിപ്പ്ബോർഡ് പകർത്തൽ പിന്തുണയ്ക്കത്തില്ല. പകരം അത് സ്വമേധയാ പകർക്കുക ." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index be0b2627b8..02c66ea8f6 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "विस्तारकाचे मूल्यांकन करा" }, - "rateExtensionDesc": { - "message": "चांगला अभिप्राय देऊन आम्हाला मदत करा!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 779ff91757..8f7673803c 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index ef36839dd5..604597091e 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Gi denne utvidelsen en vurdering" }, - "rateExtensionDesc": { - "message": "Tenk gjerne på om du vil skrive en anmeldelse om oss!" - }, "browserNotSupportClipboard": { "message": "Nettleseren din støtter ikke kopiering til utklippstavlen på noe enkelt vis. Prøv å kopiere det manuelt i stedet." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Systemforvalg" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 779ff91757..8f7673803c 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 23fbcd3d26..170c682aa1 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Deze extensie beoordelen" }, - "rateExtensionDesc": { - "message": "Je kunt ons helpen door een goede recensie achter te laten!" - }, "browserNotSupportClipboard": { "message": "Je webbrowser ondersteunt kopiëren naar plakbord niet. Kopieer handmatig." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Aantal login-autofill-suggesties op het extensie-pictogram weergeven" }, + "showQuickCopyActions": { + "message": "Toon snelle kopieeracties in de kluis" + }, "systemDefault": { "message": "Systeemstandaard" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Belangrijke mededeling" + }, + "setupTwoStepLogin": { + "message": "Tweestapsaanmelding instellen" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Vanaf februari 2025 stuurt Bitwarden een code naar het e-mailadres van je account om inloggen op nieuwe apparaten te verifiëren." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Je kunt tweestapsaanmelding instellen als een alternatieve manier om je account te beschermen of je e-mailadres te veranderen naar een waar je toegang toe hebt." + }, + "remindMeLater": { + "message": "Herinner me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Heb je betrouwbare toegang tot je e-mail, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nee, dat heb ik niet" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ja, ik heb betrouwbare toegang tot mijn e-mail" + }, + "turnOnTwoStepLogin": { + "message": "Tweestapsaanmelding inschakelen" + }, + "changeAcctEmail": { + "message": "E-mailadres van het account veranderen" + }, "extensionWidth": { "message": "Extensiebreedte" }, diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 779ff91757..8f7673803c 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 779ff91757..8f7673803c 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 0db4fc4dd8..7025862cb7 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -23,19 +23,19 @@ "message": "New to Bitwarden?" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Zaloguj się używając passkey" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Użyj jednokrotnego logowania" }, "welcomeBack": { - "message": "Welcome back" + "message": "Witaj ponownie" }, "setAStrongPassword": { "message": "Ustaw silne hasło" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Ukończ tworzenie konta poprzez utworzenie hasła" + "message": "Ukończ tworzenie konta poprzez ustawienie hasła" }, "enterpriseSingleSignOn": { "message": "Logowanie jednokrotne" @@ -120,7 +120,7 @@ "message": "Kopiuj hasło" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "Kopiuj frazę bezpieczeństwa" }, "copyNote": { "message": "Kopiuj notatkę" @@ -153,13 +153,13 @@ "message": "Kopiuj numer licencji" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "Skopiuj klucz prywatny" }, "copyPublicKey": { - "message": "Copy public key" + "message": "Skopiuj klucz publiczny" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "Skopiuj odcisk palca" }, "copyCustomField": { "message": "Kopiuj $FIELD$", @@ -193,10 +193,10 @@ "message": "Autouzupełnianie tożsamości" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Wypełnij kod weryfikacyjny" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Wypełnij kod weryfikacyjny", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -443,7 +443,7 @@ "message": "Wygeneruj hasło" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Wygenruj frazę zabezpieczającą" }, "regeneratePassword": { "message": "Wygeneruj ponownie hasło" @@ -607,7 +607,7 @@ "message": "Otwórz stronę" }, "launchWebsiteName": { - "message": "Launch website $ITEMNAME$", + "message": "Otwórz stronę internetową $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -648,9 +648,6 @@ "rateExtension": { "message": "Oceń rozszerzenie" }, - "rateExtensionDesc": { - "message": "Wesprzyj nas pozytywną opinią!" - }, "browserNotSupportClipboard": { "message": "Przeglądarka nie obsługuje łatwego kopiowania schowka. Skopiuj element ręcznie." }, @@ -862,7 +859,7 @@ "message": "Zaloguj się" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Zaloguj się do Bitwarden" }, "restartRegistration": { "message": "Zrestartuj rejestrację" @@ -1133,7 +1130,7 @@ "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { - "message": "Warning", + "message": "Ostrzeżenie", "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { @@ -1327,7 +1324,7 @@ "message": "Wpisz 6-cyfrowy kod weryfikacyjny z aplikacji uwierzytelniającej." }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Limit czasu uwierzytelniania" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." @@ -1450,7 +1447,7 @@ "message": "Adres URL serwera" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "URL samodzielnie hostowanego serwera", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -2531,7 +2528,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "Zabezpiecz tę wiadomość hasłem, które będzie wymagane, aby uzyskać do niej dostęp.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { @@ -2616,7 +2613,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogText": { - "message": "Pop out extension?", + "message": "Otworzyć rozszerzenie w nowym oknie?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogDesc": { @@ -2894,7 +2891,7 @@ "message": "Wygeneruj nazwę użytkownika" }, "generateEmail": { - "message": "Generate email" + "message": "Wygeneruj e-mail" }, "spinboxBoundariesHint": { "message": "Wartość musi być pomiędzy $MIN$ a $MAX$.", @@ -2971,11 +2968,11 @@ "message": "Wygeneruj alias adresu e-mail z zewnętrznej usługi przekierowania." }, "forwarderDomainName": { - "message": "Email domain", + "message": "Domena adresu e-mail", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Wybierz domenę, która jest obsługiwana przez wybraną usługę", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3178,16 +3175,16 @@ "message": "Wyślij ponownie powiadomienie" }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "Zobacz wszystkie sposoby logowania" }, "viewAllLoginOptionsV1": { - "message": "View all log in options" + "message": "Zobacz wszystkie sposoby logowania" }, "notificationSentDevice": { "message": "Powiadomienie zostało wysłane na urządzenie." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "Powiadomienie zostało wysłane na twoje urządzenie" }, "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" @@ -3196,7 +3193,7 @@ "message": "You will be notified once the request is approved" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Potrzebujesz innego sposobu?" }, "loginInitiated": { "message": "Logowanie rozpoczęte" @@ -3292,16 +3289,16 @@ "message": "Otwiera w nowym oknie" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "Zapamiętaj to urządzenie, aby przyszłe logowania były bezproblemowe" }, "deviceApprovalRequired": { "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "Wymagane zatwierdzenie urządzenia" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "Wybierz opcję zatwierdzenia poniżej" }, "rememberThisDevice": { "message": "Zapamiętaj to urządzenie" @@ -3377,7 +3374,7 @@ "message": "Brak adresu e-mail użytkownika" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "Nie znaleziono aktywnego adresu e-mail. Trwa wylogowanie." }, "deviceTrusted": { "message": "Zaufano urządzeniu" @@ -3592,7 +3589,7 @@ "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Pozostały czas do wygaśnięcia bieżącego TOTP", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3824,7 +3821,7 @@ "message": "Uzyskiwanie dostępu" }, "loggedInExclamation": { - "message": "Logged in!" + "message": "Zalogowano!" }, "passkeyNotCopied": { "message": "Passkey nie zostanie skopiowany" @@ -4318,13 +4315,13 @@ "message": "Filtry" }, "filterVault": { - "message": "Filter vault" + "message": "Filtruj sejf" }, "filterApplied": { - "message": "One filter applied" + "message": "Zastosowano jeden filtr" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "$COUNT$ filtrów zastosowanych", "placeholders": { "count": { "content": "$1", @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Pokaż liczbę sugestii autouzupełniania logowania na ikonie rozszerzenia" }, + "showQuickCopyActions": { + "message": "Pokaż akcje szybkiego kopiowania w Sejfie" + }, "systemDefault": { "message": "Domyślny systemu" }, @@ -4692,7 +4692,7 @@ "message": "Klucz publiczny" }, "sshFingerprint": { - "message": "Fingerprint" + "message": "Odcisk palca" }, "sshKeyAlgorithm": { "message": "Typ klucza" @@ -4701,13 +4701,13 @@ "message": "ED25519" }, "sshKeyAlgorithmRSA2048": { - "message": "RSA 2048-Bitowy" + "message": "RSA 2048-bitowy" }, "sshKeyAlgorithmRSA3072": { - "message": "RSA 3072-Bitowy" + "message": "RSA 3072-bitowy" }, "sshKeyAlgorithmRSA4096": { - "message": "RSA 4096-Bitowy" + "message": "RSA 4096-bitowy" }, "retry": { "message": "Powtórz" @@ -4756,19 +4756,19 @@ "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { - "message": "Password regenerated", + "message": "Hasło zostało ponownie wygenerowane", "description": "Notification message for when a password has been regenerated" }, "saveLoginToBitwarden": { - "message": "Save login to Bitwarden?", + "message": "Zapisać dane logowania w Bitwarden?", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { - "message": "Space", + "message": "Spacja", "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { - "message": "Tilde", + "message": "Tylda", "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { @@ -4776,23 +4776,23 @@ "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { - "message": "Exclamation mark", + "message": "Wykrzyknik", "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "Małpa", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "Hashtag", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "Znak dolara", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "Znak procenta", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { @@ -4804,23 +4804,23 @@ "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { - "message": "Asterisk", + "message": "Gwiazdka", "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "Prawy nawias okrągły", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "Prawy nawias okrągły", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "Znak podkreślenia", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "Myślnik", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { @@ -4828,27 +4828,27 @@ "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "Znak równości", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "Lewy nawias klamrowy", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "Prawy nawias klamrowy", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "Lewy nawias kwadratowy", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "Prawy nawias kwadratowy", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pipe", + "message": "Pionowa kreska", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { @@ -4856,39 +4856,39 @@ "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "Dwukropek", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "Średnik", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "Cudzysłów", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "Apostrof", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "Mniejszy niż", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "Większy niż", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "Przecinek", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "Kropka", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { - "message": "Question mark", + "message": "Znak zapytania", "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { @@ -4896,13 +4896,13 @@ "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { - "message": "Lowercase" + "message": "Małe litery" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Wielkie litery" }, "generatedPassword": { - "message": "Generated password" + "message": "Wygenerowane hasło" }, "compactMode": { "message": "Tryb kompaktowy" @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Szerokość rozszerzenia" }, diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index b346b8927e..d7a8ae6ea4 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Avaliar a Extensão" }, - "rateExtensionDesc": { - "message": "Por favor considere ajudar-nos com uma boa avaliação!" - }, "browserNotSupportClipboard": { "message": "O seu navegador web não suporta cópia para a área de transferência. Em alternativa, copie manualmente." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Mostrar o número de sugestões de preenchimento automático de login no ícone da extensão" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Padrão do sistema" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 9b657e66b6..9bac24872e 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Avaliar a extensão" }, - "rateExtensionDesc": { - "message": "Por favor, considere ajudar-nos com uma boa avaliação!" - }, "browserNotSupportClipboard": { "message": "O seu navegador Web não suporta a cópia fácil da área de transferência. Em vez disso, copie manualmente." }, @@ -3821,7 +3818,7 @@ "message": "Chave de acesso" }, "accessing": { - "message": "A aceder" + "message": "A aceder a" }, "loggedInExclamation": { "message": "Sessão iniciada!" @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Mostrar o número de sugestões de preenchimento automático de credenciais no ícone da extensão" }, + "showQuickCopyActions": { + "message": "Mostrar ações de cópia rápida no cofre" + }, "systemDefault": { "message": "Predefinição do sistema" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Aviso importante" + }, + "setupTwoStepLogin": { + "message": "Definir a verificação de dois passos" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "O Bitwarden enviará um código para o e-mail da sua conta para verificar as credenciais de novos dispositivos a partir de fevereiro de 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Pode configurar a verificação de dois passos como forma alternativa de proteger a sua conta ou alterar o seu e-mail para um a que possa aceder." + }, + "remindMeLater": { + "message": "Lembrar-me mais tarde" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Tem um acesso fiável ao seu e-mail, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Não, não tenho" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Sim, consigo aceder de forma fiável ao meu e-mail" + }, + "turnOnTwoStepLogin": { + "message": "Ativar a verificação de dois passos" + }, + "changeAcctEmail": { + "message": "Alterar o e-mail da conta" + }, "extensionWidth": { "message": "Largura da extensão" }, diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index a3e3ca308e..cde1f23348 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Evaluare extensie" }, - "rateExtensionDesc": { - "message": "Vă rugăm să luați în considerare să ne ajutați cu o recenzie bună!" - }, "browserNotSupportClipboard": { "message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index 145cd5d2d7..a027946036 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Оценить расширение" }, - "rateExtensionDesc": { - "message": "Пожалуйста, подумайте о том, чтобы помочь нам хорошим отзывом!" - }, "browserNotSupportClipboard": { "message": "Ваш браузер не поддерживает копирование данных в буфер обмена. Скопируйте вручную." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Показывать количество вариантов автозаполнения логина на значке расширения" }, + "showQuickCopyActions": { + "message": "Показать быстрые действия копирования в хранилище" + }, "systemDefault": { "message": "Системный" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Важное уведомление" + }, + "setupTwoStepLogin": { + "message": "Настроить двухэтапную аутентификацию" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Начиная с февраля 2025 года Bitwarden будет отправлять код на электронную почту вашего аккаунта для подтверждения авторизации с новых устройств." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "В качестве альтернативного способа защиты учетной записи вы можете настроить двухэтапную аутентификацию или сменить электронную почту на ту, к которой вы можете получить доступ." + }, + "remindMeLater": { + "message": "Напомнить позже" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Есть ли у вас надежный доступ к электронной почте $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Нет, не знаю" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Да, я имею надежный доступ к своей электронной почте" + }, + "turnOnTwoStepLogin": { + "message": "Включить двухэтапную аутентификацию" + }, + "changeAcctEmail": { + "message": "Изменить email аккаунта" + }, "extensionWidth": { "message": "Ширина расширения" }, diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 81ece16334..624e6f6f56 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "දිගුව අනුපාතය" }, - "rateExtensionDesc": { - "message": "කරුණාකර හොඳ සමාලෝචනයකින් අපට උදව් කිරීම ගැන සලකා බලන්න!" - }, "browserNotSupportClipboard": { "message": "ඔබේ වෙබ් බ්රව්සරය පහසු පසුරු පුවරුවක් පිටපත් කිරීමට සහාය නොදක්වයි. ඒ වෙනුවට එය අතින් පිටපත් කරන්න." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 4bb0a99cca..48c5007b54 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Ohodnotiť rozšírenie" }, - "rateExtensionDesc": { - "message": "Prosíme, zvážte napísanie pozitívnej recenzie!" - }, "browserNotSupportClipboard": { "message": "Váš webový prehliadač nepodporuje automatické kopírovanie do schránky. Kopírujte manuálne." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Zobraziť počet odporúčaných prihlasovacích údajov na ikone rozšírenia" }, + "showQuickCopyActions": { + "message": "Zobraziť akcie rýchleho kopírovania v trezore" + }, "systemDefault": { "message": "Predvolené systémom" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Dôležité upozornenie" + }, + "setupTwoStepLogin": { + "message": "Nastavenie dvojstupňového prihlásenia" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden vám od februára 2025 pošle na e-mail vášho účtu kód na overenie prihlásenia z nových zariadení." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Ako alternatívny spôsob ochrany svojho účtu môžete nastaviť dvojstupňové prihlásenie alebo zmeniť e-mail na taký, ku ktorému máte prístup." + }, + "remindMeLater": { + "message": "Pripomenúť neskôr" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Máte spoľahlivý prístup k svojmu e-mailu, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nie, nemám" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Áno, mám spoľahlivý prístup k svojmu e-mailu" + }, + "turnOnTwoStepLogin": { + "message": "Zapnúť dvojstupňové prihlásenie" + }, + "changeAcctEmail": { + "message": "Zmeniť e-mail účtu" + }, "extensionWidth": { "message": "Šírka rozšírenia" }, diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 597155b775..823b2ae0f1 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Ocenite to razširitev" }, - "rateExtensionDesc": { - "message": "Premislite, ali bi nam želeli pomagati z dobro oceno!" - }, "browserNotSupportClipboard": { "message": "Vaš brskalnik ne podpira enostavnega kopiranja na odložišče. Prosimo, kopirajte ročno." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index df83b41a62..e940c908d6 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Оцени овај додатак" }, - "rateExtensionDesc": { - "message": "Молимо вас да размотрите да нам помогнете уз добру оцену!" - }, "browserNotSupportClipboard": { "message": "Ваш прегледач не подржава једноставно копирање у клипборду. Уместо тога копирајте га ручно." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Прикажи број предлога за ауто-попуњавање пријаве на икони додатка" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Системски подразумевано" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Бета" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Ширина додатка" }, diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index efdf8c1001..3cfb2feb37 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Betygsätt tillägget" }, - "rateExtensionDesc": { - "message": "Överväg gärna att skriva en recension om oss!" - }, "browserNotSupportClipboard": { "message": "Din webbläsare har inte stöd för att enkelt kopiera till urklipp. Kopiera till urklipp manuellt istället." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "Systemstandard" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 779ff91757..8f7673803c 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the extension" }, - "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" - }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index b660dc785b..2d65bb40f1 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Rate the Extension" }, - "rateExtensionDesc": { - "message": "โปรดพิจารณา ช่วยเราด้วยการตรวจสอบที่ดี!" - }, "browserNotSupportClipboard": { "message": "เว็บเบราว์เซอร์ของคุณไม่รองรับการคัดลอกคลิปบอร์ดอย่างง่าย คัดลอกด้วยตนเองแทน" }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 8c8ffb0ffa..4c87d5189f 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -421,10 +421,10 @@ "message": "Son eşitleme:" }, "passGen": { - "message": "Parola üretici" + "message": "Parola üreteci" }, "generator": { - "message": "Oluşturucu", + "message": "Üreteç", "description": "Short for 'credential generator'." }, "passGenInfo": { @@ -648,9 +648,6 @@ "rateExtension": { "message": "Uzantıyı değerlendirin" }, - "rateExtensionDesc": { - "message": "İyi bir yorum yazarak bizi destekleyebilirsiniz." - }, "browserNotSupportClipboard": { "message": "Web tarayıcınız panoya kopyalamayı desteklemiyor. Parolayı elle kopyalayın." }, @@ -844,7 +841,7 @@ "message": "Bitwarden can store and fill 2-step verification codes. Select the camera icon to take a screenshot of this website's authenticator QR code, or copy and paste the key into this field." }, "learnMoreAboutAuthenticators": { - "message": "Learn more about authenticators" + "message": "Kimlik doğrulayıcılar hakkında bilgi alın" }, "copyTOTP": { "message": "Kimlik doğrulama anahtarını kopyala (TOTP)" @@ -1327,10 +1324,10 @@ "message": "Kimlik doğrulama uygulamanızdaki 6 haneli doğrulama kodunu girin." }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Kimlik doğrulama zaman aşımı" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "Kimlik doğrulama oturumu zaman aşımına uğradı. Lütfen giriş sürecini yeniden başlatın." }, "enterVerificationCodeEmail": { "message": "$EMAIL$ adresine e-postayla gönderdiğimiz 6 haneli doğrulama kodunu girin.", @@ -1435,7 +1432,7 @@ "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { - "message": "For advanced configuration, you can specify the base URL of each service independently." + "message": "İleri düzey yapılandırma için her hizmetin taban URL'sini bağımsız olarak belirleyebilirsiniz." }, "selfHostedEnvFormInvalid": { "message": "You must add either the base Server URL or at least one custom environment." @@ -3181,7 +3178,7 @@ "message": "Tüm giriş seçeneklerini gör" }, "viewAllLoginOptionsV1": { - "message": "View all log in options" + "message": "Tüm giriş seçeneklerini gör" }, "notificationSentDevice": { "message": "Cihazınıza bir bildirim gönderildi." @@ -4318,13 +4315,13 @@ "message": "Filtreler" }, "filterVault": { - "message": "Filter vault" + "message": "Kasayı filtrele" }, "filterApplied": { - "message": "One filter applied" + "message": "1 filtre uygulandı" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "$COUNT$ filtre uygulandı", "placeholders": { "count": { "content": "$1", @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Otomatik öneri sayısını uzantı simgesinde göster" }, + "showQuickCopyActions": { + "message": "Kasada hızlı kopyalama komutlarını göster" + }, "systemDefault": { "message": "Sistem varsayılanı" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Önemli uyarı" + }, + "setupTwoStepLogin": { + "message": "İki adımlı girişi ayarla" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Şubat 2025 itibarıyla Bitwarden, yeni cihazlardan yeni girişleri doğrulamanız için e-posta adresinize bir kod gönderecektir." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Hesabınızı korumanın alternatif bir yolu olarak iki adımlı girişi etkinleştirebilirsiniz. Aksi halde e-posta adresinizin doğru olduğundan emin olmalısınız." + }, + "remindMeLater": { + "message": "Daha sonra hatırlat" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "$EMAIL$ adresinize sağlıklı bir şekilde erişebiliyor musunuz?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Hayır, erişemiyorum" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Evet, e-postalarıma sağlıklı bir şekilde erişebiliyorum" + }, + "turnOnTwoStepLogin": { + "message": "İki adımlı girişi etkinleştir" + }, + "changeAcctEmail": { + "message": "Hesap e-postasını değiştir" + }, "extensionWidth": { "message": "Uzantı genişliği" }, diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index dc569fe081..af8f666811 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Оцінити розширення" }, - "rateExtensionDesc": { - "message": "Розкажіть іншим про свої враження, залишивши хороший відгук!" - }, "browserNotSupportClipboard": { "message": "Ваш браузер не підтримує копіювання даних в буфер обміну. Скопіюйте вручну." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Показувати кількість пропозицій автозаповнення на піктограмі розширення" }, + "showQuickCopyActions": { + "message": "Показати дії швидкого копіювання у сховищі" + }, "systemDefault": { "message": "Типово (система)" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Бета" }, + "importantNotice": { + "message": "Важлива інформація" + }, + "setupTwoStepLogin": { + "message": "Налаштувати двоетапну перевірку" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden надсилатиме код підтвердження на електронну пошту вашого облікового запису під час входу з нових пристроїв, починаючи з лютого 2025 року." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Ви можете налаштувати двоетапну перевірку як альтернативний спосіб захисту свого облікового запису, або змінити електронну пошту на таку, до якої ви маєте доступ." + }, + "remindMeLater": { + "message": "Нагадати пізніше" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Ви маєте постійний доступ до своєї електронної пошти $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Ні, не маю" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Так, я маю постійний доступ до своєї електронної пошти" + }, + "turnOnTwoStepLogin": { + "message": "Увімкнути двоетапну перевірку" + }, + "changeAcctEmail": { + "message": "Змінити адресу е-пошти" + }, "extensionWidth": { "message": "Ширина вікна розширення" }, diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 591cb01396..db877e318e 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "Đánh giá tiện ích mở rộng" }, - "rateExtensionDesc": { - "message": "Xin hãy nhìn nhận và đánh giá tốt cho chúng tôi!" - }, "browserNotSupportClipboard": { "message": "Trình duyệt web của bạn không hỗ trợ dễ dàng sao chép bộ nhớ tạm. Bạn có thể sao chép nó theo cách thủ công để thay thế." }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index bdc4902b27..a738ea4bb7 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "为本扩展打分" }, - "rateExtensionDesc": { - "message": "请给我们好评!" - }, "browserNotSupportClipboard": { "message": "您的浏览器不支持剪贴板简单复制,请手动复制。" }, @@ -2371,7 +2368,7 @@ "message": "限制查看" }, "limitSendViewsHint": { - "message": "在达到限额后,任何人无法查看此 Send。", + "message": "达到限额后,任何人无法查看此 Send。", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { @@ -3557,7 +3554,7 @@ "message": "切换侧边导航" }, "skipToContent": { - "message": "跳转到正文" + "message": "跳转到内容" }, "bitwardenOverlayButton": { "message": "Bitwarden 自动填充菜单按钮", @@ -4501,7 +4498,7 @@ "message": "对于如密码之类的敏感数据,请使用隐藏型字段" }, "checkBoxHelpText": { - "message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框" + "message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框型" }, "linkedHelpText": { "message": "当您处理特定网站的自动填充问题时,请使用链接型字段。" @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "在扩展图标上显示自动填充建议的登录的数量" }, + "showQuickCopyActions": { + "message": "在密码库上显示快速复制操作" + }, "systemDefault": { "message": "跟随系统" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta 版" }, + "importantNotice": { + "message": "重要通知" + }, + "setupTwoStepLogin": { + "message": "设置两步登录" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "从 2025 年 02 月开始,Bitwarden 将向您的账户电子邮件地址发送一个代码,以验证从新设备上的登录。" + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "您可以设置两步登录作为保护账户的替代方法,或将您的电子邮件地址更改为您可以访问的电子邮件地址。" + }, + "remindMeLater": { + "message": "稍后提醒我" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "您可以可靠地访问您的电子邮件地址 $EMAIL$ 吗?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "不,我不能" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "是的,我可以可靠地访问我的电子邮件地址" + }, + "turnOnTwoStepLogin": { + "message": "开启两步登录" + }, + "changeAcctEmail": { + "message": "更改账户电子邮件" + }, "extensionWidth": { "message": "扩展宽度" }, diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index cd0c188803..2f1e1ef34f 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -648,9 +648,6 @@ "rateExtension": { "message": "為本套件評分" }, - "rateExtensionDesc": { - "message": "請給予我們好評!" - }, "browserNotSupportClipboard": { "message": "您的瀏覽器不支援剪貼簿簡單複製,請手動複製。" }, @@ -4679,6 +4676,9 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "showQuickCopyActions": { + "message": "Show quick copy actions on Vault" + }, "systemDefault": { "message": "System default" }, @@ -4910,6 +4910,42 @@ "beta": { "message": "Beta" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "extensionWidth": { "message": "Extension width" }, From 8c1f1a2e49e34266b800734ccf4b7f265145bd85 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 13:31:45 +0100 Subject: [PATCH 05/18] Autosync the updated translations (#12495) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/af/messages.json | 60 ++- apps/web/src/locales/ar/messages.json | 60 ++- apps/web/src/locales/az/messages.json | 62 ++- apps/web/src/locales/be/messages.json | 60 ++- apps/web/src/locales/bg/messages.json | 60 ++- apps/web/src/locales/bn/messages.json | 60 ++- apps/web/src/locales/bs/messages.json | 60 ++- apps/web/src/locales/ca/messages.json | 60 ++- apps/web/src/locales/cs/messages.json | 60 ++- apps/web/src/locales/cy/messages.json | 60 ++- apps/web/src/locales/da/messages.json | 60 ++- apps/web/src/locales/de/messages.json | 66 ++- apps/web/src/locales/el/messages.json | 60 ++- apps/web/src/locales/en_GB/messages.json | 60 ++- apps/web/src/locales/en_IN/messages.json | 60 ++- apps/web/src/locales/eo/messages.json | 60 ++- apps/web/src/locales/es/messages.json | 60 ++- apps/web/src/locales/et/messages.json | 60 ++- apps/web/src/locales/eu/messages.json | 60 ++- apps/web/src/locales/fa/messages.json | 60 ++- apps/web/src/locales/fi/messages.json | 60 ++- apps/web/src/locales/fil/messages.json | 60 ++- apps/web/src/locales/fr/messages.json | 98 ++-- apps/web/src/locales/gl/messages.json | 60 ++- apps/web/src/locales/he/messages.json | 60 ++- apps/web/src/locales/hi/messages.json | 60 ++- apps/web/src/locales/hr/messages.json | 582 ++++++++++++----------- apps/web/src/locales/hu/messages.json | 60 ++- apps/web/src/locales/id/messages.json | 60 ++- apps/web/src/locales/it/messages.json | 60 ++- apps/web/src/locales/ja/messages.json | 60 ++- apps/web/src/locales/ka/messages.json | 60 ++- apps/web/src/locales/km/messages.json | 60 ++- apps/web/src/locales/kn/messages.json | 60 ++- apps/web/src/locales/ko/messages.json | 60 ++- apps/web/src/locales/lv/messages.json | 60 ++- apps/web/src/locales/ml/messages.json | 60 ++- apps/web/src/locales/mr/messages.json | 60 ++- apps/web/src/locales/my/messages.json | 60 ++- apps/web/src/locales/nb/messages.json | 60 ++- apps/web/src/locales/ne/messages.json | 60 ++- apps/web/src/locales/nl/messages.json | 60 ++- apps/web/src/locales/nn/messages.json | 60 ++- apps/web/src/locales/or/messages.json | 60 ++- apps/web/src/locales/pl/messages.json | 60 ++- apps/web/src/locales/pt_BR/messages.json | 60 ++- apps/web/src/locales/pt_PT/messages.json | 62 ++- apps/web/src/locales/ro/messages.json | 60 ++- apps/web/src/locales/ru/messages.json | 68 ++- apps/web/src/locales/si/messages.json | 60 ++- apps/web/src/locales/sk/messages.json | 60 ++- apps/web/src/locales/sl/messages.json | 60 ++- apps/web/src/locales/sr/messages.json | 60 ++- apps/web/src/locales/sr_CS/messages.json | 60 ++- apps/web/src/locales/sv/messages.json | 60 ++- apps/web/src/locales/te/messages.json | 60 ++- apps/web/src/locales/th/messages.json | 60 ++- apps/web/src/locales/tr/messages.json | 60 ++- apps/web/src/locales/uk/messages.json | 60 ++- apps/web/src/locales/vi/messages.json | 60 ++- apps/web/src/locales/zh_CN/messages.json | 62 ++- apps/web/src/locales/zh_TW/messages.json | 60 ++- 62 files changed, 2894 insertions(+), 1406 deletions(-) diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 783ee04ba6..2e8c1fdea1 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Werk Blaaier By" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "U gebruik ’n onondersteunde webblaaier. Die webkluis werk dalk nie soos normaal nie." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index a42eff8ee6..91a223bc83 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index 68bb3664af..1b3685420c 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Üzvləri bərpa et" }, - "revokeMembersWarning": { - "message": "İddia edilən və edilməyən hesablara aid üzvlər, ləğv edildikdə fərqli nəticələrlə üzləşəcəklər:" - }, - "claimedAccountRevoke": { - "message": "İddia edilən hesab: Bitwarden hesabına müraciəti ləğv et" - }, - "unclaimedAccountRevoke": { - "message": "İddia edilməyən hesab: Təşkilat datasına müraciəti ləğv et" - }, - "claimedAccount": { - "message": "İddia edilən hesab" - }, - "unclaimedAccount": { - "message": "İddia edilməyən hesab" - }, - "restoreMembersInstructions": { - "message": "Bir üzvün hesabını bərpa etmək üçün Ləğv edildi vərəqinə gedin. Prosesin tamamlanması bir neçə saniyə çəkə bilər və yarımçıq kəsilə və ya ləğv edilə bilməz." - }, "cannotRestoreAccessError": { "message": "Təşkilat müraciəti bərpa edilə bilmir" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Brauzeri güncəllə" }, + "generatingRiskInsights": { + "message": "Risk təhlilləriniz yaradılır..." + }, "updateBrowserDesc": { "message": "Dəstəklənməyən bir veb brauzer istifadə edirsiniz. Veb seyf düzgün işləməyə bilər." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Açıqlayıcı kod" }, + "importantNotice": { + "message": "Vacib bildiriş" + }, + "setupTwoStepLogin": { + "message": "İki addımlı girişi qur" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden, 2025-ci ilin Fevral ayından etibarən yeni cihazlardan gələn girişləri doğrulamaq üçün hesabınızın e-poçtuna bir kod göndərəcək." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Hesabınızı qorumaq üçün alternativ bir yol kimi iki addımlı girişi qura və ya e-poçtunuzu müraciət edə biləcəyiniz e-poçtla dəyişdirə bilərsiniz." + }, + "remindMeLater": { + "message": "Daha sonra xatırlat" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "$EMAIL$ e-poçtunuza güvənli şəkildə müraciət edə bilirsiniz?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Xeyr, edə bilmirəm" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Bəli, e-poçtuma güvənli şəkildə müraciət edə bilirəm" + }, + "turnOnTwoStepLogin": { + "message": "İki addımlı girişi işə sal" + }, + "changeAcctEmail": { + "message": "Hesabın e-poçtunu dəyişdir" + }, "removeMembers": { "message": "Üzvləri çıxart" }, @@ -9982,6 +10003,9 @@ } }, "domainClaimed": { - "message": "Domain claimed" + "message": "Domen götürüldü" + }, + "organizationNameMaxLength": { + "message": "Təşkilat adı 50 xarakterdən çox ola bilməz." } } diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 990e2c4b5b..335dcbbe65 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Абнавіць браўзер" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Ваш браўзер не падтрымліваецца. Вэб-сховішча можа працаваць няправільна." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index ca7b3d147a..88634c13b9 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Възстановяване на достъпа на членове" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Обновяване на браузъра" }, + "generatingRiskInsights": { + "message": "Създаване на Вашата информация относно рисковете…" + }, "updateBrowserDesc": { "message": "Ползвате неподдържан браузър. Трезорът по уеб може да не сработи правилно." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Код от описанието" }, + "importantNotice": { + "message": "Важно съобщение" + }, + "setupTwoStepLogin": { + "message": "Настройте двустепенно удостоверяване" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Битуорден ще изпрати код до е-пощата Ви, за потвърждаване на вписването от нови устройства. Това ще започне от февруари 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Можете да настроите двустепенно удостоверяване, като различен метод на защита, или ако е необходимо да промените е-пощата си с такава, до която имате достъп." + }, + "remindMeLater": { + "message": "Напомнете ми по-късно" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Имате ли сигурен достъп до е-пощата си – $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Не, нямам" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Да, имам достъп до е-пощата си" + }, + "turnOnTwoStepLogin": { + "message": "Включване на двустепенното удостоверяване" + }, + "changeAcctEmail": { + "message": "Промяна на е-пощата" + }, "removeMembers": { "message": "Премахване на членовете" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Домейнът е присвоен" + }, + "organizationNameMaxLength": { + "message": "Името на организацията не може да бъде по-дълго от 50 знака." } } diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 453507d441..3860a66b92 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 6d489d7353..1604eb2067 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index 84ca1d39d3..38684e8aef 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Actualitza el navegador" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Esteu utilitzant un navegador web no compatible. La caixa forta web pot no funcionar correctament." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 4f7e53666b..0fdac8e60f 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Obnovit členy" }, - "revokeMembersWarning": { - "message": "Členové s nárokovanými a nenárokovanými účty budou mít při odvolání různé výsledky:" - }, - "claimedAccountRevoke": { - "message": "Nárokovaný účet: Zrušit přístup k účtu Bitwarden" - }, - "unclaimedAccountRevoke": { - "message": "Nenárokovaný účet: Odvolat přístup k datům organizace" - }, - "claimedAccount": { - "message": "Nárokovaný účet" - }, - "unclaimedAccount": { - "message": "Nenárokovaný účet" - }, - "restoreMembersInstructions": { - "message": "Chcete-li obnovit účet člena, přejděte na kartu Odvolané. Proces může trvat několik sekund a nelze jej přerušit ani zrušit." - }, "cannotRestoreAccessError": { "message": "Nelze obnovit přístup organizace" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Aktualizovat prohlížeč" }, + "generatingRiskInsights": { + "message": "Generování poznatků o rizicích..." + }, "updateBrowserDesc": { "message": "Používáte nepodporovaný webový prohlížeč. Webový trezor nemusí pracovat správně." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Kód z popisu" }, + "importantNotice": { + "message": "Důležité upozornění" + }, + "setupTwoStepLogin": { + "message": "Nastavit dvoufázové přihlášení" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden odešle kód na e-mail Vašeho účtu pro ověření přihlášení z nových zařízení počínaje únorem 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Dvoufázové přihlášení můžete nastavit jako alternativní způsob ochrany Vašeho účtu nebo změnit svůj e-mail na ten, k němuž můžete přistupovat." + }, + "remindMeLater": { + "message": "Připomenout později" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Máte spolehlivý přístup ke svému e-mailu $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Ne, nemám" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ano, ke svému e-mailu mám přístup" + }, + "turnOnTwoStepLogin": { + "message": "Zapnout dvoufázové přihlášení" + }, + "changeAcctEmail": { + "message": "Změnit e-mail účtu" + }, "removeMembers": { "message": "Odebrat členy" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Doména uplatněna" + }, + "organizationNameMaxLength": { + "message": "Název organizace nesmí přesáhnout 50 znaků." } } diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 10c89bf3c8..c774497eae 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index 90a9271358..86bb114521 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Gendan medlemmer" }, - "revokeMembersWarning": { - "message": "Medlemmer med hævdede og uhævdede konti vil have forskellige resultater ved ophævning:" - }, - "claimedAccountRevoke": { - "message": "Hævdet konto: Ophæv adgang til Bitwarden-konto" - }, - "unclaimedAccountRevoke": { - "message": "Uhævdet konto: Ophæv adgang til organisationsdata" - }, - "claimedAccount": { - "message": "Hævdet konto" - }, - "unclaimedAccount": { - "message": "Uhævdet konto" - }, - "restoreMembersInstructions": { - "message": "For at gendanne et medlems konto, gå til fanen Ophævet. Processen kan tage et par sekunder at fuldføre og kan ikke afbrydes eller annulleres." - }, "cannotRestoreAccessError": { "message": "Kan ikke gendanne organisationsadgang" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Opdatér browser" }, + "generatingRiskInsights": { + "message": "Genererer risikoindsigter..." + }, "updateBrowserDesc": { "message": "Du bruger en ikke-understøttet webbrowser. Web-boksen fungerer muligvis ikke korrekt." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Beskrivelseskode" }, + "importantNotice": { + "message": "Vigtig notits" + }, + "setupTwoStepLogin": { + "message": "Opsæt totrins-login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Startende i februar 2025, sender Bitwarden en kode til kontoe-mailadressen for at bekræfte logins fra nye enheder." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Man kan opsætte totrins-login som en alternativ måde at beskytte sin konto på eller ændre sin e-mail til en, man kan tilgå." + }, + "remindMeLater": { + "message": "Påmind senere" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Er der pålidelig adgang til e-mailadressen, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nej, muligvis ikke" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ja, e-mailadressen kan pålideligt tilgås" + }, + "turnOnTwoStepLogin": { + "message": "Slå totrins-login til" + }, + "changeAcctEmail": { + "message": "Skift kontoe-mailadresse" + }, "removeMembers": { "message": "Fjern medlemmer" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domæne registreret" + }, + "organizationNameMaxLength": { + "message": "Organisationsnavn må ikke overstige 50 tegn." } } diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index 70694bb878..b90d7fc247 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -6,7 +6,7 @@ "message": "Kritische Anwendungen" }, "accessIntelligence": { - "message": "Access Intelligence" + "message": "Zugriff auf Informationen" }, "riskInsights": { "message": "Risiko-Überblick" @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Mitglieder wiederherstellen" }, - "revokeMembersWarning": { - "message": "Mitglieder mit beanspruchten und unbeanspruchten Konten werden andere Ergebnisse haben, wenn sie widerrufen werden:" - }, - "claimedAccountRevoke": { - "message": "Beanspruchtes Konto: Zugriff auf Bitwarden-Konto widerrufen" - }, - "unclaimedAccountRevoke": { - "message": "Unbeanspruchtes Konto: Zugriff auf Organisationsdaten widerrufen" - }, - "claimedAccount": { - "message": "Beanspruchtes Konto" - }, - "unclaimedAccount": { - "message": "Unbeanspruchtes Konto" - }, - "restoreMembersInstructions": { - "message": "Um das Konto eines Mitglieds wiederherzustellen, wechsel zum Wiederrufen-Tab. Der Vorgang kann einige Sekunden dauern und kann nicht unterbrochen oder abgebrochen werden." - }, "cannotRestoreAccessError": { "message": "Organisationszugriff kann nicht wiederhergestellt werden" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Browser aktualisieren" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Du verwendest einen nicht unterstützten Webbrowser. Der Web-Tresor funktioniert möglicherweise nicht richtig." }, @@ -6835,7 +6820,7 @@ "description": "the text, 'SCIM', is an acronym and should not be translated." }, "scimIntegrationDescription": { - "message": "Automatische Bereitstellung von Benutzern und Gruppen mit deinem bevorzugten Identitätsanbieter über SCIM-Bereitstellung. Suche nach unterstützte Integrationen", + "message": "Automatische Bereitstellung von Benutzern und Gruppen mit deinem bevorzugten Identitätsanbieter über SCIM-Bereitstellung. Suche nach unterstützten Integrationen", "description": "the text, 'SCIM', is an acronym and should not be translated." }, "scimEnabledCheckboxDesc": { @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Beschreibungscode" }, + "importantNotice": { + "message": "Wichtiger Hinweis" + }, + "setupTwoStepLogin": { + "message": "Richte die zweistufige Anmeldung ein" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden wird einen Code an deine Konto-E-Mail-Adresse senden, um Anmeldungen von neuen Geräten ab Februar 2025 zu überprüfen." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Du kannst die zweistufige Anmeldung als eine alternative Methode einrichten, um deinen Account zu schützen, oder ändere deine E-Mail-Adresse zu einer, auf die du zugreifen kannst." + }, + "remindMeLater": { + "message": "Erinnere mich später" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Hast du zuverlässigen Zugriff auf deine E-Mail-Adresse $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nein, habe ich nicht" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ja, ich kann zuverlässig auf meine E-Mails zugreifen" + }, + "turnOnTwoStepLogin": { + "message": "Aktiviere die zweistufige Anmeldung" + }, + "changeAcctEmail": { + "message": "Ändere die E-Mail-Adresse des Kontos" + }, "removeMembers": { "message": "Mitglieder entfernen" }, @@ -9982,6 +10003,9 @@ } }, "domainClaimed": { - "message": "Domain claimed" + "message": "Beanspruchte Domain" + }, + "organizationNameMaxLength": { + "message": "Der Name der Organisation darf 50 Zeichen nicht überschreiten." } } diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 782db881c7..50a327b1fa 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Ενημερώστε τον Browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Χρησιμοποιείτε ένα μη υποστηριζόμενο browser. Το web vault ενδέχεται να μην λειτουργεί σωστά." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index 975b02ff63..3da937ec26 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organisation data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or cancelled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organisation access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organisation name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index d0b6023f53..dd507896e5 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organisation data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or cancelled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organisation access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organisation name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index ae366fec51..2c1aa36046 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Ĝisdatigi retumilon" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Vi uzas nesubtenatan tTT-legilon. La ttt-volbo eble ne funkcias ĝuste." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 08ad137c4d..f2548036c2 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restaurar miembros" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Actualizar navegador" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Está utilizando un navegador web no compatible. Es posible que la caja fuerte web no funcione correctamente." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index ff11a82830..21096b3f71 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Uuenda brauserit" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Kasutad brauserit, mida ei toetata. Veebihoidla ei pruugi hästi töötada." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index a7261c0f61..19de255284 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Nabigatzailea eguneratu" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Euskarririk gabeko web nabigatzailea erabiltzen ari zara. Baliteke webguneko kutxa gotorrak behar bezala ez funtzionatzea." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index 4656c997d3..bb422bf70a 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "به‌روزرسانی مرورگر" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "شما از یک مرورگر وب پشتیبانی نشده استفاده می‌کنید. گاوصندوق وب ممکن است به درستی کار نکند." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index f13e2b73a6..90a9078ceb 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Palauta jäsenet" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Päivitä selain" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Käytät selainta, jota ei tueta. Verkkoholvi ei välttämättä toimi oikein." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Poista jäsenet" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index ef36872425..6257f2b5ea 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update sa browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Gumagamit ka ng isang hindi suportado na web browser. Ang web vault ay maaaring hindi gumana nang maayos." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index 21566e8320..c9f87b1926 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restaurer des membres" }, - "revokeMembersWarning": { - "message": "Les membres avec des comptes réclamés ou non réclamés auront des résultats différents lorsqu'ils seront révoqués :" - }, - "claimedAccountRevoke": { - "message": "Compte réclamé : Révoquer l'accès au compte Bitwarden" - }, - "unclaimedAccountRevoke": { - "message": "Compte non réclamé : Révoquer l'accès aux données de l'organisation" - }, - "claimedAccount": { - "message": "Compte réclamé" - }, - "unclaimedAccount": { - "message": "Compte non réclamé" - }, - "restoreMembersInstructions": { - "message": "Pour restaurer le compte d'un membre, allez dans l'onglet Révoqué. Le processus peut prendre quelques secondes à compléter et ne peut pas être interrompu ou annulé." - }, "cannotRestoreAccessError": { "message": "Impossible de restaurer l'accès à l'organisation" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Mettre à jour le navigateur" }, + "generatingRiskInsights": { + "message": "Génération de vos connaissances en matière de risque..." + }, "updateBrowserDesc": { "message": "Vous utilisez un navigateur non supporté. Le coffre web pourrait ne pas fonctionner correctement." }, @@ -4740,10 +4725,10 @@ "message": "Connectez-vous en utilisant le portail de connexion unique de votre organisation. Veuillez entrer l'identifiant de votre organisation pour commencer." }, "singleSignOnEnterOrgIdentifier": { - "message": "Enter your organization's SSO identifier to begin" + "message": "Entrez l'identifiant SSO de votre organisation pour commencer" }, "singleSignOnEnterOrgIdentifierText": { - "message": "To log in with your SSO provider, enter your organization's SSO identifier to begin. You may need to enter this SSO identifier when you log in from a new device." + "message": "Pour vous connecter avec votre fournisseur de SSO, entrez l'identifiant SSO de votre organisation pour commencer. Vous devrez peut-être entrer cet identifiant SSO lorsque vous vous connecterez à partir d'un nouvel appareil." }, "enterpriseSingleSignOn": { "message": "Portail de connexion unique d'entreprise (Single Sign-On)" @@ -9662,10 +9647,10 @@ "message": "RSA 2048 bits" }, "sshKeyAlgorithmRSA3072": { - "message": "RSA 3072-Bit" + "message": "RSA 3072 bits" }, "sshKeyAlgorithmRSA4096": { - "message": "RSA 4096-Bit" + "message": "RSA 4096 bits" }, "premiumAccounts": { "message": "6 comptes premium" @@ -9791,23 +9776,23 @@ "message": "Êtes-vous sûr de vouloir supprimer définitivement cette pièce jointe ?" }, "manageSubscriptionFromThe": { - "message": "Manage subscription from the", + "message": "Gérer l'abonnement à partir du", "description": "This represents the beginning of a sentence. The full sentence will be 'Manage subscription from the Provider Portal', but 'Provider Portal' will be a link and thus cannot be included in the translation file." }, "toHostBitwardenOnYourOwnServer": { - "message": "To host Bitwarden on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up automatic sync in your self-hosted organization." + "message": "Pour héberger Bitwarden sur votre propre serveur, vous devrez téléverser votre fichier de licence. Pour prendre en charge les abonnements gratuits à Bitwarden Familles et les fonctionnalités de facturation avancées pour votre organisation auto-hébergée, vous devrez configurer la synchronisation automatique dans votre organisation auto-hébergée." }, "selfHostingTitleProper": { - "message": "Self-Hosting" + "message": "Auto-Hébergement" }, "claim-domain-single-org-warning": { "message": "Réclamer un domaine activera la politique d'organisation unique." }, "single-org-revoked-user-warning": { - "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations." + "message": "Les membres non conformes seront révoqués. Les administrateurs peuvent restaurer les membres une fois qu'ils quittent toutes les autres organisations." }, "deleteOrganizationUser": { - "message": "Delete $NAME$", + "message": "Supprimer $NAME$", "placeholders": { "name": { "content": "$1", @@ -9831,7 +9816,7 @@ "description": "Warning description for the bulk delete organization users dialog" }, "organizationUserDeleted": { - "message": "Deleted $NAME$", + "message": "$NAME$ supprimé", "placeholders": { "name": { "content": "$1", @@ -9840,10 +9825,10 @@ } }, "organizationUserDeletedDesc": { - "message": "The user was removed from the organization and all associated user data has been deleted." + "message": "L'utilisateur a été retiré de l'organisation et toutes ses données utilisateur associées ont été supprimées." }, "deletedUserId": { - "message": "Deleted user $ID$ - an owner / admin deleted the user account", + "message": "Utilisateur supprimé $ID$ - un propriétaire / administrateur a supprimé le compte utilisateur", "placeholders": { "id": { "content": "$1", @@ -9852,7 +9837,7 @@ } }, "userLeftOrganization": { - "message": "User $ID$ left organization", + "message": "L'utilisateur $ID$ a quitté l'organisation", "placeholders": { "id": { "content": "$1", @@ -9861,7 +9846,7 @@ } }, "suspendedOrganizationTitle": { - "message": "The $ORGANIZATION$ is suspended", + "message": "$ORGANIZATION$ est suspendue", "placeholders": { "organization": { "content": "$1", @@ -9870,10 +9855,10 @@ } }, "suspendedUserOrgMessage": { - "message": "Contact your organization owner for assistance." + "message": "Contactez le propriétaire de votre organisation pour obtenir de l'aide." }, "suspendedOwnerOrgMessage": { - "message": "To regain access to your organization, add a payment method." + "message": "Pour regagner l'accès à votre organisation, ajoutez un mode de paiement." }, "deleteMembers": { "message": "Supprimer les membres" @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Code descripteur" }, + "importantNotice": { + "message": "Avis important" + }, + "setupTwoStepLogin": { + "message": "Configurer l'identification à deux facteurs" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden enverra un code au courriel de votre compte pour vérifier les connexions depuis de nouveaux appareils à partir de février 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Vous pouvez configurer l'identification à deux facteurs comme un moyen alternatif de protéger votre compte ou de changer votre adresse courriel à une autre à laquelle vous pouvez accéder." + }, + "remindMeLater": { + "message": "Me le rappeler plus tard" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Avez-vous un accès fiable à votre courriel $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Non, je ne l'ai pas" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Oui, je peux accéder à mon courriel de manière fiable" + }, + "turnOnTwoStepLogin": { + "message": "Configurer l'identification à deux facteurs" + }, + "changeAcctEmail": { + "message": "Changer l'adresse courriel du compte" + }, "removeMembers": { "message": "Retirer des membres" }, @@ -9960,7 +9981,7 @@ } }, "updatedRevokeSponsorshipConfirmationForSentSponsorship": { - "message": "If you remove $EMAIL$, the sponsorship for this Family plan cannot be redeemed. Are you sure you want to continue?", + "message": "Si vous supprimez $EMAIL$, la commandite pour ce plan Familles ne peut pas être échangée. Êtes-vous sûr de vouloir continuer ?", "placeholders": { "email": { "content": "$1", @@ -9969,7 +9990,7 @@ } }, "updatedRevokeSponsorshipConfirmationForAcceptedSponsorship": { - "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end and the saved payment method will be charged $40 + applicable tax on $DATE$. You will not be able to redeem a new sponsorship until $DATE$. Are you sure you want to continue?", + "message": "Si vous supprimez $EMAIL$, la commandite pour ce plan Familles prendra fin et la méthode de paiement enregistrée sera facturée $40 + taxe applicable le $DATE$. Vous ne pourrez pas réclamer un nouveau parrainage avant $DATE$. Êtes-vous sûr de vouloir continuer ?", "placeholders": { "email": { "content": "$1", @@ -9982,6 +10003,9 @@ } }, "domainClaimed": { - "message": "Domain claimed" + "message": "Domaine réclamé" + }, + "organizationNameMaxLength": { + "message": "Le nom de l'organisation ne doit pas dépasser 50 caractères." } } diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index a1a802bac7..7fd7be8395 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 857d685e81..32e51d6a03 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "עדכן דפדפן" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "אתה משתמש בדפדפן אינטרנט שאיננו נתמך. כספת הרשת עלולה שלא לפעול כראוי." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index 69a0033329..3f2bd5897e 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 1621b1af81..9a12714078 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -1,24 +1,24 @@ { "allApplications": { - "message": "All applications" + "message": "Sve aplikacije" }, "criticalApplications": { - "message": "Critical applications" + "message": "Kritične aplikacije" }, "accessIntelligence": { - "message": "Access Intelligence" + "message": "Pristup inteligenciji" }, "riskInsights": { - "message": "Risk Insights" + "message": "Uvid u rizik" }, "passwordRisk": { - "message": "Password Risk" + "message": "Rizik lozinke" }, "reviewAtRiskPasswords": { - "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords." + "message": "Pregledaj rizične lozinke (slabe, izložene ili ponovno korištene) u svim aplikacijama. Odaberi svoje najkritičnije aplikacije za davanje prioriteta sigurnosnim radnjama da tvoji korisnici riješe rizične lozinke." }, "dataLastUpdated": { - "message": "Data last updated: $DATE$", + "message": "Zadnje ažuriranje: $DATE$", "placeholders": { "date": { "content": "$1", @@ -27,37 +27,19 @@ } }, "notifiedMembers": { - "message": "Notified members" + "message": "Obaviješteni članovi" }, "revokeMembers": { - "message": "Revoke members" + "message": "Opozovi članove" }, "restoreMembers": { - "message": "Restore members" - }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." + "message": "Vrati članove" }, "cannotRestoreAccessError": { - "message": "Cannot restore organization access" + "message": "Nije moguće vratiti pristup organizaciji" }, "allApplicationsWithCount": { - "message": "All applications ($COUNT$)", + "message": "Sve aplikacije ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -66,10 +48,10 @@ } }, "createNewLoginItem": { - "message": "Create new login item" + "message": "Stvori novu stavku prijave" }, "criticalApplicationsWithCount": { - "message": "Critical applications ($COUNT$)", + "message": "Kritične aplikacije ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -78,7 +60,7 @@ } }, "notifiedMembersWithCount": { - "message": "Notified members ($COUNT$)", + "message": "Obaviješteni članovi ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -87,7 +69,7 @@ } }, "noAppsInOrgTitle": { - "message": "No applications found in $ORG NAME$", + "message": "Nisu nađene aplikacije u $ORG NAME$", "placeholders": { "org name": { "content": "$1", @@ -96,49 +78,49 @@ } }, "noAppsInOrgDescription": { - "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." + "message": "Kako korisnici spremaju podatke za prijavu, ovdje se pojavljuju aplikacije koje prikazuju sve rizične lozinke. Označi kritične aplikacije i obavijesti korisnike da ažuriraju lozinke." }, "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "message": "Niti jedna aplikacija nije označena kao kritična" }, "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "message": "Odaberi svoje najkritičnije aplikacije za otkrivanje rizičnih lozinki i obavijesti korisnike da promijene te lozinke." }, "markCriticalApps": { - "message": "Mark critical apps" + "message": "Označi kritične aplikacije" }, "markAppAsCritical": { - "message": "Mark app as critical" + "message": "Označi aplikacije kao kritične" }, "appsMarkedAsCritical": { - "message": "Apps marked as critical" + "message": "Aplikacije označene kao kritične" }, "application": { - "message": "Application" + "message": "Aplikacija" }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Rizične lozinke" }, "requestPasswordChange": { - "message": "Request password change" + "message": "Zatraži promjenu lozinke" }, "totalPasswords": { - "message": "Total passwords" + "message": "Ukupno lozinki" }, "searchApps": { - "message": "Search applications" + "message": "Pretraži aplikacije" }, "atRiskMembers": { - "message": "At-risk members" + "message": "Rizični korisnici" }, "totalMembers": { - "message": "Total members" + "message": "Ukupno korisnika" }, "atRiskApplications": { - "message": "At-risk applications" + "message": "Rizične aplikacije" }, "totalApplications": { - "message": "Total applications" + "message": "Ukupno aplikacija" }, "whatTypeOfItem": { "message": "Koja je ovo vrsta stavke?" @@ -411,17 +393,17 @@ "message": "Boolean" }, "cfTypeCheckbox": { - "message": "Checkbox" + "message": "Potvrdni okvir" }, "cfTypeLinked": { "message": "Povezano", "description": "This describes a field that is 'linked' (related) to another field." }, "fieldType": { - "message": "Field type" + "message": "Vrsta polja" }, "fieldLabel": { - "message": "Field label" + "message": "Oznaka polja" }, "remove": { "message": "Ukloni" @@ -487,7 +469,7 @@ "message": "Generiraj lozinku" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Generiraj fraznu lozinku" }, "checkPassword": { "message": "Provjeri je li lozinka bila ukradena." @@ -590,7 +572,7 @@ "message": "Sigurna bilješka" }, "typeSshKey": { - "message": "SSH key" + "message": "SSH ključ" }, "typeLoginPlural": { "message": "Prijave" @@ -668,7 +650,7 @@ "message": "Prikaz stavke" }, "newItemHeader": { - "message": "New $TYPE$", + "message": "Novi $TYPE$", "placeholders": { "type": { "content": "$1", @@ -677,7 +659,7 @@ } }, "editItemHeader": { - "message": "Edit $TYPE$", + "message": "Uredi $TYPE$", "placeholders": { "type": { "content": "$1", @@ -751,11 +733,11 @@ "description": "Copy password to clipboard" }, "copyPassphrase": { - "message": "Copy passphrase", + "message": "Kopiraj fraznu lozinku", "description": "Copy passphrase to clipboard" }, "passwordCopied": { - "message": "Password copied" + "message": "Lozinka kopirana" }, "copyUsername": { "message": "Kopiraj korisničko ime", @@ -964,7 +946,7 @@ "message": "Razina pristupa" }, "accessing": { - "message": "Pristupanje" + "message": "Poslužitelj:" }, "loggedOut": { "message": "Odjavljen/a" @@ -1012,7 +994,7 @@ "message": "Prijava uređajem mora biti namještena u postavka Bitwarden mobilne aplikacije. Trebaš drugu opciju?" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Trebaš drugu opciju?" }, "loginWithMasterPassword": { "message": "Prijava glavnom lozinkom" @@ -1027,13 +1009,13 @@ "message": "Koristi drugi način prijave" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Prijava pristupnim ključem" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Jedinstvena prijava (SSO)" }, "welcomeBack": { - "message": "Welcome back" + "message": "Dobro došli natrag" }, "invalidPasskeyPleaseTryAgain": { "message": "Nevažeći pristupni ključ. Pokušaj ponovno." @@ -1117,7 +1099,7 @@ "message": "Stvori račun" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Novi u Bitwardenu?" }, "setAStrongPassword": { "message": "Postavi jaku lozinku" @@ -1135,13 +1117,13 @@ "message": "Prijavi se" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Prijavi se u Bitwarden" }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Istek vremena za autentifikaciju" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "Sesija za autentifikaciju je istekla. Ponovi proces prijave." }, "verifyIdentity": { "message": "Potvrdi svoj identitet" @@ -1275,7 +1257,7 @@ "message": "Trezor je zaključan" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "Tvoj račun je zaključan" }, "uuid": { "message": "UUID" @@ -1312,7 +1294,7 @@ "message": "Nemaš prava vidjeti sve stavke u ovoj zbirci." }, "youDoNotHavePermissions": { - "message": "You do not have permissions to this collection" + "message": "Nemaš prava za ovu kolekciju" }, "noCollectionsInList": { "message": "Nema zbirki za prikaz." @@ -1339,10 +1321,10 @@ "message": "Obavijest je poslana na tvoj uređaj." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "Obavijest je poslana na tvoj uređaj" }, "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { - "message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" + "message": "Provjeri je li trezor otključan i slaže li se jedinstvena fraza s drugim uređajem" }, "versionNumber": { "message": "Verzija $VERSION_NUMBER$", @@ -1354,10 +1336,10 @@ } }, "enterVerificationCodeApp": { - "message": "Unesi 6-znamenkasti kontrolni kôd iz autentifikatorske aplikacije." + "message": "Unesi 6-znamenkasti kôd za provjeru iz autentifikatorske aplikacije." }, "enterVerificationCodeEmail": { - "message": "Unesi 6-znamenkasti kontrolni kôd poslan e-poštom na $EMAIL$.", + "message": "Unesi 6-znamenkasti kôd za provjeru poslan e-poštom na $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -1489,7 +1471,7 @@ "message": "Sigurno želiš nastaviti?" }, "moveSelectedItemsDesc": { - "message": "Odaberi mapu u koju želiš premjestiti odabranih $COUNT$ stavke/i.", + "message": "Odaberi mapu u koju želiš dodati odabranih $COUNT$ stavke/i.", "placeholders": { "count": { "content": "$1", @@ -1628,7 +1610,7 @@ "description": "deprecated. Use avoidAmbiguous instead." }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "Izbjegavaj dvosmislene znakove", "description": "Label for the avoid ambiguous characters checkbox." }, "regeneratePassword": { @@ -1653,7 +1635,7 @@ "description": "deprecated. Use numbersLabel instead." }, "specialCharacters": { - "message": "Posebni znakovi (!@#$%^&*)" + "message": "Posebni znakovi (! @ # $ % ^ & *)" }, "numWords": { "message": "Broj riječi" @@ -1669,32 +1651,32 @@ "message": "Uključi broj" }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "Pravila tvrtke primjenjena su na generator.", "description": "Indicates that a policy limits the credential generator screen." }, "passwordHistory": { "message": "Povijest" }, "generatorHistory": { - "message": "Generator history" + "message": "Povijest generatora" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "Očisti povijest generatora" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Cijela povijest generatora biti će trajno izbirsana. Sigurno želiš nastaviti?" }, "noPasswordsInList": { "message": "Nema lozinki na popisu." }, "clearHistory": { - "message": "Clear history" + "message": "Očisti povijest" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Ništa za prikazati" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Ništa nije generirano" }, "clear": { "message": "Očisti", @@ -1804,7 +1786,7 @@ "message": "Pažljivo, ove akcije su konačne i ne mogu se poništiti!" }, "dangerZoneDescSingular": { - "message": "Careful, this action is not reversible!" + "message": "Pažljivo, ova radnja se ne može poništiti!" }, "deauthorizeSessions": { "message": "Deautoriziraj sesije" @@ -1819,7 +1801,7 @@ "message": "Sve sesije deautorizirane" }, "accountIsOwnedMessage": { - "message": "This account is owned by $ORGANIZATIONNAME$", + "message": "Ovaj račun je vlasništvo $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -2267,7 +2249,7 @@ "message": "Unesi e-poštu na koju želiš primati verifikacijske kodove" }, "twoFactorEmailEnterCode": { - "message": "Unesi 6-znamenkasti verifikacijski kôd primljen e-poštom" + "message": "Unesi 6-znamenkasti kôd za provjeru primljen e-poštom" }, "sendEmail": { "message": "Pošalji poruku e-pošte" @@ -2423,7 +2405,7 @@ "message": "Provjeri izložene lozinke" }, "timesExposed": { - "message": "Times exposed" + "message": "Broj izloženosti" }, "exposedXTimes": { "message": "Izložene $COUNT$ put(a)", @@ -2460,7 +2442,7 @@ "message": "Niti jedna stavka u tvom trezoru nema slabu lozinku." }, "weakness": { - "message": "Weakness" + "message": "Slabost" }, "reusedPasswordsReport": { "message": "Izvještaj o istim lozinkama" @@ -2488,7 +2470,7 @@ "message": "Niti jedna prijava u tvom trezoru ne koristi iste lozinke." }, "timesReused": { - "message": "Times reused" + "message": "Broj ponovnih korištenja" }, "reusedXTimes": { "message": "Korišteno $COUNT$ puta", @@ -2646,7 +2628,7 @@ } }, "bitwardenFamiliesPlan": { - "message": "Plan Bitwarden Obitelji." + "message": "Paket Bitwarden Families." }, "addons": { "message": "Dodaci" @@ -2788,7 +2770,7 @@ "message": "Preuzmi licencu" }, "viewBillingToken": { - "message": "View Billing Token" + "message": "Pogledaj token za plaćanje" }, "updateLicense": { "message": "Ažuriraj licencu" @@ -2837,10 +2819,10 @@ "message": "Fakture" }, "noUnpaidInvoices": { - "message": "No unpaid invoices." + "message": "Nema neplaćenih računa." }, "noPaidInvoices": { - "message": "No paid invoices." + "message": "Nema plaćenih računa." }, "paid": { "message": "Plaćeno", @@ -3186,13 +3168,13 @@ "message": "Ljudi" }, "policies": { - "message": "Smjernice" + "message": "Pravila" }, "singleSignOn": { "message": "Jedinstvena prijava (SSO)" }, "editPolicy": { - "message": "Uredi smjernice" + "message": "Uređivanje pravila" }, "groups": { "message": "Grupe" @@ -3448,7 +3430,7 @@ } }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "Pogledaj sve mogućnosti prijave" }, "viewAllLoginOptions": { "message": "Pogledaj sve mogućnosti prijave" @@ -3583,7 +3565,7 @@ } }, "editedPolicyId": { - "message": "Uređene smjernice $ID$.", + "message": "Uređeno pravilo $ID$.", "placeholders": { "id": { "content": "$1", @@ -3900,11 +3882,14 @@ "updateBrowser": { "message": "Ažuriraj preglednik" }, + "generatingRiskInsights": { + "message": "Stvaranje tvojih uvida u rizik..." + }, "updateBrowserDesc": { "message": "Koristiš nepodržani preglednik. Web trezor možda neće ispravno raditi." }, "freeTrialEndPromptCount": { - "message": "Your free trial ends in $COUNT$ days.", + "message": "Besplatno probno razdoblje završava za $COUNT$ dan/a.", "placeholders": { "count": { "content": "$1", @@ -3913,7 +3898,7 @@ } }, "freeTrialEndPromptMultipleDays": { - "message": "$ORGANIZATION$, your free trial ends in $COUNT$ days.", + "message": "$ORGANIZATION$, besplatno probno razdoblje završava za $COUNT$ dan/a.", "placeholders": { "count": { "content": "$2", @@ -3926,7 +3911,7 @@ } }, "freeTrialEndPromptTomorrow": { - "message": "$ORGANIZATION$, your free trial ends tomorrow.", + "message": "$ORGANIZATION$, tvoje besplatno probno razdoblje završava sutra.", "placeholders": { "organization": { "content": "$1", @@ -3935,10 +3920,10 @@ } }, "freeTrialEndPromptTomorrowNoOrgName": { - "message": "Your free trial ends tomorrow." + "message": "Tvoje besplatno probno razdoblje završava sutra." }, "freeTrialEndPromptToday": { - "message": "$ORGANIZATION$, your free trial ends today.", + "message": "$ORGANIZATION$, tvoje besplatno probno razdoblje završava danas.", "placeholders": { "organization": { "content": "$1", @@ -3947,16 +3932,16 @@ } }, "freeTrialEndingTodayWithoutOrgName": { - "message": "Your free trial ends today." + "message": "Tvoje besplatno probno razdoblje završava danas." }, "clickHereToAddPaymentMethod": { - "message": "Click here to add a payment method." + "message": "Klikni ovdje za dodavanje načina plaćanja." }, "joinOrganization": { "message": "Pridruži se organizaciji" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "Pridruži se $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -4238,7 +4223,7 @@ } }, "subscriptionSponsoredFamiliesPlan": { - "message": "Tvoja pretplata dozvoljava najviše $COUNT$ korisnika. Tvoj plan je sponzoriran i naplaćuje se vanjskoj organizaciji.", + "message": "Tvoja pretplata dozvoljava najviše $COUNT$ korisnika. Tvoj paket je sponzoriran i naplaćuje se vanjskoj organizaciji.", "placeholders": { "count": { "content": "$1", @@ -4507,7 +4492,7 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "Dobiti ćeš obavijest kada je tvoj zahtjev odobren" }, "free": { "message": "Besplatno", @@ -4557,7 +4542,7 @@ "message": "Pravila glavne lozinke" }, "masterPassPolicyDesc": { - "message": "Postavi smjernice sigurnosti koju glavna lozinka mora zadovoljiti." + "message": "Postavi pravila sigurnosti koja mora zadovoljiti glavna lozinka." }, "twoStepLoginPolicyTitle": { "message": "Zahtijevaj prijavu dvostrukom autentifikacijom" @@ -4572,13 +4557,13 @@ "message": "Član si organizacije koja zahtijeva uključenu prijavu u dva koraka na tvojem računu. Ako onemogućiš sve pružatelje prijave u dva koraka, automatski ćeš biti uklonjen/a iz organizacije." }, "passwordGeneratorPolicyDesc": { - "message": "Postavi smjernice sigurnosti koju generirana lozinka mora zadovoljiti." + "message": "Postavi pravila sigurnosti koje mora zadovoljiti generator lozinki." }, "passwordGeneratorPolicyInEffect": { - "message": "Jedna ili više organizacijskih smjernica utječe na postavke generatora." + "message": "Jedna ili više organizacijskih pravila utječe na postavke generatora." }, "masterPasswordPolicyInEffect": { - "message": "Jedna ili više organizacijskih smjernica zahtijeva da tvoja glavna lozinka ispunjava sljedeće uvjete:" + "message": "Jedna ili više organizacijskih pravila zahtijeva da tvoja glavna lozinka ispunjava sljedeće uvjete:" }, "policyInEffectMinComplexity": { "message": "Minimalna ocjena složenosti od $SCORE$", @@ -4740,10 +4725,10 @@ "message": "Prijavi se koristeći SSO portal tvoje organizacije. Za nastavak unesi identifikator organizacije." }, "singleSignOnEnterOrgIdentifier": { - "message": "Enter your organization's SSO identifier to begin" + "message": "Za početak unesi SSO identifikator" }, "singleSignOnEnterOrgIdentifierText": { - "message": "To log in with your SSO provider, enter your organization's SSO identifier to begin. You may need to enter this SSO identifier when you log in from a new device." + "message": "Za prijavu sa tvojim SSO pružateljem usluga, unesi SSO identifikator svoje organizacije. Možda ćeš morati unijeti ovaj SSO identifikator kada se prijavljuješ s novog uređaja." }, "enterpriseSingleSignOn": { "message": "Jedinstvena prijava na razini tvrtke (SSO)" @@ -4782,7 +4767,7 @@ "message": "SSO autentifikacija putem SAML2.0 i OpenID Connect" }, "includeEnterprisePolicies": { - "message": "Smjernice za tvrtke" + "message": "Pravila za tvrtke" }, "ssoValidationFailed": { "message": "SSO provjera nije uspjela" @@ -4813,7 +4798,7 @@ "message": "Onemogući korisnicima da se pridruže drugim organizacijama." }, "singleOrgPolicyDesc": { - "message": "Restrict members from joining other organizations. This policy is required for organizations that have enabled domain verification." + "message": "Ograniči članove da se pridruže drugim organizacijama. Ovo je pravilo potrebno za organizacije koje imaju omogućenu provjeru domene." }, "singleOrgBlockCreateMessage": { "message": "Tvoja organizacija ima pravilo koje ti ne dozvoljava pridruživanje drugim organizacijama. Molimo kontaktiraj administratora svoje organizacije ili se prijavi s privatnim Bitwarden računom." @@ -4822,7 +4807,7 @@ "message": "Članovi organizacije koji nisu Vlasnici ili Administratori, a već su članovi neke druge organizacije, biti će uklonjeni iz tvoje organizacije." }, "singleOrgPolicyMemberWarning": { - "message": "Non-compliant members will be placed in revoked status until they leave all other organizations. Administrators are exempt and can restore members once compliance is met." + "message": "Nesukladni članovi bit će opozvani dok ne napuste sve druge organizacije. Administratori su izuzeti i mogu vratiti članove nakon što se ispuni usklađenost." }, "requireSso": { "message": "Zahtijevaj SSO autentifikaciju" @@ -4834,13 +4819,13 @@ "message": "Preduvjet" }, "requireSsoPolicyReq": { - "message": "Pravilo Isključive organizacije mora biti uključeno prije aktivacije ovog pravila." + "message": "Prije aktivacije ovog pravila mora se uključiti pravilo Isključive organizacije." }, "requireSsoPolicyReqError": { - "message": "Pravilo Isključive organizacije nije omogućeno." + "message": "Nije postavljeno pravilo Isključive organizacije." }, "requireSsoExemption": { - "message": "Vlasnici i Administratori organizacije nisu obuhvaćeni za provedbu ovog pravila." + "message": "Pravilo neće biti primjenjeno na Vlasnike i Administratore." }, "sendTypeFile": { "message": "Datoteka" @@ -5135,10 +5120,10 @@ "message": "Ukloni osobni trezor" }, "personalOwnershipPolicyDesc": { - "message": "Zahtijevaj korisnike spremanje stavki u trezor organizacije uklanjanjem opcije osobnog trezora." + "message": "Zahtijevaj da korisnici spremaju stavke u trezor organizacije uklanjanjem opcije osobnog trezora." }, "personalOwnershipExemption": { - "message": "Vlasnici i Administratori organizacije nisu obuhvaćeni za provedbu ovog pravila." + "message": "Vlasnici i Administratori organizacije izuzeti su od provedbe ovog pravila." }, "personalOwnershipSubmitError": { "message": "Pravila tvrtke onemogućuju spremanje stavki u osobni trezor. Promijeni vlasništvo stavke na tvrtku i odaberi dostupnu Zbirku." @@ -5147,7 +5132,7 @@ "message": "Onemogući Send" }, "disableSendPolicyDesc": { - "message": "Ne dozvoli korisnicima stvaranje ili uređivanje Sendova. Brisanje postojećeg Senda je dozvoljeno.", + "message": "Nemoj dozvoliti korisnicima stvaranje ili uređivanje Sendova. Brisanje postojećeg Senda je dozvoljeno.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disableSendExemption": { @@ -5177,7 +5162,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptionsPolicyInEffect": { - "message": "Organizacijske smjernice trenutno na snazi:" + "message": "Organizacijska pravila trenutno na snazi:" }, "sendDisableHideEmailInEffect": { "message": "Korisnicima nije dopušteno skrivati adresu e-pošte od primatelja kod stvaranja ili uređivanja Senda.", @@ -5542,7 +5527,7 @@ "message": "ovaj korisnik" }, "resetPasswordMasterPasswordPolicyInEffect": { - "message": "Jedna ili više organizacijskih smjernica zahtijeva da glavna lozinka ispunjava sljedeće uvjete:" + "message": "Jedno ili više organizacijskih pravila zahtijeva da glavna lozinka ispunjava sljedeće uvjete:" }, "resetPasswordSuccess": { "message": "Uspješno ponovno postalvjena lozinka!" @@ -5560,7 +5545,7 @@ "message": "Postojeći računi s glavnim lozinkama zahtijevat će od članova da se sami učlane prije nego što im administratori mogu oporaviti račune. Automatsko učlanjenje uključit će oporavak računa i za nove članove." }, "accountRecoverySingleOrgRequirementDesc": { - "message": "Pravilo Isključive organizacije mora biti uključeno prije aktivacije ovog pravila." + "message": "Prije aktivacije ovog pravila mora se uključiti pravilo Isključive organizacije." }, "resetPasswordPolicyAutoEnroll": { "message": "Automatsko učlanjenje" @@ -5650,10 +5635,10 @@ "message": "Isključeno, nije primjenjivo na ovu radnju" }, "nonCompliantMembersTitle": { - "message": "Non-compliant members" + "message": "Nesukladni članovi" }, "nonCompliantMembersError": { - "message": "Members that are non-compliant with the Single organization or Two-step login policy cannot be restored until they adhere to the policy requirements" + "message": "Članovi koji nisu u skladu s Isključivom organizacijom ili politikom prijave s dvostrukom autentifikacijom ne mogu se vratiti dok god se ne pridržavaju pravila" }, "fingerprint": { "message": "Otisak prsta" @@ -5914,7 +5899,7 @@ "message": "Onemogući izvoz osobnog trezora" }, "disablePersonalVaultExportDescription": { - "message": "Onemogućuje korisnike da izvezu svoj osobni trezor." + "message": "Onemogućuje korisnicima izvoz osobnog trezora." }, "vaultExportDisabled": { "message": "Izvoz trezora onemogućen" @@ -6055,16 +6040,16 @@ "message": "Konfiguracija za jedinstvenu prijavu (SSO) je spremljena." }, "sponsoredFamilies": { - "message": "Besplatan obiteljski Bitwarden" + "message": "Besplatan Bitwarden Families" }, "sponsoredFamiliesEligible": { - "message": "Ti i tvoja obitelj ispunjavate uvjete za besplatni obiteljski Bitwarden. Iskoristiti ponudu svojom e-poštom kako bi zaštitio svoje podatke čak i kada nisi na poslu." + "message": "Ti i tvoja obitelj ispunjavate uvjete za besplatni Bitwarden Families. Iskoristiti ponudu svojom e-poštom kako bi zaštitio svoje podatke čak i kada nisi na poslu." }, "sponsoredFamiliesEligibleCard": { - "message": "Iskoristi svoju ponudu za besplatni obiteljski Bitwarden već danas kako bi tvoji podaci bili sigurni čak i kada nisi na poslu." + "message": "Iskoristi svoju ponudu za besplatni Bitwarden Families paket već danas kako bi tvoji podaci bili sigurni čak i kada nisi na poslu." }, "sponsoredFamiliesInclude": { - "message": "Bitwarden obiteljski plan uključuje" + "message": "Bitwarden Families paket uključuje" }, "sponsoredFamiliesPremiumAccess": { "message": "Premium pristup do 6 korisnika" @@ -6085,19 +6070,19 @@ "message": "Odaberi organizaciju koju želiš sponzorirati" }, "familiesSponsoringOrgSelect": { - "message": "Koju ponudu besplatnog obiteljskog plana želiš iskoristiti?" + "message": "Koju ponudu besplatnog Families paketa želiš iskoristiti?" }, "sponsoredFamiliesEmail": { - "message": "Unesi svoju osobnu e-poštu za korištenje obiteljskog Bitwardena" + "message": "Unesi svoju privatnu e-poštu za korištenje Bitwarden Families" }, "sponsoredFamiliesLeaveCopy": { - "message": "Ako ukloniš ponudu ili budeš uklonjen/a iz sponzorske organizacije, tvoje će sponzorstvo Obiteljskog plana isteći na sljedeći datum obnove." + "message": "Ako ukloniš ponudu ili budeš uklonjen/a iz sponzorske organizacije, tvoje će sponzorstvo Families paketa isteći na sljedeći datum obnove." }, "acceptBitwardenFamiliesHelp": { - "message": "Prihavati ponudu postojeće organizacije ili stvori novu obiteljsku organizaciju." + "message": "Prihavati ponudu postojeće organizacije ili stvori novu Families organizaciju." }, "setupSponsoredFamiliesLoginDesc": { - "message": "Ponuđen ti je besplatni obiteljski Bitwarden plan. Za nastavak, prijavi se korisničkim računom koji je dobio ponudu." + "message": "Ponuđen ti je besplatni Bitwarden Families paket. Za nastavak, prijavi se korisničkim računom koji je dobio ponudu." }, "sponsoredFamiliesAcceptFailed": { "message": "Nije moguće prihvatiti ponudu. Ponovo pošalji e-poštu ponude sa svog poslovnog računa i pokušaj ponovno." @@ -6112,10 +6097,10 @@ } }, "sponsoredFamiliesOffer": { - "message": "Prihvati besplatan obiteljski Bitwarden" + "message": "Prihvati besplatan Bitwarden Families" }, "sponsoredFamiliesOfferRedeemed": { - "message": "Besplatna ponuda obiteljski Bitwarden je uspješno iskorištena" + "message": "Besplatna ponuda Bitwarden Families je uspješno iskorištena" }, "redeemed": { "message": "Kôd iskorišten" @@ -6142,7 +6127,7 @@ } }, "freeFamiliesPlan": { - "message": "Besplatan obiteljski plan" + "message": "Besplatni Families paket" }, "redeemNow": { "message": "Iskoristi kôd sada" @@ -6245,7 +6230,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'" }, "memberDecryptionKeyConnectorDescLink": { - "message": "zahtijevaj SSO autentifikaciju i pravila isključive organizacije", + "message": "zahtijevaj SSO autentifikaciju i pravila jedne organizacije", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'" }, "memberDecryptionKeyConnectorDescEnd": { @@ -6280,7 +6265,7 @@ "message": "Sponzorirana ponuda je istekla. Kako na kraju 7 dnevnog probnog razdoblja ne bi došlo do terećenja, moguće je izbrisati stvorenu organizaciju. Zadržavanjem organizacije preuzimate obvezu plaćanja." }, "newFamiliesOrganization": { - "message": "Nova obiteljska organizacija" + "message": "Nova Families organizacija" }, "acceptOffer": { "message": "Prihvati ponudu" @@ -6307,7 +6292,7 @@ "message": "Pogledaj token za sinkronizaciju naplate" }, "generateBillingToken": { - "message": "Generate billing token" + "message": "Generiraj token za plaćanje" }, "copyPasteBillingSync": { "message": "Kopiraj i zalijepi ovaj token u postavke sinkronizacije naplate tvoje organizacije s vlastitim poslužiteljem." @@ -6316,7 +6301,7 @@ "message": "Tvoj token za sinkronizaciju naplate može pristupiti i uređivati postavke pretplate ove organizacije." }, "manageBillingTokenSync": { - "message": "Manage Billing Token" + "message": "Upravljaj tokenom za plaćanje" }, "setUpBillingSync": { "message": "Podesi sinkronizaciju naplate" @@ -6370,7 +6355,7 @@ "message": "Vlastiti poslužitelj" }, "selfHostingEnterpriseOrganizationSectionCopy": { - "message": "Za postavljanje svoje organizacije na vlastitom poslužitelju, morat ćeš prenijeti datoteku licence. Kako bi podržali planove Free Families i napredne mogućnosti naplate za svoju samostalnu organizaciju, morat ćeš postaviti sinkronizaciju naplate." + "message": "Za postavljanje svoje organizacije na vlastitom poslužitelju, morat ćeš prenijeti datoteku licence. Kako bi podržali besplatne Families pakete i napredne mogućnosti naplate za svoju samostalnu organizaciju, morat ćeš postaviti sinkronizaciju naplate." }, "billingSyncApiKeyRotated": { "message": "Token rotiran" @@ -6382,7 +6367,7 @@ "message": "Token za sinkronizaciju naplate" }, "automaticBillingSyncDesc": { - "message": "Automatic sync unlocks Families sponsorships and allows you to sync your license without uploading a file. After making updates in the Bitwarden cloud server, select Sync License to apply changes." + "message": "Automatska sinkronizacija otključava Families sponzorstva i omogućuje sinkronizaciju licence bez učitavanja datoteke. Nakon ažuriranja Bitwarden poslužitelja u oblaku, odaberi Sinkronizacija Licence za primjenu promjena." }, "active": { "message": "Aktivno" @@ -6452,7 +6437,7 @@ "message": "Obavezan Enditiy ID nije URL." }, "offerNoLongerValid": { - "message": "This offer is no longer valid. Contact your organization administrators for more information." + "message": "Ova ponuda više ne vrijedi. Obrati se administratorima svoje organizacije za više informacija." }, "openIdOptionalCustomizations": { "message": "Izborne prilagodbe" @@ -6544,10 +6529,10 @@ "message": "Generiraj korisničko ime" }, "generateEmail": { - "message": "Generate email" + "message": "Generiraj e-poštu" }, "spinboxBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$.", + "message": "Vrijednost mora biti u rasponu $MIN$ - $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -6561,7 +6546,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "message": " Koristi $RECOMMENDED$ i više znakova za generiranje jake lozinke.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -6571,7 +6556,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": " Koristi $RECOMMENDED$ i više riječi za generiranje jake frazne lozinke.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -6686,11 +6671,11 @@ "message": "Generiraj pseudonim e-pošte s vanjskom uslugom prosljeđivanja." }, "forwarderDomainName": { - "message": "Email domain", + "message": "Domena e-pošte", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Odaberi domenu koju podržava odabrani servis", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -6815,7 +6800,7 @@ "message": "Provjera uređaja ažurirana" }, "areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX": { - "message": "Sigurno želiš uključiti provjeru uređaja? e-pošta s kontrolnim kôdom stići će na: $EMAIL$", + "message": "Sigurno želiš uključiti provjeru uređaja? e-pošta s kôdom za provjeru stići će na: $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -6835,7 +6820,7 @@ "description": "the text, 'SCIM', is an acronym and should not be translated." }, "scimIntegrationDescription": { - "message": "Automatically provision users and groups with your preferred identity provider via SCIM provisioning. Find supported integrations", + "message": "Automatski korisnicima i grupama dodijeli željenog pružatelja identiteta putem SCIM dodjeljivanja. Pronađi podržane integracije", "description": "the text, 'SCIM', is an acronym and should not be translated." }, "scimEnabledCheckboxDesc": { @@ -6957,10 +6942,10 @@ } }, "singleFieldNeedsAttention": { - "message": "1 field needs your attention." + "message": "1 polje treba tvoju pažnju." }, "multipleFieldsNeedAttention": { - "message": "$COUNT$ fields need your attention.", + "message": "$COUNT$ polja treba(ju) tvoju pažnju.", "placeholders": { "count": { "content": "$1", @@ -7817,7 +7802,7 @@ "message": "Prenesi datoteku" }, "upload": { - "message": "Upload" + "message": "Prijenos" }, "acceptedFormats": { "message": "Prihvaćeni formati:" @@ -7829,13 +7814,13 @@ "message": "ili" }, "unlockWithBiometrics": { - "message": "Unlock with biometrics" + "message": "Otključaj biometrijom" }, "unlockWithPin": { - "message": "Unlock with PIN" + "message": "Otključaj PIN-om" }, "unlockWithMasterPassword": { - "message": "Unlock with master password" + "message": "Otključaj glavnom lozinkom" }, "licenseAndBillingManagement": { "message": "Upravljanje licencama i naplatom" @@ -7847,7 +7832,7 @@ "message": "Ručni prijenos" }, "manualBillingTokenUploadDesc": { - "message": "If you do not want to opt into billing sync, manually upload your license here. This will not automatically unlock Families sponsorships." + "message": "Ako ne želiš uključiti sinkronizaciju naplate, ovdje ručno prenesi svoju licencu. Time se neće automatski otključati Families sponzorstva." }, "syncLicense": { "message": "Sinkroniziraj licencu" @@ -8116,16 +8101,16 @@ "message": "Prijava pokrenuta" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "Zapamti ovaj uređaj kako bi buduće prijave bile brže" }, "deviceApprovalRequired": { "message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "Potrebno odobrenje uređaja" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "Odaberi opciju odobrenja" }, "rememberThisDevice": { "message": "Zapamti ovaj uređaj" @@ -8149,27 +8134,27 @@ "message": "Pouzdani uređaji" }, "memberDecryptionOptionTdeDescriptionPartOne": { - "message": "Jednom autentificirani, korisnici će moći dešifrirati podatke u trezoru koristeći svoju glavnu lozinku", + "message": "Jednom autentificirani, korisnici će moći dešifrirati podatke u trezoru koristeći ključ spremljen na njihovom uređaju. ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Once authenticated, members will decrypt vault data using a key stored on their device. The single organization policy, SSO Required policy, and account recovery administration policy with automatic enrollment will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescriptionLinkOne": { - "message": "isključivo-organizacijska", + "message": "pravilo Isključive organizacije", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Once authenticated, members will decrypt vault data using a key stored on their device. The single organization policy, SSO required policy, and account recovery administration policy with automatic enrollment will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescriptionPartTwo": { - "message": "politika,", + "message": ",", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Once authenticated, members will decrypt vault data using a key stored on their device. The single organization policy, SSO required policy, and account recovery administration policy with automatic enrollment will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescriptionLinkTwo": { - "message": "obavezna SSO", + "message": "pravilo obavezne SSO autentifikacije", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Once authenticated, members will decrypt vault data using a key stored on their device. The single organization policy, SSO required policy, and account recovery administration policy with automatic enrollment will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescriptionPartThree": { - "message": "politika i ", + "message": "pravilo i ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Once authenticated, members will decrypt vault data using a key stored on their device. The single organization policy, SSO required policy, and account recovery administration policy with automatic enrollment will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescriptionLinkThree": { - "message": "politika administracije povrata računa", + "message": "pravilo administracije povrata računa", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Once authenticated, members will decrypt vault data using a key stored on their device. The single organization policy, SSO required policy, and account recovery administration policy with automatic enrollment will turn on when this option is used.'" }, "memberDecryptionOptionTdeDescriptionPartFour": { @@ -8185,7 +8170,7 @@ "description": "Used as a card title description on the set password page to explain why the user is there" }, "cardMetrics": { - "message": "out of $TOTAL$", + "message": "od $TOTAL$", "placeholders": { "total": { "content": "$1", @@ -8357,7 +8342,7 @@ "message": "Nedostaje e-pošta korisnika" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "Nije pronađena e-pošta aktivnog korisnika. Odjava u tijeku..." }, "deviceTrusted": { "message": "Uređaj pouzdan" @@ -8455,10 +8440,10 @@ "message": "Upravljaj ponašanjem zbirki za organizaciju" }, "limitCollectionCreationDesc": { - "message": "Limit collection creation to owners and admins" + "message": "Omogući kreiranje zbirki samo vlasnicima i adminima" }, "limitCollectionDeletionDesc": { - "message": "Limit collection deletion to owners and admins" + "message": "Omogući brisanje zbirki samo vlasnicima i adminima" }, "allowAdminAccessToAllCollectionItemsDesc": { "message": "Vlasnici i admini mogu upravljati svim zbirkama i stavkama" @@ -8506,7 +8491,7 @@ "message": "URL poslužitelja" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "URL vlastitog poslužitelja", "description": "Label for field requesting a self-hosted integration service URL" }, "aliasDomain": { @@ -8718,7 +8703,7 @@ "message": "Dodaj polje" }, "editField": { - "message": "Edit field" + "message": "Uredi polje" }, "items": { "message": "Stavke" @@ -9033,47 +9018,47 @@ "message": "Koristi Bitwarden Secrets Manager SDK u sljedećim programskim jezicima za izradu vlastitih aplikacija." }, "ssoDescStart": { - "message": "Configure", + "message": "Podesi", "description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure single sign-on for Bitwarden using the implementation guide for your Identity Provider." }, "ssoDescEnd": { - "message": "for Bitwarden using the implementation guide for your Identity Provider.", + "message": "za Bitwarden koristeći vodič za implementaciju za tvojeg davatelja identiteta.", "description": "This represents the end of a sentence, broken up to include links. The full sentence will be 'Configure single sign-on for Bitwarden using the implementation guide for your Identity Provider." }, "userProvisioning": { - "message": "User provisioning" + "message": "Korisničko dodijeljivanje" }, "scimIntegration": { "message": "SCIM" }, "scimIntegrationDescStart": { - "message": "Configure ", + "message": "Podesi ", "description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider" }, "scimIntegrationDescEnd": { - "message": "(System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider.", + "message": "(Sustav za upravljanje identitetom između domena) za automatsko dodjeljivanje korisnika i grupa Bitwardenu korištenjem vodiča za implementaciju za vašeg pružatelja identiteta.", "description": "This represents the end of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider" }, "bwdc": { "message": "Bitwarden Directory Connector" }, "bwdcDesc": { - "message": "Configure Bitwarden Directory Connector to automatically provision users and groups using the implementation guide for your Identity Provider." + "message": "Konfiguriraj Bitwarden Directory Connector za automatsko dodjeljivanje korisnika i grupa pomoću vodiča za implementaciju za vašeg pružatelja identiteta." }, "eventManagement": { - "message": "Event management" + "message": "Upravljanje događajima" }, "eventManagementDesc": { - "message": "Integrate Bitwarden event logs with your SIEM (system information and event management) system by using the implementation guide for your platform." + "message": "Integrirajte Bitwarden zapisnike događaja sa svojim SIEM (system information and event management) sustavom pomoću vodiča za implementaciju za vašu platformu." }, "deviceManagement": { - "message": "Device management" + "message": "Upravljanje uređajima" }, "deviceManagementDesc": { - "message": "Configure device management for Bitwarden using the implementation guide for your platform." + "message": "Konfiguriraj upravljanje uređajima za Bitwarden pomoću vodiča za implementaciju za svoju platformu." }, "integrationCardTooltip": { - "message": "Launch $INTEGRATION$ implementation guide.", + "message": "Pokreni vodič za implementaciju $INTEGRATION$.", "placeholders": { "integration": { "content": "$1", @@ -9082,7 +9067,7 @@ } }, "smIntegrationTooltip": { - "message": "Set up $INTEGRATION$.", + "message": "Postavi $INTEGRATION$.", "placeholders": { "integration": { "content": "$1", @@ -9091,7 +9076,7 @@ } }, "smSdkTooltip": { - "message": "View $SDK$ repository", + "message": "Pogledaj $SDK$ repozitorij", "placeholders": { "sdk": { "content": "$1", @@ -9100,7 +9085,7 @@ } }, "integrationCardAriaLabel": { - "message": "open $INTEGRATION$ implementation guide in a new tab.", + "message": "otvori vodič za implementaciju $INTEGRATION$ u novoj kartici.", "placeholders": { "integration": { "content": "$1", @@ -9109,7 +9094,7 @@ } }, "smSdkAriaLabel": { - "message": "view $SDK$ repository in a new tab.", + "message": "pogledaj $SDK$ repozitorij u novoj kartici.", "placeholders": { "sdk": { "content": "$1", @@ -9118,7 +9103,7 @@ } }, "smIntegrationCardAriaLabel": { - "message": "set up $INTEGRATION$ implementation guide in a new tab.", + "message": "postavi vodič za implementaciju $INTEGRATION$ u novoj kartici.", "placeholders": { "integration": { "content": "$1", @@ -9166,19 +9151,19 @@ "message": "Upravljanje naplatom s Portala pružatelja usluga" }, "continueSettingUpFreeTrial": { - "message": "Continue setting up your free trial of Bitwarden" + "message": "Nastavi s postavljanjem besplatne probe Bitwardena" }, "continueSettingUpFreeTrialPasswordManager": { - "message": "Continue setting up your free trial of Bitwarden Password Manager" + "message": "Nastavi s postavljanjem besplatne probe Bitwarden Upravitelja Lozinki" }, "continueSettingUpFreeTrialSecretsManager": { - "message": "Continue setting up your free trial of Bitwarden Secrets Manager" + "message": "Nastavi s postavljanjem besplatne probe Btwarden Secrets Managera" }, "enterTeamsOrgInfo": { "message": "Unesi podatke za organizaciju Timovi" }, "enterFamiliesOrgInfo": { - "message": "Unesi podatke za organizaciju Obitelji" + "message": "Unesi podatke za Families organizaciju" }, "enterEnterpriseOrgInfo": { "message": "Unesi podatke za organizaciju Tvrtke" @@ -9236,10 +9221,10 @@ "message": "Upravljani pružatelj usluga" }, "managedServiceProvider": { - "message": "Managed service provider" + "message": "Upravljani pružatelj usluga" }, "multiOrganizationEnterprise": { - "message": "Multi-organization enterprise" + "message": "Tvrtka s više organizacija" }, "orgSeats": { "message": "Organizacijska mjesta" @@ -9491,64 +9476,64 @@ "message": "kupljenih mjesta uklonjeno" }, "environmentVariables": { - "message": "Environment variables" + "message": "Varijable okruženja" }, "organizationId": { - "message": "Organization ID" + "message": "ID organizacije" }, "projectIds": { - "message": "Project IDs" + "message": "Projekt ID" }, "projectId": { - "message": "Project ID" + "message": "Projekt ID" }, "projectsAccessedByMachineAccount": { - "message": "The following projects can be accessed by this machine account." + "message": "Sljedećim projektima može se pristupiti putem ovog strojnog računa." }, "config": { - "message": "Config" + "message": "Konfiguracija" }, "learnMoreAboutEmergencyAccess": { - "message": "Learn more about emergency access" + "message": "Saznaj više o pristupu u nuždi" }, "learnMoreAboutMatchDetection": { - "message": "Learn more about match detection" + "message": "Saznaj više o otkrivanju podudaranja" }, "learnMoreAboutMasterPasswordReprompt": { - "message": "Learn more about master password re-prompt" + "message": "Saznaj više o ponovnom upitu za glavnu lozinku" }, "learnMoreAboutSearchingYourVault": { - "message": "Learn more about searching your vault" + "message": "Saznaj više o pretraživanju svojeg trezora" }, "learnMoreAboutYourAccountFingerprintPhrase": { - "message": "Learn about your account fingerprint phrase" + "message": "Saznaj više o jedinstvenoj frazi tvog računa" }, "impactOfRotatingYourEncryptionKey": { - "message": "Impact of rotating your encryption key" + "message": "Utjecaj rotiranja tvojeg ključa za šifriranje" }, "learnMoreAboutEncryptionAlgorithms": { - "message": "Learn more about encryption algorithms" + "message": "Saznaj više o algoritmima šifriranja" }, "learnMoreAboutKDFIterations": { - "message": "Learn more about KDF iterations" + "message": "Saznaj više o KDF iteracijama" }, "learnMoreAboutLocalization": { - "message": "Learn more about localization" + "message": "Saznaj više o prevođenju" }, "learnMoreAboutWebsiteIcons": { - "message": "Learn more about using website icons" + "message": "Saznaj više o korištenju ikona web stranica" }, "learnMoreAboutUserAccess": { - "message": "Learn more about user access" + "message": "Saznaj više o pristupu korisnika" }, "learnMoreAboutMemberRoles": { - "message": "Learn more about member roles and permissions" + "message": "Saznaj više o članskim ulogama i pravima" }, "whatIsACvvNumber": { - "message": "What is a CVV number?" + "message": "Što je CVV broj?" }, "learnMoreAboutApi": { - "message": "Learn more about Bitwarden's API" + "message": "Saznaj više o Bitwarden API" }, "fileSends": { "message": "Send datoteke" @@ -9590,7 +9575,7 @@ "message": "SSO autentifikacija" }, "familiesPlanInvLimitReachedManageBilling": { - "message": "Organizacije Obitelji mogu imati ovoliko članova: $SEATCOUNT$. Nadogradi na plaćeni plan za povećanje broja članova.", + "message": "Families organizacije mogu imati ovoliko članova: $SEATCOUNT$. Nadogradi na plaćeni plan za povećanje broja članova.", "placeholders": { "seatcount": { "content": "$1", @@ -9599,7 +9584,7 @@ } }, "familiesPlanInvLimitReachedNoManageBilling": { - "message": "Organizacije Obitelji mogu imati ovoliko članova: $SEATCOUNT$. Kontaktiraj vlasnika organizacije za nadogradnju.", + "message": "Families organizacije mogu imati ovoliko članova: $SEATCOUNT$. Kontaktiraj vlasnika organizacije za nadogradnju.", "placeholders": { "seatcount": { "content": "$1", @@ -9644,16 +9629,16 @@ "message": "GB dodatnog prostora" }, "sshKeyAlgorithm": { - "message": "Key algorithm" + "message": "Algoritam ključa" }, "sshKeyFingerprint": { - "message": "Fingerprint" + "message": "Otisak prsta" }, "sshKeyPrivateKey": { - "message": "Private key" + "message": "Privatni ključ" }, "sshKeyPublicKey": { - "message": "Public key" + "message": "Javni ključ" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -9710,7 +9695,7 @@ "message": "Trenutno" }, "secretsManagerSubscriptionInfo": { - "message": "Your Secrets Manager subscription will upgrade based on the plan selected" + "message": "Tvoja pretplata na Secrets Manager će se nadograditi na temelju odabranog plana" }, "bitwardenPasswordManager": { "message": "Bitwarden upravitelj lozinki" @@ -9735,22 +9720,22 @@ "message": "Uredi pristup" }, "textHelpText": { - "message": "Use text fields for data like security questions" + "message": "Koristi tekstualna polja za podatke poput sigurnosnih pitanja" }, "hiddenHelpText": { - "message": "Use hidden fields for sensitive data like a password" + "message": "Koristi skrivena polja za osjetljive podatke poput lozinke" }, "checkBoxHelpText": { - "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email" + "message": "Koristi potvrdne okvire ako ih želiš auto-ispuniti u obrascu, npr. zapamti adresu e-pošte" }, "linkedHelpText": { - "message": "Use a linked field when you are experiencing autofill issues for a specific website." + "message": "Koristi povezano polje kada imaš problema s auto-ispunom za određenu web stranicu." }, "linkedLabelHelpText": { - "message": "Enter the the field's html id, name, aria-label, or placeholder." + "message": "Unesi html id polja, naziv, aria-label ili rezervirano mjesto." }, "uppercaseDescription": { - "message": "Include uppercase characters", + "message": "Uključi velika slova", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -9758,7 +9743,7 @@ "description": "Label for the password generator uppercase character checkbox" }, "lowercaseDescription": { - "message": "Include lowercase characters", + "message": "Uključi mala slova", "description": "Full description for the password generator lowercase character checkbox" }, "lowercaseLabel": { @@ -9766,7 +9751,7 @@ "description": "Label for the password generator lowercase character checkbox" }, "numbersDescription": { - "message": "Include numbers", + "message": "Uključi brojeve", "description": "Full description for the password generator numbers checkbox" }, "numbersLabel": { @@ -9774,40 +9759,40 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Include special characters", + "message": "Uključi posebne znakove", "description": "Full description for the password generator special characters checkbox" }, "specialCharactersLabel": { - "message": "!@#$%^&*", + "message": "! @ # $ % ^ & *", "description": "Label for the password generator special characters checkbox" }, "addAttachment": { - "message": "Add attachment" + "message": "Dodaj privitak" }, "maxFileSizeSansPunctuation": { - "message": "Maximum file size is 500 MB" + "message": "Najveća veličina datoteke je 500 MB" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Sigurno želiš trajno izbrisati ovaj privitak?" }, "manageSubscriptionFromThe": { - "message": "Manage subscription from the", + "message": "Upravljaj pretplatom iz datoteke", "description": "This represents the beginning of a sentence. The full sentence will be 'Manage subscription from the Provider Portal', but 'Provider Portal' will be a link and thus cannot be included in the translation file." }, "toHostBitwardenOnYourOwnServer": { - "message": "To host Bitwarden on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up automatic sync in your self-hosted organization." + "message": "Za smještanje Bitwardena na vlastiti poslužitelj, morat ćeš prenijeti datoteku licence. Kako bi podržali besplatne Families pakete i napredne mogućnosti naplate za svoj poslužitelj, morat ćeš postaviti automatsku sinkronizaciju." }, "selfHostingTitleProper": { - "message": "Self-Hosting" + "message": "Vlastiti poslužitelj" }, "claim-domain-single-org-warning": { - "message": "Claiming a domain will turn on the single organization policy." + "message": "Polaganje prava na domenu uključit će pravilo Isključive organizacije." }, "single-org-revoked-user-warning": { - "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations." + "message": "Nesukladni članovi bit će opozvani. Administratori mogu vratiti članove nakon što napuste sve druge organizacije." }, "deleteOrganizationUser": { - "message": "Delete $NAME$", + "message": "Izbriši $NAME$", "placeholders": { "name": { "content": "$1", @@ -9817,7 +9802,7 @@ } }, "deleteOrganizationUserWarningDesc": { - "message": "This will permanently delete all items owned by $NAME$. Collection items are not impacted.", + "message": "Ovo će trajno obrisati sve stavke čiji vlasnik je $NAME$. Ne odnosi se na zbirke.", "description": "Warning description for the delete organization user dialog", "placeholders": { "name": { @@ -9827,11 +9812,11 @@ } }, "deleteManyOrganizationUsersWarningDesc": { - "message": "This will permanently delete all items owned by the following members. Collection items are not impacted.", + "message": "Ovo će trajno obrisati sve stavke sljedećih vlasnika. Ne odnosi se na zbirke.", "description": "Warning description for the bulk delete organization users dialog" }, "organizationUserDeleted": { - "message": "Deleted $NAME$", + "message": "$NAME$ izbrisano", "placeholders": { "name": { "content": "$1", @@ -9840,10 +9825,10 @@ } }, "organizationUserDeletedDesc": { - "message": "The user was removed from the organization and all associated user data has been deleted." + "message": "Korisnik je uklonjen iz organizacije i svi povezani korisnički podaci su izbrisani." }, "deletedUserId": { - "message": "Deleted user $ID$ - an owner / admin deleted the user account", + "message": "Izbrisan korisnik $ID$ - vlasnik/admin je izbrisao korisnički račun", "placeholders": { "id": { "content": "$1", @@ -9852,7 +9837,7 @@ } }, "userLeftOrganization": { - "message": "User $ID$ left organization", + "message": "Korisnik $ID$ je napustio organizaciju", "placeholders": { "id": { "content": "$1", @@ -9861,7 +9846,7 @@ } }, "suspendedOrganizationTitle": { - "message": "The $ORGANIZATION$ is suspended", + "message": "$ORGANIZATION$ je suspendirana", "placeholders": { "organization": { "content": "$1", @@ -9870,58 +9855,94 @@ } }, "suspendedUserOrgMessage": { - "message": "Contact your organization owner for assistance." + "message": "Za pomoć se obrati vlasniku organizacije." }, "suspendedOwnerOrgMessage": { - "message": "To regain access to your organization, add a payment method." + "message": "Za ponovni pristup svojoj organizaciji, dodaj način plaćanja." }, "deleteMembers": { - "message": "Delete members" + "message": "Obriši članove" }, "noSelectedMembersApplicable": { - "message": "This action is not applicable to any of the selected members." + "message": "Ova radnja nije primjenjiva niti na jednog odabranog korisnika." }, "deletedSuccessfully": { - "message": "Deleted successfully" + "message": "Uspješno izbrisano" }, "freeFamiliesSponsorship": { - "message": "Remove Free Bitwarden Families sponsorship" + "message": "Ukloni besplatno sponzorstvo Bitwarden Families" }, "freeFamiliesSponsorshipPolicyDesc": { - "message": "Do not allow members to redeem a Families plan through this organization." + "message": "Nemoj dopustiti članovima da koriste Families paket putem ove organizacije." }, "verifyBankAccountWithStatementDescriptorWarning": { - "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make a micro-deposit within the next 1-2 business days. Enter the statement descriptor code from this deposit on the organization's billing page to verify the bank account. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + "message": "Plaćanje putem bankovnog računa dostupno je samo kupcima u SAD. Trebat ćeš potvrditi svoj bankovni račun. Unutar 1 - 2 radna dana izvršit ćemo mikro-uplatu. Unesi šifru u opisu ove uplate na stranici za naplatu organizacije za potvrdu bankovni račun. Nepotvrda bankovnog računa rezultirat će propuštenim plaćanjem i obustavom pretplate." }, "verifyBankAccountWithStatementDescriptorInstructions": { - "message": "We have made a micro-deposit to your bank account (this may take 1-2 business days). Enter the six-digit code starting with 'SM' found on the deposit description. Failure to verify the bank account will result in a missed payment and your subscription being suspended." + "message": "Izvršili smo mikro-uplatu na bankovni račun (ovo može potrajati 1 - 2 radna dana). Unesi šesteroznamenkasti kôd koji počinje sa 'SM' i nalazi se u opisu uplate. Nepotvrda bankovnog računa rezultirat će propuštenim plaćanjem i obustavom pretplate." }, "descriptorCode": { - "message": "Descriptor code" + "message": "Šifra uplate" + }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" }, "removeMembers": { - "message": "Remove members" + "message": "Ukloni članove" }, "claimedDomains": { - "message": "Claimed domains" + "message": "Potvrđene domene" }, "claimDomain": { - "message": "Claim domain" + "message": "Potvrdi domenu" }, "reclaimDomain": { - "message": "Reclaim domain" + "message": "Ponovno potvrdi domenu" }, "claimDomainNameInputHint": { - "message": "Example: mydomain.com. Subdomains require separate entries to be claimed." + "message": "Primjer: mydomain.com. Poddomene je potrebno zasebno potvrditi." }, "automaticClaimedDomains": { - "message": "Automatic Claimed Domains" + "message": "Automatski potvrđene domene" }, "automaticDomainClaimProcess": { - "message": "Bitwarden will attempt to claim the domain 3 times during the first 72 hours. If the domain can’t be claimed, check the DNS record in your host and manually claim. The domain will be removed from your organization in 7 days if it is not claimed." + "message": "Bitwarden će pokušati potvrditi domenu 3 puta tijekom prva 72 sata. Ako se domena ne može potvrditi, provjeri DNS zapis na svom poslužitelju i ručno potvrdi. Domena će, ako se ne potvrdi, biti uklonjena iz vaše organizacije nakon 7 dana." }, "domainNotClaimed": { - "message": "$DOMAIN$ not claimed. Check your DNS records.", + "message": "$DOMAIN$ nije potvrđena. Provjeri DNS zapise.", "placeholders": { "DOMAIN": { "content": "$1", @@ -9930,19 +9951,19 @@ } }, "domainStatusClaimed": { - "message": "Claimed" + "message": "Potvrđena" }, "domainStatusUnderVerification": { - "message": "Under verification" + "message": "Provjera u tijeku" }, "claimedDomainsDesc": { - "message": "Claim a domain to own all member accounts whose email address matches the domain. Members will be able to skip the SSO identifier when logging in. Administrators will also be able to delete member accounts." + "message": "Potvrdi domenu za vlasništvo nad svim računima članova čija adresa e-pošte odgovara domeni. Članovi će moći preskočiti SSO identifikator prilikom prijave. Administratori će također moći brisati članske račune." }, "invalidDomainNameClaimMessage": { - "message": "Input is not a valid format. Format: mydomain.com. Subdomains require separate entries to be claimed." + "message": "Unos nije važeći. Format: mojadomena.hr Poddomene zahtijevaju zasebne unose za provjeru." }, "domainClaimedEvent": { - "message": "$DOMAIN$ claimed", + "message": "$DOMAIN$ potvrđena", "placeholders": { "DOMAIN": { "content": "$1", @@ -9951,7 +9972,7 @@ } }, "domainNotClaimedEvent": { - "message": "$DOMAIN$ not claimed", + "message": "$DOMAIN$ nije potvrđena", "placeholders": { "DOMAIN": { "content": "$1", @@ -9960,7 +9981,7 @@ } }, "updatedRevokeSponsorshipConfirmationForSentSponsorship": { - "message": "If you remove $EMAIL$, the sponsorship for this Family plan cannot be redeemed. Are you sure you want to continue?", + "message": "Ako ukloniš $EMAIL$, sponzorstvo za ovaj Families paket se neće moći iskoristiti. Sigurno želiš nastaviti?", "placeholders": { "email": { "content": "$1", @@ -9969,7 +9990,7 @@ } }, "updatedRevokeSponsorshipConfirmationForAcceptedSponsorship": { - "message": "If you remove $EMAIL$, the sponsorship for this Family plan will end and the saved payment method will be charged $40 + applicable tax on $DATE$. You will not be able to redeem a new sponsorship until $DATE$. Are you sure you want to continue?", + "message": "Ako ukloniš $EMAIL$, sponzorstvo za ovaj Families paket če završiti, a na spremljeni način plaćanja će ovaj dartuM: $DATE$ biti naplaćeno 40 USD + primjenjivi porez. Nećeš moći iskoristiti novo sponzorstvo do $DATE$. Sigurno želiš nastaviti?", "placeholders": { "email": { "content": "$1", @@ -9982,6 +10003,9 @@ } }, "domainClaimed": { - "message": "Domain claimed" + "message": "Domena potvrđena" + }, + "organizationNameMaxLength": { + "message": "Naziv organizacije ne može biti duži od 50 znakova." } } diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 71f96aabb5..682f080fb8 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Tagok visszaállítása" }, - "revokeMembersWarning": { - "message": "Az igényelt és nem igényelt fiókokkal rendelkező tagok visszavonása esetén eltérő eredményeket érnek el:" - }, - "claimedAccountRevoke": { - "message": "Igényelt fiók: A Bitwarden fiókhoz hozzáférés visszavonása" - }, - "unclaimedAccountRevoke": { - "message": "Nem igényelt fiók: A szervezeti adatokhoz hozzáférés visszavonása" - }, - "claimedAccount": { - "message": "Igényelt fiók" - }, - "unclaimedAccount": { - "message": "Nem-igényelt fiók" - }, - "restoreMembersInstructions": { - "message": "Egy tag fiókjának visszaállításához lépjünk a Visszavont fülre. A folyamat néhány másodpercig tarthat és nem lehet megszakítani vagy törölni." - }, "cannotRestoreAccessError": { "message": "Nem lehet visszaállítani a szervezeti hozzáférést." }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Böngésző frissítése" }, + "generatingRiskInsights": { + "message": "A kockázati betekintések generálása..." + }, "updateBrowserDesc": { "message": "Nem támogatott böngészőt használunk. Előfordulhat, hogy a webes széf nem működik megfelelően." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Leíró kód" }, + "importantNotice": { + "message": "Fontos megjegyzés" + }, + "setupTwoStepLogin": { + "message": "Kétlépéses bejelentkezés szükséges" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "A Bitwarden 2025 februárjától kódot küld a fiókhoz tartozó email-címre, amellyel ellenőrizhetők az új eszközökről történő bejelentkezések." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "A fiók védelmének alternatív módjaként beállíthatunk kétlépcsős bejelentkezést vagy módosíthatjuk az email címet egy elérhetőre." + }, + "remindMeLater": { + "message": "Emlékeztetés később" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Megbízható a hozzáférés $EMAIL$ email címhez?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nem, nem érem el" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Igen, megbízhatóan hozzáférek az emailjeimhez" + }, + "turnOnTwoStepLogin": { + "message": "Kétlépéses bejelentkezés bekapcsolása" + }, + "changeAcctEmail": { + "message": "Fiók email cím megváltoztatása" + }, "removeMembers": { "message": "Tagok eltávolítása" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "A tartomány követelésre került." + }, + "organizationNameMaxLength": { + "message": "A szervezet neve nem haladhatja meg az 50 karaktert." } } diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index ac11315828..877a6b2126 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Perbarui Browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Anda menggunakan browser web yang tidak didukung. Kubah web mungkin tidak berfungsi dengan baik." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index 174d29a6f1..36bcc07a02 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Aggiorna browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Stai utilizzando un browser non supportato. La cassaforte web potrebbe non funzionare correttamente." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 050bb4ffb2..343818e3ad 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "ブラウザを更新" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "サポートされていないブラウザを使用しています。ウェブ保管庫が正しく動作しないかもしれません。" }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "メンバーを削除" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index 14be03e0bd..2a61cd8976 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 88355860d4..c5a77826c9 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index 5b0f73c44f..ec7241be79 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "ಬ್ರೌಸರ್ ನವೀಕರಿಸಿ" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "ನೀವು ಬೆಂಬಲಿಸದ ವೆಬ್ ಬ್ರೌಸರ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ. ವೆಬ್ ವಾಲ್ಟ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೆ ಇರಬಹುದು." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 5f3f2692fc..59c0e15ee3 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "브라우저 업데이트" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "지원하지 않는 웹 브라우저를 사용하고 있습니다. 웹 보관함 기능이 제대로 동작하지 않을 수 있습니다." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index f8425f78b0..f60e569157 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Atjaunot dalībniekus" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "Lai atjaunotu dalībnieka kontu, jādodas uz cilni \"Atsaukts\". Darbība var aizņemt dažas sekundes, un to nevar pārtraukt vai atcelt." - }, "cannotRestoreAccessError": { "message": "Nevar atjaunot apvienības piekļuvi" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Atjaunināt pārlūku" }, + "generatingRiskInsights": { + "message": "Tiek veidots ieskats par riskiem..." + }, "updateBrowserDesc": { "message": "Tiek izmantots neatbalstīts tīmekļa pārlūks. Tīmekļa glabātava var nedarboties pareizi." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Apraksta kods" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Noņemt dalībniekus" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domēns pieteikts" + }, + "organizationNameMaxLength": { + "message": "Apvienības nosaukums nevar pārsniegt 50 rakstzīmes." } } diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index d970aa004e..bca6a172b6 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "ബ്രൌസർ അപ്‌ഡേറ്റുചെയ്യുക" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 88355860d4..c5a77826c9 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 88355860d4..c5a77826c9 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index ea624075f3..caf2242825 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Oppdater nettleseren" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Du bruker en ustøttet nettleser. Netthvelvet vil kanskje ikke fungere ordentlig." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index 3ba281d33f..345b894546 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index 0dc70affb8..4e6e29704b 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Leden herstellen" }, - "revokeMembersWarning": { - "message": "Leden met geclaimde en niet-geclailmde accounts krijgen verschillende resultaten bij intrekken:" - }, - "claimedAccountRevoke": { - "message": "Geclaimd account: Toegang tot Bitwarden-account intrekken" - }, - "unclaimedAccountRevoke": { - "message": "Niet-geclaild account: Toegang tot organisatiegegevens intrekken" - }, - "claimedAccount": { - "message": "Geclaimd account" - }, - "unclaimedAccount": { - "message": "Niet-geclaimd account" - }, - "restoreMembersInstructions": { - "message": "Om het account van een lid te herstellen, ga je naar het tabblad Ingetrokken. Het proces duurt een paar seconden om te voltooien en kan niet worden onderbroken of geannuleerd." - }, "cannotRestoreAccessError": { "message": "Kan organisatietoegang niet herstellen" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Webbrowser bijwerken" }, + "generatingRiskInsights": { + "message": "Je risico-inzichten genereren..." + }, "updateBrowserDesc": { "message": "Je maakt gebruik van webbrowser die we niet ondersteunen. De webkluis werkt mogelijk niet goed." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Code bankafschrift" }, + "importantNotice": { + "message": "Belangrijke mededeling" + }, + "setupTwoStepLogin": { + "message": "Tweestapsaanmelding instellen" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Vanaf februari 2025 stuurt Bitwarden een code naar het e-mailadres van je account om inloggen op nieuwe apparaten te verifiëren." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Je kunt tweestapsaanmelding instellen als een alternatieve manier om je account te beschermen of je e-mailadres te veranderen naar een waar je toegang toe hebt." + }, + "remindMeLater": { + "message": "Herinner me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Heb je betrouwbare toegang tot je e-mail, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Nee, dat heb ik niet" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Ja, ik heb betrouwbare toegang tot mijn e-mail" + }, + "turnOnTwoStepLogin": { + "message": "Tweestapsaanmelding inschakelen" + }, + "changeAcctEmail": { + "message": "E-mailadres van het account veranderen" + }, "removeMembers": { "message": "Leden verwijderen" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domein geverifieerd" + }, + "organizationNameMaxLength": { + "message": "Organisatienaam mag niet langer zijn dan 50 tekens." } } diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 343b49a791..7951e875fe 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 88355860d4..c5a77826c9 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index c35fc6e34a..67d63ce9b3 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Aktualizuj przeglądarkę" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Używasz nieobsługiwanej przeglądarki. Sejf internetowy może działać niewłaściwie." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index 3883fbfe17..5461370c66 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restaurar membro" }, - "revokeMembersWarning": { - "message": "Membros com contas reivindicadas e não reivindicadas terão resultados diferentes quando forem removidos:" - }, - "claimedAccountRevoke": { - "message": "Conta criada: Revogar acesso à conta Bitwarden" - }, - "unclaimedAccountRevoke": { - "message": "Conta não reivindicada: Revogar acesso aos dados da organização" - }, - "claimedAccount": { - "message": "Conta reivindicada" - }, - "unclaimedAccount": { - "message": "Conta não reivindicada" - }, - "restoreMembersInstructions": { - "message": "Para restaurar a conta de um membro, vá para aba Revogado. O processo pode levar alguns segundos para ser concluído e não pode ser interrompido ou cancelado." - }, "cannotRestoreAccessError": { "message": "Não é possível restaurar acesso à organização" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Atualizar Navegador" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Você está usando um navegador da Web não suportado. O cofre web pode não funcionar corretamente." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Código do descritor" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remover membro?" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index a83ff3546e..78206bc56a 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restaurar membros" }, - "revokeMembersWarning": { - "message": "Os membros com contas reclamadas e não reclamadas terão resultados diferentes quando revogadas:" - }, - "claimedAccountRevoke": { - "message": "Conta reclamada: Revogar o acesso à conta do Bitwarden" - }, - "unclaimedAccountRevoke": { - "message": "Conta não reclamada: Revogar o acesso aos dados da organização" - }, - "claimedAccount": { - "message": "Conta reclamada" - }, - "unclaimedAccount": { - "message": "Conta não reclamada" - }, - "restoreMembersInstructions": { - "message": "Para restaurar a conta de um membro, aceda ao separador Revogado. O processo pode demorar alguns segundos a ser concluído e não pode ser interrompido ou cancelado." - }, "cannotRestoreAccessError": { "message": "Não é possível restaurar o acesso à organização" }, @@ -964,7 +946,7 @@ "message": "Nível de acesso" }, "accessing": { - "message": "A aceder" + "message": "A aceder a" }, "loggedOut": { "message": "Sessão terminada" @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Atualizar navegador" }, + "generatingRiskInsights": { + "message": "A gerar as suas perceções de riscos..." + }, "updateBrowserDesc": { "message": "Está a utilizar um navegador web não suportado. O cofre web pode não funcionar corretamente." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Código descritor" }, + "importantNotice": { + "message": "Aviso importante" + }, + "setupTwoStepLogin": { + "message": "Definir a verificação de dois passos" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "O Bitwarden enviará um código para o e-mail da sua conta para verificar as credenciais de novos dispositivos a partir de fevereiro de 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Pode configurar a verificação de dois passos como forma alternativa de proteger a sua conta ou alterar o seu e-mail para um a que possa aceder." + }, + "remindMeLater": { + "message": "Lembrar-me mais tarde" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Tem um acesso fiável ao seu e-mail, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Não, não tenho" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Sim, consigo aceder de forma fiável ao meu e-mail" + }, + "turnOnTwoStepLogin": { + "message": "Ativar a verificação de dois passos" + }, + "changeAcctEmail": { + "message": "Alterar o e-mail da conta" + }, "removeMembers": { "message": "Remover membros" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domínio reivindicado" + }, + "organizationNameMaxLength": { + "message": "O nome da organização não pode exceder 50 caracteres." } } diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 9e646ae0f8..5fdb6ab5e6 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Actualizare browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Utilizați un browser nesuportat. Seiful web ar putea să nu funcționeze corect." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index c572a35876..fd309722f4 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -35,26 +35,8 @@ "restoreMembers": { "message": "Восстановление пользователей" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { - "message": "Cannot restore organization access" + "message": "Невозможно восстановить доступ к организации" }, "allApplicationsWithCount": { "message": "Все приложения ($COUNT$)", @@ -1596,7 +1578,7 @@ "message": "Ограничено аккаунтом" }, "passwordProtected": { - "message": "Пароль защищен" + "message": "Защищено паролем" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "\"Пароль к файлу\" и \"Подтверждение пароля к файлу\" не совпадают." @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Обновить браузер" }, + "generatingRiskInsights": { + "message": "Генерирование информации о рисках..." + }, "updateBrowserDesc": { "message": "Вы используете неподдерживаемый браузер. Веб-хранилище может работать некорректно." }, @@ -5650,10 +5635,10 @@ "message": "Исключено, не применимо для данного действия." }, "nonCompliantMembersTitle": { - "message": "Non-compliant members" + "message": "Участники, не отвечающие требованиям" }, "nonCompliantMembersError": { - "message": "Members that are non-compliant with the Single organization or Two-step login policy cannot be restored until they adhere to the policy requirements" + "message": "Участники, не соответствующие требованиям политики единой организации или двухэтапной аутентификации, не могут быть восстановлены, пока они не будут соответствовать требованиям политики" }, "fingerprint": { "message": "Отпечаток" @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Код дескриптора" }, + "importantNotice": { + "message": "Важное уведомление" + }, + "setupTwoStepLogin": { + "message": "Настроить двухэтапную аутентификацию" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Начиная с февраля 2025 года Bitwarden будет отправлять код на электронную почту вашего аккаунта для подтверждения авторизации с новых устройств." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "В качестве альтернативного способа защиты учетной записи вы можете настроить двухэтапную аутентификацию или сменить электронную почту на ту, к которой вы можете получить доступ." + }, + "remindMeLater": { + "message": "Напомнить позже" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Есть ли у вас надежный доступ к электронной почте $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Нет, не знаю" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Да, я имею надежный доступ к своей электронной почте" + }, + "turnOnTwoStepLogin": { + "message": "Включить двухэтапную аутентификацию" + }, + "changeAcctEmail": { + "message": "Изменить email аккаунта" + }, "removeMembers": { "message": "Удалить участников" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Домен зарегистрирован" + }, + "organizationNameMaxLength": { + "message": "Название организации не может превышать 50 символов." } } diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index f60e366e79..3dfac52754 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index 16a36a194f..8533d50b30 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Obnoviť členov" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Nie je možné obnoviť prístup do organizácie" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Aktualizovať prehliadač" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Používate nepodporovaný prehliadač. Webový trezor nemusí úplne fungovať." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Kód výpisu" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Odstrániť členov" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Doména privlastnená" + }, + "organizationNameMaxLength": { + "message": "Meno organizácie nemôže mať viac ako 50 znakov." } } diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index c155ab58ab..55aceaecf2 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index ca1bae3c35..17e82485f8 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Врати чланове" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Није могуће повратити приступ организацији" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Ажурирајте Претраживач" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Користите неподржани веб прегледач. Веб сеф можда неће правилно функционисати." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index eeaf87eef3..6dd5fed673 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index ff7f2f3a2d..b4d2fb7aa8 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Uppdatera webbläsare" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "Du använder en webbläsare som inte stöds. Webbvalvet kanske inte fungerar som det ska." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 88355860d4..c5a77826c9 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index 3a8bb79b20..5d2da786d8 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index c822b90ef7..fb821407a1 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Tarayıcıyı güncelle" }, + "generatingRiskInsights": { + "message": "Risk içgörüleriniz oluşturuluyor..." + }, "updateBrowserDesc": { "message": "Desteklenmeyen bir web tarayıcısı kullanıyorsunuz. Web kasası düzgün çalışmayabilir." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Önemli uyarı" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Daha sonra hatırlat" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index 6bd151f8a4..89d538e1a2 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Відновити учасників" }, - "revokeMembersWarning": { - "message": "Учасники із заявленими та не заявленими обліковими записами матимуть різні результати після відкликання:" - }, - "claimedAccountRevoke": { - "message": "Заявлений обліковий запис: відкликати доступ до облікового запису Bitwarden" - }, - "unclaimedAccountRevoke": { - "message": "Не заявлений обліковий запис: відкликати доступ до даних організації" - }, - "claimedAccount": { - "message": "Заявлений обліковий запис" - }, - "unclaimedAccount": { - "message": "Не заявлений обліковий запис" - }, - "restoreMembersInstructions": { - "message": "Щоб відновити обліковий запис учасника, перейдіть на вкладку \"Відкликані\". Процес може тривати декілька секунд, і його не можна перервати чи скасувати." - }, "cannotRestoreAccessError": { "message": "Не вдається відновити доступ до організації" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Оновити браузер" }, + "generatingRiskInsights": { + "message": "Генерується інформація щодо ризиків..." + }, "updateBrowserDesc": { "message": "Ви використовуєте непідтримуваний браузер. Вебсховище може працювати неправильно." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Код дескриптора" }, + "importantNotice": { + "message": "Важлива інформація" + }, + "setupTwoStepLogin": { + "message": "Налаштувати двоетапну перевірку" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden надсилатиме код підтвердження на електронну пошту вашого облікового запису під час входу з нових пристроїв, починаючи з лютого 2025 року." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "Ви можете налаштувати двоетапну перевірку як альтернативний спосіб захисту свого облікового запису, або змінити електронну пошту на таку, до якої ви маєте доступ." + }, + "remindMeLater": { + "message": "Нагадати пізніше" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Ви маєте постійний доступ до своєї електронної пошти $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "Ні, не маю" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Так, я маю постійний доступ до своєї електронної пошти" + }, + "turnOnTwoStepLogin": { + "message": "Увімкнути двоетапну перевірку" + }, + "changeAcctEmail": { + "message": "Змінити адресу е-пошти" + }, "removeMembers": { "message": "Вилучити учасників" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Домен заявлено" + }, + "organizationNameMaxLength": { + "message": "Назва організації не може перевищувати 50 символів." } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 1f2e9ff422..c8300de6fb 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "Members with claimed and unclaimed accounts will have different results when revoked:" - }, - "claimedAccountRevoke": { - "message": "Claimed account: Revoke access to Bitwarden account" - }, - "unclaimedAccountRevoke": { - "message": "Unclaimed account: Revoke access to organization data" - }, - "claimedAccount": { - "message": "Claimed account" - }, - "unclaimedAccount": { - "message": "Unclaimed account" - }, - "restoreMembersInstructions": { - "message": "To restore a member's account, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." - }, "cannotRestoreAccessError": { "message": "Cannot restore organization access" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "Update browser" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index e9d8ff53e8..0dad065f57 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "恢复成员" }, - "revokeMembersWarning": { - "message": "已声明和未声明账户的成员在被撤销时将有不同的结果:" - }, - "claimedAccountRevoke": { - "message": "已声明账户:撤销对 Bitwarden 账户的访问权限" - }, - "unclaimedAccountRevoke": { - "message": "未声明账户:撤销对组织数据的访问权限" - }, - "claimedAccount": { - "message": "已声明账户" - }, - "unclaimedAccount": { - "message": "未声明账户" - }, - "restoreMembersInstructions": { - "message": "要恢复成员账户,请转到「已撤销」标签页。该过程可能需要几秒钟才能完成,并且无法中断或取消。" - }, "cannotRestoreAccessError": { "message": "无法恢复组织访问权限" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "更新浏览器" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "您使用的是不受支持的 Web 浏览器。网页密码库可能无法正常运行。" }, @@ -9741,7 +9726,7 @@ "message": "对于如密码之类的敏感数据,请使用隐藏型字段" }, "checkBoxHelpText": { - "message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框" + "message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框型" }, "linkedHelpText": { "message": "当您处理特定网站的自动填充问题时,请使用链接型字段。" @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "描述符代码" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "移除成员" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "域名已声明" + }, + "organizationNameMaxLength": { + "message": "组织名称不能超过 50 个字符。" } } diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index cf3fa97043..bf15ea2a20 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -35,24 +35,6 @@ "restoreMembers": { "message": "Restore members" }, - "revokeMembersWarning": { - "message": "已被索取及未被索取帳號之成員將會在帳號註銷後有不同結果:" - }, - "claimedAccountRevoke": { - "message": "已被索取之帳號:註銷 Bitwarden 帳號存取權" - }, - "unclaimedAccountRevoke": { - "message": "未被索取之帳號:註銷組織資料存取權" - }, - "claimedAccount": { - "message": "已被索取之帳號" - }, - "unclaimedAccount": { - "message": "未被索取之帳號" - }, - "restoreMembersInstructions": { - "message": "去註銷分頁以還原成員之帳號。這個過程可能會花上幾秒鐘且無法被中斷或取消。" - }, "cannotRestoreAccessError": { "message": "無法還原組織存取" }, @@ -3900,6 +3882,9 @@ "updateBrowser": { "message": "更新瀏覽器" }, + "generatingRiskInsights": { + "message": "Generating your risk insights..." + }, "updateBrowserDesc": { "message": "未支援您使用的瀏覽器。網頁版密碼庫可能無法正常運作。" }, @@ -9899,6 +9884,42 @@ "descriptorCode": { "message": "Descriptor code" }, + "importantNotice": { + "message": "Important notice" + }, + "setupTwoStepLogin": { + "message": "Set up two-step login" + }, + "newDeviceVerificationNoticeContentPage1": { + "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + }, + "newDeviceVerificationNoticeContentPage2": { + "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + }, + "remindMeLater": { + "message": "Remind me later" + }, + "newDeviceVerificationNoticePageOneFormContent": { + "message": "Do you have reliable access to your email, $EMAIL$?", + "placeholders": { + "email": { + "content": "$1", + "example": "your_name@email.com" + } + } + }, + "newDeviceVerificationNoticePageOneEmailAccessNo": { + "message": "No, I do not" + }, + "newDeviceVerificationNoticePageOneEmailAccessYes": { + "message": "Yes, I can reliably access my email" + }, + "turnOnTwoStepLogin": { + "message": "Turn on two-step login" + }, + "changeAcctEmail": { + "message": "Change account email" + }, "removeMembers": { "message": "Remove members" }, @@ -9983,5 +10004,8 @@ }, "domainClaimed": { "message": "Domain claimed" + }, + "organizationNameMaxLength": { + "message": "Organization name cannot exceed 50 characters." } } From 8caadacfbc79ac34fd14242c216d1a723c261890 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 20 Dec 2024 13:54:52 +0100 Subject: [PATCH 06/18] [PM-16217] Remove wasm timeout (#12476) Remove the WASM timeout logic and supported$. --- .../browser/src/background/main.background.ts | 18 ------ .../sdk/browser-sdk-client-factory.ts | 31 +--------- apps/browser/src/popup/app.component.ts | 30 +--------- .../service-container/service-container.ts | 15 ----- apps/desktop/src/app/app.component.ts | 37 +----------- apps/web/src/app/app.component.ts | 30 +--------- .../src/services/jslib-services.module.ts | 1 - .../platform/abstractions/sdk/sdk.service.ts | 7 --- .../services/sdk/default-sdk.service.spec.ts | 4 -- .../services/sdk/default-sdk.service.ts | 56 +------------------ 10 files changed, 7 insertions(+), 222 deletions(-) diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 616e18601a..aaee59ee3f 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -739,7 +739,6 @@ export default class MainBackground { this.accountService, this.kdfConfigService, this.keyService, - this.apiService, ); this.passwordStrengthService = new PasswordStrengthService(); @@ -1313,23 +1312,6 @@ export default class MainBackground { await this.initOverlayAndTabsBackground(); - if (flagEnabled("sdk")) { - // Warn if the SDK for some reason can't be initialized - let supported = false; - let error: Error; - try { - supported = await firstValueFrom(this.sdkService.supported$); - } catch (e) { - error = e; - } - - if (!supported) { - this.sdkService - .failedToInitialize("background", error) - .catch((e) => this.logService.error(e)); - } - } - return new Promise((resolve) => { setTimeout(async () => { await this.refreshBadge(); diff --git a/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts b/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts index c9d5d726a6..a2f0c78cd5 100644 --- a/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts +++ b/apps/browser/src/platform/services/sdk/browser-sdk-client-factory.ts @@ -2,7 +2,6 @@ // @ts-strict-ignore import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory"; -import { RecoverableSDKError } from "@bitwarden/common/platform/services/sdk/default-sdk.service"; import type { BitwardenClient } from "@bitwarden/sdk-internal"; import { BrowserApi } from "../../browser/browser-api"; @@ -72,42 +71,14 @@ export class BrowserSdkClientFactory implements SdkClientFactory { ...args: ConstructorParameters ): Promise { const startTime = performance.now(); - try { - await loadWithTimeout(); - } catch (error) { - throw new Error(`Failed to load: ${error.message}`); - } + await load(); const endTime = performance.now(); - const elapsed = Math.round((endTime - startTime) / 1000); const instance = (globalThis as any).init_sdk(...args); this.logService.info("WASM SDK loaded in", Math.round(endTime - startTime), "ms"); - // If it takes 3 seconds or more to load, we want to capture it. - if (elapsed >= 3) { - throw new RecoverableSDKError(instance, elapsed); - } - return instance; } } - -const loadWithTimeout = async () => { - return new Promise((resolve, reject) => { - const timer = setTimeout(() => { - reject(new Error("Operation timed out after 10 second")); - }, 10000); - - load() - .then(() => { - clearTimeout(timer); - resolve(); - }) - .catch((error) => { - clearTimeout(timer); - reject(error); - }); - }); -}; diff --git a/apps/browser/src/popup/app.component.ts b/apps/browser/src/popup/app.component.ts index cbdbed51db..248050ed61 100644 --- a/apps/browser/src/popup/app.component.ts +++ b/apps/browser/src/popup/app.component.ts @@ -1,7 +1,6 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit, inject } from "@angular/core"; -import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { NavigationEnd, Router, RouterOutlet } from "@angular/router"; import { Subject, takeUntil, firstValueFrom, concatMap, filter, tap } from "rxjs"; @@ -11,9 +10,7 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { SdkService } from "@bitwarden/common/platform/abstractions/sdk/sdk.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { MessageListener } from "@bitwarden/common/platform/messaging"; import { UserId } from "@bitwarden/common/types/guid"; @@ -25,7 +22,6 @@ import { ToastService, } from "@bitwarden/components"; -import { flagEnabled } from "../platform/flags"; import { PopupCompactModeService } from "../platform/popup/layout/popup-compact-mode.service"; import { PopupWidthService } from "../platform/popup/layout/popup-width.service"; import { PopupViewCacheService } from "../platform/popup/view-cache/popup-view-cache.service"; @@ -72,31 +68,7 @@ export class AppComponent implements OnInit, OnDestroy { private toastService: ToastService, private accountService: AccountService, private animationControlService: AnimationControlService, - private logService: LogService, - private sdkService: SdkService, - ) { - if (flagEnabled("sdk")) { - // Warn if the SDK for some reason can't be initialized - this.sdkService.supported$.pipe(takeUntilDestroyed()).subscribe({ - next: (supported) => { - if (!supported) { - this.logService.debug("SDK is not supported"); - this.sdkService - .failedToInitialize("popup", undefined) - .catch((e) => this.logService.error(e)); - } else { - this.logService.debug("SDK is supported"); - } - }, - error: (e: unknown) => { - this.sdkService - .failedToInitialize("popup", e as Error) - .catch((e) => this.logService.error(e)); - this.logService.error(e); - }, - }); - } - } + ) {} async ngOnInit() { initPopupClosedListener(); diff --git a/apps/cli/src/service-container/service-container.ts b/apps/cli/src/service-container/service-container.ts index 91b75a14ff..2afbae0782 100644 --- a/apps/cli/src/service-container/service-container.ts +++ b/apps/cli/src/service-container/service-container.ts @@ -550,7 +550,6 @@ export class ServiceContainer { this.accountService, this.kdfConfigService, this.keyService, - this.apiService, customUserAgent, ); @@ -864,19 +863,5 @@ export class ServiceContainer { } this.inited = true; - - if (flagEnabled("sdk")) { - // Warn if the SDK for some reason can't be initialized - let supported = false; - try { - supported = await firstValueFrom(this.sdkService.supported$); - } catch (e) { - // Do nothing. - } - - if (!supported) { - this.sdkService.failedToInitialize("cli").catch((e) => this.logService.error(e)); - } - } } } diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index 5443285da2..5fefbf9ddf 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -10,19 +10,8 @@ import { ViewChild, ViewContainerRef, } from "@angular/core"; -import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { Router } from "@angular/router"; -import { - catchError, - filter, - firstValueFrom, - map, - of, - Subject, - takeUntil, - timeout, - withLatestFrom, -} from "rxjs"; +import { filter, firstValueFrom, map, Subject, takeUntil, timeout, withLatestFrom } from "rxjs"; import { CollectionService } from "@bitwarden/admin-console/common"; import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref"; @@ -52,7 +41,6 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { SdkService } from "@bitwarden/common/platform/abstractions/sdk/sdk.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { SystemService } from "@bitwarden/common/platform/abstractions/system.service"; import { clearCaches } from "@bitwarden/common/platform/misc/sequentialize"; @@ -70,7 +58,6 @@ import { KeyService, BiometricStateService } from "@bitwarden/key-management"; import { DeleteAccountComponent } from "../auth/delete-account.component"; import { MenuAccount, MenuUpdateRequest } from "../main/menu/menu.updater"; -import { flagEnabled } from "../platform/flags"; import { PremiumComponent } from "../vault/app/accounts/premium.component"; import { FolderAddEditComponent } from "../vault/app/vault/folder-add-edit.component"; @@ -167,28 +154,8 @@ export class AppComponent implements OnInit, OnDestroy { private biometricStateService: BiometricStateService, private stateEventRunnerService: StateEventRunnerService, private accountService: AccountService, - private sdkService: SdkService, private organizationService: OrganizationService, - ) { - if (flagEnabled("sdk")) { - // Warn if the SDK for some reason can't be initialized - this.sdkService.supported$ - .pipe( - takeUntilDestroyed(), - catchError(() => { - return of(false); - }), - ) - .subscribe((supported) => { - if (!supported) { - this.logService.debug("SDK is not supported"); - this.sdkService.failedToInitialize("desktop").catch((e) => this.logService.error(e)); - } else { - this.logService.debug("SDK is supported"); - } - }); - } - } + ) {} ngOnInit() { this.accountService.activeAccount$.pipe(takeUntil(this.destroy$)).subscribe((account) => { diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 1075655af9..16c783f3a5 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -2,10 +2,9 @@ // @ts-strict-ignore import { DOCUMENT } from "@angular/common"; import { Component, Inject, NgZone, OnDestroy, OnInit } from "@angular/core"; -import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { NavigationEnd, Router } from "@angular/router"; import * as jq from "jquery"; -import { Subject, filter, firstValueFrom, map, takeUntil, timeout, catchError, of } from "rxjs"; +import { Subject, filter, firstValueFrom, map, takeUntil, timeout } from "rxjs"; import { CollectionService } from "@bitwarden/admin-console/common"; import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; @@ -22,9 +21,7 @@ import { ProcessReloadServiceAbstraction } from "@bitwarden/common/key-managemen import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { SdkService } from "@bitwarden/common/platform/abstractions/sdk/sdk.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { StateEventRunnerService } from "@bitwarden/common/platform/state"; import { SyncService } from "@bitwarden/common/platform/sync"; @@ -34,8 +31,6 @@ import { DialogService, ToastService } from "@bitwarden/components"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; import { KeyService, BiometricStateService } from "@bitwarden/key-management"; -import { flagEnabled } from "../utils/flags"; - import { PolicyListService } from "./admin-console/core/policy-list.service"; import { DisableSendPolicy, @@ -93,29 +88,8 @@ export class AppComponent implements OnDestroy, OnInit { private stateEventRunnerService: StateEventRunnerService, private organizationService: InternalOrganizationServiceAbstraction, private accountService: AccountService, - private logService: LogService, - private sdkService: SdkService, private processReloadService: ProcessReloadServiceAbstraction, - ) { - if (flagEnabled("sdk")) { - // Warn if the SDK for some reason can't be initialized - this.sdkService.supported$ - .pipe( - takeUntilDestroyed(), - catchError(() => { - return of(false); - }), - ) - .subscribe((supported) => { - if (!supported) { - this.logService.debug("SDK is not supported"); - this.sdkService.failedToInitialize("web").catch((e) => this.logService.error(e)); - } else { - this.logService.debug("SDK is supported"); - } - }); - } - } + ) {} ngOnInit() { this.i18nService.locale$.pipe(takeUntil(this.destroy$)).subscribe((locale) => { diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 0765fd8e4c..688507099d 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -1384,7 +1384,6 @@ const safeProviders: SafeProvider[] = [ AccountServiceAbstraction, KdfConfigService, KeyServiceAbstraction, - ApiServiceAbstraction, ], }), safeProvider({ diff --git a/libs/common/src/platform/abstractions/sdk/sdk.service.ts b/libs/common/src/platform/abstractions/sdk/sdk.service.ts index ec60689640..d44d38c36a 100644 --- a/libs/common/src/platform/abstractions/sdk/sdk.service.ts +++ b/libs/common/src/platform/abstractions/sdk/sdk.service.ts @@ -7,11 +7,6 @@ import { BitwardenClient } from "@bitwarden/sdk-internal"; import { UserId } from "../../../types/guid"; export abstract class SdkService { - /** - * Check if the SDK is supported in the current environment. - */ - supported$: Observable; - /** * Retrieve the version of the SDK. */ @@ -35,6 +30,4 @@ export abstract class SdkService { * @param userId */ abstract userClient$(userId: UserId): Observable; - - abstract failedToInitialize(category: string, error?: Error): Promise; } diff --git a/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts b/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts index de8b079621..6593095b32 100644 --- a/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts +++ b/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts @@ -4,7 +4,6 @@ import { BehaviorSubject, firstValueFrom, of } from "rxjs"; import { KdfConfigService, KeyService, PBKDF2KdfConfig } from "@bitwarden/key-management"; import { BitwardenClient } from "@bitwarden/sdk-internal"; -import { ApiService } from "../../../abstractions/api.service"; import { AccountInfo, AccountService } from "../../../auth/abstractions/account.service"; import { UserId } from "../../../types/guid"; import { UserKey } from "../../../types/key"; @@ -24,7 +23,6 @@ describe("DefaultSdkService", () => { let accountService!: MockProxy; let kdfConfigService!: MockProxy; let keyService!: MockProxy; - let apiService!: MockProxy; let service!: DefaultSdkService; let mockClient!: MockProxy; @@ -36,7 +34,6 @@ describe("DefaultSdkService", () => { accountService = mock(); kdfConfigService = mock(); keyService = mock(); - apiService = mock(); // Can't use `of(mock())` for some reason environmentService.environment$ = new BehaviorSubject(mock()); @@ -48,7 +45,6 @@ describe("DefaultSdkService", () => { accountService, kdfConfigService, keyService, - apiService, ); mockClient = mock(); diff --git a/libs/common/src/platform/services/sdk/default-sdk.service.ts b/libs/common/src/platform/services/sdk/default-sdk.service.ts index be6f99ab04..bf593aecf7 100644 --- a/libs/common/src/platform/services/sdk/default-sdk.service.ts +++ b/libs/common/src/platform/services/sdk/default-sdk.service.ts @@ -3,7 +3,6 @@ import { combineLatest, concatMap, - firstValueFrom, Observable, shareReplay, map, @@ -21,7 +20,6 @@ import { DeviceType as SdkDeviceType, } from "@bitwarden/sdk-internal"; -import { ApiService } from "../../../abstractions/api.service"; import { EncryptedOrganizationKeyData } from "../../../admin-console/models/data/encrypted-organization-key.data"; import { AccountInfo, AccountService } from "../../../auth/abstractions/account.service"; import { DeviceType } from "../../../enums/device-type.enum"; @@ -34,43 +32,17 @@ import { SdkService } from "../../abstractions/sdk/sdk.service"; import { compareValues } from "../../misc/compare-values"; import { EncryptedString } from "../../models/domain/enc-string"; -export class RecoverableSDKError extends Error { - sdk: BitwardenClient; - timeout: number; - - constructor(sdk: BitwardenClient, timeout: number) { - super(`SDK took ${timeout}s to initialize`); - - this.sdk = sdk; - this.timeout = timeout; - } -} - export class DefaultSdkService implements SdkService { private sdkClientCache = new Map>(); client$ = this.environmentService.environment$.pipe( concatMap(async (env) => { const settings = this.toSettings(env); - try { - return await this.sdkClientFactory.createSdkClient(settings, LogLevel.Info); - } catch (e) { - if (e instanceof RecoverableSDKError) { - await this.failedToInitialize("sdk", e); - return e.sdk; - } - throw e; - } + return await this.sdkClientFactory.createSdkClient(settings, LogLevel.Info); }), shareReplay({ refCount: true, bufferSize: 1 }), ); - supported$ = this.client$.pipe( - concatMap(async (client) => { - return client.echo("bitwarden wasm!") === "bitwarden wasm!"; - }), - ); - version$ = this.client$.pipe( map((client) => client.version()), catchError(() => "Unsupported"), @@ -83,7 +55,6 @@ export class DefaultSdkService implements SdkService { private accountService: AccountService, private kdfConfigService: KdfConfigService, private keyService: KeyService, - private apiService: ApiService, // Yes we shouldn't import ApiService, but it's temporary private userAgent: string = null, ) {} @@ -155,31 +126,6 @@ export class DefaultSdkService implements SdkService { return client$; } - async failedToInitialize(category: string, error?: Error): Promise { - // Only log on cloud instances - if ( - this.platformUtilsService.isDev() || - !(await firstValueFrom(this.environmentService.environment$)).isCloud - ) { - return; - } - - return this.apiService.send( - "POST", - "/wasm-debug", - { - category: category, - error: error?.message, - }, - false, - false, - null, - (headers) => { - headers.append("SDK-Version", "1.0.0"); - }, - ); - } - private async initializeClient( client: BitwardenClient, account: AccountInfo, From 2041799174ddf23948fa8aff1b010355fd5ddce7 Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:18:35 +0100 Subject: [PATCH 07/18] Fix Crowdin push (#12500) Related to https://github.com/bitwarden/clients/pull/11961 Co-authored-by: Daniel James Smith --- .github/workflows/build-desktop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index bc9bdec396..2a59dc28fc 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -1433,7 +1433,7 @@ jobs: crowdin-push: name: Crowdin Push - if: github.ref == 'refs/heads/main' + if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main' needs: - linux - windows From 1d335bb16400ce8b452593d519ccbae2788bf46b Mon Sep 17 00:00:00 2001 From: Andreas Coroiu Date: Fri, 20 Dec 2024 15:20:23 +0100 Subject: [PATCH 08/18] [PM-16262] Make `getEnvironment` observable and use it in SdkService (#12501) * feat: re-implement getEnvironment as an observable * feat: deprecate `getEnvironment` * fix: use correct environment function in SdkService * fix: test --- .../abstractions/environment.service.ts | 5 +++ .../default-environment.service.spec.ts | 14 ++++----- .../services/default-environment.service.ts | 31 ++++++++++++------- .../services/sdk/default-sdk.service.spec.ts | 3 ++ .../services/sdk/default-sdk.service.ts | 2 +- 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/libs/common/src/platform/abstractions/environment.service.ts b/libs/common/src/platform/abstractions/environment.service.ts index 0293d68903..8d32fc4231 100644 --- a/libs/common/src/platform/abstractions/environment.service.ts +++ b/libs/common/src/platform/abstractions/environment.service.ts @@ -128,5 +128,10 @@ export abstract class EnvironmentService { /** * Get the environment from state. Useful if you need to get the environment for another user. */ + abstract getEnvironment$(userId?: string): Observable; + + /** + * @deprecated Use {@link getEnvironment$} instead. + */ abstract getEnvironment(userId?: string): Promise; } diff --git a/libs/common/src/platform/services/default-environment.service.spec.ts b/libs/common/src/platform/services/default-environment.service.spec.ts index 7d266e93fc..870f887c16 100644 --- a/libs/common/src/platform/services/default-environment.service.spec.ts +++ b/libs/common/src/platform/services/default-environment.service.spec.ts @@ -314,7 +314,7 @@ describe("EnvironmentService", () => { await switchUser(testUser); - const env = await sut.getEnvironment(); + const env = await firstValueFrom(sut.getEnvironment$()); expect(env.getHostname()).toBe(expectedHost); }); @@ -325,7 +325,7 @@ describe("EnvironmentService", () => { setGlobalData(region, new EnvironmentUrls()); setUserData(Region.US, new EnvironmentUrls()); - const env = await sut.getEnvironment(); + const env = await firstValueFrom(sut.getEnvironment$()); expect(env.getHostname()).toBe(expectedHost); }); @@ -338,7 +338,7 @@ describe("EnvironmentService", () => { setGlobalData(region, new EnvironmentUrls()); setUserData(Region.US, new EnvironmentUrls()); - const env = await sut.getEnvironment(testUser); + const env = await firstValueFrom(sut.getEnvironment$(testUser)); expect(env.getHostname()).toBe(expectedHost); }, ); @@ -355,7 +355,7 @@ describe("EnvironmentService", () => { await switchUser(testUser); - const env = await sut.getEnvironment(alternateTestUser); + const env = await firstValueFrom(sut.getEnvironment$(alternateTestUser)); expect(env.getHostname()).toBe(expectedHost); }, ); @@ -366,7 +366,7 @@ describe("EnvironmentService", () => { setGlobalData(Region.SelfHosted, globalSelfHostUrls); setUserData(Region.EU, new EnvironmentUrls()); - const env = await sut.getEnvironment(); + const env = await firstValueFrom(sut.getEnvironment$()); expect(env.getHostname()).toBe("base.example.com"); }); @@ -377,7 +377,7 @@ describe("EnvironmentService", () => { setGlobalData(Region.SelfHosted, globalSelfHostUrls); setUserData(Region.EU, new EnvironmentUrls()); - const env = await sut.getEnvironment(); + const env = await firstValueFrom(sut.getEnvironment$()); expect(env.getHostname()).toBe("vault.example.com"); }); @@ -391,7 +391,7 @@ describe("EnvironmentService", () => { await switchUser(testUser); - const env = await sut.getEnvironment(alternateTestUser); + const env = await firstValueFrom(sut.getEnvironment$(alternateTestUser)); expect(env.getHostname()).toBe("base.example.com"); }); }); diff --git a/libs/common/src/platform/services/default-environment.service.ts b/libs/common/src/platform/services/default-environment.service.ts index 69d990ce69..ac3e39b2bb 100644 --- a/libs/common/src/platform/services/default-environment.service.ts +++ b/libs/common/src/platform/services/default-environment.service.ts @@ -271,23 +271,30 @@ export class DefaultEnvironmentService implements EnvironmentService { } } - async getEnvironment(userId?: UserId): Promise { + getEnvironment$(userId?: UserId): Observable { if (userId == null) { - return await firstValueFrom(this.environment$); + return this.environment$; } - const state = await this.getEnvironmentState(userId); - return this.buildEnvironment(state.region, state.urls); + return this.activeAccountId$.pipe( + switchMap((activeUserId) => { + // Previous rules dictated that we only get from user scoped state if there is an active user. + if (activeUserId == null) { + return this.globalState.state$; + } + return this.stateProvider.getUser(userId ?? activeUserId, USER_ENVIRONMENT_KEY).state$; + }), + map((state) => { + return this.buildEnvironment(state?.region, state?.urls); + }), + ); } - private async getEnvironmentState(userId: UserId | null) { - // Previous rules dictated that we only get from user scoped state if there is an active user. - const activeUserId = await firstValueFrom(this.activeAccountId$); - return activeUserId == null - ? await firstValueFrom(this.globalState.state$) - : await firstValueFrom( - this.stateProvider.getUser(userId ?? activeUserId, USER_ENVIRONMENT_KEY).state$, - ); + /** + * @deprecated Use getEnvironment$ instead. + */ + async getEnvironment(userId?: UserId): Promise { + return firstValueFrom(this.getEnvironment$(userId)); } async seedUserEnvironment(userId: UserId) { diff --git a/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts b/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts index 6593095b32..c5917e0230 100644 --- a/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts +++ b/libs/common/src/platform/services/sdk/default-sdk.service.spec.ts @@ -56,6 +56,9 @@ describe("DefaultSdkService", () => { const userId = "user-id" as UserId; beforeEach(() => { + environmentService.getEnvironment$ + .calledWith(userId) + .mockReturnValue(new BehaviorSubject(mock())); accountService.accounts$ = of({ [userId]: { email: "email", emailVerified: true, name: "name" } as AccountInfo, }); diff --git a/libs/common/src/platform/services/sdk/default-sdk.service.ts b/libs/common/src/platform/services/sdk/default-sdk.service.ts index bf593aecf7..e9cecbb15d 100644 --- a/libs/common/src/platform/services/sdk/default-sdk.service.ts +++ b/libs/common/src/platform/services/sdk/default-sdk.service.ts @@ -78,7 +78,7 @@ export class DefaultSdkService implements SdkService { ); const client$ = combineLatest([ - this.environmentService.environment$, + this.environmentService.getEnvironment$(userId), account$, kdfParams$, privateKey$, From 31387d9a2a1e150ce5a4bcb876ee3619a9d8ce01 Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:56:00 +0000 Subject: [PATCH 09/18] Autosync the updated translations (#12503) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/browser/src/_locales/lv/messages.json | 20 +++++++++---------- apps/browser/src/_locales/zh_TW/messages.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 7d0f789280..31bdcd59e4 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -4911,22 +4911,22 @@ "message": "Beta" }, "importantNotice": { - "message": "Important notice" + "message": "Svarīgs paziņojums" }, "setupTwoStepLogin": { - "message": "Set up two-step login" + "message": "Iestatīt divpakāpju pieteikšanos" }, "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + "message": "Bitwarden, sākot ar 2025. gada februāri, nosūtīs kodu uz konta e-pasta adresi, lai apliecinātu pieteikšanos no jaunām ierīcēm." }, "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + "message": "Var iestatīt divpakāpju pieteikšanos kā citu veidu, kā aizsargāt savu kontu, vai iestatīt savu e-pasta adresi uz tādu, kurai ir piekļuve." }, "remindMeLater": { - "message": "Remind me later" + "message": "Atgādināt man vēlāk" }, "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", + "message": "Vai ir uzticama piekļuve savai e-pasta adresei $EMAIL$?", "placeholders": { "email": { "content": "$1", @@ -4935,16 +4935,16 @@ } }, "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" + "message": "Nē, nav" }, "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" + "message": "Jā, varu uzticami piekļūt savam e-pastam" }, "turnOnTwoStepLogin": { - "message": "Turn on two-step login" + "message": "Ieslēgt divpakāpju pieteikšanos" }, "changeAcctEmail": { - "message": "Change account email" + "message": "Mainīt konta e-pasta adresi" }, "extensionWidth": { "message": "Paplašinājuma platums" diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 2f1e1ef34f..ae90367852 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -248,7 +248,7 @@ "message": "請求密碼提示" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "輸入您帳戶的電子郵件,您的密碼提示會傳送給您" + "message": "輸入您帳號的電子郵件,您的密碼提示會傳送給您" }, "passwordHint": { "message": "密碼提示" From a728331ec1beba7a9ff34ce3d35636cb417ef6ce Mon Sep 17 00:00:00 2001 From: "bw-ghapp[bot]" <178206702+bw-ghapp[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:56:42 +0000 Subject: [PATCH 10/18] Autosync the updated translations (#12504) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> --- apps/web/src/locales/de/messages.json | 2 +- apps/web/src/locales/lv/messages.json | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index b90d7fc247..57e5891a70 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -3883,7 +3883,7 @@ "message": "Browser aktualisieren" }, "generatingRiskInsights": { - "message": "Generating your risk insights..." + "message": "Deine Risikoübersicht wird generiert..." }, "updateBrowserDesc": { "message": "Du verwendest einen nicht unterstützten Webbrowser. Der Web-Tresor funktioniert möglicherweise nicht richtig." diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index f60e569157..8f8ae16320 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -9885,22 +9885,22 @@ "message": "Apraksta kods" }, "importantNotice": { - "message": "Important notice" + "message": "Svarīgs paziņojums" }, "setupTwoStepLogin": { - "message": "Set up two-step login" + "message": "Iestatīt divpakāpju pieteikšanos" }, "newDeviceVerificationNoticeContentPage1": { - "message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025." + "message": "Bitwarden, sākot ar 2025. gada februāri, nosūtīs kodu uz konta e-pasta adresi, lai apliecinātu pieteikšanos no jaunām ierīcēm." }, "newDeviceVerificationNoticeContentPage2": { - "message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access." + "message": "Var iestatīt divpakāpju pieteikšanos kā citu veidu, kā aizsargāt savu kontu, vai iestatīt savu e-pasta adresi uz tādu, kurai ir piekļuve." }, "remindMeLater": { - "message": "Remind me later" + "message": "Atgādināt man vēlāk" }, "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", + "message": "Vai ir uzticama piekļuve savai e-pasta adresei $EMAIL$?", "placeholders": { "email": { "content": "$1", @@ -9909,16 +9909,16 @@ } }, "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" + "message": "Nē, nav" }, "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" + "message": "Jā, varu uzticami piekļūt savam e-pastam" }, "turnOnTwoStepLogin": { - "message": "Turn on two-step login" + "message": "Ieslēgt divpakāpju pieteikšanos" }, "changeAcctEmail": { - "message": "Change account email" + "message": "Mainīt konta e-pasta adresi" }, "removeMembers": { "message": "Noņemt dalībniekus" From acd3ab05f6b2335b5dd284b0da8f079fb9a3b87c Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:39:37 +0100 Subject: [PATCH 11/18] [PM-7100] Remove conditional routing for extension refresh (#12485) * Remove conditional routing for new vault page (header/footer) Redirect tabs/current to tabs/vault (new home) * Remove unused TabsComponent --------- Co-authored-by: Daniel James Smith --- apps/browser/src/popup/app-routing.module.ts | 19 +++---- apps/browser/src/popup/app.module.ts | 2 - apps/browser/src/popup/tabs.component.html | 57 -------------------- apps/browser/src/popup/tabs.component.ts | 15 ------ 4 files changed, 7 insertions(+), 86 deletions(-) delete mode 100644 apps/browser/src/popup/tabs.component.html delete mode 100644 apps/browser/src/popup/tabs.component.ts diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts index ad839bbd7c..73147cace2 100644 --- a/apps/browser/src/popup/app-routing.module.ts +++ b/apps/browser/src/popup/app-routing.module.ts @@ -105,10 +105,8 @@ import { clearVaultStateGuard } from "../vault/guards/clear-vault-state.guard"; import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component"; import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component"; import { CollectionsComponent } from "../vault/popup/components/vault/collections.component"; -import { CurrentTabComponent } from "../vault/popup/components/vault/current-tab.component"; import { PasswordHistoryComponent } from "../vault/popup/components/vault/password-history.component"; import { ShareComponent } from "../vault/popup/components/vault/share.component"; -import { VaultFilterComponent } from "../vault/popup/components/vault/vault-filter.component"; import { VaultItemsComponent } from "../vault/popup/components/vault/vault-items.component"; import { VaultV2Component } from "../vault/popup/components/vault/vault-v2.component"; import { ViewComponent } from "../vault/popup/components/vault/view.component"; @@ -130,7 +128,6 @@ import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.c import { RouteElevation } from "./app-routing.animations"; import { debounceNavigationGuard } from "./services/debounce-navigation.service"; import { TabsV2Component } from "./tabs-v2.component"; -import { TabsComponent } from "./tabs.component"; /** * Data properties acceptable for use in extension route objects @@ -748,8 +745,9 @@ const routes: Routes = [ }, ], }, - ...extensionRefreshSwap(TabsComponent, TabsV2Component, { + { path: "tabs", + component: TabsV2Component, data: { elevation: 0 } satisfies RouteDataProperties, children: [ { @@ -759,18 +757,15 @@ const routes: Routes = [ }, { path: "current", - component: CurrentTabComponent, - canActivate: [authGuard], - canMatch: [extensionRefreshRedirect("/tabs/vault")], - data: { elevation: 0 } satisfies RouteDataProperties, - runGuardsAndResolvers: "always", + redirectTo: "/tabs/vault", }, - ...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, { + { path: "vault", + component: VaultV2Component, canActivate: [authGuard, NewDeviceVerificationNoticeGuard], canDeactivate: [clearVaultStateGuard], data: { elevation: 0 } satisfies RouteDataProperties, - }), + }, ...extensionRefreshSwap(GeneratorComponent, CredentialGeneratorComponent, { path: "generator", canActivate: [authGuard], @@ -788,7 +783,7 @@ const routes: Routes = [ data: { elevation: 0 } satisfies RouteDataProperties, }), ], - }), + }, { path: "account-switcher", component: AccountSwitcherComponent, diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index 76bd06565c..4695f0820b 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -88,7 +88,6 @@ import { AppComponent } from "./app.component"; import { UserVerificationComponent } from "./components/user-verification.component"; import { ServicesModule } from "./services/services.module"; import { TabsV2Component } from "./tabs-v2.component"; -import { TabsComponent } from "./tabs.component"; // Register the locales for the application import "../platform/popup/locales"; @@ -177,7 +176,6 @@ import "../platform/popup/locales"; ShareComponent, SsoComponentV1, SyncComponent, - TabsComponent, TabsV2Component, TwoFactorComponent, TwoFactorOptionsComponent, diff --git a/apps/browser/src/popup/tabs.component.html b/apps/browser/src/popup/tabs.component.html deleted file mode 100644 index fd04967b91..0000000000 --- a/apps/browser/src/popup/tabs.component.html +++ /dev/null @@ -1,57 +0,0 @@ -
- - -
diff --git a/apps/browser/src/popup/tabs.component.ts b/apps/browser/src/popup/tabs.component.ts deleted file mode 100644 index 7546c9ca13..0000000000 --- a/apps/browser/src/popup/tabs.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnInit } from "@angular/core"; - -import BrowserPopupUtils from "../platform/popup/browser-popup-utils"; - -@Component({ - selector: "app-tabs", - templateUrl: "tabs.component.html", -}) -export class TabsComponent implements OnInit { - showCurrentTab = true; - - ngOnInit() { - this.showCurrentTab = !BrowserPopupUtils.inPopout(window); - } -} From b27a1a5337f765ee3fa9c07f51083c29c69a68da Mon Sep 17 00:00:00 2001 From: Nick Krantz <125900171+nick-livefront@users.noreply.github.com> Date: Fri, 20 Dec 2024 09:44:36 -0600 Subject: [PATCH 12/18] [PM-12998] View Cipher: Color Password (#12354) * show color password for visible passwords in vault view - The password input will be visually hidden - Adds tests for the login credentials component * formatting --- .../login-credentials-view.component.html | 23 +- .../login-credentials-view.component.spec.ts | 198 ++++++++++++++++++ 2 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.spec.ts diff --git a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html index 5b6b995d09..8503604bf7 100644 --- a/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html +++ b/libs/vault/src/cipher-view/login-credentials/login-credentials-view.component.html @@ -28,17 +28,34 @@ > - {{ "password" | i18n }} + + {{ "password" | i18n }} + + + + + + +
+ +
  • +
    + + +
    +
  • + + +`; + exports[`AutofillInlineMenuList initAutofillInlineMenuList the locked inline menu for an unauthenticated user creates the views for the locked inline menu 1`] = `
    { expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot(); }); + it("renders correctly when there are multiple TOTP elements with username displayed", async () => { + const totpCipher1 = createAutofillOverlayCipherDataMock(1, { + type: CipherType.Login, + login: { + totp: "123456", + totpField: true, + username: "user1", + }, + }); + + const totpCipher2 = createAutofillOverlayCipherDataMock(2, { + type: CipherType.Login, + login: { + totp: "654321", + totpField: true, + username: "user2", + }, + }); + + postWindowMessage( + createInitAutofillInlineMenuListMessageMock({ + inlineMenuFillType: CipherType.Login, + ciphers: [totpCipher1, totpCipher2], + }), + ); + + await flushPromises(); + const checkSubtitleElement = (username: string) => { + const subtitleElement = autofillInlineMenuList["inlineMenuListContainer"].querySelector( + `span.cipher-subtitle[title="${username}"]`, + ); + expect(subtitleElement).not.toBeNull(); + expect(subtitleElement.textContent).toBe(username); + }; + + checkSubtitleElement("user1"); + checkSubtitleElement("user2"); + + expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot(); + }); + it("creates the view for a totp field", () => { postWindowMessage( createInitAutofillInlineMenuListMessageMock({ diff --git a/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts b/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts index 6cf390d0a2..b7837505d4 100644 --- a/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts +++ b/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts @@ -1163,7 +1163,7 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement { } if (cipher.login?.totpField && cipher.login?.totp) { - return this.buildTotpElement(cipher.login?.totp); + return this.buildTotpElement(cipher.login?.totp, cipher.login?.username); } const subTitleText = this.getSubTitleText(cipher); const cipherSubtitleElement = this.buildCipherSubtitleElement(subTitleText); @@ -1174,13 +1174,24 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement { return cipherDetailsElement; } + /** + * Checks if there is more than one TOTP element being displayed. + * + * @returns {boolean} - Returns true if more than one TOTP element is displayed, otherwise false. + */ + private multipleTotpElements(): boolean { + return ( + this.ciphers.filter((cipher) => cipher.login?.totpField && cipher.login?.totp).length > 1 + ); + } + /** * Builds a TOTP element for a given TOTP code. * * @param totp - The TOTP code to display. */ - private buildTotpElement(totpCode: string): HTMLDivElement | null { + private buildTotpElement(totpCode: string, username?: string): HTMLDivElement | null { if (!totpCode) { return null; } @@ -1196,12 +1207,17 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement { containerElement.appendChild(totpHeading); - const subtitleElement = document.createElement("span"); - subtitleElement.classList.add("cipher-subtitle"); - subtitleElement.textContent = formattedTotpCode; - subtitleElement.setAttribute("aria-label", this.getTranslation("totpCodeAria")); - subtitleElement.setAttribute("data-testid", "totp-code"); - containerElement.appendChild(subtitleElement); + if (this.multipleTotpElements() && username) { + const usernameSubtitle = this.buildCipherSubtitleElement(username); + containerElement.appendChild(usernameSubtitle); + } + + const totpCodeSpan = document.createElement("span"); + totpCodeSpan.classList.add("cipher-subtitle"); + totpCodeSpan.textContent = formattedTotpCode; + totpCodeSpan.setAttribute("aria-label", this.getTranslation("totpCodeAria")); + totpCodeSpan.setAttribute("data-testid", "totp-code"); + containerElement.appendChild(totpCodeSpan); return containerElement; } From 2e6031eee90631274864f9b9ba65e935132ed32f Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 20 Dec 2024 17:36:04 +0100 Subject: [PATCH 15/18] Increase heap size for builds (#12483) * Increase heap size for builds * Add cross-env to cli * Add cross-env to desktop * Update apps/web/package.json Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> --------- Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com> --- apps/browser/package.json | 10 +++++----- apps/cli/package.json | 4 ++-- apps/desktop/package.json | 2 +- apps/web/package.json | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/browser/package.json b/apps/browser/package.json index 2b3edd96b6..7c839ecc3d 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -14,11 +14,11 @@ "build:watch:firefox": "npm run build:firefox -- --watch", "build:watch:opera": "npm run build:opera -- --watch", "build:watch:safari": "npm run build:safari -- --watch", - "build:prod:chrome": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:chrome", - "build:prod:edge": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:edge", - "build:prod:firefox": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:firefox", - "build:prod:opera": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:opera", - "build:prod:safari": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:safari", + "build:prod:chrome": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:chrome", + "build:prod:edge": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:edge", + "build:prod:firefox": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:firefox", + "build:prod:opera": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:opera", + "build:prod:safari": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:safari", "dist:chrome": "npm run build:prod:chrome && mkdir -p dist && ./scripts/compress.ps1 dist-chrome.zip", "dist:edge": "npm run build:prod:edge && mkdir -p dist && ./scripts/compress.ps1 dist-edge.zip", "dist:firefox": "npm run build:prod:firefox && mkdir -p dist && ./scripts/compress.ps1 dist-firefox.zip", diff --git a/apps/cli/package.json b/apps/cli/package.json index b7d54e78e1..b25f327c42 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -18,14 +18,14 @@ "license": "SEE LICENSE IN LICENSE.txt", "scripts": { "clean": "rimraf dist", - "build:oss": "webpack", + "build:oss": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:oss:debug": "npm run build:oss && node --inspect ./build/bw.js", "build:oss:watch": "webpack --watch", "build:oss:prod": "cross-env NODE_ENV=production webpack", "build:oss:prod:watch": "cross-env NODE_ENV=production webpack --watch", "debug": "node --inspect ./build/bw.js", "publish:npm": "npm run build:oss:prod && npm publish --access public", - "build:bit": "webpack -c ../../bitwarden_license/bit-cli/webpack.config.js", + "build:bit": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-cli/webpack.config.js", "build:bit:debug": "npm run build:bit && node --inspect ./build/bw.js", "build:bit:watch": "webpack --watch -c ../../bitwarden_license/bit-cli/webpack.config.js", "build:bit:prod": "cross-env NODE_ENV=production npm run build:bit", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 10d5ded344..7c6d1f3769 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -19,7 +19,7 @@ "postinstall": "electron-rebuild", "start": "cross-env ELECTRON_IS_DEV=0 ELECTRON_NO_UPDATER=1 electron ./build", "build-native": "cd desktop_native && node build.js", - "build": "concurrently -n Main,Rend,Prel -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\" \"npm run build:preload\"", + "build": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" concurrently -n Main,Rend,Prel -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\" \"npm run build:preload\"", "build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"", "build:preload": "cross-env NODE_ENV=production webpack --config webpack.preload.js", "build:preload:watch": "cross-env NODE_ENV=production webpack --config webpack.preload.js --watch", diff --git a/apps/web/package.json b/apps/web/package.json index dee8e7722c..f2697e1b68 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -2,8 +2,8 @@ "name": "@bitwarden/web-vault", "version": "2024.12.1", "scripts": { - "build:oss": "webpack", - "build:bit": "webpack -c ../../bitwarden_license/bit-web/webpack.config.js", + "build:oss": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:bit": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-web/webpack.config.js", "build:oss:watch": "webpack serve", "build:bit:watch": "webpack serve -c ../../bitwarden_license/bit-web/webpack.config.js", "build:bit:dev": "cross-env ENV=development npm run build:bit", From d209da4c945b9fddbc480c779150989596bfd90f Mon Sep 17 00:00:00 2001 From: rr-bw <102181210+rr-bw@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:23:03 -0800 Subject: [PATCH 16/18] feat(auth): [PM-9674] Remove Deprecated LockComponents (#12453) This PR deletes the legacy lock components from the Angular clients and also removes feature flag control from the routing. The lock component will now be based entirely on the new, recently refreshed LockComponent in libs/auth/angular. --- .../src/auth/popup/lock.component.html | 100 ---- apps/browser/src/auth/popup/lock.component.ts | 185 ------- apps/browser/src/popup/app-routing.module.ts | 21 +- apps/browser/src/popup/app.module.ts | 2 - apps/desktop/src/app/app-routing.module.ts | 16 +- apps/desktop/src/app/app.module.ts | 2 - apps/desktop/src/auth/lock.component.html | 80 --- apps/desktop/src/auth/lock.component.spec.ts | 478 ------------------ apps/desktop/src/auth/lock.component.ts | 235 --------- apps/web/src/app/auth/lock.component.html | 27 - apps/web/src/app/auth/lock.component.ts | 51 -- apps/web/src/app/oss-routing.module.ts | 59 +-- .../src/auth/components/lock.component.ts | 398 --------------- libs/auth/src/angular/lock/lock.component.ts | 6 +- 14 files changed, 31 insertions(+), 1629 deletions(-) delete mode 100644 apps/browser/src/auth/popup/lock.component.html delete mode 100644 apps/browser/src/auth/popup/lock.component.ts delete mode 100644 apps/desktop/src/auth/lock.component.html delete mode 100644 apps/desktop/src/auth/lock.component.spec.ts delete mode 100644 apps/desktop/src/auth/lock.component.ts delete mode 100644 apps/web/src/app/auth/lock.component.html delete mode 100644 apps/web/src/app/auth/lock.component.ts delete mode 100644 libs/angular/src/auth/components/lock.component.ts diff --git a/apps/browser/src/auth/popup/lock.component.html b/apps/browser/src/auth/popup/lock.component.html deleted file mode 100644 index fb1b09de49..0000000000 --- a/apps/browser/src/auth/popup/lock.component.html +++ /dev/null @@ -1,100 +0,0 @@ -
    - -
    -

    - {{ "verifyIdentity" | i18n }} -

    -
    - -
    -
    -
    - -
    -
    -
    -
    - - -
    -
    - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -

    - -

    - {{ biometricError }} -

    - {{ "awaitDesktop" | i18n }} -

    - - -
    -
    -
    diff --git a/apps/browser/src/auth/popup/lock.component.ts b/apps/browser/src/auth/popup/lock.component.ts deleted file mode 100644 index 66de3fb89d..0000000000 --- a/apps/browser/src/auth/popup/lock.component.ts +++ /dev/null @@ -1,185 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Component, NgZone, OnInit } from "@angular/core"; -import { Router } from "@angular/router"; -import { firstValueFrom } from "rxjs"; - -import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component"; -import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; -import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; -import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; -import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction"; -import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; -import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; -import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { DialogService, ToastService } from "@bitwarden/components"; -import { - KdfConfigService, - KeyService, - BiometricsService, - BiometricStateService, -} from "@bitwarden/key-management"; - -import { BiometricErrors, BiometricErrorTypes } from "../../models/biometricErrors"; -import { BrowserRouterService } from "../../platform/popup/services/browser-router.service"; -import { fido2PopoutSessionData$ } from "../../vault/popup/utils/fido2-popout-session-data"; - -@Component({ - selector: "app-lock", - templateUrl: "lock.component.html", -}) -export class LockComponent extends BaseLockComponent implements OnInit { - private isInitialLockScreen: boolean; - - biometricError: string; - pendingBiometric = false; - fido2PopoutSessionData$ = fido2PopoutSessionData$(); - - constructor( - masterPasswordService: InternalMasterPasswordServiceAbstraction, - router: Router, - i18nService: I18nService, - platformUtilsService: PlatformUtilsService, - messagingService: MessagingService, - keyService: KeyService, - vaultTimeoutService: VaultTimeoutService, - vaultTimeoutSettingsService: VaultTimeoutSettingsService, - environmentService: EnvironmentService, - stateService: StateService, - apiService: ApiService, - logService: LogService, - ngZone: NgZone, - policyApiService: PolicyApiServiceAbstraction, - policyService: InternalPolicyService, - passwordStrengthService: PasswordStrengthServiceAbstraction, - authService: AuthService, - dialogService: DialogService, - deviceTrustService: DeviceTrustServiceAbstraction, - userVerificationService: UserVerificationService, - pinService: PinServiceAbstraction, - private routerService: BrowserRouterService, - biometricStateService: BiometricStateService, - biometricsService: BiometricsService, - accountService: AccountService, - kdfConfigService: KdfConfigService, - syncService: SyncService, - toastService: ToastService, - ) { - super( - masterPasswordService, - router, - i18nService, - platformUtilsService, - messagingService, - keyService, - vaultTimeoutService, - vaultTimeoutSettingsService, - environmentService, - stateService, - apiService, - logService, - ngZone, - policyApiService, - policyService, - passwordStrengthService, - dialogService, - deviceTrustService, - userVerificationService, - pinService, - biometricStateService, - biometricsService, - accountService, - authService, - kdfConfigService, - syncService, - toastService, - ); - this.successRoute = "/tabs/current"; - this.isInitialLockScreen = (window as any).previousPopupUrl == null; - - this.onSuccessfulSubmit = async () => { - const previousUrl = this.routerService.getPreviousUrl(); - if (previousUrl) { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.router.navigateByUrl(previousUrl); - } else { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.router.navigate([this.successRoute]); - } - }; - } - - async ngOnInit() { - await super.ngOnInit(); - const autoBiometricsPrompt = await firstValueFrom( - this.biometricStateService.promptAutomatically$, - ); - - window.setTimeout(async () => { - document.getElementById(this.pinEnabled ? "pin" : "masterPassword")?.focus(); - if ( - this.biometricLock && - autoBiometricsPrompt && - this.isInitialLockScreen && - (await this.authService.getAuthStatus()) === AuthenticationStatus.Locked - ) { - await this.unlockBiometric(true); - } - }, 100); - } - - override async unlockBiometric(automaticPrompt: boolean = false): Promise { - if (!this.biometricLock) { - return; - } - - this.biometricError = null; - - let success; - try { - const available = await super.isBiometricUnlockAvailable(); - if (!available) { - if (!automaticPrompt) { - await this.dialogService.openSimpleDialog({ - type: "warning", - title: { key: "biometricsNotAvailableTitle" }, - content: { key: "biometricsNotAvailableDesc" }, - acceptButtonText: { key: "ok" }, - cancelButtonText: null, - }); - } - } else { - this.pendingBiometric = true; - success = await super.unlockBiometric(); - } - } catch (e) { - const error = BiometricErrors[e?.message as BiometricErrorTypes]; - - if (error == null) { - this.logService.error("Unknown error: " + e); - return false; - } - - this.biometricError = this.i18nService.t(error.description); - } finally { - this.pendingBiometric = false; - } - - return success; - } -} diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts index 73147cace2..549a677857 100644 --- a/apps/browser/src/popup/app-routing.module.ts +++ b/apps/browser/src/popup/app-routing.module.ts @@ -17,7 +17,6 @@ import { unauthGuardFn, } from "@bitwarden/angular/auth/guards"; import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; -import { extensionRefreshRedirect } from "@bitwarden/angular/utils/extension-refresh-redirect"; import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap"; import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards"; import { @@ -26,7 +25,7 @@ import { LoginComponent, LoginSecondaryContentComponent, LockIcon, - LockV2Component, + LockComponent, LoginViaAuthRequestComponent, PasswordHintComponent, RegistrationFinishComponent, @@ -60,7 +59,6 @@ import { } from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component"; import { HintComponent } from "../auth/popup/hint.component"; import { HomeComponent } from "../auth/popup/home.component"; -import { LockComponent } from "../auth/popup/lock.component"; import { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component"; import { LoginComponentV1 } from "../auth/popup/login-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component"; @@ -173,13 +171,6 @@ const routes: Routes = [ canActivate: [fido2AuthGuard], data: { elevation: 1 } satisfies RouteDataProperties, }), - { - path: "lock", - component: LockComponent, - canActivate: [lockGuard()], - canMatch: [extensionRefreshRedirect("/lockV2")], - data: { elevation: 1, doNotSaveUrl: true } satisfies RouteDataProperties, - }, ...twofactorRefactorSwap( TwoFactorComponent, AnonLayoutWrapperComponent, @@ -650,8 +641,8 @@ const routes: Routes = [ ], }, { - path: "lockV2", - canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh), lockGuard()], + path: "lock", + canActivate: [lockGuard()], data: { pageIcon: LockIcon, pageTitle: { @@ -662,19 +653,19 @@ const routes: Routes = [ elevation: 1, /** * This ensures that in a passkey flow the `/fido2?` URL does not get - * overwritten in the `BrowserRouterService` by the `/lockV2` route. This way, after + * overwritten in the `BrowserRouterService` by the `/lock` route. This way, after * unlocking, the user can be redirected back to the `/fido2?` URL. * * Also, this prevents a routing loop when using biometrics to unlock the vault in MV2 (Firefox), * locking up the browser (https://bitwarden.atlassian.net/browse/PM-16116). This involves the - * `popup-router-cache.service` pushing the `lockV2` route to the history. + * `popup-router-cache.service` pushing the `lock` route to the history. */ doNotSaveUrl: true, } satisfies ExtensionAnonLayoutWrapperData & RouteDataProperties, children: [ { path: "", - component: LockV2Component, + component: LockComponent, }, ], }, diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index 4695f0820b..3d8cb26779 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -23,7 +23,6 @@ import { EnvironmentComponent } from "../auth/popup/environment.component"; import { ExtensionAnonLayoutWrapperComponent } from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component"; import { HintComponent } from "../auth/popup/hint.component"; import { HomeComponent } from "../auth/popup/home.component"; -import { LockComponent } from "../auth/popup/lock.component"; import { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component"; import { LoginComponentV1 } from "../auth/popup/login-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component"; @@ -156,7 +155,6 @@ import "../platform/popup/locales"; VaultFilterComponent, HintComponent, HomeComponent, - LockComponent, LoginViaAuthRequestComponentV1, LoginComponentV1, LoginDecryptionOptionsComponentV1, diff --git a/apps/desktop/src/app/app-routing.module.ts b/apps/desktop/src/app/app-routing.module.ts index c7642638dc..7e82bb004f 100644 --- a/apps/desktop/src/app/app-routing.module.ts +++ b/apps/desktop/src/app/app-routing.module.ts @@ -15,7 +15,6 @@ import { unauthGuardFn, } from "@bitwarden/angular/auth/guards"; import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; -import { extensionRefreshRedirect } from "@bitwarden/angular/utils/extension-refresh-redirect"; import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards"; import { AnonLayoutWrapperComponent, @@ -23,7 +22,7 @@ import { LoginComponent, LoginSecondaryContentComponent, LockIcon, - LockV2Component, + LockComponent, LoginViaAuthRequestComponent, PasswordHintComponent, RegistrationFinishComponent, @@ -51,7 +50,6 @@ import { twofactorRefactorSwap } from "../../../../libs/angular/src/utils/two-fa import { AccessibilityCookieComponent } from "../auth/accessibility-cookie.component"; import { maxAccountsGuardFn } from "../auth/guards/max-accounts.guard"; import { HintComponent } from "../auth/hint.component"; -import { LockComponent } from "../auth/lock.component"; import { LoginDecryptionOptionsComponentV1 } from "../auth/login/login-decryption-options/login-decryption-options-v1.component"; import { LoginComponentV1 } from "../auth/login/login-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/login/login-via-auth-request-v1.component"; @@ -81,12 +79,6 @@ const routes: Routes = [ children: [], // Children lets us have an empty component. canActivate: [redirectGuard({ loggedIn: "/vault", loggedOut: "/login", locked: "/lock" })], }, - { - path: "lock", - component: LockComponent, - canActivate: [lockGuard()], - canMatch: [extensionRefreshRedirect("/lockV2")], - }, ...twofactorRefactorSwap( TwoFactorComponent, AnonLayoutWrapperComponent, @@ -373,8 +365,8 @@ const routes: Routes = [ ], }, { - path: "lockV2", - canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh), lockGuard()], + path: "lock", + canActivate: [lockGuard()], data: { pageIcon: LockIcon, pageTitle: { @@ -385,7 +377,7 @@ const routes: Routes = [ children: [ { path: "", - component: LockV2Component, + component: LockComponent, }, ], }, diff --git a/apps/desktop/src/app/app.module.ts b/apps/desktop/src/app/app.module.ts index 5bd1c66b87..5b9a1e3539 100644 --- a/apps/desktop/src/app/app.module.ts +++ b/apps/desktop/src/app/app.module.ts @@ -13,7 +13,6 @@ import { AccessibilityCookieComponent } from "../auth/accessibility-cookie.compo import { DeleteAccountComponent } from "../auth/delete-account.component"; import { EnvironmentComponent } from "../auth/environment.component"; import { HintComponent } from "../auth/hint.component"; -import { LockComponent } from "../auth/lock.component"; import { LoginModule } from "../auth/login/login.module"; import { RegisterComponent } from "../auth/register.component"; import { RemovePasswordComponent } from "../auth/remove-password.component"; @@ -78,7 +77,6 @@ import { SendComponent } from "./tools/send/send.component"; FolderAddEditComponent, HeaderComponent, HintComponent, - LockComponent, NavComponent, GeneratorComponent, PasswordGeneratorHistoryComponent, diff --git a/apps/desktop/src/auth/lock.component.html b/apps/desktop/src/auth/lock.component.html deleted file mode 100644 index 895eda91e8..0000000000 --- a/apps/desktop/src/auth/lock.component.html +++ /dev/null @@ -1,80 +0,0 @@ -
    -
    - -

    {{ "yourVaultIsLocked" | i18n }}

    -
    -
    -
    -
    - - -
    -
    - - -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    diff --git a/apps/desktop/src/auth/lock.component.spec.ts b/apps/desktop/src/auth/lock.component.spec.ts deleted file mode 100644 index 4e59acf89c..0000000000 --- a/apps/desktop/src/auth/lock.component.spec.ts +++ /dev/null @@ -1,478 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { NO_ERRORS_SCHEMA } from "@angular/core"; -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { ActivatedRoute } from "@angular/router"; -import { MockProxy, mock } from "jest-mock-extended"; -import { of } from "rxjs"; - -import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component"; -import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe"; -import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; -import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; -import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; -import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction"; -import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; -import { FakeMasterPasswordService } from "@bitwarden/common/auth/services/master-password/fake-master-password.service"; -import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { FakeAccountService, mockAccountServiceWith } from "@bitwarden/common/spec"; -import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; -import { UserId } from "@bitwarden/common/types/guid"; -import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { DialogService, ToastService } from "@bitwarden/components"; -import { - KdfConfigService, - KeyService, - BiometricsService as AbstractBiometricService, - BiometricStateService, -} from "@bitwarden/key-management"; - -import { BiometricsService } from "../key-management/biometrics/biometrics.service"; - -import { LockComponent } from "./lock.component"; - -// ipc mock global -const isWindowVisibleMock = jest.fn(); -(global as any).ipc = { - platform: { - isWindowVisible: isWindowVisibleMock, - }, - keyManagement: { - biometric: { - enabled: jest.fn(), - }, - }, -}; - -describe("LockComponent", () => { - let component: LockComponent; - let fixture: ComponentFixture; - let stateServiceMock: MockProxy; - let biometricStateService: MockProxy; - let biometricsService: MockProxy; - let messagingServiceMock: MockProxy; - let broadcasterServiceMock: MockProxy; - let platformUtilsServiceMock: MockProxy; - let activatedRouteMock: MockProxy; - let mockMasterPasswordService: FakeMasterPasswordService; - let mockToastService: MockProxy; - - const mockUserId = Utils.newGuid() as UserId; - const accountService: FakeAccountService = mockAccountServiceWith(mockUserId); - - beforeEach(async () => { - stateServiceMock = mock(); - - messagingServiceMock = mock(); - broadcasterServiceMock = mock(); - platformUtilsServiceMock = mock(); - mockToastService = mock(); - - activatedRouteMock = mock(); - activatedRouteMock.queryParams = mock(); - - mockMasterPasswordService = new FakeMasterPasswordService(); - - biometricStateService = mock(); - biometricStateService.dismissedRequirePasswordOnStartCallout$ = of(false); - biometricStateService.promptAutomatically$ = of(false); - biometricStateService.promptCancelled$ = of(false); - - await TestBed.configureTestingModule({ - declarations: [LockComponent, I18nPipe], - providers: [ - { provide: InternalMasterPasswordServiceAbstraction, useValue: mockMasterPasswordService }, - { - provide: I18nService, - useValue: mock(), - }, - { - provide: PlatformUtilsService, - useValue: platformUtilsServiceMock, - }, - { - provide: MessagingService, - useValue: messagingServiceMock, - }, - { - provide: KeyService, - useValue: mock(), - }, - { - provide: VaultTimeoutService, - useValue: mock(), - }, - { - provide: VaultTimeoutSettingsService, - useValue: mock(), - }, - { - provide: EnvironmentService, - useValue: mock(), - }, - { - provide: StateService, - useValue: stateServiceMock, - }, - { - provide: ApiService, - useValue: mock(), - }, - { - provide: ActivatedRoute, - useValue: activatedRouteMock, - }, - { - provide: BroadcasterService, - useValue: broadcasterServiceMock, - }, - { - provide: PolicyApiServiceAbstraction, - useValue: mock(), - }, - { - provide: InternalPolicyService, - useValue: mock(), - }, - { - provide: PasswordStrengthServiceAbstraction, - useValue: mock(), - }, - { - provide: LogService, - useValue: mock(), - }, - { - provide: DialogService, - useValue: mock(), - }, - { - provide: DeviceTrustServiceAbstraction, - useValue: mock(), - }, - { - provide: UserVerificationService, - useValue: mock(), - }, - { - provide: PinServiceAbstraction, - useValue: mock(), - }, - { - provide: BiometricStateService, - useValue: biometricStateService, - }, - { - provide: AbstractBiometricService, - useValue: biometricsService, - }, - { - provide: AccountService, - useValue: accountService, - }, - { - provide: AuthService, - useValue: mock(), - }, - { - provide: KdfConfigService, - useValue: mock(), - }, - { - provide: SyncService, - useValue: mock(), - }, - { - provide: ToastService, - useValue: mockToastService, - }, - ], - schemas: [NO_ERRORS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(LockComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - afterEach(() => { - jest.resetAllMocks(); - }); - - describe("ngOnInit", () => { - it("should call super.ngOnInit() once", async () => { - const superNgOnInitSpy = jest.spyOn(BaseLockComponent.prototype, "ngOnInit"); - await component.ngOnInit(); - expect(superNgOnInitSpy).toHaveBeenCalledTimes(1); - }); - - it('should set "autoPromptBiometric" to true if "biometricState.promptAutomatically$" resolves to true', async () => { - biometricStateService.promptAutomatically$ = of(true); - - await component.ngOnInit(); - expect(component["autoPromptBiometric"]).toBe(true); - }); - - it('should set "autoPromptBiometric" to false if "biometricState.promptAutomatically$" resolves to false', async () => { - biometricStateService.promptAutomatically$ = of(false); - - await component.ngOnInit(); - expect(component["autoPromptBiometric"]).toBe(false); - }); - - it('should set "biometricReady" to true if "stateService.getBiometricReady()" resolves to true', async () => { - component["canUseBiometric"] = jest.fn().mockResolvedValue(true); - - await component.ngOnInit(); - expect(component["biometricReady"]).toBe(true); - }); - - it('should set "biometricReady" to false if "stateService.getBiometricReady()" resolves to false', async () => { - component["canUseBiometric"] = jest.fn().mockResolvedValue(false); - - await component.ngOnInit(); - expect(component["biometricReady"]).toBe(false); - }); - - it("should call displayBiometricUpdateWarning", async () => { - component["displayBiometricUpdateWarning"] = jest.fn(); - await component.ngOnInit(); - expect(component["displayBiometricUpdateWarning"]).toHaveBeenCalledTimes(1); - }); - - it("should call delayedAskForBiometric", async () => { - component["delayedAskForBiometric"] = jest.fn(); - await component.ngOnInit(); - expect(component["delayedAskForBiometric"]).toHaveBeenCalledTimes(1); - expect(component["delayedAskForBiometric"]).toHaveBeenCalledWith(500); - }); - - it("should call delayedAskForBiometric when queryParams change", async () => { - activatedRouteMock.queryParams = of({ promptBiometric: true }); - component["delayedAskForBiometric"] = jest.fn(); - await component.ngOnInit(); - - expect(component["delayedAskForBiometric"]).toHaveBeenCalledTimes(1); - expect(component["delayedAskForBiometric"]).toHaveBeenCalledWith(500); - }); - - it("should call messagingService.send", async () => { - await component.ngOnInit(); - expect(messagingServiceMock.send).toHaveBeenCalledWith("getWindowIsFocused"); - }); - - describe("broadcasterService.subscribe", () => { - it('should call onWindowHidden() when "broadcasterService.subscribe" is called with "windowHidden"', async () => { - component["onWindowHidden"] = jest.fn(); - await component.ngOnInit(); - broadcasterServiceMock.subscribe.mock.calls[0][1]({ command: "windowHidden" }); - expect(component["onWindowHidden"]).toHaveBeenCalledTimes(1); - }); - - it('should call focusInput() when "broadcasterService.subscribe" is called with "windowIsFocused" is true and deferFocus is false', async () => { - component["focusInput"] = jest.fn(); - component["deferFocus"] = null; - await component.ngOnInit(); - broadcasterServiceMock.subscribe.mock.calls[0][1]({ - command: "windowIsFocused", - windowIsFocused: true, - } as any); - expect(component["deferFocus"]).toBe(false); - expect(component["focusInput"]).toHaveBeenCalledTimes(1); - }); - - it('should not call focusInput() when "broadcasterService.subscribe" is called with "windowIsFocused" is true and deferFocus is true', async () => { - component["focusInput"] = jest.fn(); - component["deferFocus"] = null; - await component.ngOnInit(); - broadcasterServiceMock.subscribe.mock.calls[0][1]({ - command: "windowIsFocused", - windowIsFocused: false, - } as any); - expect(component["deferFocus"]).toBe(true); - expect(component["focusInput"]).toHaveBeenCalledTimes(0); - }); - - it('should call focusInput() when "broadcasterService.subscribe" is called with "windowIsFocused" is true and deferFocus is true', async () => { - component["focusInput"] = jest.fn(); - component["deferFocus"] = true; - await component.ngOnInit(); - broadcasterServiceMock.subscribe.mock.calls[0][1]({ - command: "windowIsFocused", - windowIsFocused: true, - } as any); - expect(component["deferFocus"]).toBe(false); - expect(component["focusInput"]).toHaveBeenCalledTimes(1); - }); - - it('should not call focusInput() when "broadcasterService.subscribe" is called with "windowIsFocused" is false and deferFocus is true', async () => { - component["focusInput"] = jest.fn(); - component["deferFocus"] = true; - await component.ngOnInit(); - broadcasterServiceMock.subscribe.mock.calls[0][1]({ - command: "windowIsFocused", - windowIsFocused: false, - } as any); - expect(component["deferFocus"]).toBe(true); - expect(component["focusInput"]).toHaveBeenCalledTimes(0); - }); - }); - }); - - describe("ngOnDestroy", () => { - it("should call super.ngOnDestroy()", () => { - const superNgOnDestroySpy = jest.spyOn(BaseLockComponent.prototype, "ngOnDestroy"); - component.ngOnDestroy(); - expect(superNgOnDestroySpy).toHaveBeenCalledTimes(1); - }); - - it("should call broadcasterService.unsubscribe()", () => { - component.ngOnDestroy(); - expect(broadcasterServiceMock.unsubscribe).toHaveBeenCalledTimes(1); - }); - }); - - describe("focusInput", () => { - it('should call "focus" on #pin input if pinEnabled is true', () => { - component["pinEnabled"] = true; - global.document.getElementById = jest.fn().mockReturnValue({ focus: jest.fn() }); - component["focusInput"](); - expect(global.document.getElementById).toHaveBeenCalledWith("pin"); - }); - - it('should call "focus" on #masterPassword input if pinEnabled is false', () => { - component["pinEnabled"] = false; - global.document.getElementById = jest.fn().mockReturnValue({ focus: jest.fn() }); - component["focusInput"](); - expect(global.document.getElementById).toHaveBeenCalledWith("masterPassword"); - }); - }); - - describe("delayedAskForBiometric", () => { - beforeEach(() => { - component["supportsBiometric"] = true; - component["autoPromptBiometric"] = true; - }); - - it('should wait for "delay" milliseconds', fakeAsync(async () => { - const delaySpy = jest.spyOn(global, "setTimeout"); - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - - tick(4000); - component["biometricAsked"] = false; - - tick(1000); - component["biometricAsked"] = true; - - expect(delaySpy).toHaveBeenCalledWith(expect.any(Function), 5000); - })); - - it('should return; if "params" is defined and "params.promptBiometric" is false', fakeAsync(async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000, { promptBiometric: false }); - tick(5000); - expect(component["biometricAsked"]).toBe(false); - })); - - it('should not return; if "params" is defined and "params.promptBiometric" is true', fakeAsync(async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000, { promptBiometric: true }); - tick(5000); - expect(component["biometricAsked"]).toBe(true); - })); - - it('should not return; if "params" is undefined', fakeAsync(async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - tick(5000); - expect(component["biometricAsked"]).toBe(true); - })); - - it('should return; if "supportsBiometric" is false', fakeAsync(async () => { - component["supportsBiometric"] = false; - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - tick(5000); - expect(component["biometricAsked"]).toBe(false); - })); - - it('should return; if "autoPromptBiometric" is false', fakeAsync(async () => { - component["autoPromptBiometric"] = false; - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - tick(5000); - expect(component["biometricAsked"]).toBe(false); - })); - - it("should call unlockBiometric() if biometricAsked is false and window is visible", fakeAsync(async () => { - isWindowVisibleMock.mockResolvedValue(true); - component["unlockBiometric"] = jest.fn(); - component["biometricAsked"] = false; - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - tick(5000); - - expect(component["unlockBiometric"]).toHaveBeenCalledTimes(1); - })); - - it("should not call unlockBiometric() if biometricAsked is false and window is not visible", fakeAsync(async () => { - isWindowVisibleMock.mockResolvedValue(false); - component["unlockBiometric"] = jest.fn(); - component["biometricAsked"] = false; - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - tick(5000); - - expect(component["unlockBiometric"]).toHaveBeenCalledTimes(0); - })); - - it("should not call unlockBiometric() if biometricAsked is true", fakeAsync(async () => { - isWindowVisibleMock.mockResolvedValue(true); - component["unlockBiometric"] = jest.fn(); - component["biometricAsked"] = true; - - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - component["delayedAskForBiometric"](5000); - tick(5000); - - expect(component["unlockBiometric"]).toHaveBeenCalledTimes(0); - })); - }); - - describe("canUseBiometric", () => { - it("should call biometric.enabled with current active user", async () => { - await component["canUseBiometric"](); - - expect(ipc.keyManagement.biometric.enabled).toHaveBeenCalledWith(mockUserId); - }); - }); - - it('onWindowHidden() should set "showPassword" to false', () => { - component["showPassword"] = true; - component["onWindowHidden"](); - expect(component["showPassword"]).toBe(false); - }); -}); diff --git a/apps/desktop/src/auth/lock.component.ts b/apps/desktop/src/auth/lock.component.ts deleted file mode 100644 index ea2ac546ec..0000000000 --- a/apps/desktop/src/auth/lock.component.ts +++ /dev/null @@ -1,235 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Component, NgZone, OnDestroy, OnInit } from "@angular/core"; -import { ActivatedRoute, Router } from "@angular/router"; -import { firstValueFrom, map, switchMap } from "rxjs"; - -import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component"; -import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; -import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; -import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; -import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction"; -import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; -import { DeviceType } from "@bitwarden/common/enums"; -import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; -import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { DialogService, ToastService } from "@bitwarden/components"; -import { - KdfConfigService, - KeyService, - BiometricsService, - BiometricStateService, -} from "@bitwarden/key-management"; - -const BroadcasterSubscriptionId = "LockComponent"; - -@Component({ - selector: "app-lock", - templateUrl: "lock.component.html", -}) -export class LockComponent extends BaseLockComponent implements OnInit, OnDestroy { - private deferFocus: boolean = null; - protected biometricReady = false; - private biometricAsked = false; - private autoPromptBiometric = false; - private timerId: any; - - constructor( - masterPasswordService: InternalMasterPasswordServiceAbstraction, - router: Router, - i18nService: I18nService, - platformUtilsService: PlatformUtilsService, - messagingService: MessagingService, - keyService: KeyService, - vaultTimeoutService: VaultTimeoutService, - vaultTimeoutSettingsService: VaultTimeoutSettingsService, - environmentService: EnvironmentService, - protected override stateService: StateService, - apiService: ApiService, - private route: ActivatedRoute, - private broadcasterService: BroadcasterService, - ngZone: NgZone, - policyApiService: PolicyApiServiceAbstraction, - policyService: InternalPolicyService, - passwordStrengthService: PasswordStrengthServiceAbstraction, - logService: LogService, - dialogService: DialogService, - deviceTrustService: DeviceTrustServiceAbstraction, - userVerificationService: UserVerificationService, - pinService: PinServiceAbstraction, - biometricStateService: BiometricStateService, - biometricsService: BiometricsService, - accountService: AccountService, - authService: AuthService, - kdfConfigService: KdfConfigService, - syncService: SyncService, - toastService: ToastService, - ) { - super( - masterPasswordService, - router, - i18nService, - platformUtilsService, - messagingService, - keyService, - vaultTimeoutService, - vaultTimeoutSettingsService, - environmentService, - stateService, - apiService, - logService, - ngZone, - policyApiService, - policyService, - passwordStrengthService, - dialogService, - deviceTrustService, - userVerificationService, - pinService, - biometricStateService, - biometricsService, - accountService, - authService, - kdfConfigService, - syncService, - toastService, - ); - } - - async ngOnInit() { - await super.ngOnInit(); - this.autoPromptBiometric = await firstValueFrom( - this.biometricStateService.promptAutomatically$, - ); - this.biometricReady = await this.canUseBiometric(); - - await this.displayBiometricUpdateWarning(); - - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.delayedAskForBiometric(500); - this.route.queryParams.pipe(switchMap((params) => this.delayedAskForBiometric(500, params))); - - this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => { - this.ngZone.run(() => { - switch (message.command) { - case "windowHidden": - this.onWindowHidden(); - break; - case "windowIsFocused": - if (this.deferFocus === null) { - this.deferFocus = !message.windowIsFocused; - if (!this.deferFocus) { - this.focusInput(); - } - } else if (this.deferFocus && message.windowIsFocused) { - this.focusInput(); - this.deferFocus = false; - } - break; - default: - } - }); - }); - this.messagingService.send("getWindowIsFocused"); - - // start background listener until destroyed on interval - this.timerId = setInterval(async () => { - this.supportsBiometric = await this.biometricsService.supportsBiometric(); - this.biometricReady = await this.canUseBiometric(); - }, 1000); - } - - ngOnDestroy() { - super.ngOnDestroy(); - this.broadcasterService.unsubscribe(BroadcasterSubscriptionId); - clearInterval(this.timerId); - } - - onWindowHidden() { - this.showPassword = false; - } - - private async delayedAskForBiometric(delay: number, params?: any) { - await new Promise((resolve) => setTimeout(resolve, delay)); - - if (params && !params.promptBiometric) { - return; - } - - if (!this.supportsBiometric || !this.autoPromptBiometric || this.biometricAsked) { - return; - } - - if (await firstValueFrom(this.biometricStateService.promptCancelled$)) { - return; - } - - this.biometricAsked = true; - if (await ipc.platform.isWindowVisible()) { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.unlockBiometric(); - } - } - - private async canUseBiometric() { - const userId = await firstValueFrom(this.accountService.activeAccount$.pipe(map((a) => a?.id))); - return await ipc.keyManagement.biometric.enabled(userId); - } - - private focusInput() { - document.getElementById(this.pinEnabled ? "pin" : "masterPassword")?.focus(); - } - - private async displayBiometricUpdateWarning(): Promise { - if (await firstValueFrom(this.biometricStateService.dismissedRequirePasswordOnStartCallout$)) { - return; - } - - if (this.platformUtilsService.getDevice() !== DeviceType.WindowsDesktop) { - return; - } - - if (await firstValueFrom(this.biometricStateService.biometricUnlockEnabled$)) { - const response = await this.dialogService.openSimpleDialog({ - title: { key: "windowsBiometricUpdateWarningTitle" }, - content: { key: "windowsBiometricUpdateWarning" }, - type: "warning", - }); - - await this.biometricStateService.setRequirePasswordOnStart(response); - if (response) { - await this.biometricStateService.setPromptAutomatically(false); - } - this.supportsBiometric = await this.canUseBiometric(); - await this.biometricStateService.setDismissedRequirePasswordOnStartCallout(); - } - } - - get biometricText() { - switch (this.platformUtilsService.getDevice()) { - case DeviceType.MacOsDesktop: - return "unlockWithTouchId"; - case DeviceType.WindowsDesktop: - return "unlockWithWindowsHello"; - case DeviceType.LinuxDesktop: - return "unlockWithPolkit"; - default: - throw new Error("Unsupported platform"); - } - } -} diff --git a/apps/web/src/app/auth/lock.component.html b/apps/web/src/app/auth/lock.component.html deleted file mode 100644 index f630906223..0000000000 --- a/apps/web/src/app/auth/lock.component.html +++ /dev/null @@ -1,27 +0,0 @@ -
    - - {{ "masterPass" | i18n }} - - - {{ "loggedInAsEmailOn" | i18n: email : webVaultHostname }} - - -
    - -
    - - -
    -
    diff --git a/apps/web/src/app/auth/lock.component.ts b/apps/web/src/app/auth/lock.component.ts deleted file mode 100644 index 36e9c81f2c..0000000000 --- a/apps/web/src/app/auth/lock.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Component, OnInit, inject } from "@angular/core"; -import { FormBuilder, Validators } from "@angular/forms"; - -import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component"; - -import { SharedModule } from "../shared"; - -@Component({ - selector: "app-lock", - templateUrl: "lock.component.html", - standalone: true, - imports: [SharedModule], -}) -export class LockComponent extends BaseLockComponent implements OnInit { - formBuilder = inject(FormBuilder); - - formGroup = this.formBuilder.group({ - masterPassword: ["", { validators: Validators.required, updateOn: "submit" }], - }); - - get masterPasswordFormControl() { - return this.formGroup.controls.masterPassword; - } - - async ngOnInit() { - await super.ngOnInit(); - - this.masterPasswordFormControl.setValue(this.masterPassword); - - this.onSuccessfulSubmit = async () => { - await this.router.navigateByUrl(this.successRoute); - }; - } - - async superSubmit() { - await super.submit(); - } - - submit = async () => { - this.formGroup.markAllAsTouched(); - - if (this.formGroup.invalid) { - return; - } - - this.masterPassword = this.masterPasswordFormControl.value; - await this.superSubmit(); - }; -} diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index 9f2a86c1c0..ad536110b7 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -12,7 +12,6 @@ import { } from "@bitwarden/angular/auth/guards"; import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; import { generatorSwap } from "@bitwarden/angular/tools/generator/generator-swap"; -import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap"; import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards"; import { AnonLayoutWrapperComponent, @@ -26,7 +25,7 @@ import { RegistrationLinkExpiredComponent, LoginComponent, LoginSecondaryContentComponent, - LockV2Component, + LockComponent, LockIcon, TwoFactorTimeoutIcon, UserLockIcon, @@ -56,7 +55,6 @@ import { FamiliesForEnterpriseSetupComponent } from "./admin-console/organizatio import { CreateOrganizationComponent } from "./admin-console/settings/create-organization.component"; import { deepLinkGuard } from "./auth/guards/deep-link.guard"; import { HintComponent } from "./auth/hint.component"; -import { LockComponent } from "./auth/lock.component"; import { LoginDecryptionOptionsComponentV1 } from "./auth/login/login-decryption-options/login-decryption-options-v1.component"; import { LoginComponentV1 } from "./auth/login/login-v1.component"; import { LoginViaAuthRequestComponentV1 } from "./auth/login/login-via-auth-request-v1.component"; @@ -509,44 +507,23 @@ const routes: Routes = [ }, }, }, - ...extensionRefreshSwap( - LockComponent, - LockV2Component, - { - path: "lock", - canActivate: [deepLinkGuard(), lockGuard()], - children: [ - { - path: "", - component: LockComponent, - }, - ], - data: { - pageTitle: { - key: "yourVaultIsLockedV2", - }, - pageIcon: LockIcon, - showReadonlyHostname: true, - } satisfies AnonLayoutWrapperData, - }, - { - path: "lock", - canActivate: [deepLinkGuard(), lockGuard()], - children: [ - { - path: "", - component: LockV2Component, - }, - ], - data: { - pageTitle: { - key: "yourVaultIsLockedV2", - }, - pageIcon: LockIcon, - showReadonlyHostname: true, - } satisfies AnonLayoutWrapperData, - }, - ), + { + path: "lock", + canActivate: [deepLinkGuard(), lockGuard()], + children: [ + { + path: "", + component: LockComponent, + }, + ], + data: { + pageTitle: { + key: "yourVaultIsLockedV2", + }, + pageIcon: LockIcon, + showReadonlyHostname: true, + } satisfies AnonLayoutWrapperData, + }, { path: "2fa", canActivate: [unauthGuardFn()], diff --git a/libs/angular/src/auth/components/lock.component.ts b/libs/angular/src/auth/components/lock.component.ts deleted file mode 100644 index 20ad37fd2b..0000000000 --- a/libs/angular/src/auth/components/lock.component.ts +++ /dev/null @@ -1,398 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Directive, NgZone, OnDestroy, OnInit } from "@angular/core"; -import { Router } from "@angular/router"; -import { firstValueFrom, Subject } from "rxjs"; -import { concatMap, map, take, takeUntil } from "rxjs/operators"; - -import { PinServiceAbstraction, PinLockType } from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; -import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; -import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; -import { MasterPasswordPolicyOptions } from "@bitwarden/common/admin-console/models/domain/master-password-policy-options"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; -import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction"; -import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; -import { VerificationType } from "@bitwarden/common/auth/enums/verification-type"; -import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason"; -import { - MasterPasswordVerification, - MasterPasswordVerificationResponse, -} from "@bitwarden/common/auth/types/verification"; -import { ClientType } from "@bitwarden/common/enums"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { KeySuffixOptions } from "@bitwarden/common/platform/enums"; -import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; -import { UserId } from "@bitwarden/common/types/guid"; -import { UserKey } from "@bitwarden/common/types/key"; -import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { DialogService, ToastService } from "@bitwarden/components"; -import { - KdfConfigService, - KeyService, - BiometricStateService, - BiometricsService, -} from "@bitwarden/key-management"; - -@Directive() -export class LockComponent implements OnInit, OnDestroy { - masterPassword = ""; - pin = ""; - showPassword = false; - email: string; - pinEnabled = false; - masterPasswordEnabled = false; - webVaultHostname = ""; - formPromise: Promise; - supportsBiometric: boolean; - biometricLock: boolean; - - private activeUserId: UserId; - protected successRoute = "vault"; - protected forcePasswordResetRoute = "update-temp-password"; - protected onSuccessfulSubmit: () => Promise; - - private invalidPinAttempts = 0; - private pinLockType: PinLockType; - - private enforcedMasterPasswordOptions: MasterPasswordPolicyOptions = undefined; - - private destroy$ = new Subject(); - - constructor( - protected masterPasswordService: InternalMasterPasswordServiceAbstraction, - protected router: Router, - protected i18nService: I18nService, - protected platformUtilsService: PlatformUtilsService, - protected messagingService: MessagingService, - protected keyService: KeyService, - protected vaultTimeoutService: VaultTimeoutService, - protected vaultTimeoutSettingsService: VaultTimeoutSettingsService, - protected environmentService: EnvironmentService, - protected stateService: StateService, - protected apiService: ApiService, - protected logService: LogService, - protected ngZone: NgZone, - protected policyApiService: PolicyApiServiceAbstraction, - protected policyService: InternalPolicyService, - protected passwordStrengthService: PasswordStrengthServiceAbstraction, - protected dialogService: DialogService, - protected deviceTrustService: DeviceTrustServiceAbstraction, - protected userVerificationService: UserVerificationService, - protected pinService: PinServiceAbstraction, - protected biometricStateService: BiometricStateService, - protected biometricsService: BiometricsService, - protected accountService: AccountService, - protected authService: AuthService, - protected kdfConfigService: KdfConfigService, - protected syncService: SyncService, - protected toastService: ToastService, - ) {} - - async ngOnInit() { - this.accountService.activeAccount$ - .pipe( - concatMap(async (account) => { - this.activeUserId = account?.id; - await this.load(account?.id); - }), - takeUntil(this.destroy$), - ) - .subscribe(); - } - - ngOnDestroy() { - this.destroy$.next(); - this.destroy$.complete(); - } - - async submit() { - if (this.pinEnabled) { - return await this.handlePinRequiredUnlock(); - } - - await this.handleMasterPasswordRequiredUnlock(); - } - - async logOut() { - const confirmed = await this.dialogService.openSimpleDialog({ - title: { key: "logOut" }, - content: { key: "logOutConfirmation" }, - acceptButtonText: { key: "logOut" }, - type: "warning", - }); - - if (confirmed) { - this.messagingService.send("logout", { userId: this.activeUserId }); - } - } - - async unlockBiometric(): Promise { - if (!this.biometricLock) { - return; - } - - await this.biometricStateService.setUserPromptCancelled(); - const userKey = await this.keyService.getUserKeyFromStorage( - KeySuffixOptions.Biometric, - this.activeUserId, - ); - - if (userKey) { - await this.setUserKeyAndContinue(userKey, this.activeUserId, false); - } - - return !!userKey; - } - - async isBiometricUnlockAvailable(): Promise { - if (!(await this.biometricsService.supportsBiometric())) { - return false; - } - return this.biometricsService.isBiometricUnlockAvailable(); - } - - togglePassword() { - this.showPassword = !this.showPassword; - const input = document.getElementById(this.pinEnabled ? "pin" : "masterPassword"); - if (this.ngZone.isStable) { - input.focus(); - } else { - this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus()); - } - } - - private async handlePinRequiredUnlock() { - if (this.pin == null || this.pin === "") { - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: this.i18nService.t("pinRequired"), - }); - return; - } - - return await this.doUnlockWithPin(); - } - - private async doUnlockWithPin() { - const MAX_INVALID_PIN_ENTRY_ATTEMPTS = 5; - - try { - const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id; - const userKey = await this.pinService.decryptUserKeyWithPin(this.pin, userId); - - if (userKey) { - await this.setUserKeyAndContinue(userKey, userId); - return; // successfully unlocked - } - - // Failure state: invalid PIN or failed decryption - this.invalidPinAttempts++; - - // Log user out if they have entered an invalid PIN too many times - if (this.invalidPinAttempts >= MAX_INVALID_PIN_ENTRY_ATTEMPTS) { - this.toastService.showToast({ - variant: "error", - title: null, - message: this.i18nService.t("tooManyInvalidPinEntryAttemptsLoggingOut"), - }); - this.messagingService.send("logout"); - return; - } - - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: this.i18nService.t("invalidPin"), - }); - } catch { - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: this.i18nService.t("unexpectedError"), - }); - } - } - - private async handleMasterPasswordRequiredUnlock() { - if (this.masterPassword == null || this.masterPassword === "") { - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: this.i18nService.t("masterPasswordRequired"), - }); - return; - } - await this.doUnlockWithMasterPassword(); - } - - private async doUnlockWithMasterPassword() { - const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id; - - const verification = { - type: VerificationType.MasterPassword, - secret: this.masterPassword, - } as MasterPasswordVerification; - - let passwordValid = false; - let response: MasterPasswordVerificationResponse; - try { - this.formPromise = this.userVerificationService.verifyUserByMasterPassword( - verification, - userId, - this.email, - ); - response = await this.formPromise; - this.enforcedMasterPasswordOptions = MasterPasswordPolicyOptions.fromResponse( - response.policyOptions, - ); - passwordValid = true; - } catch (e) { - this.logService.error(e); - } finally { - this.formPromise = null; - } - - if (!passwordValid) { - this.toastService.showToast({ - variant: "error", - title: this.i18nService.t("errorOccurred"), - message: this.i18nService.t("invalidMasterPassword"), - }); - return; - } - - const userKey = await this.masterPasswordService.decryptUserKeyWithMasterKey( - response.masterKey, - userId, - ); - await this.setUserKeyAndContinue(userKey, userId, true); - } - - private async setUserKeyAndContinue( - key: UserKey, - userId: UserId, - evaluatePasswordAfterUnlock = false, - ) { - await this.keyService.setUserKey(key, userId); - - // Now that we have a decrypted user key in memory, we can check if we - // need to establish trust on the current device - const activeAccount = await firstValueFrom(this.accountService.activeAccount$); - await this.deviceTrustService.trustDeviceIfRequired(activeAccount.id); - - await this.doContinue(evaluatePasswordAfterUnlock); - } - - private async doContinue(evaluatePasswordAfterUnlock: boolean) { - await this.biometricStateService.resetUserPromptCancelled(); - this.messagingService.send("unlocked"); - - if (evaluatePasswordAfterUnlock) { - try { - // If we do not have any saved policies, attempt to load them from the service - if (this.enforcedMasterPasswordOptions == undefined) { - this.enforcedMasterPasswordOptions = await firstValueFrom( - this.policyService.masterPasswordPolicyOptions$(), - ); - } - - if (this.requirePasswordChange()) { - const userId = (await firstValueFrom(this.accountService.activeAccount$))?.id; - await this.masterPasswordService.setForceSetPasswordReason( - ForceSetPasswordReason.WeakMasterPassword, - userId, - ); - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.router.navigate([this.forcePasswordResetRoute]); - return; - } - } catch (e) { - // Do not prevent unlock if there is an error evaluating policies - this.logService.error(e); - } - } - - // Vault can be de-synced since notifications get ignored while locked. Need to check whether sync is required using the sync service. - const clientType = this.platformUtilsService.getClientType(); - if (clientType === ClientType.Browser || clientType === ClientType.Desktop) { - // Desktop and Browser have better offline support and to facilitate this we don't make the user wait for what - // could be an HTTP Timeout because their server is unreachable. - await Promise.race([ - this.syncService - .fullSync(false) - .catch((err) => this.logService.error("Error during unlock sync", err)), - new Promise((resolve) => - setTimeout(() => { - this.logService.warning("Skipping sync wait, continuing to unlock."); - resolve(); - }, 5_000), - ), - ]); - } else { - await this.syncService.fullSync(false); - } - - if (this.onSuccessfulSubmit != null) { - await this.onSuccessfulSubmit(); - } else if (this.router != null) { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.router.navigate([this.successRoute]); - } - } - - private async load(userId: UserId) { - this.pinLockType = await this.pinService.getPinLockType(userId); - - this.pinEnabled = await this.pinService.isPinDecryptionAvailable(userId); - - this.masterPasswordEnabled = await this.userVerificationService.hasMasterPassword(); - - this.supportsBiometric = await this.biometricsService.supportsBiometric(); - this.biometricLock = - (await this.vaultTimeoutSettingsService.isBiometricLockSet()) && - ((await this.keyService.hasUserKeyStored(KeySuffixOptions.Biometric)) || - !this.platformUtilsService.supportsSecureStorage()); - this.email = await firstValueFrom( - this.accountService.activeAccount$.pipe(map((a) => a?.email)), - ); - - this.webVaultHostname = (await this.environmentService.getEnvironment()).getHostname(); - } - - /** - * Checks if the master password meets the enforced policy requirements - * If not, returns false - */ - private requirePasswordChange(): boolean { - if ( - this.enforcedMasterPasswordOptions == undefined || - !this.enforcedMasterPasswordOptions.enforceOnLogin - ) { - return false; - } - - const passwordStrength = this.passwordStrengthService.getPasswordStrength( - this.masterPassword, - this.email, - )?.score; - - return !this.policyService.evaluateMasterPassword( - passwordStrength, - this.masterPassword, - this.enforcedMasterPasswordOptions, - ); - } -} diff --git a/libs/auth/src/angular/lock/lock.component.ts b/libs/auth/src/angular/lock/lock.component.ts index bcbc2bd575..aa7b43c2e5 100644 --- a/libs/auth/src/angular/lock/lock.component.ts +++ b/libs/auth/src/angular/lock/lock.component.ts @@ -75,7 +75,7 @@ const clientTypeToSuccessRouteRecord: Partial> = { IconButtonModule, ], }) -export class LockV2Component implements OnInit, OnDestroy { +export class LockComponent implements OnInit, OnDestroy { private destroy$ = new Subject(); activeAccount: Account | null; @@ -543,8 +543,8 @@ export class LockV2Component implements OnInit, OnDestroy { const previousUrl = this.lockComponentService.getPreviousUrl(); /** * In a passkey flow, the `previousUrl` will still be `/fido2?` at this point - * because the `/lockV2` route doesn't save the URL in the `BrowserRouterService`. This is - * handled by the `doNotSaveUrl` property on the `lockV2` route in `app-routing.module.ts`. + * because the `/lock` route doesn't save the URL in the `BrowserRouterService`. This is + * handled by the `doNotSaveUrl` property on the `/lock` route in `app-routing.module.ts`. */ if (previousUrl) { await this.router.navigateByUrl(previousUrl); From ce5ae478a8a46575be9d20a04d9b4d33cba53132 Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Fri, 20 Dec 2024 19:46:24 +0100 Subject: [PATCH 17/18] [PM-15921] Remove v1 generator and generator history (#12345) * Remove v1 generator, generator history page and extension refresh conditional routing * Remove unused keys from en/messages.json --------- Co-authored-by: Daniel James Smith --- apps/browser/src/_locales/en/messages.json | 22 - apps/browser/src/popup/app-routing.module.ts | 14 +- apps/browser/src/popup/app.module.ts | 4 - .../popup/generator/generator.component.html | 588 ------------------ .../popup/generator/generator.component.ts | 88 --- .../password-generator-history.component.html | 48 -- .../password-generator-history.component.ts | 28 - 7 files changed, 7 insertions(+), 785 deletions(-) delete mode 100644 apps/browser/src/tools/popup/generator/generator.component.html delete mode 100644 apps/browser/src/tools/popup/generator/generator.component.ts delete mode 100644 apps/browser/src/tools/popup/generator/password-generator-history.component.html delete mode 100644 apps/browser/src/tools/popup/generator/password-generator-history.component.ts diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index de438a0946..4b7d9eb299 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -454,9 +454,6 @@ "length": { "message": "Length" }, - "passwordMinLength": { - "message": "Minimum password length" - }, "uppercase": { "message": "Uppercase (A-Z)", "description": "deprecated. Use uppercaseLabel instead." @@ -528,10 +525,6 @@ "minSpecial": { "message": "Minimum special" }, - "avoidAmbChar": { - "message": "Avoid ambiguous characters", - "description": "deprecated. Use avoidAmbiguous instead." - }, "avoidAmbiguous": { "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." @@ -2047,9 +2040,6 @@ "clone": { "message": "Clone" }, - "passwordGeneratorPolicyInEffect": { - "message": "One or more organization policies are affecting your generator settings." - }, "passwordGenerator": { "message": "Password generator" }, @@ -2884,9 +2874,6 @@ "error": { "message": "Error" }, - "regenerateUsername": { - "message": "Regenerate username" - }, "generateUsername": { "message": "Generate username" }, @@ -2927,9 +2914,6 @@ } } }, - "usernameType": { - "message": "Username type" - }, "plusAddressedEmail": { "message": "Plus addressed email", "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" @@ -2952,12 +2936,6 @@ "websiteName": { "message": "Website name" }, - "whatWouldYouLikeToGenerate": { - "message": "What would you like to generate?" - }, - "passwordType": { - "message": "Password type" - }, "service": { "message": "Service" }, diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts index 549a677857..1f42c1cf31 100644 --- a/apps/browser/src/popup/app-routing.module.ts +++ b/apps/browser/src/popup/app-routing.module.ts @@ -86,8 +86,6 @@ import BrowserPopupUtils from "../platform/popup/browser-popup-utils"; import { popupRouterCacheGuard } from "../platform/popup/view-cache/popup-router-cache.service"; import { CredentialGeneratorHistoryComponent } from "../tools/popup/generator/credential-generator-history.component"; import { CredentialGeneratorComponent } from "../tools/popup/generator/credential-generator.component"; -import { GeneratorComponent } from "../tools/popup/generator/generator.component"; -import { PasswordGeneratorHistoryComponent } from "../tools/popup/generator/password-generator-history.component"; import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component"; import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component"; import { SendTypeComponent } from "../tools/popup/send/send-type.component"; @@ -330,15 +328,16 @@ const routes: Routes = [ }), { path: "generator", - component: GeneratorComponent, + component: CredentialGeneratorComponent, canActivate: [authGuard], data: { elevation: 0 } satisfies RouteDataProperties, }, - ...extensionRefreshSwap(PasswordGeneratorHistoryComponent, CredentialGeneratorHistoryComponent, { + { path: "generator-history", + component: CredentialGeneratorHistoryComponent, canActivate: [authGuard], data: { elevation: 1 } satisfies RouteDataProperties, - }), + }, { path: "import", component: ImportBrowserV2Component, @@ -757,11 +756,12 @@ const routes: Routes = [ canDeactivate: [clearVaultStateGuard], data: { elevation: 0 } satisfies RouteDataProperties, }, - ...extensionRefreshSwap(GeneratorComponent, CredentialGeneratorComponent, { + { path: "generator", + component: CredentialGeneratorComponent, canActivate: [authGuard], data: { elevation: 0 } satisfies RouteDataProperties, - }), + }, { path: "settings", component: SettingsV2Component, diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index 3d8cb26779..c2697b2d49 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -56,8 +56,6 @@ import { PopupHeaderComponent } from "../platform/popup/layout/popup-header.comp import { PopupPageComponent } from "../platform/popup/layout/popup-page.component"; import { PopupTabNavigationComponent } from "../platform/popup/layout/popup-tab-navigation.component"; import { FilePopoutCalloutComponent } from "../tools/popup/components/file-popout-callout.component"; -import { GeneratorComponent } from "../tools/popup/generator/generator.component"; -import { PasswordGeneratorHistoryComponent } from "../tools/popup/generator/password-generator-history.component"; import { SendListComponent } from "../tools/popup/send/components/send-list.component"; import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component"; import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component"; @@ -160,8 +158,6 @@ import "../platform/popup/locales"; LoginDecryptionOptionsComponentV1, NotificationsSettingsV1Component, AppearanceComponent, - GeneratorComponent, - PasswordGeneratorHistoryComponent, PasswordHistoryComponent, PremiumComponent, RegisterComponent, diff --git a/apps/browser/src/tools/popup/generator/generator.component.html b/apps/browser/src/tools/popup/generator/generator.component.html deleted file mode 100644 index d92d32a562..0000000000 --- a/apps/browser/src/tools/popup/generator/generator.component.html +++ /dev/null @@ -1,588 +0,0 @@ - -
    - - -
    -

    - {{ "generator" | i18n }} -

    -
    - -
    -
    -
    - - {{ "passwordGeneratorPolicyInEffect" | i18n }} - -
    -
    -
    - - -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - -
    - - -
    -
    -
    -
    - -
    -

    - {{ "options" | i18n }} -

    -
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    - -
    -
    -
    - - - -
    -
    - {{ "passwordMinLength" | i18n }} - - {{ passwordOptionsMinLengthForReader$ | async }} - - {{ passwordOptions.minLength }} -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - -
    - -
    -

    - {{ "options" | i18n }} -

    -
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -
    - - -
    - -
    - - -
    -
    - - -
    -
    - -
    - - -
    -
    - -
    - - -
    -
    - - -
    -
    - - -
    -
    - -
    - - -
    -
    - -
    - - -
    -
    - -
    - - -
    -
    - - -
    -
    -
    -
    -
    -
    -
    - - -
    -
    - -
    - - -
    -
    -
    - - -
    -
    -
    -
    -
    -
    - - -
    -
    - -
    - - -
    -
    -
    - - -
    -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    -
    -
    diff --git a/apps/browser/src/tools/popup/generator/generator.component.ts b/apps/browser/src/tools/popup/generator/generator.component.ts deleted file mode 100644 index d744c58f4d..0000000000 --- a/apps/browser/src/tools/popup/generator/generator.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Location } from "@angular/common"; -import { Component, NgZone, OnInit } from "@angular/core"; -import { ActivatedRoute } from "@angular/router"; -import { firstValueFrom } from "rxjs"; - -import { GeneratorComponent as BaseGeneratorComponent } from "@bitwarden/angular/tools/generator/components/generator.component"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; -import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { AddEditCipherInfo } from "@bitwarden/common/vault/types/add-edit-cipher-info"; -import { ToastService } from "@bitwarden/components"; -import { - PasswordGenerationServiceAbstraction, - UsernameGenerationServiceAbstraction, -} from "@bitwarden/generator-legacy"; - -@Component({ - selector: "app-generator", - templateUrl: "generator.component.html", -}) -export class GeneratorComponent extends BaseGeneratorComponent implements OnInit { - private addEditCipherInfo: AddEditCipherInfo; - private cipherState: CipherView; - private cipherService: CipherService; - - constructor( - passwordGenerationService: PasswordGenerationServiceAbstraction, - usernameGenerationService: UsernameGenerationServiceAbstraction, - platformUtilsService: PlatformUtilsService, - i18nService: I18nService, - accountService: AccountService, - cipherService: CipherService, - route: ActivatedRoute, - logService: LogService, - ngZone: NgZone, - private location: Location, - toastService: ToastService, - ) { - super( - passwordGenerationService, - usernameGenerationService, - platformUtilsService, - accountService, - i18nService, - logService, - route, - ngZone, - window, - toastService, - ); - this.cipherService = cipherService; - } - - async ngOnInit() { - this.addEditCipherInfo = await firstValueFrom(this.cipherService.addEditCipherInfo$); - if (this.addEditCipherInfo != null) { - this.cipherState = this.addEditCipherInfo.cipher; - } - this.comingFromAddEdit = this.cipherState != null; - if (this.cipherState?.login?.hasUris) { - this.usernameWebsite = this.cipherState.login.uris[0].hostname; - } - await super.ngOnInit(); - } - - select() { - super.select(); - if (this.type === "password") { - this.cipherState.login.password = this.password; - } else if (this.type === "username") { - this.cipherState.login.username = this.username; - } - this.addEditCipherInfo.cipher = this.cipherState; - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.cipherService.setAddEditCipherInfo(this.addEditCipherInfo); - this.close(); - } - - close() { - this.location.back(); - } -} diff --git a/apps/browser/src/tools/popup/generator/password-generator-history.component.html b/apps/browser/src/tools/popup/generator/password-generator-history.component.html deleted file mode 100644 index 8f4a246fc5..0000000000 --- a/apps/browser/src/tools/popup/generator/password-generator-history.component.html +++ /dev/null @@ -1,48 +0,0 @@ -
    -
    - -
    -

    - {{ "passwordHistory" | i18n }} -

    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - {{ h.date | date: "medium" }} -
    -
    -
    - -
    -
    -
    -
    -
    -

    {{ "noPasswordsInList" | i18n }}

    -
    -
    diff --git a/apps/browser/src/tools/popup/generator/password-generator-history.component.ts b/apps/browser/src/tools/popup/generator/password-generator-history.component.ts deleted file mode 100644 index 2436ae51a7..0000000000 --- a/apps/browser/src/tools/popup/generator/password-generator-history.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Location } from "@angular/common"; -import { Component } from "@angular/core"; - -import { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from "@bitwarden/angular/tools/generator/components/password-generator-history.component"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { ToastService } from "@bitwarden/components"; -import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; - -@Component({ - selector: "app-password-generator-history", - templateUrl: "password-generator-history.component.html", -}) -export class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent { - constructor( - passwordGenerationService: PasswordGenerationServiceAbstraction, - platformUtilsService: PlatformUtilsService, - i18nService: I18nService, - private location: Location, - toastService: ToastService, - ) { - super(passwordGenerationService, platformUtilsService, i18nService, window, toastService); - } - - close() { - this.location.back(); - } -} From 64166a9354dc2e1397d38ec5de10f795e68213e3 Mon Sep 17 00:00:00 2001 From: Victoria League Date: Fri, 20 Dec 2024 14:03:50 -0500 Subject: [PATCH 18/18] [PM-16102] Increase clickable area for bit-item actions (#12450) --- .../components/src/badge/badge.component.html | 3 +++ ...{badge.directive.ts => badge.component.ts} | 13 ++++++----- libs/components/src/badge/badge.module.ts | 6 ++--- libs/components/src/badge/badge.stories.ts | 10 ++++----- libs/components/src/badge/index.ts | 2 +- .../src/item/item-action.component.ts | 8 +++++++ .../src/item/item-content.component.ts | 4 ++++ libs/components/src/item/item.stories.ts | 22 +++++++++---------- 8 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 libs/components/src/badge/badge.component.html rename libs/components/src/badge/{badge.directive.ts => badge.component.ts} (89%) diff --git a/libs/components/src/badge/badge.component.html b/libs/components/src/badge/badge.component.html new file mode 100644 index 0000000000..6f586ec352 --- /dev/null +++ b/libs/components/src/badge/badge.component.html @@ -0,0 +1,3 @@ + + + diff --git a/libs/components/src/badge/badge.directive.ts b/libs/components/src/badge/badge.component.ts similarity index 89% rename from libs/components/src/badge/badge.directive.ts rename to libs/components/src/badge/badge.component.ts index eef876a664..29644a11ac 100644 --- a/libs/components/src/badge/badge.directive.ts +++ b/libs/components/src/badge/badge.component.ts @@ -1,6 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { Directive, ElementRef, HostBinding, Input } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { Component, ElementRef, HostBinding, Input } from "@angular/core"; import { FocusableElement } from "../shared/focusable-element"; @@ -28,12 +29,14 @@ const hoverStyles: Record = { info: ["hover:tw-bg-info-600", "hover:tw-border-info-600", "hover:!tw-text-black"], }; -@Directive({ +@Component({ selector: "span[bitBadge], a[bitBadge], button[bitBadge]", - providers: [{ provide: FocusableElement, useExisting: BadgeDirective }], + providers: [{ provide: FocusableElement, useExisting: BadgeComponent }], + imports: [CommonModule], + templateUrl: "badge.component.html", standalone: true, }) -export class BadgeDirective implements FocusableElement { +export class BadgeComponent implements FocusableElement { @HostBinding("class") get classList() { return [ "tw-inline-block", @@ -63,7 +66,7 @@ export class BadgeDirective implements FocusableElement { ] .concat(styles[this.variant]) .concat(this.hasHoverEffects ? hoverStyles[this.variant] : []) - .concat(this.truncate ? ["tw-truncate", this.maxWidthClass] : []); + .concat(this.truncate ? this.maxWidthClass : []); } @HostBinding("attr.title") get titleAttr() { if (this.title !== undefined) { diff --git a/libs/components/src/badge/badge.module.ts b/libs/components/src/badge/badge.module.ts index e7f3770785..d9a6e71282 100644 --- a/libs/components/src/badge/badge.module.ts +++ b/libs/components/src/badge/badge.module.ts @@ -1,9 +1,9 @@ import { NgModule } from "@angular/core"; -import { BadgeDirective } from "./badge.directive"; +import { BadgeComponent } from "./badge.component"; @NgModule({ - imports: [BadgeDirective], - exports: [BadgeDirective], + imports: [BadgeComponent], + exports: [BadgeComponent], }) export class BadgeModule {} diff --git a/libs/components/src/badge/badge.stories.ts b/libs/components/src/badge/badge.stories.ts index b8ac7ec8ef..5d697f8ad8 100644 --- a/libs/components/src/badge/badge.stories.ts +++ b/libs/components/src/badge/badge.stories.ts @@ -1,14 +1,14 @@ import { CommonModule } from "@angular/common"; import { Meta, moduleMetadata, StoryObj } from "@storybook/angular"; -import { BadgeDirective } from "./badge.directive"; +import { BadgeComponent } from "./badge.component"; export default { title: "Component Library/Badge", - component: BadgeDirective, + component: BadgeComponent, decorators: [ moduleMetadata({ - imports: [CommonModule, BadgeDirective], + imports: [CommonModule, BadgeComponent], }), ], args: { @@ -21,9 +21,9 @@ export default { url: "https://www.figma.com/file/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?node-id=1881%3A16956", }, }, -} as Meta; +} as Meta; -type Story = StoryObj; +type Story = StoryObj; export const Variants: Story = { render: (args) => ({ diff --git a/libs/components/src/badge/index.ts b/libs/components/src/badge/index.ts index a8f5babda9..ae19f4df28 100644 --- a/libs/components/src/badge/index.ts +++ b/libs/components/src/badge/index.ts @@ -1,2 +1,2 @@ -export { BadgeDirective, BadgeVariant } from "./badge.directive"; +export { BadgeComponent, BadgeVariant } from "./badge.component"; export * from "./badge.module"; diff --git a/libs/components/src/item/item-action.component.ts b/libs/components/src/item/item-action.component.ts index 8cabf5c5c2..ae8cb71972 100644 --- a/libs/components/src/item/item-action.component.ts +++ b/libs/components/src/item/item-action.component.ts @@ -8,5 +8,13 @@ import { A11yCellDirective } from "../a11y/a11y-cell.directive"; imports: [], template: ``, providers: [{ provide: A11yCellDirective, useExisting: ItemActionComponent }], + host: { + class: + /** + * `top` and `bottom` units should be kept in sync with `item-content.component.ts`'s y-axis padding. + * we want this `:after` element to be the same height as the `item-content` + */ + "[&>button]:tw-relative [&>button:not([bit-item-content])]:after:tw-content-[''] [&>button]:after:tw-absolute [&>button]:after:tw-block bit-compact:[&>button]:after:tw-top-[-0.8rem] bit-compact:[&>button]:after:tw-bottom-[-0.8rem] [&>button]:after:tw-top-[-0.85rem] [&>button]:after:tw-bottom-[-0.85rem] [&>button]:after:tw-right-[-0.25rem] [&>button]:after:tw-left-[-0.25rem]", + }, }) export class ItemActionComponent extends A11yCellDirective {} diff --git a/libs/components/src/item/item-content.component.ts b/libs/components/src/item/item-content.component.ts index 824b6a596a..f6cc3f133a 100644 --- a/libs/components/src/item/item-content.component.ts +++ b/libs/components/src/item/item-content.component.ts @@ -19,6 +19,10 @@ import { TypographyModule } from "../typography"; templateUrl: `item-content.component.html`, host: { class: + /** + * y-axis padding should be kept in sync with `item-action.component.ts`'s `top` and `bottom` units. + * we want this to be the same height as the `item-action`'s `:after` element + */ "fvw-target tw-outline-none tw-text-main hover:tw-text-main tw-no-underline hover:tw-no-underline tw-text-base tw-py-2 tw-px-4 bit-compact:tw-py-1.5 bit-compact:tw-px-2 tw-bg-transparent tw-w-full tw-border-none tw-flex tw-gap-4 tw-items-center tw-justify-between", }, changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/libs/components/src/item/item.stories.ts b/libs/components/src/item/item.stories.ts index 675172565f..5adf9d3c49 100644 --- a/libs/components/src/item/item.stories.ts +++ b/libs/components/src/item/item.stories.ts @@ -70,7 +70,7 @@ export const Default: Story = { - + @@ -163,7 +163,7 @@ const multipleActionListTemplate = /*html*/ ` - + @@ -182,7 +182,7 @@ const multipleActionListTemplate = /*html*/ ` - + @@ -201,7 +201,7 @@ const multipleActionListTemplate = /*html*/ ` - + @@ -220,7 +220,7 @@ const multipleActionListTemplate = /*html*/ ` - + @@ -239,7 +239,7 @@ const multipleActionListTemplate = /*html*/ ` - + @@ -258,7 +258,7 @@ const multipleActionListTemplate = /*html*/ ` - + @@ -332,14 +332,14 @@ export const SingleActionWithBadge: Story = { Foobar - Auto-fill + Fill Helloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo! - Auto-fill + Fill @@ -375,7 +375,7 @@ export const VirtualScrolling: Story = { - + @@ -405,7 +405,7 @@ export const WithoutBorderRadius: Story = { - +