1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-12-31 17:57:43 +01:00

Merge branch 'main' into PM-12985-Reports

This commit is contained in:
cd-bitwarden 2024-12-20 14:24:38 -05:00 committed by GitHub
commit 03e6be2abc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
207 changed files with 6540 additions and 4936 deletions

View File

@ -1433,7 +1433,7 @@ jobs:
crowdin-push: crowdin-push:
name: Crowdin Push name: Crowdin Push
if: github.ref == 'refs/heads/main' if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
needs: needs:
- linux - linux
- windows - windows

View File

@ -58,3 +58,31 @@ jobs:
run: | run: |
npm ci npm ci
npm run lint 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"

View File

@ -14,11 +14,11 @@
"build:watch:firefox": "npm run build:firefox -- --watch", "build:watch:firefox": "npm run build:firefox -- --watch",
"build:watch:opera": "npm run build:opera -- --watch", "build:watch:opera": "npm run build:opera -- --watch",
"build:watch:safari": "npm run build:safari -- --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: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=4096\" npm run build:edge", "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=4096\" npm run build:firefox", "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=4096\" npm run build:opera", "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=4096\" npm run build:safari", "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: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: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", "dist:firefox": "npm run build:prod:firefox && mkdir -p dist && ./scripts/compress.ps1 dist-firefox.zip",

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "قيِّم هذه الإضافة" "message": "قيِّم هذه الإضافة"
}, },
"rateExtensionDesc": {
"message": "يرجى النظر في مساعدتنا بكتابة تعليق إيجابي!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "متصفح الويب الخاص بك لا يدعم خاصية النسخ السهل. يرجى استخدام النسخ اليدوي." "message": "متصفح الويب الخاص بك لا يدعم خاصية النسخ السهل. يرجى استخدام النسخ اليدوي."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -193,10 +193,10 @@
"message": "Kimliyi avto-doldur" "message": "Kimliyi avto-doldur"
}, },
"fillVerificationCode": { "fillVerificationCode": {
"message": "Fill verification code" "message": "Doğrulama kodunu doldur"
}, },
"fillVerificationCodeAria": { "fillVerificationCodeAria": {
"message": "Fill Verification Code", "message": "Doğrulama Kodunu Doldur",
"description": "Aria label for the heading displayed the inline menu for totp code autofill" "description": "Aria label for the heading displayed the inline menu for totp code autofill"
}, },
"generatePasswordCopied": { "generatePasswordCopied": {
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Uzantını qiymətləndir" "message": "Uzantını qiymətləndir"
}, },
"rateExtensionDesc": {
"message": "Gözəl bir rəy ilə bizə dəstək ola bilərsiniz!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Veb brauzeriniz lövhəyə kopyalamağı dəstəkləmir. Əvəzində əllə kopyalayın." "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" "description": "Screen reader text (aria-label) for unlock account button in overlay"
}, },
"totpCodeAria": { "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" "description": "Aria label for the totp code displayed in the inline menu for autofill"
}, },
"totpSecondsSpanAria": { "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" "description": "Aria label for the totp seconds displayed in the inline menu for autofill"
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Uzantı ikonunda giriş üçün avto-doldurma təklif sayını göstər" "message": "Uzantı ikonunda giriş üçün avto-doldurma təklif sayını göstər"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "İlkin sistem" "message": "İlkin sistem"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Uzantı eni" "message": "Uzantı eni"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Ацаніць пашырэнне" "message": "Ацаніць пашырэнне"
}, },
"rateExtensionDesc": {
"message": "Падумайце пра тое, каб дапамагчы нам добрым водгукам!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Ваш вэб-браўзер не падтрымлівае капіяванне даных у буфер абмену. Скапіюйце іх уручную." "message": "Ваш вэб-браўзер не падтрымлівае капіяванне даных у буфер абмену. Скапіюйце іх уручную."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Оценяване на разширението" "message": "Оценяване на разширението"
}, },
"rateExtensionDesc": {
"message": "Молим да ни помогнете, като оставите положителен отзив!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Браузърът не поддържа копиране в буфера, затова копирайте на ръка." "message": "Браузърът не поддържа копиране в буфера, затова копирайте на ръка."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Показване на броя предложения за автоматично попълване на данни за вписване върху иконката на добавката" "message": "Показване на броя предложения за автоматично попълване на данни за вписване върху иконката на добавката"
}, },
"showQuickCopyActions": {
"message": "Показване на действията за бързо копиране в трезора"
},
"systemDefault": { "systemDefault": {
"message": "По подразбиране за системата" "message": "По подразбиране за системата"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "Бета" "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": { "extensionWidth": {
"message": "Ширина на разширението" "message": "Ширина на разширението"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "এক্সটেনশনটি মূল্যায়ন করুন" "message": "এক্সটেনশনটি মূল্যায়ন করুন"
}, },
"rateExtensionDesc": {
"message": "দয়া করে একটি ভাল পর্যালোচনার মাধ্যমে সাহায্য করতে আমাদের বিবেচনা করুন!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "আপনার ওয়েব ব্রাউজার সহজে ক্লিপবোর্ড অনুলিপি সমর্থন করে না। পরিবর্তে এটি নিজেই অনুলিপি করুন।" "message": "আপনার ওয়েব ব্রাউজার সহজে ক্লিপবোর্ড অনুলিপি সমর্থন করে না। পরিবর্তে এটি নিজেই অনুলিপি করুন।"
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Valora aquesta extensió" "message": "Valora aquesta extensió"
}, },
"rateExtensionDesc": {
"message": "Considereu ajudar-nos amb una bona valoració!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "El vostre navegador web no admet la còpia fàcil del porta-retalls. Copieu-ho manualment." "message": "El vostre navegador web no admet la còpia fàcil del porta-retalls. Copieu-ho manualment."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Ohodnotit rozšíření" "message": "Ohodnotit rozšíření"
}, },
"rateExtensionDesc": {
"message": "Pomozte nám napsáním dobré recenze!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Váš webový prohlížeč nepodporuje automatické kopírování do schránky. Musíte ho zkopírovat ručně." "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": { "showNumberOfAutofillSuggestions": {
"message": "Zobrazit počet návrhů automatického vyplňování přihlášení na ikoně rozšíření" "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": { "systemDefault": {
"message": "Systémový výchozí" "message": "Systémový výchozí"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Šířka rozšíření" "message": "Šířka rozšíření"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rhoi eich barn ar yr estyniad" "message": "Rhoi eich barn ar yr estyniad"
}, },
"rateExtensionDesc": {
"message": "Ystyriwch ein helpu ni gydag adolygiad da!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Dyw eich porwr gwe ddim yn cefnogi copïo drwy'r clipfwrdd yn hawdd. Copïwch â llaw yn lle." "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": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Bedøm udvidelsen" "message": "Bedøm udvidelsen"
}, },
"rateExtensionDesc": {
"message": "Overvej om du vil hjælpe os med en god anmeldelse!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Din webbrowser understøtter ikke udklipsholder kopiering. Kopiér det manuelt i stedet." "message": "Din webbrowser understøtter ikke udklipsholder kopiering. Kopiér det manuelt i stedet."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Vis antal login-autoudfyldningsforslag på udvidelsesikon" "message": "Vis antal login-autoudfyldningsforslag på udvidelsesikon"
}, },
"showQuickCopyActions": {
"message": "Vis hurtig-kopihandlinger på Boks"
},
"systemDefault": { "systemDefault": {
"message": "Systemstandard" "message": "Systemstandard"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Udvidelsesbredde" "message": "Udvidelsesbredde"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Erweiterung bewerten" "message": "Erweiterung bewerten"
}, },
"rateExtensionDesc": {
"message": "Wir würden uns freuen, wenn du uns mit einer positiven Bewertung helfen könntest!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Den Browser unterstützt das einfache Kopieren nicht. Bitte kopiere es manuell." "message": "Den Browser unterstützt das einfache Kopieren nicht. Bitte kopiere es manuell."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Anzahl der Vorschläge zum Auto-Ausfüllen von Zugangsdaten auf dem Erweiterungssymbol anzeigen" "message": "Anzahl der Vorschläge zum Auto-Ausfüllen von Zugangsdaten auf dem Erweiterungssymbol anzeigen"
}, },
"showQuickCopyActions": {
"message": "Schnellkopier-Aktionen im Tresor anzeigen"
},
"systemDefault": { "systemDefault": {
"message": "Systemstandard" "message": "Systemstandard"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Breite der Erweiterung" "message": "Breite der Erweiterung"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Βαθμολογήστε την επέκταση" "message": "Βαθμολογήστε την επέκταση"
}, },
"rateExtensionDesc": {
"message": "Παρακαλούμε σκεφτείτε να μας βοηθήσετε με μια καλή κριτική!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Το πρόγραμμα περιήγησης ιστού δεν υποστηρίζει εύκολη αντιγραφή πρόχειρου. Αντιγράψτε το με το χέρι αντ'αυτού." "message": "Το πρόγραμμα περιήγησης ιστού δεν υποστηρίζει εύκολη αντιγραφή πρόχειρου. Αντιγράψτε το με το χέρι αντ'αυτού."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Εμφάνιση αριθμού προτάσεων αυτόματης συμπλήρωσης σύνδεσης στο εικονίδιο επέκτασης" "message": "Εμφάνιση αριθμού προτάσεων αυτόματης συμπλήρωσης σύνδεσης στο εικονίδιο επέκτασης"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "Προεπιλογή συστήματος" "message": "Προεπιλογή συστήματος"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -454,9 +454,6 @@
"length": { "length": {
"message": "Length" "message": "Length"
}, },
"passwordMinLength": {
"message": "Minimum password length"
},
"uppercase": { "uppercase": {
"message": "Uppercase (A-Z)", "message": "Uppercase (A-Z)",
"description": "deprecated. Use uppercaseLabel instead." "description": "deprecated. Use uppercaseLabel instead."
@ -528,10 +525,6 @@
"minSpecial": { "minSpecial": {
"message": "Minimum special" "message": "Minimum special"
}, },
"avoidAmbChar": {
"message": "Avoid ambiguous characters",
"description": "deprecated. Use avoidAmbiguous instead."
},
"avoidAmbiguous": { "avoidAmbiguous": {
"message": "Avoid ambiguous characters", "message": "Avoid ambiguous characters",
"description": "Label for the avoid ambiguous characters checkbox." "description": "Label for the avoid ambiguous characters checkbox."
@ -2047,9 +2040,6 @@
"clone": { "clone": {
"message": "Clone" "message": "Clone"
}, },
"passwordGeneratorPolicyInEffect": {
"message": "One or more organization policies are affecting your generator settings."
},
"passwordGenerator": { "passwordGenerator": {
"message": "Password generator" "message": "Password generator"
}, },
@ -2884,9 +2874,6 @@
"error": { "error": {
"message": "Error" "message": "Error"
}, },
"regenerateUsername": {
"message": "Regenerate username"
},
"generateUsername": { "generateUsername": {
"message": "Generate username" "message": "Generate username"
}, },
@ -2927,9 +2914,6 @@
} }
} }
}, },
"usernameType": {
"message": "Username type"
},
"plusAddressedEmail": { "plusAddressedEmail": {
"message": "Plus addressed email", "message": "Plus addressed email",
"description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com"
@ -2952,12 +2936,6 @@
"websiteName": { "websiteName": {
"message": "Website name" "message": "Website name"
}, },
"whatWouldYouLikeToGenerate": {
"message": "What would you like to generate?"
},
"passwordType": {
"message": "Password type"
},
"service": { "service": {
"message": "Service" "message": "Service"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Valora la extensión" "message": "Valora la extensión"
}, },
"rateExtensionDesc": {
"message": "¡Por favor, considera ayudarnos con una buena reseña!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Tu navegador web no soporta copiar al portapapeles facilmente. Cópialo manualmente." "message": "Tu navegador web no soporta copiar al portapapeles facilmente. Cópialo manualmente."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Hinda seda laiendust" "message": "Hinda seda laiendust"
}, },
"rateExtensionDesc": {
"message": "Soovi korral võid meid positiivse hinnanguga toetada!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Kasutatav brauser ei toeta lihtsat lõikelaua kopeerimist. Kopeeri see käsitsi." "message": "Kasutatav brauser ei toeta lihtsat lõikelaua kopeerimist. Kopeeri see käsitsi."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Baloratu gehigarria" "message": "Baloratu gehigarria"
}, },
"rateExtensionDesc": {
"message": "Mesedez, aipu on batekin lagundu!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Zure web nabigatzaileak ez du onartzen arbelean erraz kopiatzea. Eskuz kopiatu." "message": "Zure web nabigatzaileak ez du onartzen arbelean erraz kopiatzea. Eskuz kopiatu."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "به این افزونه امتیاز دهید" "message": "به این افزونه امتیاز دهید"
}, },
"rateExtensionDesc": {
"message": "لطفاً با یک بررسی خوب به ما کمک کنید!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "مرورگر شما از کپی کلیپ بورد آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید." "message": "مرورگر شما از کپی کلیپ بورد آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Arvioi laajennus" "message": "Arvioi laajennus"
}, },
"rateExtensionDesc": {
"message": "Harkitse tukemistamme hyvällä arvostelulla!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Selaimesi ei tue helppoa leikepöydälle kopiointia. Kopioi kohde manuaalisesti." "message": "Selaimesi ei tue helppoa leikepöydälle kopiointia. Kopioi kohde manuaalisesti."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Näytä automaattitäytön ehdotusten määrä laajennuksen kuvakkeessa" "message": "Näytä automaattitäytön ehdotusten määrä laajennuksen kuvakkeessa"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "Järjestelmän oletus" "message": "Järjestelmän oletus"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Laajennuksen leveys" "message": "Laajennuksen leveys"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "I-rate ang extension" "message": "I-rate ang extension"
}, },
"rateExtensionDesc": {
"message": "Paki-isipan ang pagtulong sa amin sa pamamagitan ng isang magandang review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Hindi suportado ng iyong web browser ang madaling pag-copy ng clipboard. Kopya ito manually sa halip." "message": "Hindi suportado ng iyong web browser ang madaling pag-copy ng clipboard. Kopya ito manually sa halip."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Noter l'extension" "message": "Noter l'extension"
}, },
"rateExtensionDesc": {
"message": "Merci de nous aider en mettant une bonne note !"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Votre navigateur web ne supporte pas la copie rapide depuis le presse-papier. Copiez-le manuellement à la place." "message": "Votre navigateur web ne supporte pas la copie rapide depuis le presse-papier. Copiez-le manuellement à la place."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Afficher le nombre de suggestions de saisie automatique d'identifiant sur l'icône d'extension" "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": { "systemDefault": {
"message": "Par défaut" "message": "Par défaut"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Largeur de l'extension" "message": "Largeur de l'extension"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Valorar a extensión" "message": "Valorar a extensión"
}, },
"rateExtensionDesc": {
"message": "Por favor, considera axudarnos cunha boa recensión!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "O teu navegador web non soporta copia doada ao portapapeis. Cópiao manualmente no seu lugar." "message": "O teu navegador web non soporta copia doada ao portapapeis. Cópiao manualmente no seu lugar."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "דירוג הרחבה" "message": "דירוג הרחבה"
}, },
"rateExtensionDesc": {
"message": "אם נהנית מהתוכנה, בבקשה דרג את התוכנה וכתוב דירוג עם חוות דעת טובה!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "הדפדפן שלך לא תומך בהעתקה ללוח. אנא העתק בצורה ידנית." "message": "הדפדפן שלך לא תומך בהעתקה ללוח. אנא העתק בצורה ידנית."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the Extension" "message": "Rate the Extension"
}, },
"rateExtensionDesc": {
"message": "कृपया एक अच्छी समीक्षा के साथ हमारी मदत करने पर विचार करें!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "आपका वेब ब्राउज़र आसान क्लिपबोर्ड कॉपीिंग का समर्थन नहीं करता है। इसके बजाय इसे मैन्युअल रूप से कॉपी करें।" "message": "आपका वेब ब्राउज़र आसान क्लिपबोर्ड कॉपीिंग का समर्थन नहीं करता है। इसके बजाय इसे मैन्युअल रूप से कॉपी करें।"
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -20,16 +20,16 @@
"message": "Stvori račun" "message": "Stvori račun"
}, },
"newToBitwarden": { "newToBitwarden": {
"message": "New to Bitwarden?" "message": "Novi u Bitwardenu?"
}, },
"logInWithPasskey": { "logInWithPasskey": {
"message": "Log in with passkey" "message": "Prijava pristupnim ključem"
}, },
"useSingleSignOn": { "useSingleSignOn": {
"message": "Use single sign-on" "message": "Jedinstvena prijava (SSO)"
}, },
"welcomeBack": { "welcomeBack": {
"message": "Welcome back" "message": "Dobro došli natrag"
}, },
"setAStrongPassword": { "setAStrongPassword": {
"message": "Postavi jaku lozinku" "message": "Postavi jaku lozinku"
@ -84,7 +84,7 @@
"message": "Pridruži se organizaciji" "message": "Pridruži se organizaciji"
}, },
"joinOrganizationName": { "joinOrganizationName": {
"message": "Join $ORGANIZATIONNAME$", "message": "Pidruži se $ORGANIZATIONNAME$",
"placeholders": { "placeholders": {
"organizationName": { "organizationName": {
"content": "$1", "content": "$1",
@ -120,7 +120,7 @@
"message": "Kopiraj lozinku" "message": "Kopiraj lozinku"
}, },
"copyPassphrase": { "copyPassphrase": {
"message": "Copy passphrase" "message": "Kopiraj fraznu lozinku"
}, },
"copyNote": { "copyNote": {
"message": "Kopiraj bilješku" "message": "Kopiraj bilješku"
@ -153,13 +153,13 @@
"message": "Kopiraj OIB" "message": "Kopiraj OIB"
}, },
"copyPrivateKey": { "copyPrivateKey": {
"message": "Copy private key" "message": "Kopiraj privatni ključ"
}, },
"copyPublicKey": { "copyPublicKey": {
"message": "Copy public key" "message": "Kopiraj javni ključ"
}, },
"copyFingerprint": { "copyFingerprint": {
"message": "Copy fingerprint" "message": "Kopiraj otisak prsta"
}, },
"copyCustomField": { "copyCustomField": {
"message": "Kopiraj $FIELD$", "message": "Kopiraj $FIELD$",
@ -177,7 +177,7 @@
"message": "Kopiraj bilješke" "message": "Kopiraj bilješke"
}, },
"fill": { "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." "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": { "autoFill": {
@ -193,10 +193,10 @@
"message": "Auto-ispuna identiteta" "message": "Auto-ispuna identiteta"
}, },
"fillVerificationCode": { "fillVerificationCode": {
"message": "Fill verification code" "message": "Ispuni kôd za provjeru"
}, },
"fillVerificationCodeAria": { "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" "description": "Aria label for the heading displayed the inline menu for totp code autofill"
}, },
"generatePasswordCopied": { "generatePasswordCopied": {
@ -284,7 +284,7 @@
"message": "Nastavi na web aplikaciju?" "message": "Nastavi na web aplikaciju?"
}, },
"continueToWebAppDesc": { "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": { "continueToHelpCenter": {
"message": "Nastavi u centar za pomoć?" "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." "message": "Stvori laka i sigurna iskustva prijave bez tradicionalnih lozinki uz Passwordless.dev. Saznaj više na web stranici bitwarden.com."
}, },
"freeBitwardenFamilies": { "freeBitwardenFamilies": {
"message": "Besplatan obiteljski Bitwarden" "message": "Besplatni Bitwarden Families"
}, },
"freeBitwardenFamiliesPageDesc": { "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": { "version": {
"message": "Verzija" "message": "Verzija"
@ -443,7 +443,7 @@
"message": "Generiraj lozinku" "message": "Generiraj lozinku"
}, },
"generatePassphrase": { "generatePassphrase": {
"message": "Generate passphrase" "message": "Generiraj frazu lozinke"
}, },
"regeneratePassword": { "regeneratePassword": {
"message": "Ponovno generiraj lozinku" "message": "Ponovno generiraj lozinku"
@ -607,7 +607,7 @@
"message": "Pokreni web stranicu" "message": "Pokreni web stranicu"
}, },
"launchWebsiteName": { "launchWebsiteName": {
"message": "Launch website $ITEMNAME$", "message": "Otvori stranicu $ITEMNAME$",
"placeholders": { "placeholders": {
"itemname": { "itemname": {
"content": "$1", "content": "$1",
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Ocijeni proširenje" "message": "Ocijeni proširenje"
}, },
"rateExtensionDesc": {
"message": "Razmotri da nam pomogneš dobrom recenzijom!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Web preglednik ne podržava jednostavno kopiranje međuspremnika. Umjesto toga ručno kopirajte." "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." "message": "Poslali smo e-poštu s podsjetnikom glavne lozinke."
}, },
"verificationCodeRequired": { "verificationCodeRequired": {
"message": "Potvrdni kôd je obavezan." "message": "Kôd za provjeru je obavezan."
}, },
"webauthnCancelOrTimeout": { "webauthnCancelOrTimeout": {
"message": "Autentifikacija je otkazana ili je trajala predugo. Molimo pokušaj ponovno." "message": "Autentifikacija je otkazana ili je trajala predugo. Molimo pokušaj ponovno."
@ -862,7 +859,7 @@
"message": "Prijavi se" "message": "Prijavi se"
}, },
"logInToBitwarden": { "logInToBitwarden": {
"message": "Log in to Bitwarden" "message": "Prijavi se u Bitwarden"
}, },
"restartRegistration": { "restartRegistration": {
"message": "Ponovno pokreni registraciju" "message": "Ponovno pokreni registraciju"
@ -1133,7 +1130,7 @@
"description": "WARNING (should stay in capitalized letters if the language permits)" "description": "WARNING (should stay in capitalized letters if the language permits)"
}, },
"warningCapitalized": { "warningCapitalized": {
"message": "Warning", "message": "Upozorenje",
"description": "Warning (should maintain locale-relevant capitalization)" "description": "Warning (should maintain locale-relevant capitalization)"
}, },
"confirmVaultExport": { "confirmVaultExport": {
@ -1312,7 +1309,7 @@
"message": "Automatski kopiraj TOTP" "message": "Automatski kopiraj TOTP"
}, },
"disableAutoTotpCopyDesc": { "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": { "enableAutoBiometricsPrompt": {
"message": "Traži biometrijsku autentifikaciju pri pokretanju" "message": "Traži biometrijsku autentifikaciju pri pokretanju"
@ -1324,16 +1321,16 @@
"message": "Za korištenje ove značajke potrebno je Premium članstvo." "message": "Za korištenje ove značajke potrebno je Premium članstvo."
}, },
"enterVerificationCodeApp": { "enterVerificationCodeApp": {
"message": "Unesi 6-znamenkasti kontrolni kôd iz autentifikatorske aplikacije." "message": "Unesi 6-znamenkasti kôd za provjeru iz autentifikatorske aplikacije."
}, },
"authenticationTimeout": { "authenticationTimeout": {
"message": "Authentication timeout" "message": "Istek vremena za autentifikaciju"
}, },
"authenticationSessionTimedOut": { "authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process." "message": "Sesija za autentifikaciju je istekla. Ponovi proces prijave."
}, },
"enterVerificationCodeEmail": { "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": { "placeholders": {
"email": { "email": {
"content": "$1", "content": "$1",
@ -1450,7 +1447,7 @@
"message": "URL poslužitelja" "message": "URL poslužitelja"
}, },
"selfHostBaseUrl": { "selfHostBaseUrl": {
"message": "Self-host server URL", "message": "URL vlastitog poslužitelja",
"description": "Label for field requesting a self-hosted integration service URL" "description": "Label for field requesting a self-hosted integration service URL"
}, },
"apiUrl": { "apiUrl": {
@ -1482,10 +1479,10 @@
"message": "Prikaži prijedloge auto-ispune na poljima obrazaca" "message": "Prikaži prijedloge auto-ispune na poljima obrazaca"
}, },
"showInlineMenuIdentitiesLabel": { "showInlineMenuIdentitiesLabel": {
"message": "Display identities as suggestions" "message": "Prikaži identitete kao prijedloge"
}, },
"showInlineMenuCardsLabel": { "showInlineMenuCardsLabel": {
"message": "Display cards as suggestions" "message": "Prikaži platne kartice kao prijedloge"
}, },
"showInlineMenuOnIconSelectionLabel": { "showInlineMenuOnIconSelectionLabel": {
"message": "Prikaži prijedloge kada je odabrana ikona" "message": "Prikaži prijedloge kada je odabrana ikona"
@ -1604,7 +1601,7 @@
"description": "This describes a value that is 'linked' (tied) to another value." "description": "This describes a value that is 'linked' (tied) to another value."
}, },
"popup2faCloseMessage": { "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": { "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?" "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" "message": "prosinac"
}, },
"securityCode": { "securityCode": {
"message": "Kontrolni broj" "message": "Sigurnosni kôd"
}, },
"ex": { "ex": {
"message": "npr." "message": "npr."
@ -1778,7 +1775,7 @@
"message": "Identitet" "message": "Identitet"
}, },
"typeSshKey": { "typeSshKey": {
"message": "SSH key" "message": "SSH ključ"
}, },
"newItemHeader": { "newItemHeader": {
"message": "Novi $TYPE$", "message": "Novi $TYPE$",
@ -1811,13 +1808,13 @@
"message": "Povijest" "message": "Povijest"
}, },
"generatorHistory": { "generatorHistory": {
"message": "Generator history" "message": "Povijest generatora"
}, },
"clearGeneratorHistoryTitle": { "clearGeneratorHistoryTitle": {
"message": "Clear generator history" "message": "Očisti povijest generatora"
}, },
"cleargGeneratorHistoryDescription": { "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": { "back": {
"message": "Natrag" "message": "Natrag"
@ -1856,7 +1853,7 @@
"message": "Sigurne bilješke" "message": "Sigurne bilješke"
}, },
"sshKeys": { "sshKeys": {
"message": "SSH Keys" "message": "SSH ključevi"
}, },
"clear": { "clear": {
"message": "Očisti", "message": "Očisti",
@ -1939,10 +1936,10 @@
"message": "Očisti povijest" "message": "Očisti povijest"
}, },
"nothingToShow": { "nothingToShow": {
"message": "Nothing to show" "message": "Ništa za prikazati"
}, },
"nothingGeneratedRecently": { "nothingGeneratedRecently": {
"message": "You haven't generated anything recently" "message": "Ništa nije generirano"
}, },
"remove": { "remove": {
"message": "Ukloni" "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." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendPasswordDescV3": { "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." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendNotesDesc": { "sendNotesDesc": {
@ -2729,7 +2726,7 @@
"description": "Used as a card title description on the set password page to explain why the user is there" "description": "Used as a card title description on the set password page to explain why the user is there"
}, },
"cardMetrics": { "cardMetrics": {
"message": "out of $TOTAL$", "message": "od $TOTAL$",
"placeholders": { "placeholders": {
"total": { "total": {
"content": "$1", "content": "$1",
@ -2894,10 +2891,10 @@
"message": "Generiraj korisničko ime" "message": "Generiraj korisničko ime"
}, },
"generateEmail": { "generateEmail": {
"message": "Generate email" "message": "Generiraj e-poštu"
}, },
"spinboxBoundariesHint": { "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", "description": "Explains spin box minimum and maximum values to the user",
"placeholders": { "placeholders": {
"min": { "min": {
@ -2911,7 +2908,7 @@
} }
}, },
"passwordLengthRecommendationHint": { "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).", "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": { "placeholders": {
"recommended": { "recommended": {
@ -2921,7 +2918,7 @@
} }
}, },
"passphraseNumWordsRecommendationHint": { "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).", "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": { "placeholders": {
"recommended": { "recommended": {
@ -2971,11 +2968,11 @@
"message": "Generiraj pseudonim e-pošte s vanjskom uslugom prosljeđivanja." "message": "Generiraj pseudonim e-pošte s vanjskom uslugom prosljeđivanja."
}, },
"forwarderDomainName": { "forwarderDomainName": {
"message": "Email domain", "message": "Domena e-pošte",
"description": "Labels the domain name email forwarder service option" "description": "Labels the domain name email forwarder service option"
}, },
"forwarderDomainNameHint": { "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." "description": "Guidance provided for email forwarding services that support multiple email domains."
}, },
"forwarderError": { "forwarderError": {
@ -3178,25 +3175,25 @@
"message": "Ponovno pošalji obavijest" "message": "Ponovno pošalji obavijest"
}, },
"viewAllLogInOptions": { "viewAllLogInOptions": {
"message": "View all log in options" "message": "Pogledaj sve mogućnosti prijave"
}, },
"viewAllLoginOptionsV1": { "viewAllLoginOptionsV1": {
"message": "View all log in options" "message": "Pogledaj sve mogućnosti prijave"
}, },
"notificationSentDevice": { "notificationSentDevice": {
"message": "Obavijest je poslana na tvoj uređaj." "message": "Obavijest je poslana na tvoj uređaj."
}, },
"aNotificationWasSentToYourDevice": { "aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device" "message": "Obavijest je poslana na tvoj uređaj"
}, },
"makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { "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": { "youWillBeNotifiedOnceTheRequestIsApproved": {
"message": "You will be notified once the request is approved" "message": "Dobiti ćeš obavijest kada je tvoj zahtjev odobren"
}, },
"needAnotherOptionV1": { "needAnotherOptionV1": {
"message": "Need another option?" "message": "Trebaš drugu opciju?"
}, },
"loginInitiated": { "loginInitiated": {
"message": "Prijava pokrenuta" "message": "Prijava pokrenuta"
@ -3292,16 +3289,16 @@
"message": "Otvara u novom prozoru" "message": "Otvara u novom prozoru"
}, },
"rememberThisDeviceToMakeFutureLoginsSeamless": { "rememberThisDeviceToMakeFutureLoginsSeamless": {
"message": "Remember this device to make future logins seamless" "message": "Zapamti ovaj uređaj kako bi buduće prijave bile brže"
}, },
"deviceApprovalRequired": { "deviceApprovalRequired": {
"message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:" "message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:"
}, },
"deviceApprovalRequiredV2": { "deviceApprovalRequiredV2": {
"message": "Device approval required" "message": "Potrebno odobrenje uređaja"
}, },
"selectAnApprovalOptionBelow": { "selectAnApprovalOptionBelow": {
"message": "Select an approval option below" "message": "Odaberi opciju odobrenja"
}, },
"rememberThisDevice": { "rememberThisDevice": {
"message": "Zapamti ovaj uređaj" "message": "Zapamti ovaj uređaj"
@ -3377,7 +3374,7 @@
"message": "Nedostaje e-pošta korisnika" "message": "Nedostaje e-pošta korisnika"
}, },
"activeUserEmailNotFoundLoggingYouOut": { "activeUserEmailNotFoundLoggingYouOut": {
"message": "Active user email not found. Logging you out." "message": "Nije pronađena e-pošta aktivnog korisnika. Odjava u tijeku..."
}, },
"deviceTrusted": { "deviceTrusted": {
"message": "Uređaj pouzdan" "message": "Uređaj pouzdan"
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay" "description": "Screen reader text (aria-label) for unlock account button in overlay"
}, },
"totpCodeAria": { "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" "description": "Aria label for the totp code displayed in the inline menu for autofill"
}, },
"totpSecondsSpanAria": { "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" "description": "Aria label for the totp seconds displayed in the inline menu for autofill"
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
@ -3824,7 +3821,7 @@
"message": "Pristupanje" "message": "Pristupanje"
}, },
"loggedInExclamation": { "loggedInExclamation": {
"message": "Logged in!" "message": "Prijava uspješna!"
}, },
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Pristupni ključ neće biti kopiran" "message": "Pristupni ključ neće biti kopiran"
@ -4288,7 +4285,7 @@
"message": "Najveća veličina datoteke je 500 MB" "message": "Najveća veličina datoteke je 500 MB"
}, },
"deleteAttachmentName": { "deleteAttachmentName": {
"message": "Izbriši privitak", "message": "Izbriši privitak $NAME$",
"placeholders": { "placeholders": {
"name": { "name": {
"content": "$1", "content": "$1",
@ -4318,13 +4315,13 @@
"message": "Filtri" "message": "Filtri"
}, },
"filterVault": { "filterVault": {
"message": "Filter vault" "message": "Filtriraj trezor"
}, },
"filterApplied": { "filterApplied": {
"message": "One filter applied" "message": "Uključen jedan filter"
}, },
"filterAppliedPlural": { "filterAppliedPlural": {
"message": "$COUNT$ filters applied", "message": "Uključeno filtera: $COUNT$",
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
@ -4656,13 +4653,13 @@
"message": "Lokacija stavke" "message": "Lokacija stavke"
}, },
"fileSend": { "fileSend": {
"message": "File Send" "message": "Send datoteke"
}, },
"fileSends": { "fileSends": {
"message": "Send datoteke" "message": "Send datoteke"
}, },
"textSend": { "textSend": {
"message": "Text Send" "message": "Send teksta"
}, },
"textSends": { "textSends": {
"message": "Send tekstovi" "message": "Send tekstovi"
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Prikaži broj prijedloga auto-ispune na ikoni proširenja" "message": "Prikaži broj prijedloga auto-ispune na ikoni proširenja"
}, },
"showQuickCopyActions": {
"message": "Prikaži akcije brzog kopiranja na trezoru"
},
"systemDefault": { "systemDefault": {
"message": "Zadano sustavom" "message": "Zadano sustavom"
}, },
@ -4686,16 +4686,16 @@
"message": "Pravila tvrtke primijenjena su na ovu postavku" "message": "Pravila tvrtke primijenjena su na ovu postavku"
}, },
"sshPrivateKey": { "sshPrivateKey": {
"message": "Private key" "message": "Privatni ključ"
}, },
"sshPublicKey": { "sshPublicKey": {
"message": "Public key" "message": "Javni ključ"
}, },
"sshFingerprint": { "sshFingerprint": {
"message": "Fingerprint" "message": "Otisak prsta"
}, },
"sshKeyAlgorithm": { "sshKeyAlgorithm": {
"message": "Key type" "message": "Vrsta ključa"
}, },
"sshKeyAlgorithmED25519": { "sshKeyAlgorithmED25519": {
"message": "ED25519" "message": "ED25519"
@ -4752,171 +4752,207 @@
"message": "Autentifikacija" "message": "Autentifikacija"
}, },
"fillGeneratedPassword": { "fillGeneratedPassword": {
"message": "Fill generated password", "message": "Ispuni generiranu lozinku",
"description": "Heading for the password generator within the inline menu" "description": "Heading for the password generator within the inline menu"
}, },
"passwordRegenerated": { "passwordRegenerated": {
"message": "Password regenerated", "message": "Lozinka re-generirana",
"description": "Notification message for when a password has been regenerated" "description": "Notification message for when a password has been regenerated"
}, },
"saveLoginToBitwarden": { "saveLoginToBitwarden": {
"message": "Save login to Bitwarden?", "message": "Spremi prijavu u Bitwarden?",
"description": "Confirmation message for saving a login to Bitwarden" "description": "Confirmation message for saving a login to Bitwarden"
}, },
"spaceCharacterDescriptor": { "spaceCharacterDescriptor": {
"message": "Space", "message": "Razmak",
"description": "Represents the space key in screen reader content as a readable word" "description": "Represents the space key in screen reader content as a readable word"
}, },
"tildeCharacterDescriptor": { "tildeCharacterDescriptor": {
"message": "Tilde", "message": "znak ˜",
"description": "Represents the ~ key in screen reader content as a readable word" "description": "Represents the ~ key in screen reader content as a readable word"
}, },
"backtickCharacterDescriptor": { "backtickCharacterDescriptor": {
"message": "Backtick", "message": "znak `",
"description": "Represents the ` key in screen reader content as a readable word" "description": "Represents the ` key in screen reader content as a readable word"
}, },
"exclamationCharacterDescriptor": { "exclamationCharacterDescriptor": {
"message": "Exclamation mark", "message": "znak !",
"description": "Represents the ! key in screen reader content as a readable word" "description": "Represents the ! key in screen reader content as a readable word"
}, },
"atSignCharacterDescriptor": { "atSignCharacterDescriptor": {
"message": "At sign", "message": "znak @",
"description": "Represents the @ key in screen reader content as a readable word" "description": "Represents the @ key in screen reader content as a readable word"
}, },
"hashSignCharacterDescriptor": { "hashSignCharacterDescriptor": {
"message": "Hash sign", "message": "znak #",
"description": "Represents the # key in screen reader content as a readable word" "description": "Represents the # key in screen reader content as a readable word"
}, },
"dollarSignCharacterDescriptor": { "dollarSignCharacterDescriptor": {
"message": "Dollar sign", "message": "znak $",
"description": "Represents the $ key in screen reader content as a readable word" "description": "Represents the $ key in screen reader content as a readable word"
}, },
"percentSignCharacterDescriptor": { "percentSignCharacterDescriptor": {
"message": "Percent sign", "message": "znak %",
"description": "Represents the % key in screen reader content as a readable word" "description": "Represents the % key in screen reader content as a readable word"
}, },
"caretCharacterDescriptor": { "caretCharacterDescriptor": {
"message": "Caret", "message": "znak ^",
"description": "Represents the ^ key in screen reader content as a readable word" "description": "Represents the ^ key in screen reader content as a readable word"
}, },
"ampersandCharacterDescriptor": { "ampersandCharacterDescriptor": {
"message": "Ampersand", "message": "znak &",
"description": "Represents the & key in screen reader content as a readable word" "description": "Represents the & key in screen reader content as a readable word"
}, },
"asteriskCharacterDescriptor": { "asteriskCharacterDescriptor": {
"message": "Asterisk", "message": "znak *",
"description": "Represents the * key in screen reader content as a readable word" "description": "Represents the * key in screen reader content as a readable word"
}, },
"parenLeftCharacterDescriptor": { "parenLeftCharacterDescriptor": {
"message": "Left parenthesis", "message": "lijeva zagrada (",
"description": "Represents the ( key in screen reader content as a readable word" "description": "Represents the ( key in screen reader content as a readable word"
}, },
"parenRightCharacterDescriptor": { "parenRightCharacterDescriptor": {
"message": "Right parenthesis", "message": "desna zagrada )",
"description": "Represents the ) key in screen reader content as a readable word" "description": "Represents the ) key in screen reader content as a readable word"
}, },
"hyphenCharacterDescriptor": { "hyphenCharacterDescriptor": {
"message": "Underscore", "message": "donja crtica _",
"description": "Represents the _ key in screen reader content as a readable word" "description": "Represents the _ key in screen reader content as a readable word"
}, },
"underscoreCharacterDescriptor": { "underscoreCharacterDescriptor": {
"message": "Hyphen", "message": "crtica -",
"description": "Represents the - key in screen reader content as a readable word" "description": "Represents the - key in screen reader content as a readable word"
}, },
"plusCharacterDescriptor": { "plusCharacterDescriptor": {
"message": "Plus", "message": "znak +",
"description": "Represents the + key in screen reader content as a readable word" "description": "Represents the + key in screen reader content as a readable word"
}, },
"equalsCharacterDescriptor": { "equalsCharacterDescriptor": {
"message": "Equals", "message": "znak =",
"description": "Represents the = key in screen reader content as a readable word" "description": "Represents the = key in screen reader content as a readable word"
}, },
"braceLeftCharacterDescriptor": { "braceLeftCharacterDescriptor": {
"message": "Left brace", "message": "znak {",
"description": "Represents the { key in screen reader content as a readable word" "description": "Represents the { key in screen reader content as a readable word"
}, },
"braceRightCharacterDescriptor": { "braceRightCharacterDescriptor": {
"message": "Right brace", "message": "znak }",
"description": "Represents the } key in screen reader content as a readable word" "description": "Represents the } key in screen reader content as a readable word"
}, },
"bracketLeftCharacterDescriptor": { "bracketLeftCharacterDescriptor": {
"message": "Left bracket", "message": "znak [",
"description": "Represents the [ key in screen reader content as a readable word" "description": "Represents the [ key in screen reader content as a readable word"
}, },
"bracketRightCharacterDescriptor": { "bracketRightCharacterDescriptor": {
"message": "Right bracket", "message": "zank ]",
"description": "Represents the ] key in screen reader content as a readable word" "description": "Represents the ] key in screen reader content as a readable word"
}, },
"pipeCharacterDescriptor": { "pipeCharacterDescriptor": {
"message": "Pipe", "message": "znak |",
"description": "Represents the | key in screen reader content as a readable word" "description": "Represents the | key in screen reader content as a readable word"
}, },
"backSlashCharacterDescriptor": { "backSlashCharacterDescriptor": {
"message": "Back slash", "message": "znak \\",
"description": "Represents the back slash key in screen reader content as a readable word" "description": "Represents the back slash key in screen reader content as a readable word"
}, },
"colonCharacterDescriptor": { "colonCharacterDescriptor": {
"message": "Colon", "message": "znak :",
"description": "Represents the : key in screen reader content as a readable word" "description": "Represents the : key in screen reader content as a readable word"
}, },
"semicolonCharacterDescriptor": { "semicolonCharacterDescriptor": {
"message": "Semicolon", "message": "znak ;",
"description": "Represents the ; key in screen reader content as a readable word" "description": "Represents the ; key in screen reader content as a readable word"
}, },
"doubleQuoteCharacterDescriptor": { "doubleQuoteCharacterDescriptor": {
"message": "Double quote", "message": "znak \"",
"description": "Represents the double quote key in screen reader content as a readable word" "description": "Represents the double quote key in screen reader content as a readable word"
}, },
"singleQuoteCharacterDescriptor": { "singleQuoteCharacterDescriptor": {
"message": "Single quote", "message": "znak '",
"description": "Represents the ' key in screen reader content as a readable word" "description": "Represents the ' key in screen reader content as a readable word"
}, },
"lessThanCharacterDescriptor": { "lessThanCharacterDescriptor": {
"message": "Less than", "message": "znak <",
"description": "Represents the < key in screen reader content as a readable word" "description": "Represents the < key in screen reader content as a readable word"
}, },
"greaterThanCharacterDescriptor": { "greaterThanCharacterDescriptor": {
"message": "Greater than", "message": "znak >",
"description": "Represents the > key in screen reader content as a readable word" "description": "Represents the > key in screen reader content as a readable word"
}, },
"commaCharacterDescriptor": { "commaCharacterDescriptor": {
"message": "Comma", "message": "znak ,",
"description": "Represents the , key in screen reader content as a readable word" "description": "Represents the , key in screen reader content as a readable word"
}, },
"periodCharacterDescriptor": { "periodCharacterDescriptor": {
"message": "Period", "message": "znak .",
"description": "Represents the . key in screen reader content as a readable word" "description": "Represents the . key in screen reader content as a readable word"
}, },
"questionCharacterDescriptor": { "questionCharacterDescriptor": {
"message": "Question mark", "message": "znak ?",
"description": "Represents the ? key in screen reader content as a readable word" "description": "Represents the ? key in screen reader content as a readable word"
}, },
"forwardSlashCharacterDescriptor": { "forwardSlashCharacterDescriptor": {
"message": "Forward slash", "message": "znak /",
"description": "Represents the / key in screen reader content as a readable word" "description": "Represents the / key in screen reader content as a readable word"
}, },
"lowercaseAriaLabel": { "lowercaseAriaLabel": {
"message": "Lowercase" "message": "Mala slova"
}, },
"uppercaseAriaLabel": { "uppercaseAriaLabel": {
"message": "Uppercase" "message": "Velika slova"
}, },
"generatedPassword": { "generatedPassword": {
"message": "Generated password" "message": "Generiraj lozinku"
}, },
"compactMode": { "compactMode": {
"message": "Compact mode" "message": "Kompaktni način"
}, },
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Širina proširenja"
}, },
"wide": { "wide": {
"message": "Wide" "message": "Široko"
}, },
"extraWide": { "extraWide": {
"message": "Extra wide" "message": "Ekstra široko"
} }
} }

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Bővítmény értékelése" "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": { "browserNotSupportClipboard": {
"message": "A webböngésződ nem támogat könnyű vágólap másolást. Másold manuálisan inkább." "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": { "showNumberOfAutofillSuggestions": {
"message": "Az automatikus bejelentkezési kitöltési javaslatok számának megjelenítése a bővítmény ikonján" "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": { "systemDefault": {
"message": "Rendszer alapértelmezett" "message": "Rendszer alapértelmezett"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "Béta" "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": { "extensionWidth": {
"message": "Kiterjesztés szélesség" "message": "Kiterjesztés szélesség"
}, },

View File

@ -3,7 +3,7 @@
"message": "Bitwarden" "message": "Bitwarden"
}, },
"extName": { "extName": {
"message": "Bitwarden Pengelola Sandi", "message": "Pengelola Sandi Bitwarden",
"description": "Extension name, MUST be less than 40 characters (Safari restriction)" "description": "Extension name, MUST be less than 40 characters (Safari restriction)"
}, },
"extDesc": { "extDesc": {
@ -193,10 +193,10 @@
"message": "Autofill identitas" "message": "Autofill identitas"
}, },
"fillVerificationCode": { "fillVerificationCode": {
"message": "Fill verification code" "message": "Isikan kode verifikasi"
}, },
"fillVerificationCodeAria": { "fillVerificationCodeAria": {
"message": "Fill Verification Code", "message": "Isikan Kode Verifikasi",
"description": "Aria label for the heading displayed the inline menu for totp code autofill" "description": "Aria label for the heading displayed the inline menu for totp code autofill"
}, },
"generatePasswordCopied": { "generatePasswordCopied": {
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Nilai Ekstensi" "message": "Nilai Ekstensi"
}, },
"rateExtensionDesc": {
"message": "Mohon pertimbangkan membantu kami dengan ulasan yang baik!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Peramban Anda tidak mendukung menyalin clipboard dengan mudah. Salin secara manual." "message": "Peramban Anda tidak mendukung menyalin clipboard dengan mudah. Salin secara manual."
}, },
@ -3181,7 +3178,7 @@
"message": "Lihat semua pilihan masuk" "message": "Lihat semua pilihan masuk"
}, },
"viewAllLoginOptionsV1": { "viewAllLoginOptionsV1": {
"message": "View all log in options" "message": "Lihat semua pilihan masuk"
}, },
"notificationSentDevice": { "notificationSentDevice": {
"message": "Sebuah pemberitahuan dikirim ke perangkat Anda." "message": "Sebuah pemberitahuan dikirim ke perangkat Anda."
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay" "description": "Screen reader text (aria-label) for unlock account button in overlay"
}, },
"totpCodeAria": { "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" "description": "Aria label for the totp code displayed in the inline menu for autofill"
}, },
"totpSecondsSpanAria": { "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" "description": "Aria label for the totp seconds displayed in the inline menu for autofill"
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
@ -4339,10 +4336,10 @@
"message": "Pengenalan" "message": "Pengenalan"
}, },
"contactInfo": { "contactInfo": {
"message": "Contact info" "message": "Info kontak"
}, },
"downloadAttachment": { "downloadAttachment": {
"message": "Download - $ITEMNAME$", "message": "Unduh - $ITEMNAME$",
"placeholders": { "placeholders": {
"itemname": { "itemname": {
"content": "$1", "content": "$1",
@ -4351,23 +4348,23 @@
} }
}, },
"cardNumberEndsWith": { "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." "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher."
}, },
"loginCredentials": { "loginCredentials": {
"message": "Login credentials" "message": "Kredensial login"
}, },
"authenticatorKey": { "authenticatorKey": {
"message": "Authenticator key" "message": "Kunci Otentikator"
}, },
"autofillOptions": { "autofillOptions": {
"message": "Autofill options" "message": "Pilihan isi otomatis"
}, },
"websiteUri": { "websiteUri": {
"message": "Website (URI)" "message": "Situs web (URI)"
}, },
"websiteUriCount": { "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.", "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": { "placeholders": {
"count": { "count": {
@ -4377,16 +4374,16 @@
} }
}, },
"websiteAdded": { "websiteAdded": {
"message": "Website added" "message": "Situs web ditambahkan"
}, },
"addWebsite": { "addWebsite": {
"message": "Add website" "message": "Tambah situs web"
}, },
"deleteWebsite": { "deleteWebsite": {
"message": "Delete website" "message": "Hapus situs web"
}, },
"defaultLabel": { "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.", "description": "A label that indicates the default value for a field with the current default value in parentheses.",
"placeholders": { "placeholders": {
"value": { "value": {
@ -4396,7 +4393,7 @@
} }
}, },
"showMatchDetection": { "showMatchDetection": {
"message": "Show match detection $WEBSITE$", "message": "Tampilkan deteksi kecocokan $WEBSITE$",
"placeholders": { "placeholders": {
"website": { "website": {
"content": "$1", "content": "$1",
@ -4405,7 +4402,7 @@
} }
}, },
"hideMatchDetection": { "hideMatchDetection": {
"message": "Hide match detection $WEBSITE$", "message": "Sembunyikan deteksi kecocokan $WEBSITE$",
"placeholders": { "placeholders": {
"website": { "website": {
"content": "$1", "content": "$1",
@ -4414,19 +4411,19 @@
} }
}, },
"autoFillOnPageLoad": { "autoFillOnPageLoad": {
"message": "Autofill on page load?" "message": "Isi otomatis ketika halaman dimuat?"
}, },
"cardExpiredTitle": { "cardExpiredTitle": {
"message": "Expired card" "message": "Kartu kadaluwarsa"
}, },
"cardExpiredMessage": { "cardExpiredMessage": {
"message": "If you've renewed it, update the card's information" "message": "Jika Anda telah memperpanjangnya, perbarui informasi kartu"
}, },
"cardDetails": { "cardDetails": {
"message": "Card details" "message": "Rincian kartu"
}, },
"cardBrandDetails": { "cardBrandDetails": {
"message": "$BRAND$ details", "message": "Rincian $BRAND$",
"placeholders": { "placeholders": {
"brand": { "brand": {
"content": "$1", "content": "$1",
@ -4435,43 +4432,43 @@
} }
}, },
"enableAnimations": { "enableAnimations": {
"message": "Enable animations" "message": "Nyalakan animasi"
}, },
"showAnimations": { "showAnimations": {
"message": "Show animations" "message": "Tampilkan animasi"
}, },
"addAccount": { "addAccount": {
"message": "Add account" "message": "Tambah akun"
}, },
"loading": { "loading": {
"message": "Loading" "message": "Memuat"
}, },
"data": { "data": {
"message": "Data" "message": "Data"
}, },
"passkeys": { "passkeys": {
"message": "Passkeys", "message": "Kunci sandi",
"description": "A section header for a list of passkeys." "description": "A section header for a list of passkeys."
}, },
"passwords": { "passwords": {
"message": "Passwords", "message": "Kata Sandi",
"description": "A section header for a list of passwords." "description": "A section header for a list of passwords."
}, },
"logInWithPasskeyAriaLabel": { "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." "description": "ARIA label for the inline menu button that logs in with a passkey."
}, },
"assign": { "assign": {
"message": "Assign" "message": "Terapkan"
}, },
"bulkCollectionAssignmentDialogDescriptionSingular": { "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": { "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": { "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": { "placeholders": {
"total_count": { "total_count": {
"content": "$1", "content": "$1",
@ -4483,37 +4480,37 @@
} }
}, },
"addField": { "addField": {
"message": "Add field" "message": "Tambahkan bidang"
}, },
"add": { "add": {
"message": "Add" "message": "Tambah"
}, },
"fieldType": { "fieldType": {
"message": "Field type" "message": "Jenis bidang"
}, },
"fieldLabel": { "fieldLabel": {
"message": "Field label" "message": "Label bidang"
}, },
"textHelpText": { "textHelpText": {
"message": "Use text fields for data like security questions" "message": "Gunakan bidang teks untuk data seperti pertanyaan keamanan"
}, },
"hiddenHelpText": { "hiddenHelpText": {
"message": "Use hidden fields for sensitive data like a password" "message": "Gunakan bidang tersembunyi untuk data sensitif seperti kata sandi"
}, },
"checkBoxHelpText": { "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": { "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": { "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": { "editField": {
"message": "Edit field" "message": "Sunting bidang"
}, },
"editFieldLabel": { "editFieldLabel": {
"message": "Edit $LABEL$", "message": "Sunting $LABEL$",
"placeholders": { "placeholders": {
"label": { "label": {
"content": "$1", "content": "$1",
@ -4522,7 +4519,7 @@
} }
}, },
"deleteCustomField": { "deleteCustomField": {
"message": "Delete $LABEL$", "message": "Hapus $LABEL$",
"placeholders": { "placeholders": {
"label": { "label": {
"content": "$1", "content": "$1",
@ -4531,7 +4528,7 @@
} }
}, },
"fieldAdded": { "fieldAdded": {
"message": "$LABEL$ added", "message": "$LABEL$ ditambahkan",
"placeholders": { "placeholders": {
"label": { "label": {
"content": "$1", "content": "$1",
@ -4540,7 +4537,7 @@
} }
}, },
"reorderToggleButton": { "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": { "placeholders": {
"label": { "label": {
"content": "$1", "content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4768,155 +4768,191 @@
"description": "Represents the space key in screen reader content as a readable word" "description": "Represents the space key in screen reader content as a readable word"
}, },
"tildeCharacterDescriptor": { "tildeCharacterDescriptor": {
"message": "Tilde", "message": "Tanda gelombang",
"description": "Represents the ~ key in screen reader content as a readable word" "description": "Represents the ~ key in screen reader content as a readable word"
}, },
"backtickCharacterDescriptor": { "backtickCharacterDescriptor": {
"message": "Backtick", "message": "Tanda petik terbalik",
"description": "Represents the ` key in screen reader content as a readable word" "description": "Represents the ` key in screen reader content as a readable word"
}, },
"exclamationCharacterDescriptor": { "exclamationCharacterDescriptor": {
"message": "Exclamation mark", "message": "Tanda seru",
"description": "Represents the ! key in screen reader content as a readable word" "description": "Represents the ! key in screen reader content as a readable word"
}, },
"atSignCharacterDescriptor": { "atSignCharacterDescriptor": {
"message": "At sign", "message": "Tanda pada",
"description": "Represents the @ key in screen reader content as a readable word" "description": "Represents the @ key in screen reader content as a readable word"
}, },
"hashSignCharacterDescriptor": { "hashSignCharacterDescriptor": {
"message": "Hash sign", "message": "Tanda pagar",
"description": "Represents the # key in screen reader content as a readable word" "description": "Represents the # key in screen reader content as a readable word"
}, },
"dollarSignCharacterDescriptor": { "dollarSignCharacterDescriptor": {
"message": "Dollar sign", "message": "Tanda dolar",
"description": "Represents the $ key in screen reader content as a readable word" "description": "Represents the $ key in screen reader content as a readable word"
}, },
"percentSignCharacterDescriptor": { "percentSignCharacterDescriptor": {
"message": "Percent sign", "message": "Tanda persen",
"description": "Represents the % key in screen reader content as a readable word" "description": "Represents the % key in screen reader content as a readable word"
}, },
"caretCharacterDescriptor": { "caretCharacterDescriptor": {
"message": "Caret", "message": "Tanda sisipan",
"description": "Represents the ^ key in screen reader content as a readable word" "description": "Represents the ^ key in screen reader content as a readable word"
}, },
"ampersandCharacterDescriptor": { "ampersandCharacterDescriptor": {
"message": "Ampersand", "message": "Tanda dan",
"description": "Represents the & key in screen reader content as a readable word" "description": "Represents the & key in screen reader content as a readable word"
}, },
"asteriskCharacterDescriptor": { "asteriskCharacterDescriptor": {
"message": "Asterisk", "message": "Tanda bintang",
"description": "Represents the * key in screen reader content as a readable word" "description": "Represents the * key in screen reader content as a readable word"
}, },
"parenLeftCharacterDescriptor": { "parenLeftCharacterDescriptor": {
"message": "Left parenthesis", "message": "Tanda kurung kiri",
"description": "Represents the ( key in screen reader content as a readable word" "description": "Represents the ( key in screen reader content as a readable word"
}, },
"parenRightCharacterDescriptor": { "parenRightCharacterDescriptor": {
"message": "Right parenthesis", "message": "Tanda kurung kanan",
"description": "Represents the ) key in screen reader content as a readable word" "description": "Represents the ) key in screen reader content as a readable word"
}, },
"hyphenCharacterDescriptor": { "hyphenCharacterDescriptor": {
"message": "Underscore", "message": "Garis bawah",
"description": "Represents the _ key in screen reader content as a readable word" "description": "Represents the _ key in screen reader content as a readable word"
}, },
"underscoreCharacterDescriptor": { "underscoreCharacterDescriptor": {
"message": "Hyphen", "message": "Tanda penghubung",
"description": "Represents the - key in screen reader content as a readable word" "description": "Represents the - key in screen reader content as a readable word"
}, },
"plusCharacterDescriptor": { "plusCharacterDescriptor": {
"message": "Plus", "message": "Tanda tambah",
"description": "Represents the + key in screen reader content as a readable word" "description": "Represents the + key in screen reader content as a readable word"
}, },
"equalsCharacterDescriptor": { "equalsCharacterDescriptor": {
"message": "Equals", "message": "Tanda sama dengan",
"description": "Represents the = key in screen reader content as a readable word" "description": "Represents the = key in screen reader content as a readable word"
}, },
"braceLeftCharacterDescriptor": { "braceLeftCharacterDescriptor": {
"message": "Left brace", "message": "Kurung kurawal kiri",
"description": "Represents the { key in screen reader content as a readable word" "description": "Represents the { key in screen reader content as a readable word"
}, },
"braceRightCharacterDescriptor": { "braceRightCharacterDescriptor": {
"message": "Right brace", "message": "Kurung kurawal kanan",
"description": "Represents the } key in screen reader content as a readable word" "description": "Represents the } key in screen reader content as a readable word"
}, },
"bracketLeftCharacterDescriptor": { "bracketLeftCharacterDescriptor": {
"message": "Left bracket", "message": "Tanda kurung siku kiri",
"description": "Represents the [ key in screen reader content as a readable word" "description": "Represents the [ key in screen reader content as a readable word"
}, },
"bracketRightCharacterDescriptor": { "bracketRightCharacterDescriptor": {
"message": "Right bracket", "message": "Tanda kurung siku kanan",
"description": "Represents the ] key in screen reader content as a readable word" "description": "Represents the ] key in screen reader content as a readable word"
}, },
"pipeCharacterDescriptor": { "pipeCharacterDescriptor": {
"message": "Pipe", "message": "Garis tegak lurus",
"description": "Represents the | key in screen reader content as a readable word" "description": "Represents the | key in screen reader content as a readable word"
}, },
"backSlashCharacterDescriptor": { "backSlashCharacterDescriptor": {
"message": "Back slash", "message": "Garis miring terbalik",
"description": "Represents the back slash key in screen reader content as a readable word" "description": "Represents the back slash key in screen reader content as a readable word"
}, },
"colonCharacterDescriptor": { "colonCharacterDescriptor": {
"message": "Colon", "message": "Tanda titik dua",
"description": "Represents the : key in screen reader content as a readable word" "description": "Represents the : key in screen reader content as a readable word"
}, },
"semicolonCharacterDescriptor": { "semicolonCharacterDescriptor": {
"message": "Semicolon", "message": "Tanda titik koma",
"description": "Represents the ; key in screen reader content as a readable word" "description": "Represents the ; key in screen reader content as a readable word"
}, },
"doubleQuoteCharacterDescriptor": { "doubleQuoteCharacterDescriptor": {
"message": "Double quote", "message": "Tanda petik ganda",
"description": "Represents the double quote key in screen reader content as a readable word" "description": "Represents the double quote key in screen reader content as a readable word"
}, },
"singleQuoteCharacterDescriptor": { "singleQuoteCharacterDescriptor": {
"message": "Single quote", "message": "Tanda petik tunggal",
"description": "Represents the ' key in screen reader content as a readable word" "description": "Represents the ' key in screen reader content as a readable word"
}, },
"lessThanCharacterDescriptor": { "lessThanCharacterDescriptor": {
"message": "Less than", "message": "Tanda kurang dari",
"description": "Represents the < key in screen reader content as a readable word" "description": "Represents the < key in screen reader content as a readable word"
}, },
"greaterThanCharacterDescriptor": { "greaterThanCharacterDescriptor": {
"message": "Greater than", "message": "Tanda lebih besar dari",
"description": "Represents the > key in screen reader content as a readable word" "description": "Represents the > key in screen reader content as a readable word"
}, },
"commaCharacterDescriptor": { "commaCharacterDescriptor": {
"message": "Comma", "message": "Tanda koma",
"description": "Represents the , key in screen reader content as a readable word" "description": "Represents the , key in screen reader content as a readable word"
}, },
"periodCharacterDescriptor": { "periodCharacterDescriptor": {
"message": "Period", "message": "Tanda titik",
"description": "Represents the . key in screen reader content as a readable word" "description": "Represents the . key in screen reader content as a readable word"
}, },
"questionCharacterDescriptor": { "questionCharacterDescriptor": {
"message": "Question mark", "message": "Tanda tanya",
"description": "Represents the ? key in screen reader content as a readable word" "description": "Represents the ? key in screen reader content as a readable word"
}, },
"forwardSlashCharacterDescriptor": { "forwardSlashCharacterDescriptor": {
"message": "Forward slash", "message": "Tanda garis miring ke depan",
"description": "Represents the / key in screen reader content as a readable word" "description": "Represents the / key in screen reader content as a readable word"
}, },
"lowercaseAriaLabel": { "lowercaseAriaLabel": {
"message": "Lowercase" "message": "Huruf kecil"
}, },
"uppercaseAriaLabel": { "uppercaseAriaLabel": {
"message": "Uppercase" "message": "Huruf kapital"
}, },
"generatedPassword": { "generatedPassword": {
"message": "Generated password" "message": "Kata sandi yang dihasilkan"
}, },
"compactMode": { "compactMode": {
"message": "Compact mode" "message": "Mode ringkas"
}, },
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Lebar ekstensi"
}, },
"wide": { "wide": {
"message": "Wide" "message": "Lebar"
}, },
"extraWide": { "extraWide": {
"message": "Extra wide" "message": "Ekstra lebar"
} }
} }

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Valuta l'estensione" "message": "Valuta l'estensione"
}, },
"rateExtensionDesc": {
"message": "Aiutaci lasciando una buona recensione!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Il tuo browser non supporta copiare dagli appunti. Copialo manualmente." "message": "Il tuo browser non supporta copiare dagli appunti. Copialo manualmente."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Mostra il numero di suggerimenti di riempimento automatico sull'icona dell'estensione" "message": "Mostra il numero di suggerimenti di riempimento automatico sull'icona dell'estensione"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "Predefinito del sistema" "message": "Predefinito del sistema"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -20,16 +20,16 @@
"message": "アカウントの作成" "message": "アカウントの作成"
}, },
"newToBitwarden": { "newToBitwarden": {
"message": "New to Bitwarden?" "message": "Bitwarden は初めてですか?"
}, },
"logInWithPasskey": { "logInWithPasskey": {
"message": "Log in with passkey" "message": "パスキーでログイン"
}, },
"useSingleSignOn": { "useSingleSignOn": {
"message": "Use single sign-on" "message": "シングルサインオンを使用する"
}, },
"welcomeBack": { "welcomeBack": {
"message": "Welcome back" "message": "ようこそ"
}, },
"setAStrongPassword": { "setAStrongPassword": {
"message": "強力なパスワードを設定する" "message": "強力なパスワードを設定する"
@ -84,7 +84,7 @@
"message": "組織に参加" "message": "組織に参加"
}, },
"joinOrganizationName": { "joinOrganizationName": {
"message": "Join $ORGANIZATIONNAME$", "message": "$ORGANIZATIONNAME$ に参加",
"placeholders": { "placeholders": {
"organizationName": { "organizationName": {
"content": "$1", "content": "$1",
@ -120,7 +120,7 @@
"message": "パスワードをコピー" "message": "パスワードをコピー"
}, },
"copyPassphrase": { "copyPassphrase": {
"message": "Copy passphrase" "message": "パスフレーズをコピー"
}, },
"copyNote": { "copyNote": {
"message": "メモをコピー" "message": "メモをコピー"
@ -153,13 +153,13 @@
"message": "免許証番号をコピー" "message": "免許証番号をコピー"
}, },
"copyPrivateKey": { "copyPrivateKey": {
"message": "Copy private key" "message": "秘密鍵をコピー"
}, },
"copyPublicKey": { "copyPublicKey": {
"message": "Copy public key" "message": "公開鍵をコピー"
}, },
"copyFingerprint": { "copyFingerprint": {
"message": "Copy fingerprint" "message": "フィンガープリントをコピー"
}, },
"copyCustomField": { "copyCustomField": {
"message": "$FIELD$ をコピー", "message": "$FIELD$ をコピー",
@ -177,7 +177,7 @@
"message": "メモをコピー" "message": "メモをコピー"
}, },
"fill": { "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." "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": { "autoFill": {
@ -193,10 +193,10 @@
"message": "自動入力 ID" "message": "自動入力 ID"
}, },
"fillVerificationCode": { "fillVerificationCode": {
"message": "Fill verification code" "message": "認証コードを入力"
}, },
"fillVerificationCodeAria": { "fillVerificationCodeAria": {
"message": "Fill Verification Code", "message": "認証コードを入力",
"description": "Aria label for the heading displayed the inline menu for totp code autofill" "description": "Aria label for the heading displayed the inline menu for totp code autofill"
}, },
"generatePasswordCopied": { "generatePasswordCopied": {
@ -443,7 +443,7 @@
"message": "パスワードの自動生成" "message": "パスワードの自動生成"
}, },
"generatePassphrase": { "generatePassphrase": {
"message": "Generate passphrase" "message": "パスフレーズを生成"
}, },
"regeneratePassword": { "regeneratePassword": {
"message": "パスワードの再生成" "message": "パスワードの再生成"
@ -607,7 +607,7 @@
"message": "ウェブサイトを開く" "message": "ウェブサイトを開く"
}, },
"launchWebsiteName": { "launchWebsiteName": {
"message": "Launch website $ITEMNAME$", "message": "ウェブサイト $ITEMNAME$ を開く",
"placeholders": { "placeholders": {
"itemname": { "itemname": {
"content": "$1", "content": "$1",
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "拡張機能の評価" "message": "拡張機能の評価"
}, },
"rateExtensionDesc": {
"message": "良いレビューで私たちを助けてください!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "お使いのブラウザはクリップボードへのコピーに対応していません。手動でコピーしてください" "message": "お使いのブラウザはクリップボードへのコピーに対応していません。手動でコピーしてください"
}, },
@ -862,7 +859,7 @@
"message": "ログイン" "message": "ログイン"
}, },
"logInToBitwarden": { "logInToBitwarden": {
"message": "Log in to Bitwarden" "message": "Bitwarden にログイン"
}, },
"restartRegistration": { "restartRegistration": {
"message": "登録を再度始める" "message": "登録を再度始める"
@ -1133,7 +1130,7 @@
"description": "WARNING (should stay in capitalized letters if the language permits)" "description": "WARNING (should stay in capitalized letters if the language permits)"
}, },
"warningCapitalized": { "warningCapitalized": {
"message": "Warning", "message": "注意",
"description": "Warning (should maintain locale-relevant capitalization)" "description": "Warning (should maintain locale-relevant capitalization)"
}, },
"confirmVaultExport": { "confirmVaultExport": {
@ -1327,10 +1324,10 @@
"message": "認証アプリに表示された6桁の認証コードを入力してください。" "message": "認証アプリに表示された6桁の認証コードを入力してください。"
}, },
"authenticationTimeout": { "authenticationTimeout": {
"message": "Authentication timeout" "message": "認証のタイムアウト"
}, },
"authenticationSessionTimedOut": { "authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process." "message": "認証セッションの有効期限が切れました。ログインプロセスを再開してください。"
}, },
"enterVerificationCodeEmail": { "enterVerificationCodeEmail": {
"message": "$EMAIL$に送信された6桁の認証コードを入力してください。", "message": "$EMAIL$に送信された6桁の認証コードを入力してください。",
@ -1450,7 +1447,7 @@
"message": "サーバー URL" "message": "サーバー URL"
}, },
"selfHostBaseUrl": { "selfHostBaseUrl": {
"message": "Self-host server URL", "message": "自己ホスト型サーバー URL",
"description": "Label for field requesting a self-hosted integration service URL" "description": "Label for field requesting a self-hosted integration service URL"
}, },
"apiUrl": { "apiUrl": {
@ -1778,7 +1775,7 @@
"message": "ID" "message": "ID"
}, },
"typeSshKey": { "typeSshKey": {
"message": "SSH key" "message": "SSH "
}, },
"newItemHeader": { "newItemHeader": {
"message": "$TYPE$ を新規作成", "message": "$TYPE$ を新規作成",
@ -1811,13 +1808,13 @@
"message": "パスワードの履歴" "message": "パスワードの履歴"
}, },
"generatorHistory": { "generatorHistory": {
"message": "Generator history" "message": "生成履歴"
}, },
"clearGeneratorHistoryTitle": { "clearGeneratorHistoryTitle": {
"message": "Clear generator history" "message": "生成履歴を消去"
}, },
"cleargGeneratorHistoryDescription": { "cleargGeneratorHistoryDescription": {
"message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" "message": "続行すると、すべてのエントリは生成履歴から完全に削除されます。続行してもよろしいですか?"
}, },
"back": { "back": {
"message": "戻る" "message": "戻る"
@ -1856,7 +1853,7 @@
"message": "セキュアメモ" "message": "セキュアメモ"
}, },
"sshKeys": { "sshKeys": {
"message": "SSH Keys" "message": "SSH "
}, },
"clear": { "clear": {
"message": "消去する", "message": "消去する",
@ -1939,10 +1936,10 @@
"message": "履歴を消去" "message": "履歴を消去"
}, },
"nothingToShow": { "nothingToShow": {
"message": "Nothing to show" "message": "表示するものがありません"
}, },
"nothingGeneratedRecently": { "nothingGeneratedRecently": {
"message": "You haven't generated anything recently" "message": "最近生成したものはありません"
}, },
"remove": { "remove": {
"message": "削除" "message": "削除"
@ -2531,7 +2528,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendPasswordDescV3": { "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." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendNotesDesc": { "sendNotesDesc": {
@ -2894,10 +2891,10 @@
"message": "ユーザー名を生成" "message": "ユーザー名を生成"
}, },
"generateEmail": { "generateEmail": {
"message": "Generate email" "message": "メールアドレスを生成"
}, },
"spinboxBoundariesHint": { "spinboxBoundariesHint": {
"message": "Value must be between $MIN$ and $MAX$.", "message": "値は $MIN$ から $MAX$ の間でなければなりません。",
"description": "Explains spin box minimum and maximum values to the user", "description": "Explains spin box minimum and maximum values to the user",
"placeholders": { "placeholders": {
"min": { "min": {
@ -2911,7 +2908,7 @@
} }
}, },
"passwordLengthRecommendationHint": { "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).", "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": { "placeholders": {
"recommended": { "recommended": {
@ -2921,7 +2918,7 @@
} }
}, },
"passphraseNumWordsRecommendationHint": { "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).", "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": { "placeholders": {
"recommended": { "recommended": {
@ -2971,11 +2968,11 @@
"message": "外部転送サービスを使用してメールエイリアスを生成します。" "message": "外部転送サービスを使用してメールエイリアスを生成します。"
}, },
"forwarderDomainName": { "forwarderDomainName": {
"message": "Email domain", "message": "メールアドレスのドメイン",
"description": "Labels the domain name email forwarder service option" "description": "Labels the domain name email forwarder service option"
}, },
"forwarderDomainNameHint": { "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." "description": "Guidance provided for email forwarding services that support multiple email domains."
}, },
"forwarderError": { "forwarderError": {
@ -3178,25 +3175,25 @@
"message": "通知を再送信する" "message": "通知を再送信する"
}, },
"viewAllLogInOptions": { "viewAllLogInOptions": {
"message": "View all log in options" "message": "すべてのログインオプションを表示"
}, },
"viewAllLoginOptionsV1": { "viewAllLoginOptionsV1": {
"message": "View all log in options" "message": "すべてのログインオプションを表示"
}, },
"notificationSentDevice": { "notificationSentDevice": {
"message": "デバイスに通知を送信しました。" "message": "デバイスに通知を送信しました。"
}, },
"aNotificationWasSentToYourDevice": { "aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device" "message": "お使いのデバイスに通知が送信されました"
}, },
"makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
"message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" "message": "アカウントがロック解除されていることと、フィンガープリントフレーズが他の端末で一致していることを確認してください"
}, },
"youWillBeNotifiedOnceTheRequestIsApproved": { "youWillBeNotifiedOnceTheRequestIsApproved": {
"message": "You will be notified once the request is approved" "message": "リクエストが承認されると通知されます"
}, },
"needAnotherOptionV1": { "needAnotherOptionV1": {
"message": "Need another option?" "message": "別の選択肢が必要ですか?"
}, },
"loginInitiated": { "loginInitiated": {
"message": "ログイン開始" "message": "ログイン開始"
@ -3292,16 +3289,16 @@
"message": "新しいウィンドウで開く" "message": "新しいウィンドウで開く"
}, },
"rememberThisDeviceToMakeFutureLoginsSeamless": { "rememberThisDeviceToMakeFutureLoginsSeamless": {
"message": "Remember this device to make future logins seamless" "message": "このデバイスを記憶して今後のログインをシームレスにする"
}, },
"deviceApprovalRequired": { "deviceApprovalRequired": {
"message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:"
}, },
"deviceApprovalRequiredV2": { "deviceApprovalRequiredV2": {
"message": "Device approval required" "message": "デバイスの承認が必要です"
}, },
"selectAnApprovalOptionBelow": { "selectAnApprovalOptionBelow": {
"message": "Select an approval option below" "message": "以下の承認オプションを選択してください"
}, },
"rememberThisDevice": { "rememberThisDevice": {
"message": "このデバイスを記憶する" "message": "このデバイスを記憶する"
@ -3377,7 +3374,7 @@
"message": "ユーザーのメールアドレスがありません" "message": "ユーザーのメールアドレスがありません"
}, },
"activeUserEmailNotFoundLoggingYouOut": { "activeUserEmailNotFoundLoggingYouOut": {
"message": "Active user email not found. Logging you out." "message": "アクティブなユーザーメールアドレスが見つかりません。ログアウトします。"
}, },
"deviceTrusted": { "deviceTrusted": {
"message": "信頼されたデバイス" "message": "信頼されたデバイス"
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay" "description": "Screen reader text (aria-label) for unlock account button in overlay"
}, },
"totpCodeAria": { "totpCodeAria": {
"message": "Time-based One-Time Password Verification Code", "message": "時間ベースのワンタイムパスワード認証コード",
"description": "Aria label for the totp code displayed in the inline menu for autofill" "description": "Aria label for the totp code displayed in the inline menu for autofill"
}, },
"totpSecondsSpanAria": { "totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires", "message": "現在の TOTP 有効期限が切れるまでの残り時間",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill" "description": "Aria label for the totp seconds displayed in the inline menu for autofill"
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
@ -3824,7 +3821,7 @@
"message": "アクセス中" "message": "アクセス中"
}, },
"loggedInExclamation": { "loggedInExclamation": {
"message": "Logged in!" "message": "ログインしました!"
}, },
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "パスキーはコピーされません" "message": "パスキーはコピーされません"
@ -4318,13 +4315,13 @@
"message": "フィルター" "message": "フィルター"
}, },
"filterVault": { "filterVault": {
"message": "Filter vault" "message": "保管庫をフィルター"
}, },
"filterApplied": { "filterApplied": {
"message": "One filter applied" "message": "1 個のフィルタを適用しました"
}, },
"filterAppliedPlural": { "filterAppliedPlural": {
"message": "$COUNT$ filters applied", "message": "$COUNT$ 個のフィルタを適用しました",
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
@ -4656,13 +4653,13 @@
"message": "アイテムの場所" "message": "アイテムの場所"
}, },
"fileSend": { "fileSend": {
"message": "File Send" "message": "ファイル Send"
}, },
"fileSends": { "fileSends": {
"message": "ファイル Send" "message": "ファイル Send"
}, },
"textSend": { "textSend": {
"message": "Text Send" "message": "テキスト Send"
}, },
"textSends": { "textSends": {
"message": "テキスト Send" "message": "テキスト Send"
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "拡張機能アイコンにログイン自動入力の候補の数を表示する" "message": "拡張機能アイコンにログイン自動入力の候補の数を表示する"
}, },
"showQuickCopyActions": {
"message": "保管庫にクイックコピー操作を表示する"
},
"systemDefault": { "systemDefault": {
"message": "システムのデフォルト" "message": "システムのデフォルト"
}, },
@ -4686,16 +4686,16 @@
"message": "エンタープライズポリシー要件がこの設定に適用されました" "message": "エンタープライズポリシー要件がこの設定に適用されました"
}, },
"sshPrivateKey": { "sshPrivateKey": {
"message": "Private key" "message": "秘密鍵"
}, },
"sshPublicKey": { "sshPublicKey": {
"message": "Public key" "message": "公開鍵"
}, },
"sshFingerprint": { "sshFingerprint": {
"message": "Fingerprint" "message": "フィンガープリント"
}, },
"sshKeyAlgorithm": { "sshKeyAlgorithm": {
"message": "Key type" "message": "鍵の種類"
}, },
"sshKeyAlgorithmED25519": { "sshKeyAlgorithmED25519": {
"message": "ED25519" "message": "ED25519"
@ -4752,171 +4752,207 @@
"message": "認証中" "message": "認証中"
}, },
"fillGeneratedPassword": { "fillGeneratedPassword": {
"message": "Fill generated password", "message": "生成したパスワードを入力",
"description": "Heading for the password generator within the inline menu" "description": "Heading for the password generator within the inline menu"
}, },
"passwordRegenerated": { "passwordRegenerated": {
"message": "Password regenerated", "message": "パスワードを再生成しました",
"description": "Notification message for when a password has been regenerated" "description": "Notification message for when a password has been regenerated"
}, },
"saveLoginToBitwarden": { "saveLoginToBitwarden": {
"message": "Save login to Bitwarden?", "message": "Bitwarden にログイン情報を保存しますか?",
"description": "Confirmation message for saving a login to Bitwarden" "description": "Confirmation message for saving a login to Bitwarden"
}, },
"spaceCharacterDescriptor": { "spaceCharacterDescriptor": {
"message": "Space", "message": "スペース",
"description": "Represents the space key in screen reader content as a readable word" "description": "Represents the space key in screen reader content as a readable word"
}, },
"tildeCharacterDescriptor": { "tildeCharacterDescriptor": {
"message": "Tilde", "message": "チルダ",
"description": "Represents the ~ key in screen reader content as a readable word" "description": "Represents the ~ key in screen reader content as a readable word"
}, },
"backtickCharacterDescriptor": { "backtickCharacterDescriptor": {
"message": "Backtick", "message": "バッククォート",
"description": "Represents the ` key in screen reader content as a readable word" "description": "Represents the ` key in screen reader content as a readable word"
}, },
"exclamationCharacterDescriptor": { "exclamationCharacterDescriptor": {
"message": "Exclamation mark", "message": "エクスクラメーションマーク",
"description": "Represents the ! key in screen reader content as a readable word" "description": "Represents the ! key in screen reader content as a readable word"
}, },
"atSignCharacterDescriptor": { "atSignCharacterDescriptor": {
"message": "At sign", "message": "アットマーク",
"description": "Represents the @ key in screen reader content as a readable word" "description": "Represents the @ key in screen reader content as a readable word"
}, },
"hashSignCharacterDescriptor": { "hashSignCharacterDescriptor": {
"message": "Hash sign", "message": "ハッシュ記号",
"description": "Represents the # key in screen reader content as a readable word" "description": "Represents the # key in screen reader content as a readable word"
}, },
"dollarSignCharacterDescriptor": { "dollarSignCharacterDescriptor": {
"message": "Dollar sign", "message": "ドル記号",
"description": "Represents the $ key in screen reader content as a readable word" "description": "Represents the $ key in screen reader content as a readable word"
}, },
"percentSignCharacterDescriptor": { "percentSignCharacterDescriptor": {
"message": "Percent sign", "message": "パーセント記号",
"description": "Represents the % key in screen reader content as a readable word" "description": "Represents the % key in screen reader content as a readable word"
}, },
"caretCharacterDescriptor": { "caretCharacterDescriptor": {
"message": "Caret", "message": "キャレット",
"description": "Represents the ^ key in screen reader content as a readable word" "description": "Represents the ^ key in screen reader content as a readable word"
}, },
"ampersandCharacterDescriptor": { "ampersandCharacterDescriptor": {
"message": "Ampersand", "message": "アンパサンド",
"description": "Represents the & key in screen reader content as a readable word" "description": "Represents the & key in screen reader content as a readable word"
}, },
"asteriskCharacterDescriptor": { "asteriskCharacterDescriptor": {
"message": "Asterisk", "message": "アスタリスク",
"description": "Represents the * key in screen reader content as a readable word" "description": "Represents the * key in screen reader content as a readable word"
}, },
"parenLeftCharacterDescriptor": { "parenLeftCharacterDescriptor": {
"message": "Left parenthesis", "message": "左かっこ",
"description": "Represents the ( key in screen reader content as a readable word" "description": "Represents the ( key in screen reader content as a readable word"
}, },
"parenRightCharacterDescriptor": { "parenRightCharacterDescriptor": {
"message": "Right parenthesis", "message": "右かっこ",
"description": "Represents the ) key in screen reader content as a readable word" "description": "Represents the ) key in screen reader content as a readable word"
}, },
"hyphenCharacterDescriptor": { "hyphenCharacterDescriptor": {
"message": "Underscore", "message": "アンダースコア",
"description": "Represents the _ key in screen reader content as a readable word" "description": "Represents the _ key in screen reader content as a readable word"
}, },
"underscoreCharacterDescriptor": { "underscoreCharacterDescriptor": {
"message": "Hyphen", "message": "ハイフン",
"description": "Represents the - key in screen reader content as a readable word" "description": "Represents the - key in screen reader content as a readable word"
}, },
"plusCharacterDescriptor": { "plusCharacterDescriptor": {
"message": "Plus", "message": "プラス",
"description": "Represents the + key in screen reader content as a readable word" "description": "Represents the + key in screen reader content as a readable word"
}, },
"equalsCharacterDescriptor": { "equalsCharacterDescriptor": {
"message": "Equals", "message": "イコール",
"description": "Represents the = key in screen reader content as a readable word" "description": "Represents the = key in screen reader content as a readable word"
}, },
"braceLeftCharacterDescriptor": { "braceLeftCharacterDescriptor": {
"message": "Left brace", "message": "左中かっこ",
"description": "Represents the { key in screen reader content as a readable word" "description": "Represents the { key in screen reader content as a readable word"
}, },
"braceRightCharacterDescriptor": { "braceRightCharacterDescriptor": {
"message": "Right brace", "message": "右中かっこ",
"description": "Represents the } key in screen reader content as a readable word" "description": "Represents the } key in screen reader content as a readable word"
}, },
"bracketLeftCharacterDescriptor": { "bracketLeftCharacterDescriptor": {
"message": "Left bracket", "message": "左大かっこ",
"description": "Represents the [ key in screen reader content as a readable word" "description": "Represents the [ key in screen reader content as a readable word"
}, },
"bracketRightCharacterDescriptor": { "bracketRightCharacterDescriptor": {
"message": "Right bracket", "message": "右大かっこ",
"description": "Represents the ] key in screen reader content as a readable word" "description": "Represents the ] key in screen reader content as a readable word"
}, },
"pipeCharacterDescriptor": { "pipeCharacterDescriptor": {
"message": "Pipe", "message": "パイプ",
"description": "Represents the | key in screen reader content as a readable word" "description": "Represents the | key in screen reader content as a readable word"
}, },
"backSlashCharacterDescriptor": { "backSlashCharacterDescriptor": {
"message": "Back slash", "message": "バックスラッシュ",
"description": "Represents the back slash key in screen reader content as a readable word" "description": "Represents the back slash key in screen reader content as a readable word"
}, },
"colonCharacterDescriptor": { "colonCharacterDescriptor": {
"message": "Colon", "message": "コロン",
"description": "Represents the : key in screen reader content as a readable word" "description": "Represents the : key in screen reader content as a readable word"
}, },
"semicolonCharacterDescriptor": { "semicolonCharacterDescriptor": {
"message": "Semicolon", "message": "セミコロン",
"description": "Represents the ; key in screen reader content as a readable word" "description": "Represents the ; key in screen reader content as a readable word"
}, },
"doubleQuoteCharacterDescriptor": { "doubleQuoteCharacterDescriptor": {
"message": "Double quote", "message": "ダブルクォート",
"description": "Represents the double quote key in screen reader content as a readable word" "description": "Represents the double quote key in screen reader content as a readable word"
}, },
"singleQuoteCharacterDescriptor": { "singleQuoteCharacterDescriptor": {
"message": "Single quote", "message": "シングルクォート",
"description": "Represents the ' key in screen reader content as a readable word" "description": "Represents the ' key in screen reader content as a readable word"
}, },
"lessThanCharacterDescriptor": { "lessThanCharacterDescriptor": {
"message": "Less than", "message": "小なり",
"description": "Represents the < key in screen reader content as a readable word" "description": "Represents the < key in screen reader content as a readable word"
}, },
"greaterThanCharacterDescriptor": { "greaterThanCharacterDescriptor": {
"message": "Greater than", "message": "大なり",
"description": "Represents the > key in screen reader content as a readable word" "description": "Represents the > key in screen reader content as a readable word"
}, },
"commaCharacterDescriptor": { "commaCharacterDescriptor": {
"message": "Comma", "message": "コンマ",
"description": "Represents the , key in screen reader content as a readable word" "description": "Represents the , key in screen reader content as a readable word"
}, },
"periodCharacterDescriptor": { "periodCharacterDescriptor": {
"message": "Period", "message": "ピリオド",
"description": "Represents the . key in screen reader content as a readable word" "description": "Represents the . key in screen reader content as a readable word"
}, },
"questionCharacterDescriptor": { "questionCharacterDescriptor": {
"message": "Question mark", "message": "クエスチョンマーク",
"description": "Represents the ? key in screen reader content as a readable word" "description": "Represents the ? key in screen reader content as a readable word"
}, },
"forwardSlashCharacterDescriptor": { "forwardSlashCharacterDescriptor": {
"message": "Forward slash", "message": "スラッシュ",
"description": "Represents the / key in screen reader content as a readable word" "description": "Represents the / key in screen reader content as a readable word"
}, },
"lowercaseAriaLabel": { "lowercaseAriaLabel": {
"message": "Lowercase" "message": "小文字"
}, },
"uppercaseAriaLabel": { "uppercaseAriaLabel": {
"message": "Uppercase" "message": "大文字"
}, },
"generatedPassword": { "generatedPassword": {
"message": "Generated password" "message": "生成したパスワード"
}, },
"compactMode": { "compactMode": {
"message": "Compact mode" "message": "コンパクトモード"
}, },
"beta": { "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": { "extensionWidth": {
"message": "Extension width" "message": "拡張機能の幅"
}, },
"wide": { "wide": {
"message": "Wide" "message": "ワイド"
}, },
"extraWide": { "extraWide": {
"message": "Extra wide" "message": "エクストラワイド"
} }
} }

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "სისტემურად ნაგულისხმევი" "message": "სისტემურად ნაგულისხმევი"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "ವಿಸ್ತರಣೆಯನ್ನು ರೇಟ್ ಮಾಡಿ" "message": "ವಿಸ್ತರಣೆಯನ್ನು ರೇಟ್ ಮಾಡಿ"
}, },
"rateExtensionDesc": {
"message": "ಉತ್ತಮ ವಿಮರ್ಶೆಯೊಂದಿಗೆ ನಮಗೆ ಸಹಾಯ ಮಾಡಲು ದಯವಿಟ್ಟು ಪರಿಗಣಿಸಿ!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "ನಿಮ್ಮ ವೆಬ್ ಬ್ರೌಸರ್ ಸುಲಭವಾದ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ನಕಲು ಮಾಡುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ ಅದನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಕಲಿಸಿ." "message": "ನಿಮ್ಮ ವೆಬ್ ಬ್ರೌಸರ್ ಸುಲಭವಾದ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ನಕಲು ಮಾಡುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ ಅದನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಕಲಿಸಿ."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -193,10 +193,10 @@
"message": "신원 자동 완성" "message": "신원 자동 완성"
}, },
"fillVerificationCode": { "fillVerificationCode": {
"message": "Fill verification code" "message": "인증 코드를 입력하세요"
}, },
"fillVerificationCodeAria": { "fillVerificationCodeAria": {
"message": "Fill Verification Code", "message": "인증 코드를 입력하세요",
"description": "Aria label for the heading displayed the inline menu for totp code autofill" "description": "Aria label for the heading displayed the inline menu for totp code autofill"
}, },
"generatePasswordCopied": { "generatePasswordCopied": {
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "확장 프로그램 평가" "message": "확장 프로그램 평가"
}, },
"rateExtensionDesc": {
"message": "좋은 리뷰를 남겨 저희를 도와주세요!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "사용하고 있는 웹 브라우저가 쉬운 클립보드 복사를 지원하지 않습니다. 직접 복사하세요." "message": "사용하고 있는 웹 브라우저가 쉬운 클립보드 복사를 지원하지 않습니다. 직접 복사하세요."
}, },
@ -2069,11 +2066,11 @@
"message": "보안 비밀번호가 생성되었습니다! 웹사이트에서 비밀번호를 업데이트하는 것도 잊지 마세요." "message": "보안 비밀번호가 생성되었습니다! 웹사이트에서 비밀번호를 업데이트하는 것도 잊지 마세요."
}, },
"useGeneratorHelpTextPartOne": { "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'" "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": { "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'" "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": { "vaultTimeoutAction": {
@ -3181,7 +3178,7 @@
"message": "모든 로그인 방식 보기" "message": "모든 로그인 방식 보기"
}, },
"viewAllLoginOptionsV1": { "viewAllLoginOptionsV1": {
"message": "View all log in options" "message": "모든 로그인 옵션 보기"
}, },
"notificationSentDevice": { "notificationSentDevice": {
"message": "기기에 알림이 전송되었습니다." "message": "기기에 알림이 전송되었습니다."
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay" "description": "Screen reader text (aria-label) for unlock account button in overlay"
}, },
"totpCodeAria": { "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" "description": "Aria label for the totp code displayed in the inline menu for autofill"
}, },
"totpSecondsSpanAria": { "totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires", "message": "TOTP 만료까지 남은 시간",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill" "description": "Aria label for the totp seconds displayed in the inline menu for autofill"
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
@ -3669,7 +3666,7 @@
"message": "데이터 가져오기 성공" "message": "데이터 가져오기 성공"
}, },
"importSuccessNumberOfItems": { "importSuccessNumberOfItems": {
"message": "A total of $AMOUNT$ items were imported.", "message": "총 $AMOUNT$개의 항목을 가져왔습니다.",
"placeholders": { "placeholders": {
"amount": { "amount": {
"content": "$1", "content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "확장 아이콘에 로그인 자동 완성 제안 수 표시" "message": "확장 아이콘에 로그인 자동 완성 제안 수 표시"
}, },
"showQuickCopyActions": {
"message": "보관함에서 빠른 복사 기능 표시"
},
"systemDefault": { "systemDefault": {
"message": "시스템 기본 설정" "message": "시스템 기본 설정"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "베타" "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": { "extensionWidth": {
"message": "확장 폭" "message": "확장 폭"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Įvertinkite šį plėtinį" "message": "Įvertinkite šį plėtinį"
}, },
"rateExtensionDesc": {
"message": "Apsvarstykite galimybę mums padėti palikdami gerą atsiliepimą!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Jūsų žiniatinklio naršyklė nepalaiko automatinio kopijavimo. Vietoj to nukopijuokite rankiniu būdu." "message": "Jūsų žiniatinklio naršyklė nepalaiko automatinio kopijavimo. Vietoj to nukopijuokite rankiniu būdu."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Novērtēt paplašinājumu" "message": "Novērtēt paplašinājumu"
}, },
"rateExtensionDesc": {
"message": "Lūgums apsvērt palīdzēt mums ar labu atsauksmi."
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Pārlūks neatbalsta vienkāršo ievietošanu starpliktuvē. Tā vietā tas jāievieto starpliktuvē pašrocīgi." "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": { "showNumberOfAutofillSuggestions": {
"message": "Paplašinājuma ikonā rādīt pieteikšanās automātiskās aizpildes ieteikumu skaitu" "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": { "systemDefault": {
"message": "Sistēmas noklusējums" "message": "Sistēmas noklusējums"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "Beta" "message": "Beta"
}, },
"importantNotice": {
"message": "Svarīgs paziņojums"
},
"setupTwoStepLogin": {
"message": "Iestatīt divpakāpju pieteikšanos"
},
"newDeviceVerificationNoticeContentPage1": {
"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": "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": "Atgādināt man vēlāk"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Vai ir uzticama piekļuve savai e-pasta adresei $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Nē, nav"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Jā, varu uzticami piekļūt savam e-pastam"
},
"turnOnTwoStepLogin": {
"message": "Ieslēgt divpakāpju pieteikšanos"
},
"changeAcctEmail": {
"message": "Mainīt konta e-pasta adresi"
},
"extensionWidth": { "extensionWidth": {
"message": "Paplašinājuma platums" "message": "Paplašinājuma platums"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "എക്സ്റ്റൻഷൻ റേറ്റ് ചെയ്യുക " "message": "എക്സ്റ്റൻഷൻ റേറ്റ് ചെയ്യുക "
}, },
"rateExtensionDesc": {
"message": "ഒരു നല്ല അവലോകനത്തിന് ഞങ്ങളെ സഹായിക്കുന്നത് പരിഗണിക്കുക!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "നിങ്ങളുടെ ബ്രൌസർ എളുപ്പമുള്ള ക്ലിപ്പ്ബോർഡ് പകർത്തൽ പിന്തുണയ്ക്കത്തില്ല. പകരം അത് സ്വമേധയാ പകർക്കുക ." "message": "നിങ്ങളുടെ ബ്രൌസർ എളുപ്പമുള്ള ക്ലിപ്പ്ബോർഡ് പകർത്തൽ പിന്തുണയ്ക്കത്തില്ല. പകരം അത് സ്വമേധയാ പകർക്കുക ."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "विस्तारकाचे मूल्यांकन करा" "message": "विस्तारकाचे मूल्यांकन करा"
}, },
"rateExtensionDesc": {
"message": "चांगला अभिप्राय देऊन आम्हाला मदत करा!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Gi denne utvidelsen en vurdering" "message": "Gi denne utvidelsen en vurdering"
}, },
"rateExtensionDesc": {
"message": "Tenk gjerne på om du vil skrive en anmeldelse om oss!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Nettleseren din støtter ikke kopiering til utklippstavlen på noe enkelt vis. Prøv å kopiere det manuelt i stedet." "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": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "Systemforvalg" "message": "Systemforvalg"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Deze extensie beoordelen" "message": "Deze extensie beoordelen"
}, },
"rateExtensionDesc": {
"message": "Je kunt ons helpen door een goede recensie achter te laten!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Je webbrowser ondersteunt kopiëren naar plakbord niet. Kopieer handmatig." "message": "Je webbrowser ondersteunt kopiëren naar plakbord niet. Kopieer handmatig."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Aantal login-autofill-suggesties op het extensie-pictogram weergeven" "message": "Aantal login-autofill-suggesties op het extensie-pictogram weergeven"
}, },
"showQuickCopyActions": {
"message": "Toon snelle kopieeracties in de kluis"
},
"systemDefault": { "systemDefault": {
"message": "Systeemstandaard" "message": "Systeemstandaard"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extensiebreedte" "message": "Extensiebreedte"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -23,19 +23,19 @@
"message": "New to Bitwarden?" "message": "New to Bitwarden?"
}, },
"logInWithPasskey": { "logInWithPasskey": {
"message": "Log in with passkey" "message": "Zaloguj się używając passkey"
}, },
"useSingleSignOn": { "useSingleSignOn": {
"message": "Use single sign-on" "message": "Użyj jednokrotnego logowania"
}, },
"welcomeBack": { "welcomeBack": {
"message": "Welcome back" "message": "Witaj ponownie"
}, },
"setAStrongPassword": { "setAStrongPassword": {
"message": "Ustaw silne hasło" "message": "Ustaw silne hasło"
}, },
"finishCreatingYourAccountBySettingAPassword": { "finishCreatingYourAccountBySettingAPassword": {
"message": "Ukończ tworzenie konta poprzez utworzenie hasła" "message": "Ukończ tworzenie konta poprzez ustawienie hasła"
}, },
"enterpriseSingleSignOn": { "enterpriseSingleSignOn": {
"message": "Logowanie jednokrotne" "message": "Logowanie jednokrotne"
@ -120,7 +120,7 @@
"message": "Kopiuj hasło" "message": "Kopiuj hasło"
}, },
"copyPassphrase": { "copyPassphrase": {
"message": "Copy passphrase" "message": "Kopiuj frazę bezpieczeństwa"
}, },
"copyNote": { "copyNote": {
"message": "Kopiuj notatkę" "message": "Kopiuj notatkę"
@ -153,13 +153,13 @@
"message": "Kopiuj numer licencji" "message": "Kopiuj numer licencji"
}, },
"copyPrivateKey": { "copyPrivateKey": {
"message": "Copy private key" "message": "Skopiuj klucz prywatny"
}, },
"copyPublicKey": { "copyPublicKey": {
"message": "Copy public key" "message": "Skopiuj klucz publiczny"
}, },
"copyFingerprint": { "copyFingerprint": {
"message": "Copy fingerprint" "message": "Skopiuj odcisk palca"
}, },
"copyCustomField": { "copyCustomField": {
"message": "Kopiuj $FIELD$", "message": "Kopiuj $FIELD$",
@ -193,10 +193,10 @@
"message": "Autouzupełnianie tożsamości" "message": "Autouzupełnianie tożsamości"
}, },
"fillVerificationCode": { "fillVerificationCode": {
"message": "Fill verification code" "message": "Wypełnij kod weryfikacyjny"
}, },
"fillVerificationCodeAria": { "fillVerificationCodeAria": {
"message": "Fill Verification Code", "message": "Wypełnij kod weryfikacyjny",
"description": "Aria label for the heading displayed the inline menu for totp code autofill" "description": "Aria label for the heading displayed the inline menu for totp code autofill"
}, },
"generatePasswordCopied": { "generatePasswordCopied": {
@ -443,7 +443,7 @@
"message": "Wygeneruj hasło" "message": "Wygeneruj hasło"
}, },
"generatePassphrase": { "generatePassphrase": {
"message": "Generate passphrase" "message": "Wygenruj frazę zabezpieczającą"
}, },
"regeneratePassword": { "regeneratePassword": {
"message": "Wygeneruj ponownie hasło" "message": "Wygeneruj ponownie hasło"
@ -607,7 +607,7 @@
"message": "Otwórz stronę" "message": "Otwórz stronę"
}, },
"launchWebsiteName": { "launchWebsiteName": {
"message": "Launch website $ITEMNAME$", "message": "Otwórz stronę internetową $ITEMNAME$",
"placeholders": { "placeholders": {
"itemname": { "itemname": {
"content": "$1", "content": "$1",
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Oceń rozszerzenie" "message": "Oceń rozszerzenie"
}, },
"rateExtensionDesc": {
"message": "Wesprzyj nas pozytywną opinią!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Przeglądarka nie obsługuje łatwego kopiowania schowka. Skopiuj element ręcznie." "message": "Przeglądarka nie obsługuje łatwego kopiowania schowka. Skopiuj element ręcznie."
}, },
@ -862,7 +859,7 @@
"message": "Zaloguj się" "message": "Zaloguj się"
}, },
"logInToBitwarden": { "logInToBitwarden": {
"message": "Log in to Bitwarden" "message": "Zaloguj się do Bitwarden"
}, },
"restartRegistration": { "restartRegistration": {
"message": "Zrestartuj rejestrację" "message": "Zrestartuj rejestrację"
@ -1133,7 +1130,7 @@
"description": "WARNING (should stay in capitalized letters if the language permits)" "description": "WARNING (should stay in capitalized letters if the language permits)"
}, },
"warningCapitalized": { "warningCapitalized": {
"message": "Warning", "message": "Ostrzeżenie",
"description": "Warning (should maintain locale-relevant capitalization)" "description": "Warning (should maintain locale-relevant capitalization)"
}, },
"confirmVaultExport": { "confirmVaultExport": {
@ -1327,7 +1324,7 @@
"message": "Wpisz 6-cyfrowy kod weryfikacyjny z aplikacji uwierzytelniającej." "message": "Wpisz 6-cyfrowy kod weryfikacyjny z aplikacji uwierzytelniającej."
}, },
"authenticationTimeout": { "authenticationTimeout": {
"message": "Authentication timeout" "message": "Limit czasu uwierzytelniania"
}, },
"authenticationSessionTimedOut": { "authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process." "message": "The authentication session timed out. Please restart the login process."
@ -1450,7 +1447,7 @@
"message": "Adres URL serwera" "message": "Adres URL serwera"
}, },
"selfHostBaseUrl": { "selfHostBaseUrl": {
"message": "Self-host server URL", "message": "URL samodzielnie hostowanego serwera",
"description": "Label for field requesting a self-hosted integration service URL" "description": "Label for field requesting a self-hosted integration service URL"
}, },
"apiUrl": { "apiUrl": {
@ -2531,7 +2528,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendPasswordDescV3": { "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." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendNotesDesc": { "sendNotesDesc": {
@ -2616,7 +2613,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendFilePopoutDialogText": { "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." "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
}, },
"sendFilePopoutDialogDesc": { "sendFilePopoutDialogDesc": {
@ -2894,7 +2891,7 @@
"message": "Wygeneruj nazwę użytkownika" "message": "Wygeneruj nazwę użytkownika"
}, },
"generateEmail": { "generateEmail": {
"message": "Generate email" "message": "Wygeneruj e-mail"
}, },
"spinboxBoundariesHint": { "spinboxBoundariesHint": {
"message": "Wartość musi być pomiędzy $MIN$ a $MAX$.", "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." "message": "Wygeneruj alias adresu e-mail z zewnętrznej usługi przekierowania."
}, },
"forwarderDomainName": { "forwarderDomainName": {
"message": "Email domain", "message": "Domena adresu e-mail",
"description": "Labels the domain name email forwarder service option" "description": "Labels the domain name email forwarder service option"
}, },
"forwarderDomainNameHint": { "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." "description": "Guidance provided for email forwarding services that support multiple email domains."
}, },
"forwarderError": { "forwarderError": {
@ -3178,16 +3175,16 @@
"message": "Wyślij ponownie powiadomienie" "message": "Wyślij ponownie powiadomienie"
}, },
"viewAllLogInOptions": { "viewAllLogInOptions": {
"message": "View all log in options" "message": "Zobacz wszystkie sposoby logowania"
}, },
"viewAllLoginOptionsV1": { "viewAllLoginOptionsV1": {
"message": "View all log in options" "message": "Zobacz wszystkie sposoby logowania"
}, },
"notificationSentDevice": { "notificationSentDevice": {
"message": "Powiadomienie zostało wysłane na urządzenie." "message": "Powiadomienie zostało wysłane na urządzenie."
}, },
"aNotificationWasSentToYourDevice": { "aNotificationWasSentToYourDevice": {
"message": "A notification was sent to your device" "message": "Powiadomienie zostało wysłane na twoje urządzenie"
}, },
"makeSureYourAccountIsUnlockedAndTheFingerprintEtc": { "makeSureYourAccountIsUnlockedAndTheFingerprintEtc": {
"message": "Make sure your account is unlocked and the fingerprint phrase matches on the other device" "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" "message": "You will be notified once the request is approved"
}, },
"needAnotherOptionV1": { "needAnotherOptionV1": {
"message": "Need another option?" "message": "Potrzebujesz innego sposobu?"
}, },
"loginInitiated": { "loginInitiated": {
"message": "Logowanie rozpoczęte" "message": "Logowanie rozpoczęte"
@ -3292,16 +3289,16 @@
"message": "Otwiera w nowym oknie" "message": "Otwiera w nowym oknie"
}, },
"rememberThisDeviceToMakeFutureLoginsSeamless": { "rememberThisDeviceToMakeFutureLoginsSeamless": {
"message": "Remember this device to make future logins seamless" "message": "Zapamiętaj to urządzenie, aby przyszłe logowania były bezproblemowe"
}, },
"deviceApprovalRequired": { "deviceApprovalRequired": {
"message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:"
}, },
"deviceApprovalRequiredV2": { "deviceApprovalRequiredV2": {
"message": "Device approval required" "message": "Wymagane zatwierdzenie urządzenia"
}, },
"selectAnApprovalOptionBelow": { "selectAnApprovalOptionBelow": {
"message": "Select an approval option below" "message": "Wybierz opcję zatwierdzenia poniżej"
}, },
"rememberThisDevice": { "rememberThisDevice": {
"message": "Zapamiętaj to urządzenie" "message": "Zapamiętaj to urządzenie"
@ -3377,7 +3374,7 @@
"message": "Brak adresu e-mail użytkownika" "message": "Brak adresu e-mail użytkownika"
}, },
"activeUserEmailNotFoundLoggingYouOut": { "activeUserEmailNotFoundLoggingYouOut": {
"message": "Active user email not found. Logging you out." "message": "Nie znaleziono aktywnego adresu e-mail. Trwa wylogowanie."
}, },
"deviceTrusted": { "deviceTrusted": {
"message": "Zaufano urządzeniu" "message": "Zaufano urządzeniu"
@ -3592,7 +3589,7 @@
"description": "Aria label for the totp code displayed in the inline menu for autofill" "description": "Aria label for the totp code displayed in the inline menu for autofill"
}, },
"totpSecondsSpanAria": { "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" "description": "Aria label for the totp seconds displayed in the inline menu for autofill"
}, },
"fillCredentialsFor": { "fillCredentialsFor": {
@ -3824,7 +3821,7 @@
"message": "Uzyskiwanie dostępu" "message": "Uzyskiwanie dostępu"
}, },
"loggedInExclamation": { "loggedInExclamation": {
"message": "Logged in!" "message": "Zalogowano!"
}, },
"passkeyNotCopied": { "passkeyNotCopied": {
"message": "Passkey nie zostanie skopiowany" "message": "Passkey nie zostanie skopiowany"
@ -4318,13 +4315,13 @@
"message": "Filtry" "message": "Filtry"
}, },
"filterVault": { "filterVault": {
"message": "Filter vault" "message": "Filtruj sejf"
}, },
"filterApplied": { "filterApplied": {
"message": "One filter applied" "message": "Zastosowano jeden filtr"
}, },
"filterAppliedPlural": { "filterAppliedPlural": {
"message": "$COUNT$ filters applied", "message": "$COUNT$ filtrów zastosowanych",
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Pokaż liczbę sugestii autouzupełniania logowania na ikonie rozszerzenia" "message": "Pokaż liczbę sugestii autouzupełniania logowania na ikonie rozszerzenia"
}, },
"showQuickCopyActions": {
"message": "Pokaż akcje szybkiego kopiowania w Sejfie"
},
"systemDefault": { "systemDefault": {
"message": "Domyślny systemu" "message": "Domyślny systemu"
}, },
@ -4692,7 +4692,7 @@
"message": "Klucz publiczny" "message": "Klucz publiczny"
}, },
"sshFingerprint": { "sshFingerprint": {
"message": "Fingerprint" "message": "Odcisk palca"
}, },
"sshKeyAlgorithm": { "sshKeyAlgorithm": {
"message": "Typ klucza" "message": "Typ klucza"
@ -4701,13 +4701,13 @@
"message": "ED25519" "message": "ED25519"
}, },
"sshKeyAlgorithmRSA2048": { "sshKeyAlgorithmRSA2048": {
"message": "RSA 2048-Bitowy" "message": "RSA 2048-bitowy"
}, },
"sshKeyAlgorithmRSA3072": { "sshKeyAlgorithmRSA3072": {
"message": "RSA 3072-Bitowy" "message": "RSA 3072-bitowy"
}, },
"sshKeyAlgorithmRSA4096": { "sshKeyAlgorithmRSA4096": {
"message": "RSA 4096-Bitowy" "message": "RSA 4096-bitowy"
}, },
"retry": { "retry": {
"message": "Powtórz" "message": "Powtórz"
@ -4756,19 +4756,19 @@
"description": "Heading for the password generator within the inline menu" "description": "Heading for the password generator within the inline menu"
}, },
"passwordRegenerated": { "passwordRegenerated": {
"message": "Password regenerated", "message": "Hasło zostało ponownie wygenerowane",
"description": "Notification message for when a password has been regenerated" "description": "Notification message for when a password has been regenerated"
}, },
"saveLoginToBitwarden": { "saveLoginToBitwarden": {
"message": "Save login to Bitwarden?", "message": "Zapisać dane logowania w Bitwarden?",
"description": "Confirmation message for saving a login to Bitwarden" "description": "Confirmation message for saving a login to Bitwarden"
}, },
"spaceCharacterDescriptor": { "spaceCharacterDescriptor": {
"message": "Space", "message": "Spacja",
"description": "Represents the space key in screen reader content as a readable word" "description": "Represents the space key in screen reader content as a readable word"
}, },
"tildeCharacterDescriptor": { "tildeCharacterDescriptor": {
"message": "Tilde", "message": "Tylda",
"description": "Represents the ~ key in screen reader content as a readable word" "description": "Represents the ~ key in screen reader content as a readable word"
}, },
"backtickCharacterDescriptor": { "backtickCharacterDescriptor": {
@ -4776,23 +4776,23 @@
"description": "Represents the ` key in screen reader content as a readable word" "description": "Represents the ` key in screen reader content as a readable word"
}, },
"exclamationCharacterDescriptor": { "exclamationCharacterDescriptor": {
"message": "Exclamation mark", "message": "Wykrzyknik",
"description": "Represents the ! key in screen reader content as a readable word" "description": "Represents the ! key in screen reader content as a readable word"
}, },
"atSignCharacterDescriptor": { "atSignCharacterDescriptor": {
"message": "At sign", "message": "Małpa",
"description": "Represents the @ key in screen reader content as a readable word" "description": "Represents the @ key in screen reader content as a readable word"
}, },
"hashSignCharacterDescriptor": { "hashSignCharacterDescriptor": {
"message": "Hash sign", "message": "Hashtag",
"description": "Represents the # key in screen reader content as a readable word" "description": "Represents the # key in screen reader content as a readable word"
}, },
"dollarSignCharacterDescriptor": { "dollarSignCharacterDescriptor": {
"message": "Dollar sign", "message": "Znak dolara",
"description": "Represents the $ key in screen reader content as a readable word" "description": "Represents the $ key in screen reader content as a readable word"
}, },
"percentSignCharacterDescriptor": { "percentSignCharacterDescriptor": {
"message": "Percent sign", "message": "Znak procenta",
"description": "Represents the % key in screen reader content as a readable word" "description": "Represents the % key in screen reader content as a readable word"
}, },
"caretCharacterDescriptor": { "caretCharacterDescriptor": {
@ -4804,23 +4804,23 @@
"description": "Represents the & key in screen reader content as a readable word" "description": "Represents the & key in screen reader content as a readable word"
}, },
"asteriskCharacterDescriptor": { "asteriskCharacterDescriptor": {
"message": "Asterisk", "message": "Gwiazdka",
"description": "Represents the * key in screen reader content as a readable word" "description": "Represents the * key in screen reader content as a readable word"
}, },
"parenLeftCharacterDescriptor": { "parenLeftCharacterDescriptor": {
"message": "Left parenthesis", "message": "Prawy nawias okrągły",
"description": "Represents the ( key in screen reader content as a readable word" "description": "Represents the ( key in screen reader content as a readable word"
}, },
"parenRightCharacterDescriptor": { "parenRightCharacterDescriptor": {
"message": "Right parenthesis", "message": "Prawy nawias okrągły",
"description": "Represents the ) key in screen reader content as a readable word" "description": "Represents the ) key in screen reader content as a readable word"
}, },
"hyphenCharacterDescriptor": { "hyphenCharacterDescriptor": {
"message": "Underscore", "message": "Znak podkreślenia",
"description": "Represents the _ key in screen reader content as a readable word" "description": "Represents the _ key in screen reader content as a readable word"
}, },
"underscoreCharacterDescriptor": { "underscoreCharacterDescriptor": {
"message": "Hyphen", "message": "Myślnik",
"description": "Represents the - key in screen reader content as a readable word" "description": "Represents the - key in screen reader content as a readable word"
}, },
"plusCharacterDescriptor": { "plusCharacterDescriptor": {
@ -4828,27 +4828,27 @@
"description": "Represents the + key in screen reader content as a readable word" "description": "Represents the + key in screen reader content as a readable word"
}, },
"equalsCharacterDescriptor": { "equalsCharacterDescriptor": {
"message": "Equals", "message": "Znak równości",
"description": "Represents the = key in screen reader content as a readable word" "description": "Represents the = key in screen reader content as a readable word"
}, },
"braceLeftCharacterDescriptor": { "braceLeftCharacterDescriptor": {
"message": "Left brace", "message": "Lewy nawias klamrowy",
"description": "Represents the { key in screen reader content as a readable word" "description": "Represents the { key in screen reader content as a readable word"
}, },
"braceRightCharacterDescriptor": { "braceRightCharacterDescriptor": {
"message": "Right brace", "message": "Prawy nawias klamrowy",
"description": "Represents the } key in screen reader content as a readable word" "description": "Represents the } key in screen reader content as a readable word"
}, },
"bracketLeftCharacterDescriptor": { "bracketLeftCharacterDescriptor": {
"message": "Left bracket", "message": "Lewy nawias kwadratowy",
"description": "Represents the [ key in screen reader content as a readable word" "description": "Represents the [ key in screen reader content as a readable word"
}, },
"bracketRightCharacterDescriptor": { "bracketRightCharacterDescriptor": {
"message": "Right bracket", "message": "Prawy nawias kwadratowy",
"description": "Represents the ] key in screen reader content as a readable word" "description": "Represents the ] key in screen reader content as a readable word"
}, },
"pipeCharacterDescriptor": { "pipeCharacterDescriptor": {
"message": "Pipe", "message": "Pionowa kreska",
"description": "Represents the | key in screen reader content as a readable word" "description": "Represents the | key in screen reader content as a readable word"
}, },
"backSlashCharacterDescriptor": { "backSlashCharacterDescriptor": {
@ -4856,39 +4856,39 @@
"description": "Represents the back slash key in screen reader content as a readable word" "description": "Represents the back slash key in screen reader content as a readable word"
}, },
"colonCharacterDescriptor": { "colonCharacterDescriptor": {
"message": "Colon", "message": "Dwukropek",
"description": "Represents the : key in screen reader content as a readable word" "description": "Represents the : key in screen reader content as a readable word"
}, },
"semicolonCharacterDescriptor": { "semicolonCharacterDescriptor": {
"message": "Semicolon", "message": "Średnik",
"description": "Represents the ; key in screen reader content as a readable word" "description": "Represents the ; key in screen reader content as a readable word"
}, },
"doubleQuoteCharacterDescriptor": { "doubleQuoteCharacterDescriptor": {
"message": "Double quote", "message": "Cudzysłów",
"description": "Represents the double quote key in screen reader content as a readable word" "description": "Represents the double quote key in screen reader content as a readable word"
}, },
"singleQuoteCharacterDescriptor": { "singleQuoteCharacterDescriptor": {
"message": "Single quote", "message": "Apostrof",
"description": "Represents the ' key in screen reader content as a readable word" "description": "Represents the ' key in screen reader content as a readable word"
}, },
"lessThanCharacterDescriptor": { "lessThanCharacterDescriptor": {
"message": "Less than", "message": "Mniejszy niż",
"description": "Represents the < key in screen reader content as a readable word" "description": "Represents the < key in screen reader content as a readable word"
}, },
"greaterThanCharacterDescriptor": { "greaterThanCharacterDescriptor": {
"message": "Greater than", "message": "Większy niż",
"description": "Represents the > key in screen reader content as a readable word" "description": "Represents the > key in screen reader content as a readable word"
}, },
"commaCharacterDescriptor": { "commaCharacterDescriptor": {
"message": "Comma", "message": "Przecinek",
"description": "Represents the , key in screen reader content as a readable word" "description": "Represents the , key in screen reader content as a readable word"
}, },
"periodCharacterDescriptor": { "periodCharacterDescriptor": {
"message": "Period", "message": "Kropka",
"description": "Represents the . key in screen reader content as a readable word" "description": "Represents the . key in screen reader content as a readable word"
}, },
"questionCharacterDescriptor": { "questionCharacterDescriptor": {
"message": "Question mark", "message": "Znak zapytania",
"description": "Represents the ? key in screen reader content as a readable word" "description": "Represents the ? key in screen reader content as a readable word"
}, },
"forwardSlashCharacterDescriptor": { "forwardSlashCharacterDescriptor": {
@ -4896,13 +4896,13 @@
"description": "Represents the / key in screen reader content as a readable word" "description": "Represents the / key in screen reader content as a readable word"
}, },
"lowercaseAriaLabel": { "lowercaseAriaLabel": {
"message": "Lowercase" "message": "Małe litery"
}, },
"uppercaseAriaLabel": { "uppercaseAriaLabel": {
"message": "Uppercase" "message": "Wielkie litery"
}, },
"generatedPassword": { "generatedPassword": {
"message": "Generated password" "message": "Wygenerowane hasło"
}, },
"compactMode": { "compactMode": {
"message": "Tryb kompaktowy" "message": "Tryb kompaktowy"
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Szerokość rozszerzenia" "message": "Szerokość rozszerzenia"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Avaliar a Extensão" "message": "Avaliar a Extensão"
}, },
"rateExtensionDesc": {
"message": "Por favor considere ajudar-nos com uma boa avaliação!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "O seu navegador web não suporta cópia para a área de transferência. Em alternativa, copie manualmente." "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": { "showNumberOfAutofillSuggestions": {
"message": "Mostrar o número de sugestões de preenchimento automático de login no ícone da extensão" "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": { "systemDefault": {
"message": "Padrão do sistema" "message": "Padrão do sistema"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Avaliar a extensão" "message": "Avaliar a extensão"
}, },
"rateExtensionDesc": {
"message": "Por favor, considere ajudar-nos com uma boa avaliação!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "O seu navegador Web não suporta a cópia fácil da área de transferência. Em vez disso, copie manualmente." "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" "message": "Chave de acesso"
}, },
"accessing": { "accessing": {
"message": "A aceder" "message": "A aceder a"
}, },
"loggedInExclamation": { "loggedInExclamation": {
"message": "Sessão iniciada!" "message": "Sessão iniciada!"
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Mostrar o número de sugestões de preenchimento automático de credenciais no ícone da extensão" "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": { "systemDefault": {
"message": "Predefinição do sistema" "message": "Predefinição do sistema"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Largura da extensão" "message": "Largura da extensão"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Evaluare extensie" "message": "Evaluare extensie"
}, },
"rateExtensionDesc": {
"message": "Vă rugăm să luați în considerare să ne ajutați cu o recenzie bună!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual." "message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Оценить расширение" "message": "Оценить расширение"
}, },
"rateExtensionDesc": {
"message": "Пожалуйста, подумайте о том, чтобы помочь нам хорошим отзывом!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Ваш браузер не поддерживает копирование данных в буфер обмена. Скопируйте вручную." "message": "Ваш браузер не поддерживает копирование данных в буфер обмена. Скопируйте вручную."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Показывать количество вариантов автозаполнения логина на значке расширения" "message": "Показывать количество вариантов автозаполнения логина на значке расширения"
}, },
"showQuickCopyActions": {
"message": "Показать быстрые действия копирования в хранилище"
},
"systemDefault": { "systemDefault": {
"message": "Системный" "message": "Системный"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Ширина расширения" "message": "Ширина расширения"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "දිගුව අනුපාතය" "message": "දිගුව අනුපාතය"
}, },
"rateExtensionDesc": {
"message": "කරුණාකර හොඳ සමාලෝචනයකින් අපට උදව් කිරීම ගැන සලකා බලන්න!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "ඔබේ වෙබ් බ්රව්සරය පහසු පසුරු පුවරුවක් පිටපත් කිරීමට සහාය නොදක්වයි. ඒ වෙනුවට එය අතින් පිටපත් කරන්න." "message": "ඔබේ වෙබ් බ්රව්සරය පහසු පසුරු පුවරුවක් පිටපත් කිරීමට සහාය නොදක්වයි. ඒ වෙනුවට එය අතින් පිටපත් කරන්න."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Ohodnotiť rozšírenie" "message": "Ohodnotiť rozšírenie"
}, },
"rateExtensionDesc": {
"message": "Prosíme, zvážte napísanie pozitívnej recenzie!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Váš webový prehliadač nepodporuje automatické kopírovanie do schránky. Kopírujte manuálne." "message": "Váš webový prehliadač nepodporuje automatické kopírovanie do schránky. Kopírujte manuálne."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Zobraziť počet odporúčaných prihlasovacích údajov na ikone rozšírenia" "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": { "systemDefault": {
"message": "Predvolené systémom" "message": "Predvolené systémom"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Šírka rozšírenia" "message": "Šírka rozšírenia"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Ocenite to razširitev" "message": "Ocenite to razširitev"
}, },
"rateExtensionDesc": {
"message": "Premislite, ali bi nam želeli pomagati z dobro oceno!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Vaš brskalnik ne podpira enostavnega kopiranja na odložišče. Prosimo, kopirajte ročno." "message": "Vaš brskalnik ne podpira enostavnega kopiranja na odložišče. Prosimo, kopirajte ročno."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Оцени овај додатак" "message": "Оцени овај додатак"
}, },
"rateExtensionDesc": {
"message": "Молимо вас да размотрите да нам помогнете уз добру оцену!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Ваш прегледач не подржава једноставно копирање у клипборду. Уместо тога копирајте га ручно." "message": "Ваш прегледач не подржава једноставно копирање у клипборду. Уместо тога копирајте га ручно."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Прикажи број предлога за ауто-попуњавање пријаве на икони додатка" "message": "Прикажи број предлога за ауто-попуњавање пријаве на икони додатка"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "Системски подразумевано" "message": "Системски подразумевано"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "Бета" "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": { "extensionWidth": {
"message": "Ширина додатка" "message": "Ширина додатка"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Betygsätt tillägget" "message": "Betygsätt tillägget"
}, },
"rateExtensionDesc": {
"message": "Överväg gärna att skriva en recension om oss!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Din webbläsare har inte stöd för att enkelt kopiera till urklipp. Kopiera till urklipp manuellt istället." "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": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "Systemstandard" "message": "Systemstandard"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the extension" "message": "Rate the extension"
}, },
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead." "message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Rate the Extension" "message": "Rate the Extension"
}, },
"rateExtensionDesc": {
"message": "โปรดพิจารณา ช่วยเราด้วยการตรวจสอบที่ดี!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "เว็บเบราว์เซอร์ของคุณไม่รองรับการคัดลอกคลิปบอร์ดอย่างง่าย คัดลอกด้วยตนเองแทน" "message": "เว็บเบราว์เซอร์ของคุณไม่รองรับการคัดลอกคลิปบอร์ดอย่างง่าย คัดลอกด้วยตนเองแทน"
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -421,10 +421,10 @@
"message": "Son eşitleme:" "message": "Son eşitleme:"
}, },
"passGen": { "passGen": {
"message": "Parola üretici" "message": "Parola üreteci"
}, },
"generator": { "generator": {
"message": "Oluşturucu", "message": "Üreteç",
"description": "Short for 'credential generator'." "description": "Short for 'credential generator'."
}, },
"passGenInfo": { "passGenInfo": {
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Uzantıyı değerlendirin" "message": "Uzantıyı değerlendirin"
}, },
"rateExtensionDesc": {
"message": "İyi bir yorum yazarak bizi destekleyebilirsiniz."
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Web tarayıcınız panoya kopyalamayı desteklemiyor. Parolayı elle kopyalayın." "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." "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": { "learnMoreAboutAuthenticators": {
"message": "Learn more about authenticators" "message": "Kimlik doğrulayıcılar hakkında bilgi alın"
}, },
"copyTOTP": { "copyTOTP": {
"message": "Kimlik doğrulama anahtarını kopyala (TOTP)" "message": "Kimlik doğrulama anahtarını kopyala (TOTP)"
@ -1327,10 +1324,10 @@
"message": "Kimlik doğrulama uygulamanızdaki 6 haneli doğrulama kodunu girin." "message": "Kimlik doğrulama uygulamanızdaki 6 haneli doğrulama kodunu girin."
}, },
"authenticationTimeout": { "authenticationTimeout": {
"message": "Authentication timeout" "message": "Kimlik doğrulama zaman aşımı"
}, },
"authenticationSessionTimedOut": { "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": { "enterVerificationCodeEmail": {
"message": "$EMAIL$ adresine e-postayla gönderdiğimiz 6 haneli doğrulama kodunu girin.", "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" "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com"
}, },
"selfHostedCustomEnvHeader": { "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": { "selfHostedEnvFormInvalid": {
"message": "You must add either the base Server URL or at least one custom environment." "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" "message": "Tüm giriş seçeneklerini gör"
}, },
"viewAllLoginOptionsV1": { "viewAllLoginOptionsV1": {
"message": "View all log in options" "message": "Tüm giriş seçeneklerini gör"
}, },
"notificationSentDevice": { "notificationSentDevice": {
"message": "Cihazınıza bir bildirim gönderildi." "message": "Cihazınıza bir bildirim gönderildi."
@ -4318,13 +4315,13 @@
"message": "Filtreler" "message": "Filtreler"
}, },
"filterVault": { "filterVault": {
"message": "Filter vault" "message": "Kasayı filtrele"
}, },
"filterApplied": { "filterApplied": {
"message": "One filter applied" "message": "1 filtre uygulandı"
}, },
"filterAppliedPlural": { "filterAppliedPlural": {
"message": "$COUNT$ filters applied", "message": "$COUNT$ filtre uygulandı",
"placeholders": { "placeholders": {
"count": { "count": {
"content": "$1", "content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Otomatik öneri sayısını uzantı simgesinde göster" "message": "Otomatik öneri sayısını uzantı simgesinde göster"
}, },
"showQuickCopyActions": {
"message": "Kasada hızlı kopyalama komutlarını göster"
},
"systemDefault": { "systemDefault": {
"message": "Sistem varsayılanı" "message": "Sistem varsayılanı"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Uzantı genişliği" "message": "Uzantı genişliği"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Оцінити розширення" "message": "Оцінити розширення"
}, },
"rateExtensionDesc": {
"message": "Розкажіть іншим про свої враження, залишивши хороший відгук!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "Ваш браузер не підтримує копіювання даних в буфер обміну. Скопіюйте вручну." "message": "Ваш браузер не підтримує копіювання даних в буфер обміну. Скопіюйте вручну."
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Показувати кількість пропозицій автозаповнення на піктограмі розширення" "message": "Показувати кількість пропозицій автозаповнення на піктограмі розширення"
}, },
"showQuickCopyActions": {
"message": "Показати дії швидкого копіювання у сховищі"
},
"systemDefault": { "systemDefault": {
"message": "Типово (система)" "message": "Типово (система)"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "Бета" "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": { "extensionWidth": {
"message": "Ширина вікна розширення" "message": "Ширина вікна розширення"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "Đánh giá tiện ích mở rộng" "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": { "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ế." "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": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "为本扩展打分" "message": "为本扩展打分"
}, },
"rateExtensionDesc": {
"message": "请给我们好评!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "您的浏览器不支持剪贴板简单复制,请手动复制。" "message": "您的浏览器不支持剪贴板简单复制,请手动复制。"
}, },
@ -2371,7 +2368,7 @@
"message": "限制查看" "message": "限制查看"
}, },
"limitSendViewsHint": { "limitSendViewsHint": {
"message": "达到限额后,任何人无法查看此 Send。", "message": "达到限额后,任何人无法查看此 Send。",
"description": "Displayed under the limit views field on Send" "description": "Displayed under the limit views field on Send"
}, },
"limitSendViewsCount": { "limitSendViewsCount": {
@ -3557,7 +3554,7 @@
"message": "切换侧边导航" "message": "切换侧边导航"
}, },
"skipToContent": { "skipToContent": {
"message": "跳转到正文" "message": "跳转到内容"
}, },
"bitwardenOverlayButton": { "bitwardenOverlayButton": {
"message": "Bitwarden 自动填充菜单按钮", "message": "Bitwarden 自动填充菜单按钮",
@ -4501,7 +4498,7 @@
"message": "对于如密码之类的敏感数据,请使用隐藏型字段" "message": "对于如密码之类的敏感数据,请使用隐藏型字段"
}, },
"checkBoxHelpText": { "checkBoxHelpText": {
"message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框" "message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框"
}, },
"linkedHelpText": { "linkedHelpText": {
"message": "当您处理特定网站的自动填充问题时,请使用链接型字段。" "message": "当您处理特定网站的自动填充问题时,请使用链接型字段。"
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "在扩展图标上显示自动填充建议的登录的数量" "message": "在扩展图标上显示自动填充建议的登录的数量"
}, },
"showQuickCopyActions": {
"message": "在密码库上显示快速复制操作"
},
"systemDefault": { "systemDefault": {
"message": "跟随系统" "message": "跟随系统"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "扩展宽度" "message": "扩展宽度"
}, },

View File

@ -248,7 +248,7 @@
"message": "請求密碼提示" "message": "請求密碼提示"
}, },
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
"message": "輸入您帳的電子郵件,您的密碼提示會傳送給您" "message": "輸入您帳的電子郵件,您的密碼提示會傳送給您"
}, },
"passwordHint": { "passwordHint": {
"message": "密碼提示" "message": "密碼提示"
@ -648,9 +648,6 @@
"rateExtension": { "rateExtension": {
"message": "為本套件評分" "message": "為本套件評分"
}, },
"rateExtensionDesc": {
"message": "請給予我們好評!"
},
"browserNotSupportClipboard": { "browserNotSupportClipboard": {
"message": "您的瀏覽器不支援剪貼簿簡單複製,請手動複製。" "message": "您的瀏覽器不支援剪貼簿簡單複製,請手動複製。"
}, },
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": { "showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon" "message": "Show number of login autofill suggestions on extension icon"
}, },
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": { "systemDefault": {
"message": "System default" "message": "System default"
}, },
@ -4910,6 +4910,42 @@
"beta": { "beta": {
"message": "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": { "extensionWidth": {
"message": "Extension width" "message": "Extension width"
}, },

View File

@ -1,100 +0,0 @@
<form (ngSubmit)="submit()">
<app-header>
<div class="left"></div>
<h1 class="center">
<span class="title">{{ "verifyIdentity" | i18n }}</span>
</h1>
<div class="right">
<button type="submit" *ngIf="pinEnabled || masterPasswordEnabled">
{{ "unlock" | i18n }}
</button>
</div>
</app-header>
<main tabindex="-1">
<ng-container *ngIf="fido2PopoutSessionData$ | async as fido2Data">
<div class="box">
<div class="box-content">
<div
class="box-content-row box-content-row-flex"
appBoxRow
*ngIf="pinEnabled || masterPasswordEnabled"
>
<div class="row-main" *ngIf="pinEnabled">
<label for="pin">{{ "pin" | i18n }}</label>
<input
id="pin"
type="{{ showPassword ? 'text' : 'password' }}"
name="PIN"
class="monospaced"
[(ngModel)]="pin"
required
appInputVerbatim
/>
</div>
<div class="row-main" *ngIf="masterPasswordEnabled && !pinEnabled">
<label for="masterPassword">{{ "masterPass" | i18n }}</label>
<input
id="masterPassword"
type="{{ showPassword ? 'text' : 'password' }}"
name="MasterPassword"
aria-describedby="masterPasswordHelp"
class="monospaced"
[(ngModel)]="masterPassword"
required
appInputVerbatim
/>
</div>
<div class="action-buttons">
<button
type="button"
class="row-btn"
appStopClick
appA11yTitle="{{ 'toggleVisibility' | i18n }}"
(click)="togglePassword()"
[attr.aria-pressed]="showPassword"
>
<i
class="bwi bwi-lg"
[ngClass]="{ 'bwi-eye': !showPassword, 'bwi-eye-slash': showPassword }"
aria-hidden="true"
></i>
</button>
</div>
</div>
</div>
<div id="masterPasswordHelp" class="box-footer">
<p>
{{
fido2Data.isFido2Session
? ("yourPasskeyIsLocked" | i18n)
: ("yourVaultIsLocked" | i18n)
}}
</p>
{{ "loggedInAsOn" | i18n: email : webVaultHostname }}
</div>
</div>
<div class="box" *ngIf="biometricLock">
<div class="box-footer no-pad">
<button
type="button"
class="btn primary block"
(click)="unlockBiometric()"
appStopClick
[disabled]="pendingBiometric"
>
{{ "unlockWithBiometrics" | i18n }}
</button>
</div>
</div>
<p class="text-center" *ngIf="!fido2Data.isFido2Session">
<button type="button" appStopClick (click)="logOut()">{{ "logOut" | i18n }}</button>
</p>
<app-callout *ngIf="biometricError" type="danger">{{ biometricError }}</app-callout>
<p class="text-center text-muted" *ngIf="pendingBiometric">
<i class="bwi bwi-spinner bwi-spin" aria-hidden="true"></i> {{ "awaitDesktop" | i18n }}
</p>
<app-fido2-use-browser-link-v1></app-fido2-use-browser-link-v1>
</ng-container>
</main>
</form>

View File

@ -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<boolean> {
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;
}
}

View File

@ -2813,6 +2813,254 @@ exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers f
</div> </div>
`; `;
exports[`AutofillInlineMenuList initAutofillInlineMenuList the list of ciphers for an authenticated user renders correctly when there are multiple TOTP elements with username displayed 1`] = `
<div
class="inline-menu-list-container theme_light"
>
<ul
class="inline-menu-list-actions"
role="list"
>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-description="username: user1"
aria-label="fillCredentialsFor website login 1"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon"
>
<div
style="position: relative;"
>
<svg
aria-hidden="true"
viewBox="0 0 29 29"
xmlns="http://www.w3.org/2000/svg"
>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="12.5"
stroke-dasharray="78.5"
stroke-dashoffset="78.5"
stroke-width="3"
style="stroke-dashoffset: NaN;"
transform="rotate(-90 14.5 14.5)"
/>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="14"
stroke-width="1"
/>
</svg>
<span
aria-label=""
bittypography="helper"
class="totp-sec-span"
>
NaN
</span>
</div>
</span>
<div
class="cipher-details"
>
<span
aria-label=""
class="cipher-name"
/>
<span
class="cipher-subtitle"
title="user1"
>
user1
</span>
<span
aria-label=""
class="cipher-subtitle"
data-testid="totp-code"
>
123 456
</span>
</div>
</button>
<button
aria-label="view website login 1, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
<li
class="inline-menu-list-actions-item"
role="listitem"
>
<div
class="cipher-container"
>
<button
aria-description="username: user2"
aria-label="fillCredentialsFor website login 2"
class="fill-cipher-button inline-menu-list-action"
tabindex="-1"
>
<span
aria-hidden="true"
class="cipher-icon"
>
<div
style="position: relative;"
>
<svg
aria-hidden="true"
viewBox="0 0 29 29"
xmlns="http://www.w3.org/2000/svg"
>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="12.5"
stroke-dasharray="78.5"
stroke-dashoffset="78.5"
stroke-width="3"
style="stroke-dashoffset: NaN;"
transform="rotate(-90 14.5 14.5)"
/>
<circle
class="circle-color"
cx="14.5"
cy="14.5"
fill="none"
r="14"
stroke-width="1"
/>
</svg>
<span
aria-label=""
bittypography="helper"
class="totp-sec-span"
>
NaN
</span>
</div>
</span>
<div
class="cipher-details"
>
<span
aria-label=""
class="cipher-name"
/>
<span
class="cipher-subtitle"
title="user2"
>
user2
</span>
<span
aria-label=""
class="cipher-subtitle"
data-testid="totp-code"
>
654 321
</span>
</div>
</button>
<button
aria-label="view website login 2, opensInANewWindow"
class="view-cipher-button"
tabindex="-1"
>
<svg
aria-hidden="true"
fill="none"
height="20"
viewBox="0 0 20 20"
width="20"
xmlns="http://www.w3.org/2000/svg"
>
<g
clip-path="url(#a)"
>
<path
d="M16.587 7.932H5.9a.455.455 0 0 1-.31-.12.393.393 0 0 1-.127-.287c0-.108.046-.211.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.076.128.179.128.287a.393.393 0 0 1-.128.288.455.455 0 0 1-.31.119Zm0 2.474H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm0 2.468H5.9a.455.455 0 0 1-.31-.119.393.393 0 0 1-.127-.287c0-.108.046-.212.128-.288a.455.455 0 0 1 .309-.119h10.687c.117 0 .228.043.31.12.082.075.128.179.128.287a.393.393 0 0 1-.128.287.455.455 0 0 1-.31.12Zm2.163-8.103v10.457H1.25V4.771h17.5Zm0-1.162H1.25a1.3 1.3 0 0 0-.884.34A1.122 1.122 0 0 0 0 4.772v10.457c0 .308.132.604.366.822a1.3 1.3 0 0 0 .884.34h17.5a1.3 1.3 0 0 0 .884-.34c.234-.218.366-.514.366-.822V4.771c0-.308-.132-.603-.366-.821a1.3 1.3 0 0 0-.884-.34ZM3.213 8.01c.287 0 .52-.217.52-.484s-.234-.483-.52-.483c-.288 0-.52.216-.52.483s.233.483.52.483Zm0 4.903c.287 0 .52-.217.52-.484 0-.266-.234-.483-.52-.483-.287 0-.52.216-.52.483s.233.484.52.484Zm0-2.452c.287 0 .52-.216.52-.483 0-.268-.234-.484-.52-.484-.288 0-.52.216-.52.484 0 .267.233.483.52.483Z"
fill="#175DDC"
/>
</g>
<defs>
<clippath
id="a"
>
<path
d="M0 .113h20v19.773H0z"
fill="#fff"
/>
</clippath>
</defs>
</svg>
</button>
</div>
</li>
</ul>
</div>
`;
exports[`AutofillInlineMenuList initAutofillInlineMenuList the locked inline menu for an unauthenticated user creates the views for the locked inline menu 1`] = ` exports[`AutofillInlineMenuList initAutofillInlineMenuList the locked inline menu for an unauthenticated user creates the views for the locked inline menu 1`] = `
<div <div
class="inline-menu-list-container theme_light" class="inline-menu-list-container theme_light"

View File

@ -140,6 +140,47 @@ describe("AutofillInlineMenuList", () => {
expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot(); 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", () => { it("creates the view for a totp field", () => {
postWindowMessage( postWindowMessage(
createInitAutofillInlineMenuListMessageMock({ createInitAutofillInlineMenuListMessageMock({

View File

@ -1163,7 +1163,7 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
} }
if (cipher.login?.totpField && cipher.login?.totp) { 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 subTitleText = this.getSubTitleText(cipher);
const cipherSubtitleElement = this.buildCipherSubtitleElement(subTitleText); const cipherSubtitleElement = this.buildCipherSubtitleElement(subTitleText);
@ -1174,13 +1174,24 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
return cipherDetailsElement; 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. * Builds a TOTP element for a given TOTP code.
* *
* @param totp - The TOTP code to display. * @param totp - The TOTP code to display.
*/ */
private buildTotpElement(totpCode: string): HTMLDivElement | null { private buildTotpElement(totpCode: string, username?: string): HTMLDivElement | null {
if (!totpCode) { if (!totpCode) {
return null; return null;
} }
@ -1196,12 +1207,17 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
containerElement.appendChild(totpHeading); containerElement.appendChild(totpHeading);
const subtitleElement = document.createElement("span"); if (this.multipleTotpElements() && username) {
subtitleElement.classList.add("cipher-subtitle"); const usernameSubtitle = this.buildCipherSubtitleElement(username);
subtitleElement.textContent = formattedTotpCode; containerElement.appendChild(usernameSubtitle);
subtitleElement.setAttribute("aria-label", this.getTranslation("totpCodeAria")); }
subtitleElement.setAttribute("data-testid", "totp-code");
containerElement.appendChild(subtitleElement); 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; return containerElement;
} }

View File

@ -739,7 +739,6 @@ export default class MainBackground {
this.accountService, this.accountService,
this.kdfConfigService, this.kdfConfigService,
this.keyService, this.keyService,
this.apiService,
); );
this.passwordStrengthService = new PasswordStrengthService(); this.passwordStrengthService = new PasswordStrengthService();
@ -1313,23 +1312,6 @@ export default class MainBackground {
await this.initOverlayAndTabsBackground(); 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<void>((resolve) => { return new Promise<void>((resolve) => {
setTimeout(async () => { setTimeout(async () => {
await this.refreshBadge(); await this.refreshBadge();

View File

@ -44,6 +44,9 @@ page looks nice when the extension is popped out.
- `above-scroll-area` - `above-scroll-area`
- When the page content overflows, this content will be "stuck" to the top of the page upon - When the page content overflows, this content will be "stuck" to the top of the page upon
scrolling. scrolling.
- `full-width-notice`
- Similar to `above-scroll-area`, this content will display before `above-scroll-area` without
container margin or padding.
- default - default
- Whatever content you want in `main`. - 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 - "Add" button: this can be accomplished with the Button component and any custom functionality for
that particular page that particular page
### Notice
<Canvas>
<Story of={stories.Notice} />
</Canvas>
Common interactive elements to insert into the `full-width-notice` slot are:
- `bit-banner`: shows a full-width notice
Usage example:
```html
<popup-page>
<popup-header slot="header" [pageTitle]="'vault' | i18n"> </popup-header>
<bit-banner slot="full-width-notice" bannerType="info" [showClose]="false">
This is an important note about these ciphers
</bit-banner>
<ng-container slot="above-scroll-area">
<app-vault-header-v2></app-vault-header-v2>
</ng-container>
</popup-page>
```
## Popup footer ## Popup footer
Popup footer should be used when the page displays action buttons. It functions similarly to the Popup footer should be used when the page displays action buttons. It functions similarly to the

View File

@ -11,6 +11,7 @@ import { SendService } from "@bitwarden/common/tools/send/services/send.service.
import { import {
AvatarModule, AvatarModule,
BadgeModule, BadgeModule,
BannerModule,
ButtonModule, ButtonModule,
I18nMockService, I18nMockService,
IconButtonModule, IconButtonModule,
@ -125,6 +126,18 @@ class MockCurrentAccountComponent {}
}) })
class MockSearchComponent {} class MockSearchComponent {}
@Component({
selector: "mock-banner",
template: `
<bit-banner bannerType="info" [showClose]="false">
This is an important note about these ciphers
</bit-banner>
`,
standalone: true,
imports: [BannerModule],
})
class MockBannerComponent {}
@Component({ @Component({
selector: "mock-vault-page", selector: "mock-vault-page",
template: ` template: `
@ -298,6 +311,8 @@ export default {
CommonModule, CommonModule,
RouterModule, RouterModule,
ExtensionContainerComponent, ExtensionContainerComponent,
MockBannerComponent,
MockSearchComponent,
MockVaultSubpageComponent, MockVaultSubpageComponent,
MockVaultPageComponent, MockVaultPageComponent,
MockSendPageComponent, MockSendPageComponent,
@ -517,6 +532,22 @@ export const TransparentHeader: Story = {
}), }),
}; };
export const Notice: Story = {
render: (args) => ({
props: args,
template: /* HTML */ `
<extension-container>
<popup-page>
<popup-header slot="header" pageTitle="Page Header"></popup-header>
<mock-banner slot="full-width-notice"></mock-banner>
<mock-search slot="above-scroll-area"></mock-search>
<vault-placeholder></vault-placeholder>
</popup-page>
</extension-container>
`,
}),
};
export const WidthOptions: Story = { export const WidthOptions: Story = {
render: (args) => ({ render: (args) => ({
props: args, props: args,

View File

@ -1,5 +1,6 @@
<ng-content select="[slot=header]"></ng-content> <ng-content select="[slot=header]"></ng-content>
<main class="tw-flex-1 tw-overflow-hidden tw-flex tw-flex-col tw-relative tw-bg-background-alt"> <main class="tw-flex-1 tw-overflow-hidden tw-flex tw-flex-col tw-relative tw-bg-background-alt">
<ng-content select="[slot=full-width-notice]"></ng-content>
<div <div
#nonScrollable #nonScrollable
class="tw-transition-colors tw-duration-200 tw-border-0 tw-border-b tw-border-solid tw-p-3 bit-compact:tw-p-2" class="tw-transition-colors tw-duration-200 tw-border-0 tw-border-b tw-border-solid tw-p-3 bit-compact:tw-p-2"

View File

@ -2,7 +2,6 @@
// @ts-strict-ignore // @ts-strict-ignore
import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory"; 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 type { BitwardenClient } from "@bitwarden/sdk-internal";
import { BrowserApi } from "../../browser/browser-api"; import { BrowserApi } from "../../browser/browser-api";
@ -72,42 +71,14 @@ export class BrowserSdkClientFactory implements SdkClientFactory {
...args: ConstructorParameters<typeof BitwardenClient> ...args: ConstructorParameters<typeof BitwardenClient>
): Promise<BitwardenClient> { ): Promise<BitwardenClient> {
const startTime = performance.now(); const startTime = performance.now();
try { await load();
await loadWithTimeout();
} catch (error) {
throw new Error(`Failed to load: ${error.message}`);
}
const endTime = performance.now(); const endTime = performance.now();
const elapsed = Math.round((endTime - startTime) / 1000);
const instance = (globalThis as any).init_sdk(...args); const instance = (globalThis as any).init_sdk(...args);
this.logService.info("WASM SDK loaded in", Math.round(endTime - startTime), "ms"); 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; return instance;
} }
} }
const loadWithTimeout = async () => {
return new Promise<void>((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);
});
});
};

View File

@ -17,7 +17,6 @@ import {
unauthGuardFn, unauthGuardFn,
} from "@bitwarden/angular/auth/guards"; } from "@bitwarden/angular/auth/guards";
import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; 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 { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap";
import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards"; import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards";
import { import {
@ -26,7 +25,7 @@ import {
LoginComponent, LoginComponent,
LoginSecondaryContentComponent, LoginSecondaryContentComponent,
LockIcon, LockIcon,
LockV2Component, LockComponent,
LoginViaAuthRequestComponent, LoginViaAuthRequestComponent,
PasswordHintComponent, PasswordHintComponent,
RegistrationFinishComponent, RegistrationFinishComponent,
@ -60,7 +59,6 @@ import {
} from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component"; } from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component";
import { HintComponent } from "../auth/popup/hint.component"; import { HintComponent } from "../auth/popup/hint.component";
import { HomeComponent } from "../auth/popup/home.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 { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component";
import { LoginComponentV1 } from "../auth/popup/login-v1.component"; import { LoginComponentV1 } from "../auth/popup/login-v1.component";
import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component";
@ -88,8 +86,6 @@ import BrowserPopupUtils from "../platform/popup/browser-popup-utils";
import { popupRouterCacheGuard } from "../platform/popup/view-cache/popup-router-cache.service"; import { popupRouterCacheGuard } from "../platform/popup/view-cache/popup-router-cache.service";
import { CredentialGeneratorHistoryComponent } from "../tools/popup/generator/credential-generator-history.component"; import { CredentialGeneratorHistoryComponent } from "../tools/popup/generator/credential-generator-history.component";
import { CredentialGeneratorComponent } from "../tools/popup/generator/credential-generator.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 { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component";
import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component"; import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component";
import { SendTypeComponent } from "../tools/popup/send/send-type.component"; import { SendTypeComponent } from "../tools/popup/send/send-type.component";
@ -105,10 +101,8 @@ import { clearVaultStateGuard } from "../vault/guards/clear-vault-state.guard";
import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component"; import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component";
import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component"; import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component";
import { CollectionsComponent } from "../vault/popup/components/vault/collections.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 { PasswordHistoryComponent } from "../vault/popup/components/vault/password-history.component";
import { ShareComponent } from "../vault/popup/components/vault/share.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 { VaultItemsComponent } from "../vault/popup/components/vault/vault-items.component";
import { VaultV2Component } from "../vault/popup/components/vault/vault-v2.component"; import { VaultV2Component } from "../vault/popup/components/vault/vault-v2.component";
import { ViewComponent } from "../vault/popup/components/vault/view.component"; import { ViewComponent } from "../vault/popup/components/vault/view.component";
@ -130,7 +124,6 @@ import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.c
import { RouteElevation } from "./app-routing.animations"; import { RouteElevation } from "./app-routing.animations";
import { debounceNavigationGuard } from "./services/debounce-navigation.service"; import { debounceNavigationGuard } from "./services/debounce-navigation.service";
import { TabsV2Component } from "./tabs-v2.component"; import { TabsV2Component } from "./tabs-v2.component";
import { TabsComponent } from "./tabs.component";
/** /**
* Data properties acceptable for use in extension route objects * Data properties acceptable for use in extension route objects
@ -176,13 +169,6 @@ const routes: Routes = [
canActivate: [fido2AuthGuard], canActivate: [fido2AuthGuard],
data: { elevation: 1 } satisfies RouteDataProperties, data: { elevation: 1 } satisfies RouteDataProperties,
}), }),
{
path: "lock",
component: LockComponent,
canActivate: [lockGuard()],
canMatch: [extensionRefreshRedirect("/lockV2")],
data: { elevation: 1, doNotSaveUrl: true } satisfies RouteDataProperties,
},
...twofactorRefactorSwap( ...twofactorRefactorSwap(
TwoFactorComponent, TwoFactorComponent,
AnonLayoutWrapperComponent, AnonLayoutWrapperComponent,
@ -342,15 +328,16 @@ const routes: Routes = [
}), }),
{ {
path: "generator", path: "generator",
component: GeneratorComponent, component: CredentialGeneratorComponent,
canActivate: [authGuard], canActivate: [authGuard],
data: { elevation: 0 } satisfies RouteDataProperties, data: { elevation: 0 } satisfies RouteDataProperties,
}, },
...extensionRefreshSwap(PasswordGeneratorHistoryComponent, CredentialGeneratorHistoryComponent, { {
path: "generator-history", path: "generator-history",
component: CredentialGeneratorHistoryComponent,
canActivate: [authGuard], canActivate: [authGuard],
data: { elevation: 1 } satisfies RouteDataProperties, data: { elevation: 1 } satisfies RouteDataProperties,
}), },
{ {
path: "import", path: "import",
component: ImportBrowserV2Component, component: ImportBrowserV2Component,
@ -653,8 +640,8 @@ const routes: Routes = [
], ],
}, },
{ {
path: "lockV2", path: "lock",
canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh), lockGuard()], canActivate: [lockGuard()],
data: { data: {
pageIcon: LockIcon, pageIcon: LockIcon,
pageTitle: { pageTitle: {
@ -665,19 +652,19 @@ const routes: Routes = [
elevation: 1, elevation: 1,
/** /**
* This ensures that in a passkey flow the `/fido2?<queryParams>` URL does not get * This ensures that in a passkey flow the `/fido2?<queryParams>` 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?<queryParams>` URL. * unlocking, the user can be redirected back to the `/fido2?<queryParams>` URL.
* *
* Also, this prevents a routing loop when using biometrics to unlock the vault in MV2 (Firefox), * 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 * 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, doNotSaveUrl: true,
} satisfies ExtensionAnonLayoutWrapperData & RouteDataProperties, } satisfies ExtensionAnonLayoutWrapperData & RouteDataProperties,
children: [ children: [
{ {
path: "", path: "",
component: LockV2Component, component: LockComponent,
}, },
], ],
}, },
@ -748,8 +735,9 @@ const routes: Routes = [
}, },
], ],
}, },
...extensionRefreshSwap(TabsComponent, TabsV2Component, { {
path: "tabs", path: "tabs",
component: TabsV2Component,
data: { elevation: 0 } satisfies RouteDataProperties, data: { elevation: 0 } satisfies RouteDataProperties,
children: [ children: [
{ {
@ -759,23 +747,21 @@ const routes: Routes = [
}, },
{ {
path: "current", path: "current",
component: CurrentTabComponent, redirectTo: "/tabs/vault",
canActivate: [authGuard],
canMatch: [extensionRefreshRedirect("/tabs/vault")],
data: { elevation: 0 } satisfies RouteDataProperties,
runGuardsAndResolvers: "always",
}, },
...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, { {
path: "vault", path: "vault",
component: VaultV2Component,
canActivate: [authGuard, NewDeviceVerificationNoticeGuard], canActivate: [authGuard, NewDeviceVerificationNoticeGuard],
canDeactivate: [clearVaultStateGuard], canDeactivate: [clearVaultStateGuard],
data: { elevation: 0 } satisfies RouteDataProperties, data: { elevation: 0 } satisfies RouteDataProperties,
}), },
...extensionRefreshSwap(GeneratorComponent, CredentialGeneratorComponent, { {
path: "generator", path: "generator",
component: CredentialGeneratorComponent,
canActivate: [authGuard], canActivate: [authGuard],
data: { elevation: 0 } satisfies RouteDataProperties, data: { elevation: 0 } satisfies RouteDataProperties,
}), },
{ {
path: "settings", path: "settings",
component: SettingsV2Component, component: SettingsV2Component,
@ -788,7 +774,7 @@ const routes: Routes = [
data: { elevation: 0 } satisfies RouteDataProperties, data: { elevation: 0 } satisfies RouteDataProperties,
}), }),
], ],
}), },
{ {
path: "account-switcher", path: "account-switcher",
component: AccountSwitcherComponent, component: AccountSwitcherComponent,

View File

@ -1,7 +1,6 @@
// FIXME: Update this file to be type safe and remove this and next line // FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore // @ts-strict-ignore
import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit, inject } from "@angular/core"; 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 { NavigationEnd, Router, RouterOutlet } from "@angular/router";
import { Subject, takeUntil, firstValueFrom, concatMap, filter, tap } from "rxjs"; 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 { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service"; import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.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 { 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 { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { MessageListener } from "@bitwarden/common/platform/messaging"; import { MessageListener } from "@bitwarden/common/platform/messaging";
import { UserId } from "@bitwarden/common/types/guid"; import { UserId } from "@bitwarden/common/types/guid";
@ -25,7 +22,6 @@ import {
ToastService, ToastService,
} from "@bitwarden/components"; } from "@bitwarden/components";
import { flagEnabled } from "../platform/flags";
import { PopupCompactModeService } from "../platform/popup/layout/popup-compact-mode.service"; import { PopupCompactModeService } from "../platform/popup/layout/popup-compact-mode.service";
import { PopupWidthService } from "../platform/popup/layout/popup-width.service"; import { PopupWidthService } from "../platform/popup/layout/popup-width.service";
import { PopupViewCacheService } from "../platform/popup/view-cache/popup-view-cache.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 toastService: ToastService,
private accountService: AccountService, private accountService: AccountService,
private animationControlService: AnimationControlService, 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() { async ngOnInit() {
initPopupClosedListener(); initPopupClosedListener();

View File

@ -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 { ExtensionAnonLayoutWrapperComponent } from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component";
import { HintComponent } from "../auth/popup/hint.component"; import { HintComponent } from "../auth/popup/hint.component";
import { HomeComponent } from "../auth/popup/home.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 { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component";
import { LoginComponentV1 } from "../auth/popup/login-v1.component"; import { LoginComponentV1 } from "../auth/popup/login-v1.component";
import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component"; import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component";
@ -57,8 +56,6 @@ import { PopupHeaderComponent } from "../platform/popup/layout/popup-header.comp
import { PopupPageComponent } from "../platform/popup/layout/popup-page.component"; import { PopupPageComponent } from "../platform/popup/layout/popup-page.component";
import { PopupTabNavigationComponent } from "../platform/popup/layout/popup-tab-navigation.component"; import { PopupTabNavigationComponent } from "../platform/popup/layout/popup-tab-navigation.component";
import { FilePopoutCalloutComponent } from "../tools/popup/components/file-popout-callout.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 { SendListComponent } from "../tools/popup/send/components/send-list.component";
import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component"; import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component";
import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component"; import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component";
@ -88,7 +85,6 @@ import { AppComponent } from "./app.component";
import { UserVerificationComponent } from "./components/user-verification.component"; import { UserVerificationComponent } from "./components/user-verification.component";
import { ServicesModule } from "./services/services.module"; import { ServicesModule } from "./services/services.module";
import { TabsV2Component } from "./tabs-v2.component"; import { TabsV2Component } from "./tabs-v2.component";
import { TabsComponent } from "./tabs.component";
// Register the locales for the application // Register the locales for the application
import "../platform/popup/locales"; import "../platform/popup/locales";
@ -157,14 +153,11 @@ import "../platform/popup/locales";
VaultFilterComponent, VaultFilterComponent,
HintComponent, HintComponent,
HomeComponent, HomeComponent,
LockComponent,
LoginViaAuthRequestComponentV1, LoginViaAuthRequestComponentV1,
LoginComponentV1, LoginComponentV1,
LoginDecryptionOptionsComponentV1, LoginDecryptionOptionsComponentV1,
NotificationsSettingsV1Component, NotificationsSettingsV1Component,
AppearanceComponent, AppearanceComponent,
GeneratorComponent,
PasswordGeneratorHistoryComponent,
PasswordHistoryComponent, PasswordHistoryComponent,
PremiumComponent, PremiumComponent,
RegisterComponent, RegisterComponent,
@ -177,7 +170,6 @@ import "../platform/popup/locales";
ShareComponent, ShareComponent,
SsoComponentV1, SsoComponentV1,
SyncComponent, SyncComponent,
TabsComponent,
TabsV2Component, TabsV2Component,
TwoFactorComponent, TwoFactorComponent,
TwoFactorOptionsComponent, TwoFactorOptionsComponent,

View File

@ -1,57 +0,0 @@
<div class="tab-page">
<router-outlet></router-outlet>
<nav class="tabs">
<ul>
<li routerLinkActive="active" #rlaCurrentTab="routerLinkActive" *ngIf="showCurrentTab">
<button
type="button"
routerLink="current"
appA11yTitle="{{ 'currentTab' | i18n }}"
[attr.aria-pressed]="rlaCurrentTab.isActive"
>
<i class="bwi bwi-folder-closed-f bwi-2x" aria-hidden="true"></i>{{ "tab" | i18n }}
</button>
</li>
<li routerLinkActive="active" #rlaMyVault="routerLinkActive">
<button
type="button"
routerLink="vault"
appA11yTitle="{{ 'myVault' | i18n }}"
[attr.aria-pressed]="rlaMyVault.isActive"
>
<i class="bwi bwi-lock-f bwi-2x" aria-hidden="true"></i>{{ "vault" | i18n }}
</button>
</li>
<li routerLinkActive="active" #rlaSend="routerLinkActive">
<button
type="button"
routerLink="send"
appA11yTitle="{{ 'send' | i18n }}"
[attr.aria-pressed]="rlaSend.isActive"
>
<i class="bwi bwi-send-f bwi-2x" aria-hidden="true"></i>{{ "send" | i18n }}
</button>
</li>
<li routerLinkActive="active" #rlaGenerator="routerLinkActive">
<button
type="button"
routerLink="generator"
appA11yTitle="{{ 'passGen' | i18n }}"
[attr.aria-pressed]="rlaGenerator.isActive"
>
<i class="bwi bwi-generate-f bwi-2x" aria-hidden="true"></i>{{ "generator" | i18n }}
</button>
</li>
<li routerLinkActive="active" #rlaSettings="routerLinkActive">
<button
type="button"
routerLink="settings"
appA11yTitle="{{ 'settings' | i18n }}"
[attr.aria-pressed]="rlaSettings.isActive"
>
<i class="bwi bwi-cog-f bwi-2x" aria-hidden="true"></i>{{ "settings" | i18n }}
</button>
</li>
</ul>
</nav>
</div>

View File

@ -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);
}
}

View File

@ -1,588 +0,0 @@
<app-header [hideAccountSwitcher]="comingFromAddEdit">
<div class="left">
<app-pop-out [show]="!comingFromAddEdit"></app-pop-out>
<button type="button" (click)="close()" *ngIf="comingFromAddEdit">
{{ "cancel" | i18n }}
</button>
</div>
<h1 class="center">
<span class="title">{{ "generator" | i18n }}</span>
</h1>
<div class="right">
<button type="button" (click)="select()" *ngIf="comingFromAddEdit">
{{ "select" | i18n }}
</button>
</div>
</app-header>
<main tabindex="-1">
<app-callout type="info" *ngIf="enforcedPasswordPolicyOptions?.inEffect() && type === 'password'">
{{ "passwordGeneratorPolicyInEffect" | i18n }}
</app-callout>
<div class="generated-block" *ngIf="type === 'password'">
<div
class="generated-wrapper"
[innerHTML]="password | colorPassword"
[appCopyText]="password"
></div>
<div class="action-buttons">
<button
type="button"
class="row-btn"
appStopClick
appA11yTitle="{{ 'copyPassword' | i18n }}"
(click)="copy()"
>
<i class="bwi bwi-lg bwi-clone" aria-hidden="true"></i>
</button>
<button
type="button"
appStopClick
appA11yTitle="{{ 'regeneratePassword' | i18n }}"
(click)="regenerate()"
>
<i class="bwi bwi-lg bwi-generate" aria-hidden="true"></i>
</button>
</div>
</div>
<div class="generated-block" *ngIf="type === 'username'">
<div
class="generated-wrapper"
[innerHTML]="username | colorPassword"
[appCopyText]="username"
></div>
<div class="action-buttons" #form [appApiAction]="usernameGeneratingPromise">
<button
type="button"
class="row-btn"
appStopClick
appA11yTitle="{{ 'copyUsername' | i18n }}"
(click)="copy()"
>
<i class="bwi bwi-lg bwi-clone" aria-hidden="true"></i>
</button>
<button
type="button"
appStopClick
appA11yTitle="{{ 'regenerateUsername' | i18n }}"
(click)="$any(form).loading ? false : regenerate()"
[attr.aria-disabled]="$any(form).loading ? 'true' : null"
>
<i
class="bwi bwi-lg bwi-generate"
[ngClass]="$any(form).loading ? 'bwi-spin' : ''"
aria-hidden="true"
></i>
</button>
</div>
</div>
<div class="box" *ngIf="!comingFromAddEdit">
<div class="box-content">
<div class="box-content-row" role="radiogroup" aria-labelledby="typeHeading">
<label id="typeHeading" class="radio-header">{{
"whatWouldYouLikeToGenerate" | i18n
}}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of typeOptions">
<input
type="radio"
[(ngModel)]="type"
name="Type"
id="type_{{ o.value }}"
[value]="o.value"
(change)="typeChanged()"
[checked]="type === o.value"
/>
<label for="type_{{ o.value }}">
{{ o.name }}
</label>
</div>
</div>
</div>
</div>
<ng-container *ngIf="type === 'password'">
<div class="box">
<h2 class="box-header">
{{ "options" | i18n }}
</h2>
<div class="box-content">
<div class="box-content-row" role="radiogroup" aria-labelledby="passwordTypeHeading">
<label id="passwordTypeHeading" class="radio-header">{{ "passwordType" | i18n }}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of passTypeOptions">
<input
type="radio"
[(ngModel)]="passwordOptions.type"
name="PasswordType"
id="passwordtype_{{ o.value }}"
[value]="o.value"
(change)="savePasswordOptions()"
[checked]="passwordOptions.type === o.value"
/>
<label for="passwordtype_{{ o.value }}">
{{ o.name }}
</label>
</div>
</div>
</div>
</div>
<div class="box" *ngIf="passwordOptions.type === 'passphrase'">
<div class="box-content">
<div class="box-content-row box-content-row-input" appBoxRow>
<label for="num-words">{{ "numWords" | i18n }}</label>
<input
id="num-words"
type="number"
min="3"
max="20"
(change)="savePasswordOptions()"
[(ngModel)]="passwordOptions.numWords"
/>
</div>
<div class="box-content-row box-content-row-input" appBoxRow>
<label for="word-separator">{{ "wordSeparator" | i18n }}</label>
<input
id="word-separator"
type="text"
maxlength="1"
(input)="savePasswordOptions()"
[(ngModel)]="passwordOptions.wordSeparator"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="capitalize">{{ "capitalize" | i18n }}</label>
<input
id="capitalize"
type="checkbox"
(change)="savePasswordOptions()"
[(ngModel)]="passwordOptions.capitalize"
[disabled]="enforcedPasswordPolicyOptions?.capitalize"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="include-number">{{ "includeNumber" | i18n }}</label>
<input
id="include-number"
type="checkbox"
(change)="savePasswordOptions()"
[(ngModel)]="passwordOptions.includeNumber"
[disabled]="enforcedPasswordPolicyOptions?.includeNumber"
/>
</div>
</div>
</div>
<ng-container *ngIf="passwordOptions.type === 'password'">
<div class="box">
<div class="box-content">
<div class="box-content-row box-content-row-slider" appBoxRow>
<label for="length">{{ "length" | i18n }}</label>
<input
id="length"
type="number"
[min]="passwordOptions.minLength"
max="128"
[(ngModel)]="passwordOptions.length"
(change)="savePasswordOptions()"
/>
<input
id="lengthRange"
type="range"
[min]="passwordOptions.minLength"
max="128"
step="1"
[(ngModel)]="passwordOptions.length"
(change)="sliderChanged()"
(input)="sliderInput()"
attr.aria-label="{{ 'length' | i18n }}"
tabindex="-1"
/>
</div>
<div class="box-content-row" appBoxRow>
<span>{{ "passwordMinLength" | i18n }}</span>
<span
class="sr-only"
attr.aria-label="{{ 'passwordMinLength' | i18n }}"
role="status"
aria-live="polite"
>
{{ passwordOptionsMinLengthForReader$ | async }}
</span>
<span class="txt-right">{{ passwordOptions.minLength }}</span>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="uppercase">A-Z</label>
<input
id="uppercase"
type="checkbox"
(change)="savePasswordOptions()"
attr.aria-label="{{ 'uppercase' | i18n }}"
[disabled]="enforcedPasswordPolicyOptions.useUppercase"
[(ngModel)]="passwordOptions.uppercase"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="lowercase">a-z</label>
<input
id="lowercase"
type="checkbox"
(change)="savePasswordOptions()"
attr.aria-label="{{ 'lowercase' | i18n }}"
[disabled]="enforcedPasswordPolicyOptions.useLowercase"
[(ngModel)]="passwordOptions.lowercase"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="numbers">0-9</label>
<input
id="numbers"
type="checkbox"
attr.aria-label="{{ 'numbers' | i18n }}"
[disabled]="enforcedPasswordPolicyOptions.useNumbers"
[ngModel]="passwordOptions.number"
(ngModelChange)="setPasswordOptionsNumber($event)"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="special">!&#64;#$%^&*</label>
<input
id="special"
type="checkbox"
attr.aria-label="{{ 'specialCharacters' | i18n }}"
[disabled]="enforcedPasswordPolicyOptions.useSpecial"
[ngModel]="passwordOptions.special"
(ngModelChange)="setPasswordOptionsSpecial($event)"
/>
</div>
</div>
</div>
<div class="box">
<div class="box-content">
<div class="box-content-row box-content-row-input" appBoxRow>
<label for="min-number">{{ "minNumbers" | i18n }}</label>
<input
id="min-number"
type="number"
min="0"
max="9"
[(ngModel)]="passwordOptions.minNumber"
(input)="onPasswordOptionsMinNumberInput($event)"
/>
</div>
<div class="box-content-row box-content-row-input" appBoxRow>
<label for="min-special">{{ "minSpecial" | i18n }}</label>
<input
id="min-special"
type="number"
min="0"
max="9"
[(ngModel)]="passwordOptions.minSpecial"
(input)="onPasswordOptionsMinSpecialInput($event)"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="ambiguous">{{ "avoidAmbChar" | i18n }}</label>
<input
id="ambiguous"
type="checkbox"
(change)="savePasswordOptions()"
[(ngModel)]="avoidAmbiguous"
/>
</div>
</div>
</div>
</ng-container>
<div class="box list">
<div class="box-content single-line">
<a class="box-content-row box-content-row-flex" routerLink="/generator-history">
<div class="row-main">{{ "passwordHistory" | i18n }}</div>
<i class="bwi bwi-angle-right bwi-lg row-sub-icon" aria-hidden="true"></i>
</a>
</div>
</div>
</ng-container>
<ng-container *ngIf="type === 'username'">
<div class="box">
<h2 class="box-header">
{{ "options" | i18n }}
</h2>
<div class="box-content">
<div class="box-content-row" role="radiogroup" aria-labelledby="usernameTypeHeading">
<label id="usernameTypeHeading" class="radio-header">
{{ "usernameType" | i18n }}
<a
href="https://bitwarden.com/help/generator/#username-types"
target="_blank"
rel="noreferrer"
appA11yTitle="{{ 'learnMore' | i18n }}"
>
<i class="bwi bwi-question-circle" aria-hidden="true"></i>
</a>
</label>
<div
class="radio-group align-start text-default"
appBoxRow
*ngFor="let o of usernameTypeOptions"
>
<input
type="radio"
[(ngModel)]="usernameOptions.type"
name="UsernameType"
id="type_{{ o.value }}"
[value]="o.value"
(change)="saveUsernameOptions()"
[checked]="usernameOptions.type === o.value"
/>
<label for="type_{{ o.value }}">
{{ o.name }}
<div class="small text-muted" *ngIf="o.desc">
{{ o.desc }}
</div>
</label>
</div>
</div>
</div>
</div>
<div class="box" *ngIf="usernameOptions.type === 'forwarded'">
<div class="box-content">
<div class="box-content-row" role="listbox" aria-labelledby="forwardTypeHeading">
<label id="forwardTypeHeading">{{ "service" | i18n }}</label>
<select
id="ForwardTypeDropdown"
name="ForwardType"
[(ngModel)]="usernameOptions.forwardedService"
(change)="saveUsernameOptions()"
>
<option *ngFor="let o of forwardOptions" [ngValue]="o.value" role="option">
{{ o.name }}
</option>
</select>
</div>
<ng-container *ngIf="usernameOptions.forwardedService === 'simplelogin'">
<div class="box-content-row" appBoxRow>
<label for="simplelogin-apikey">{{ "apiKey" | i18n }}</label>
<input
id="simplelogin-apikey"
type="password"
name="SimpleLoginApiKey"
[(ngModel)]="usernameOptions.forwardedSimpleLoginApiKey"
(blur)="saveUsernameOptions()"
/>
</div>
<div class="box-content-row" appBoxRow>
<label for="simplelogin-baseUrl">{{ "baseUrl" | i18n }}</label>
<input
id="simplelogin-baseUrl"
type="text"
name="SimpleLoginDomain"
[(ngModel)]="usernameOptions.forwardedSimpleLoginBaseUrl"
(blur)="saveUsernameOptions()"
/>
</div>
</ng-container>
<ng-container *ngIf="usernameOptions.forwardedService === 'duckduckgo'">
<div class="box-content-row" appBoxRow>
<label for="duckduckgo-apikey">{{ "apiKey" | i18n }}</label>
<input
id="duckduckgo-apikey"
type="password"
name="DuckDuckGoApiKey"
[(ngModel)]="usernameOptions.forwardedDuckDuckGoToken"
(blur)="saveUsernameOptions()"
/>
</div>
</ng-container>
<ng-container *ngIf="usernameOptions.forwardedService === 'anonaddy'">
<div class="box-content-row" appBoxRow>
<label for="anonaddy-accessToken">{{ "apiAccessToken" | i18n }}</label>
<input
id="anonaddy-accessToken"
type="password"
name="AnonAddyAccessToken"
[(ngModel)]="usernameOptions.forwardedAnonAddyApiToken"
(blur)="saveUsernameOptions()"
/>
</div>
<div class="box-content-row" appBoxRow>
<label for="anonaddy-domain">{{ "aliasDomain" | i18n }}</label>
<input
id="anonaddy-domain"
type="text"
name="AnonAddyDomain"
[(ngModel)]="usernameOptions.forwardedAnonAddyDomain"
(blur)="saveUsernameOptions()"
/>
</div>
<div class="box-content-row" appBoxRow>
<label for="anonaddy-baseUrl">{{ "baseUrl" | i18n }}</label>
<input
id="anonaddy-baseUrl"
type="text"
name="AnonAddyDomain"
[(ngModel)]="usernameOptions.forwardedAnonAddyBaseUrl"
(blur)="saveUsernameOptions()"
/>
</div>
</ng-container>
<ng-container *ngIf="usernameOptions.forwardedService === 'firefoxrelay'">
<div class="box-content-row" appBoxRow>
<label for="firefox-apikey">{{ "apiAccessToken" | i18n }}</label>
<input
id="firefox-apikey"
type="password"
name="FirefoxApiKey"
[(ngModel)]="usernameOptions.forwardedFirefoxApiToken"
(blur)="saveUsernameOptions()"
/>
</div>
</ng-container>
<ng-container *ngIf="usernameOptions.forwardedService === 'fastmail'">
<div class="box-content-row" appBoxRow>
<label for="fastmail-apiToken">{{ "apiAccessToken" | i18n }}</label>
<input
id="fastmail-apiToken"
type="password"
name="FastmailApiToken"
[(ngModel)]="usernameOptions.forwardedFastmailApiToken"
(blur)="saveUsernameOptions()"
/>
</div>
</ng-container>
<ng-container *ngIf="usernameOptions.forwardedService === 'forwardemail'">
<div class="box-content-row" appBoxRow>
<label for="forwardemail-accessToken">{{ "apiAccessToken" | i18n }}</label>
<input
id="forwardemail-accessToken"
type="password"
name="ForwardEmailAccessToken"
[(ngModel)]="usernameOptions.forwardedForwardEmailApiToken"
(blur)="saveUsernameOptions()"
/>
</div>
<div class="box-content-row" appBoxRow>
<label for="forwardemail-domain">{{ "aliasDomain" | i18n }}</label>
<input
id="forwardemail-domain"
type="text"
name="ForwardEmailDomain"
[(ngModel)]="usernameOptions.forwardedForwardEmailDomain"
(blur)="saveUsernameOptions()"
/>
</div>
</ng-container>
</div>
</div>
<div class="box" *ngIf="usernameOptions.type === 'subaddress'">
<div class="box-content">
<div class="box-content-row" appBoxRow>
<label for="subaddress-email">{{ "emailAddress" | i18n }}</label>
<input
id="subaddress-email"
type="text"
name="SubaddressEmail"
[(ngModel)]="usernameOptions.subaddressEmail"
(blur)="saveUsernameOptions()"
/>
</div>
<div
class="box-content-row"
role="radiogroup"
aria-labelledby="subaddressTypeHeading"
*ngIf="subaddressOptions.length > 1"
>
<label id="subaddressTypeHeading" class="radio-header">{{ "type" | i18n }}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of subaddressOptions">
<input
type="radio"
[(ngModel)]="usernameOptions.subaddressType"
name="SubaddressType"
id="subaddresstype_{{ o.value }}"
[value]="o.value"
(change)="saveUsernameOptions()"
[checked]="usernameOptions.subaddressType === o.value"
/>
<label for="subaddresstype_{{ o.value }}">
{{ o.name }}
</label>
</div>
</div>
<div class="box-content-row" appBoxRow *ngIf="usernameWebsite">
<label for="subaddress-website">{{ "website" | i18n }}</label>
<input
id="subaddress-website"
type="text"
name="SubaddressWebsite"
[value]="usernameOptions.website"
disabled
readonly
/>
</div>
</div>
</div>
<div class="box" *ngIf="usernameOptions.type === 'catchall'">
<div class="box-content">
<div class="box-content-row" appBoxRow>
<label for="catchall-domain">{{ "domainName" | i18n }}</label>
<input
id="catchall-domain"
type="text"
name="CatchallDomain"
[(ngModel)]="usernameOptions.catchallDomain"
(blur)="saveUsernameOptions()"
/>
</div>
<div
class="box-content-row"
role="radiogroup"
aria-labelledby="catchallTypeHeading"
*ngIf="catchallOptions.length > 1"
>
<label id="catchallTypeHeading" class="radio-header">{{ "type" | i18n }}</label>
<div class="radio-group text-default" appBoxRow *ngFor="let o of catchallOptions">
<input
type="radio"
[(ngModel)]="usernameOptions.catchallType"
name="CatchallType"
id="catchalltype_{{ o.value }}"
[value]="o.value"
(change)="saveUsernameOptions()"
[checked]="usernameOptions.catchallType === o.value"
/>
<label for="catchalltype_{{ o.value }}">
{{ o.name }}
</label>
</div>
</div>
<div class="box-content-row" appBoxRow *ngIf="usernameWebsite">
<label for="catchall-website">{{ "website" | i18n }}</label>
<input
id="catchall-website"
type="text"
name="CatchallWebsite"
[value]="usernameOptions.website"
disabled
readonly
/>
</div>
</div>
</div>
<div class="box" *ngIf="usernameOptions.type === 'word'">
<div class="box-content">
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="capitalize">{{ "capitalize" | i18n }}</label>
<input
id="capitalize"
type="checkbox"
(change)="saveUsernameOptions()"
[(ngModel)]="usernameOptions.wordCapitalize"
/>
</div>
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="include-number">{{ "includeNumber" | i18n }}</label>
<input
id="include-number"
type="checkbox"
(change)="saveUsernameOptions()"
[(ngModel)]="usernameOptions.wordIncludeNumber"
/>
</div>
</div>
</div>
</ng-container>
</main>

View File

@ -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();
}
}

View File

@ -1,48 +0,0 @@
<header>
<div class="left">
<button type="button" type="button" (click)="close()">
<span class="header-icon" aria-hidden="true"><i class="bwi bwi-angle-left"></i></span>
<span>{{ "back" | i18n }}</span>
</button>
</div>
<h1 class="center">
<span class="title">{{ "passwordHistory" | i18n }}</span>
</h1>
<div class="right">
<button type="button" type="button" (click)="clear()">
{{ "clear" | i18n }}
</button>
</div>
</header>
<main tabindex="-1">
<div class="box list full-list" *ngIf="history && history.length">
<div class="box-content">
<div class="box-content-row box-content-row-flex" *ngFor="let h of history">
<div class="row-main">
<div class="row-main-content">
<div
class="monospaced password-wrapper"
[appCopyText]="h.password"
[innerHTML]="h.password | colorPassword"
></div>
<span class="detail">{{ h.date | date: "medium" }}</span>
</div>
</div>
<div class="action-buttons">
<button
type="button"
class="row-btn"
appStopClick
appA11yTitle="{{ 'copyPassword' | i18n }}"
(click)="copy(h.password)"
>
<i class="bwi bwi-lg bwi-clone" aria-hidden="true"></i>
</button>
</div>
</div>
</div>
</div>
<div class="no-items" *ngIf="!history || !history.length">
<p>{{ "noPasswordsInList" | i18n }}</p>
</div>
</main>

View File

@ -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();
}
}

View File

@ -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) => { it("should filter favoriteCiphers$ down to search term", (done) => {
const cipherList = Object.values(allCiphers); const cipherList = Object.values(allCiphers);
const searchText = "Card 2"; const searchText = "Card 2";

View File

@ -164,16 +164,13 @@ export class VaultPopupItemsService {
/** /**
* List of favorite ciphers that are not currently suggested for autofill. * 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<PopupCipherView[]> = this.autoFillCiphers$.pipe( favoriteCiphers$: Observable<PopupCipherView[]> = this.autoFillCiphers$.pipe(
withLatestFrom(this._filteredCipherList$), withLatestFrom(this._filteredCipherList$),
map(([autoFillCiphers, ciphers]) => map(([autoFillCiphers, ciphers]) =>
ciphers.filter((cipher) => cipher.favorite && !autoFillCiphers.includes(cipher)), ciphers.filter((cipher) => cipher.favorite && !autoFillCiphers.includes(cipher)),
), ),
map((ciphers) =>
ciphers.sort((a, b) => this.cipherService.sortCiphersByLastUsedThenName(a, b)),
),
shareReplay({ refCount: false, bufferSize: 1 }), shareReplay({ refCount: false, bufferSize: 1 }),
); );

View File

@ -18,14 +18,14 @@
"license": "SEE LICENSE IN LICENSE.txt", "license": "SEE LICENSE IN LICENSE.txt",
"scripts": { "scripts": {
"clean": "rimraf dist", "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:debug": "npm run build:oss && node --inspect ./build/bw.js",
"build:oss:watch": "webpack --watch", "build:oss:watch": "webpack --watch",
"build:oss:prod": "cross-env NODE_ENV=production webpack", "build:oss:prod": "cross-env NODE_ENV=production webpack",
"build:oss:prod:watch": "cross-env NODE_ENV=production webpack --watch", "build:oss:prod:watch": "cross-env NODE_ENV=production webpack --watch",
"debug": "node --inspect ./build/bw.js", "debug": "node --inspect ./build/bw.js",
"publish:npm": "npm run build:oss:prod && npm publish --access public", "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: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:watch": "webpack --watch -c ../../bitwarden_license/bit-cli/webpack.config.js",
"build:bit:prod": "cross-env NODE_ENV=production npm run build:bit", "build:bit:prod": "cross-env NODE_ENV=production npm run build:bit",

View File

@ -550,7 +550,6 @@ export class ServiceContainer {
this.accountService, this.accountService,
this.kdfConfigService, this.kdfConfigService,
this.keyService, this.keyService,
this.apiService,
customUserAgent, customUserAgent,
); );
@ -864,19 +863,5 @@ export class ServiceContainer {
} }
this.inited = true; 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));
}
}
} }
} }

View File

@ -1,3 +1,4 @@
#[allow(clippy::module_inception)]
#[cfg_attr(target_os = "linux", path = "unix.rs")] #[cfg_attr(target_os = "linux", path = "unix.rs")]
#[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")]
#[cfg_attr(target_os = "macos", path = "macos.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")]

View File

@ -1,5 +1,5 @@
use anyhow::Result; use anyhow::Result;
pub async fn run_command(value: String) -> Result<String> { pub async fn run_command(_value: String) -> Result<String> {
todo!("Unix does not support autofill"); todo!("Unix does not support autofill");
} }

View File

@ -1,5 +1,5 @@
use anyhow::Result; use anyhow::Result;
pub async fn run_command(value: String) -> Result<String> { pub async fn run_command(_value: String) -> Result<String> {
todo!("Windows does not support autofill"); todo!("Windows does not support autofill");
} }

View File

@ -1,6 +1,7 @@
use aes::cipher::generic_array::GenericArray; use aes::cipher::generic_array::GenericArray;
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
#[allow(clippy::module_inception)]
#[cfg_attr(target_os = "linux", path = "unix.rs")] #[cfg_attr(target_os = "linux", path = "unix.rs")]
#[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")]
#[cfg_attr(target_os = "macos", path = "macos.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")]
@ -41,6 +42,7 @@ pub trait BiometricTrait {
) -> Result<String>; ) -> Result<String>;
} }
#[allow(unused)]
fn encrypt(secret: &str, key_material: &KeyMaterial, iv_b64: &str) -> Result<String> { fn encrypt(secret: &str, key_material: &KeyMaterial, iv_b64: &str) -> Result<String> {
let iv = base64_engine let iv = base64_engine
.decode(iv_b64)? .decode(iv_b64)?
@ -52,9 +54,10 @@ fn encrypt(secret: &str, key_material: &KeyMaterial, iv_b64: &str) -> Result<Str
Ok(encrypted.to_string()) Ok(encrypted.to_string())
} }
#[allow(unused)]
fn decrypt(secret: &CipherString, key_material: &KeyMaterial) -> Result<String> { fn decrypt(secret: &CipherString, key_material: &KeyMaterial) -> Result<String> {
if let CipherString::AesCbc256_B64 { iv, data } = secret { 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)?) Ok(String::from_utf8(decrypted)?)
} else { } else {

View File

@ -33,12 +33,10 @@ impl super::BiometricTrait for Biometric {
.await; .await;
match result { match result {
Ok(result) => { Ok(result) => Ok(result.is_authorized),
return Ok(result.is_authorized);
}
Err(e) => { Err(e) => {
println!("polkit biometric error: {:?}", 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(true);
} }
} }
return Ok(false); Ok(false)
} }
fn derive_key_material(challenge_str: Option<&str>) -> Result<OsDerivedKey> { fn derive_key_material(challenge_str: Option<&str>) -> Result<OsDerivedKey> {
@ -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 // so we use a a key derived from the iv. this key is not intended to add any security
// but only a place-holder // but only a place-holder
let key = Sha256::digest(challenge); let key = Sha256::digest(challenge);
let key_b64 = base64_engine.encode(&key); let key_b64 = base64_engine.encode(key);
let iv_b64 = base64_engine.encode(&challenge); let iv_b64 = base64_engine.encode(challenge);
Ok(OsDerivedKey { key_b64, iv_b64 }) 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 encrypted_secret = crate::password::get_password(service, account).await?;
let secret = CipherString::from_str(&encrypted_secret)?; let secret = CipherString::from_str(&encrypted_secret)?;
return Ok(decrypt(&secret, &key_material)?); decrypt(&secret, &key_material)
} }
} }

View File

@ -88,14 +88,14 @@ impl super::BiometricTrait for Biometric {
let bitwarden = h!("Bitwarden"); let bitwarden = h!("Bitwarden");
let result = KeyCredentialManager::RequestCreateAsync( let result = KeyCredentialManager::RequestCreateAsync(
&bitwarden, bitwarden,
KeyCredentialCreationOption::FailIfExists, KeyCredentialCreationOption::FailIfExists,
)? )?
.get()?; .get()?;
let result = match result.Status()? { let result = match result.Status()? {
KeyCredentialStatus::CredentialAlreadyExists => { KeyCredentialStatus::CredentialAlreadyExists => {
KeyCredentialManager::OpenAsync(&bitwarden)?.get()? KeyCredentialManager::OpenAsync(bitwarden)?.get()?
} }
KeyCredentialStatus::Success => result, KeyCredentialStatus::Success => result,
_ => return Err(anyhow!("Failed to create key credential")), _ => return Err(anyhow!("Failed to create key credential")),
@ -116,8 +116,8 @@ impl super::BiometricTrait for Biometric {
CryptographicBuffer::CopyToByteArray(&signature_buffer, &mut signature_value)?; CryptographicBuffer::CopyToByteArray(&signature_buffer, &mut signature_value)?;
let key = Sha256::digest(&*signature_value); let key = Sha256::digest(&*signature_value);
let key_b64 = base64_engine.encode(&key); let key_b64 = base64_engine.encode(key);
let iv_b64 = base64_engine.encode(&challenge); let iv_b64 = base64_engine.encode(challenge);
Ok(OsDerivedKey { key_b64, iv_b64 }) Ok(OsDerivedKey { key_b64, iv_b64 })
} }
@ -151,12 +151,12 @@ impl super::BiometricTrait for Biometric {
Ok(secret) => { Ok(secret) => {
// If the secret is a CipherString, it is encrypted and we need to decrypt it. // If the secret is a CipherString, it is encrypted and we need to decrypt it.
let secret = decrypt(&secret, &key_material)?; let secret = decrypt(&secret, &key_material)?;
return Ok(secret); Ok(secret)
} }
Err(_) => { Err(_) => {
// If the secret is not a CipherString, it is not encrypted and we can return it // If the secret is not a CipherString, it is not encrypted and we can return it
// directly. // directly.
return Ok(encrypted_secret); Ok(encrypted_secret)
} }
} }
} }
@ -206,8 +206,8 @@ fn set_focus(window: HWND) {
pressed = true; pressed = true;
keybd_event(VK_MENU.0 as u8, 0, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(VK_MENU.0 as u8, 0, KEYEVENTF_EXTENDEDKEY, 0);
} }
SetForegroundWindow(window); let _ = SetForegroundWindow(window);
SetFocus(window); let _ = SetFocus(window);
if pressed { if pressed {
keybd_event( keybd_event(
VK_MENU.0 as u8, VK_MENU.0 as u8,
@ -245,20 +245,21 @@ mod tests {
assert_eq!(iv.len(), 16); assert_eq!(iv.len(), 16);
} }
#[test] #[tokio::test]
#[cfg(feature = "manual_test")] #[cfg(feature = "manual_test")]
fn test_prompt() { async fn test_prompt() {
<Biometric as BiometricTrait>::prompt( <Biometric as BiometricTrait>::prompt(
vec![0, 0, 0, 0, 0, 0, 0, 0], vec![0, 0, 0, 0, 0, 0, 0, 0],
String::from("Hello from Rust"), String::from("Hello from Rust"),
) )
.await
.unwrap(); .unwrap();
} }
#[test] #[tokio::test]
#[cfg(feature = "manual_test")] #[cfg(feature = "manual_test")]
fn test_available() { async fn test_available() {
assert!(<Biometric as BiometricTrait>::available().unwrap()) assert!(<Biometric as BiometricTrait>::available().await.unwrap())
} }
#[test] #[test]
@ -275,7 +276,7 @@ mod tests {
match secret { match secret {
CipherString::AesCbc256_B64 { iv, data: _ } => { 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"), _ => panic!("Invalid cipher string"),
} }

View File

@ -9,13 +9,9 @@ use crate::error::{CryptoError, KdfParamError, Result};
use super::CipherString; use super::CipherString;
pub fn decrypt_aes256( pub fn decrypt_aes256(iv: &[u8; 16], data: &[u8], key: GenericArray<u8, U32>) -> Result<Vec<u8>> {
iv: &[u8; 16],
data: &Vec<u8>,
key: GenericArray<u8, U32>,
) -> Result<Vec<u8>> {
let iv = GenericArray::from_slice(iv); let iv = GenericArray::from_slice(iv);
let mut data = data.clone(); let mut data = data.to_vec();
let decrypted_key_slice = cbc::Decryptor::<aes::Aes256>::new(&key, iv) let decrypted_key_slice = cbc::Decryptor::<aes::Aes256>::new(&key, iv)
.decrypt_padded_mut::<Pkcs7>(&mut data) .decrypt_padded_mut::<Pkcs7>(&mut data)
.map_err(|_| CryptoError::KeyDecrypt)?; .map_err(|_| CryptoError::KeyDecrypt)?;
@ -54,7 +50,7 @@ pub fn argon2(
let mut hash = [0u8; 32]; let mut hash = [0u8; 32];
argon 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}",)))?; .map_err(|e| KdfParamError::InvalidParams(format!("Argon2 hashing failed: {e}",)))?;
// Argon2 is using some stack memory that is not zeroed. Eventually some function will // Argon2 is using some stack memory that is not zeroed. Eventually some function will

View File

@ -2,4 +2,5 @@ pub use cipher_string::*;
pub use crypto::*; pub use crypto::*;
mod cipher_string; mod cipher_string;
#[allow(clippy::module_inception)]
mod crypto; mod crypto;

View File

@ -4,18 +4,18 @@ use security_framework::passwords::{
}; };
pub async fn get_password(service: &str, account: &str) -> Result<String> { pub async fn get_password(service: &str, account: &str) -> Result<String> {
let result = String::from_utf8(get_generic_password(&service, &account)?)?; let result = String::from_utf8(get_generic_password(service, account)?)?;
Ok(result) Ok(result)
} }
pub async fn set_password(service: &str, account: &str, password: &str) -> Result<()> { pub async fn set_password(service: &str, account: &str, password: &str) -> Result<()> {
let result = set_generic_password(&service, &account, password.as_bytes())?; set_generic_password(service, account, password.as_bytes())?;
Ok(result) Ok(())
} }
pub async fn delete_password(service: &str, account: &str) -> Result<()> { pub async fn delete_password(service: &str, account: &str) -> Result<()> {
let result = delete_generic_password(&service, &account)?; delete_generic_password(service, account)?;
Ok(result) Ok(())
} }
pub async fn is_available() -> Result<bool> { pub async fn is_available() -> Result<bool> {

View File

@ -1,3 +1,4 @@
#[allow(clippy::module_inception)]
#[cfg_attr(target_os = "linux", path = "unix.rs")] #[cfg_attr(target_os = "linux", path = "unix.rs")]
#[cfg_attr(target_os = "windows", path = "windows.rs")] #[cfg_attr(target_os = "windows", path = "windows.rs")]
#[cfg_attr(target_os = "macos", path = "macos.rs")] #[cfg_attr(target_os = "macos", path = "macos.rs")]

View File

@ -13,7 +13,7 @@ async fn get_password_new(service: &str, account: &str) -> Result<String> {
let keyring = oo7::Keyring::new().await?; let keyring = oo7::Keyring::new().await?;
let attributes = HashMap::from([("service", service), ("account", account)]); let attributes = HashMap::from([("service", service), ("account", account)]);
let results = keyring.search_items(&attributes).await?; let results = keyring.search_items(&attributes).await?;
let res = results.get(0); let res = results.first();
match res { match res {
Some(res) => { Some(res) => {
let secret = res.secret().await?; let secret = res.secret().await?;
@ -31,7 +31,7 @@ async fn get_password_legacy(service: &str, account: &str) -> Result<String> {
let keyring = oo7::Keyring::DBus(collection); let keyring = oo7::Keyring::DBus(collection);
let attributes = HashMap::from([("service", service), ("account", account)]); let attributes = HashMap::from([("service", service), ("account", account)]);
let results = keyring.search_items(&attributes).await?; let results = keyring.search_items(&attributes).await?;
let res = results.get(0); let res = results.first();
match res { match res {
Some(res) => { Some(res) => {
let secret = res.secret().await?; let secret = res.secret().await?;

View File

@ -42,7 +42,7 @@ pub async fn get_password<'a>(service: &str, account: &str) -> Result<String> {
.to_string_lossy() .to_string_lossy()
}; };
Ok(String::from(password)) Ok(password)
} }
pub async fn set_password(service: &str, account: &str, password: &str) -> Result<()> { pub async fn set_password(service: &str, account: &str, password: &str) -> Result<()> {

View File

@ -1,3 +1,4 @@
#[allow(clippy::module_inception)]
#[cfg_attr(target_os = "linux", path = "linux.rs")] #[cfg_attr(target_os = "linux", path = "linux.rs")]
#[cfg_attr(target_os = "windows", path = "unimplemented.rs")] #[cfg_attr(target_os = "windows", path = "unimplemented.rs")]
#[cfg_attr(target_os = "macos", path = "unimplemented.rs")] #[cfg_attr(target_os = "macos", path = "unimplemented.rs")]

Some files were not shown because too many files have changed in this diff Show More