1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-12-21 16:18:28 +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:
name: Crowdin Push
if: github.ref == 'refs/heads/main'
if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main'
needs:
- linux
- windows

View File

@ -58,3 +58,31 @@ jobs:
run: |
npm ci
npm run lint
rust:
name: Run Rust lint on ${{ matrix.os }}
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
steps:
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Check Rust version
run: rustup --version
- name: Run cargo fmt
working-directory: ./apps/desktop/desktop_native
run: cargo fmt --check
- name: Run Clippy
working-directory: ./apps/desktop/desktop_native
run: cargo clippy --all-features --tests
env:
RUSTFLAGS: "-D warnings"

View File

@ -14,11 +14,11 @@
"build:watch:firefox": "npm run build:firefox -- --watch",
"build:watch:opera": "npm run build:opera -- --watch",
"build:watch:safari": "npm run build:safari -- --watch",
"build:prod:chrome": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:chrome",
"build:prod:edge": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:edge",
"build:prod:firefox": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:firefox",
"build:prod:opera": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:opera",
"build:prod:safari": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=4096\" npm run build:safari",
"build:prod:chrome": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:chrome",
"build:prod:edge": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:edge",
"build:prod:firefox": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:firefox",
"build:prod:opera": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:opera",
"build:prod:safari": "cross-env NODE_ENV=production NODE_OPTIONS=\"--max-old-space-size=8192\" npm run build:safari",
"dist:chrome": "npm run build:prod:chrome && mkdir -p dist && ./scripts/compress.ps1 dist-chrome.zip",
"dist:edge": "npm run build:prod:edge && mkdir -p dist && ./scripts/compress.ps1 dist-edge.zip",
"dist:firefox": "npm run build:prod:firefox && mkdir -p dist && ./scripts/compress.ps1 dist-firefox.zip",

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "قيِّم هذه الإضافة"
},
"rateExtensionDesc": {
"message": "يرجى النظر في مساعدتنا بكتابة تعليق إيجابي!"
},
"browserNotSupportClipboard": {
"message": "متصفح الويب الخاص بك لا يدعم خاصية النسخ السهل. يرجى استخدام النسخ اليدوي."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -193,10 +193,10 @@
"message": "Kimliyi avto-doldur"
},
"fillVerificationCode": {
"message": "Fill verification code"
"message": "Doğrulama kodunu doldur"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"message": "Doğrulama Kodunu Doldur",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
@ -648,9 +648,6 @@
"rateExtension": {
"message": "Uzantını qiymətləndir"
},
"rateExtensionDesc": {
"message": "Gözəl bir rəy ilə bizə dəstək ola bilərsiniz!"
},
"browserNotSupportClipboard": {
"message": "Veb brauzeriniz lövhəyə kopyalamağı dəstəkləmir. Əvəzində əllə kopyalayın."
},
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"message": "Vaxt əsaslı Təkistifadəlik Parol Doğrulama Kodu",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"message": "Hazırkı TOTP-nin bitməsinə qalan vaxt",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Uzantı ikonunda giriş üçün avto-doldurma təklif sayını göstər"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "İlkin sistem"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Vacib bildiriş"
},
"setupTwoStepLogin": {
"message": "İki addımlı girişi qur"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden, 2025-ci ilin Fevral ayından etibarən yeni cihazlardan gələn girişləri doğrulamaq üçün hesabınızın e-poçtuna bir kod göndərəcək."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Hesabınızı qorumaq üçün alternativ bir yol kimi iki addımlı girişi qura və ya e-poçtunuzu müraciət edə biləcəyiniz e-poçtla dəyişdirə bilərsiniz."
},
"remindMeLater": {
"message": "Daha sonra xatırlat"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "$EMAIL$ e-poçtunuza güvənli şəkildə müraciət edə bilirsiniz?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Xeyr, edə bilmirəm"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Bəli, e-poçtuma güvənli şəkildə müraciət edə bilirəm"
},
"turnOnTwoStepLogin": {
"message": "İki addımlı girişi işə sal"
},
"changeAcctEmail": {
"message": "Hesabın e-poçtunu dəyişdir"
},
"extensionWidth": {
"message": "Uzantı eni"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Ацаніць пашырэнне"
},
"rateExtensionDesc": {
"message": "Падумайце пра тое, каб дапамагчы нам добрым водгукам!"
},
"browserNotSupportClipboard": {
"message": "Ваш вэб-браўзер не падтрымлівае капіяванне даных у буфер абмену. Скапіюйце іх уручную."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Оценяване на разширението"
},
"rateExtensionDesc": {
"message": "Молим да ни помогнете, като оставите положителен отзив!"
},
"browserNotSupportClipboard": {
"message": "Браузърът не поддържа копиране в буфера, затова копирайте на ръка."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Показване на броя предложения за автоматично попълване на данни за вписване върху иконката на добавката"
},
"showQuickCopyActions": {
"message": "Показване на действията за бързо копиране в трезора"
},
"systemDefault": {
"message": "По подразбиране за системата"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Бета"
},
"importantNotice": {
"message": "Важно съобщение"
},
"setupTwoStepLogin": {
"message": "Настройте двустепенно удостоверяване"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Битуорден ще изпрати код до е-пощата Ви, за потвърждаване на вписването от нови устройства. Това ще започне от февруари 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Можете да настроите двустепенно удостоверяване, като различен метод на защита, или ако е необходимо да промените е-пощата си с такава, до която имате достъп."
},
"remindMeLater": {
"message": "Напомнете ми по-късно"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Имате ли сигурен достъп до е-пощата си $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Не, нямам"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Да, имам достъп до е-пощата си"
},
"turnOnTwoStepLogin": {
"message": "Включване на двустепенното удостоверяване"
},
"changeAcctEmail": {
"message": "Промяна на е-пощата"
},
"extensionWidth": {
"message": "Ширина на разширението"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "এক্সটেনশনটি মূল্যায়ন করুন"
},
"rateExtensionDesc": {
"message": "দয়া করে একটি ভাল পর্যালোচনার মাধ্যমে সাহায্য করতে আমাদের বিবেচনা করুন!"
},
"browserNotSupportClipboard": {
"message": "আপনার ওয়েব ব্রাউজার সহজে ক্লিপবোর্ড অনুলিপি সমর্থন করে না। পরিবর্তে এটি নিজেই অনুলিপি করুন।"
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Valora aquesta extensió"
},
"rateExtensionDesc": {
"message": "Considereu ajudar-nos amb una bona valoració!"
},
"browserNotSupportClipboard": {
"message": "El vostre navegador web no admet la còpia fàcil del porta-retalls. Copieu-ho manualment."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Ohodnotit rozšíření"
},
"rateExtensionDesc": {
"message": "Pomozte nám napsáním dobré recenze!"
},
"browserNotSupportClipboard": {
"message": "Váš webový prohlížeč nepodporuje automatické kopírování do schránky. Musíte ho zkopírovat ručně."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Zobrazit počet návrhů automatického vyplňování přihlášení na ikoně rozšíření"
},
"showQuickCopyActions": {
"message": "Zobrazit akce rychlé kopie v trezoru"
},
"systemDefault": {
"message": "Systémový výchozí"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Důležité upozornění"
},
"setupTwoStepLogin": {
"message": "Nastavit dvoufázové přihlášení"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden odešle kód na e-mail Vašeho účtu pro ověření přihlášení z nových zařízení počínaje únorem 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Dvoufázové přihlášení můžete nastavit jako alternativní způsob ochrany Vašeho účtu nebo změnit svůj e-mail na ten, k němuž můžete přistupovat."
},
"remindMeLater": {
"message": "Připomenout později"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Máte spolehlivý přístup ke svému e-mailu $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Ne, nemám"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Ano, ke svému e-mailu mám přístup"
},
"turnOnTwoStepLogin": {
"message": "Zapnout dvoufázové přihlášení"
},
"changeAcctEmail": {
"message": "Změnit e-mail účtu"
},
"extensionWidth": {
"message": "Šířka rozšíření"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rhoi eich barn ar yr estyniad"
},
"rateExtensionDesc": {
"message": "Ystyriwch ein helpu ni gydag adolygiad da!"
},
"browserNotSupportClipboard": {
"message": "Dyw eich porwr gwe ddim yn cefnogi copïo drwy'r clipfwrdd yn hawdd. Copïwch â llaw yn lle."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Bedøm udvidelsen"
},
"rateExtensionDesc": {
"message": "Overvej om du vil hjælpe os med en god anmeldelse!"
},
"browserNotSupportClipboard": {
"message": "Din webbrowser understøtter ikke udklipsholder kopiering. Kopiér det manuelt i stedet."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Vis antal login-autoudfyldningsforslag på udvidelsesikon"
},
"showQuickCopyActions": {
"message": "Vis hurtig-kopihandlinger på Boks"
},
"systemDefault": {
"message": "Systemstandard"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Vigtig notits"
},
"setupTwoStepLogin": {
"message": "Opsæt totrins-login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Startende i februar 2025, sender Bitwarden en kode til kontoe-mailadressen for at bekræfte logins fra nye enheder."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Man kan opsætte totrins-login som en alternativ måde at beskytte sin konto på eller ændre sin e-mail til en, man kan tilgå."
},
"remindMeLater": {
"message": "Påmind senere"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Er der pålidelig adgang til e-mailadressen, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Nej, jeg gør ikke"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Ja, e-mailadressen kan pålideligt tilgås"
},
"turnOnTwoStepLogin": {
"message": "Slå totrins-login til"
},
"changeAcctEmail": {
"message": "Skift kontoe-mailadresse"
},
"extensionWidth": {
"message": "Udvidelsesbredde"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Erweiterung bewerten"
},
"rateExtensionDesc": {
"message": "Wir würden uns freuen, wenn du uns mit einer positiven Bewertung helfen könntest!"
},
"browserNotSupportClipboard": {
"message": "Den Browser unterstützt das einfache Kopieren nicht. Bitte kopiere es manuell."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Anzahl der Vorschläge zum Auto-Ausfüllen von Zugangsdaten auf dem Erweiterungssymbol anzeigen"
},
"showQuickCopyActions": {
"message": "Schnellkopier-Aktionen im Tresor anzeigen"
},
"systemDefault": {
"message": "Systemstandard"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Wichtiger Hinweis"
},
"setupTwoStepLogin": {
"message": "Richte die zweistufige Anmeldung ein"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden wird einen Code an deine Konto-E-Mail-Adresse senden, um Anmeldungen von neuen Geräten ab Februar 2025 zu überprüfen."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Du kannst die zweistufige Anmeldung als eine alternative Methode einrichten, um deinen Account zu schützen, oder ändere deine E-Mail-Adresse zu einer, auf die du zugreifen kannst."
},
"remindMeLater": {
"message": "Erinnere mich später"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Hast du zuverlässigen Zugriff auf deine E-Mail-Adresse $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Nein, habe ich nicht"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Ja, ich kann zuverlässig auf meine E-Mails zugreifen"
},
"turnOnTwoStepLogin": {
"message": "Aktiviere die zweistufige Anmeldung"
},
"changeAcctEmail": {
"message": "Ändere die E-Mail-Adresse des Kontos"
},
"extensionWidth": {
"message": "Breite der Erweiterung"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Βαθμολογήστε την επέκταση"
},
"rateExtensionDesc": {
"message": "Παρακαλούμε σκεφτείτε να μας βοηθήσετε με μια καλή κριτική!"
},
"browserNotSupportClipboard": {
"message": "Το πρόγραμμα περιήγησης ιστού δεν υποστηρίζει εύκολη αντιγραφή πρόχειρου. Αντιγράψτε το με το χέρι αντ'αυτού."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Εμφάνιση αριθμού προτάσεων αυτόματης συμπλήρωσης σύνδεσης στο εικονίδιο επέκτασης"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Προεπιλογή συστήματος"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

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

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Valora la extensión"
},
"rateExtensionDesc": {
"message": "¡Por favor, considera ayudarnos con una buena reseña!"
},
"browserNotSupportClipboard": {
"message": "Tu navegador web no soporta copiar al portapapeles facilmente. Cópialo manualmente."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Hinda seda laiendust"
},
"rateExtensionDesc": {
"message": "Soovi korral võid meid positiivse hinnanguga toetada!"
},
"browserNotSupportClipboard": {
"message": "Kasutatav brauser ei toeta lihtsat lõikelaua kopeerimist. Kopeeri see käsitsi."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Baloratu gehigarria"
},
"rateExtensionDesc": {
"message": "Mesedez, aipu on batekin lagundu!"
},
"browserNotSupportClipboard": {
"message": "Zure web nabigatzaileak ez du onartzen arbelean erraz kopiatzea. Eskuz kopiatu."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "به این افزونه امتیاز دهید"
},
"rateExtensionDesc": {
"message": "لطفاً با یک بررسی خوب به ما کمک کنید!"
},
"browserNotSupportClipboard": {
"message": "مرورگر شما از کپی کلیپ بورد آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Arvioi laajennus"
},
"rateExtensionDesc": {
"message": "Harkitse tukemistamme hyvällä arvostelulla!"
},
"browserNotSupportClipboard": {
"message": "Selaimesi ei tue helppoa leikepöydälle kopiointia. Kopioi kohde manuaalisesti."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Näytä automaattitäytön ehdotusten määrä laajennuksen kuvakkeessa"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Järjestelmän oletus"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Laajennuksen leveys"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "I-rate ang extension"
},
"rateExtensionDesc": {
"message": "Paki-isipan ang pagtulong sa amin sa pamamagitan ng isang magandang review!"
},
"browserNotSupportClipboard": {
"message": "Hindi suportado ng iyong web browser ang madaling pag-copy ng clipboard. Kopya ito manually sa halip."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Noter l'extension"
},
"rateExtensionDesc": {
"message": "Merci de nous aider en mettant une bonne note !"
},
"browserNotSupportClipboard": {
"message": "Votre navigateur web ne supporte pas la copie rapide depuis le presse-papier. Copiez-le manuellement à la place."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Afficher le nombre de suggestions de saisie automatique d'identifiant sur l'icône d'extension"
},
"showQuickCopyActions": {
"message": "Afficher les actions de copie rapide dans le coffre"
},
"systemDefault": {
"message": "Par défaut"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Largeur de l'extension"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Valorar a extensión"
},
"rateExtensionDesc": {
"message": "Por favor, considera axudarnos cunha boa recensión!"
},
"browserNotSupportClipboard": {
"message": "O teu navegador web non soporta copia doada ao portapapeis. Cópiao manualmente no seu lugar."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "דירוג הרחבה"
},
"rateExtensionDesc": {
"message": "אם נהנית מהתוכנה, בבקשה דרג את התוכנה וכתוב דירוג עם חוות דעת טובה!"
},
"browserNotSupportClipboard": {
"message": "הדפדפן שלך לא תומך בהעתקה ללוח. אנא העתק בצורה ידנית."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the Extension"
},
"rateExtensionDesc": {
"message": "कृपया एक अच्छी समीक्षा के साथ हमारी मदत करने पर विचार करें!"
},
"browserNotSupportClipboard": {
"message": "आपका वेब ब्राउज़र आसान क्लिपबोर्ड कॉपीिंग का समर्थन नहीं करता है। इसके बजाय इसे मैन्युअल रूप से कॉपी करें।"
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

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

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Bővítmény értékelése"
},
"rateExtensionDesc": {
"message": "Kérlek, fontold meg egy jó értékelés hagyását, ezzel segítve nekünk!"
},
"browserNotSupportClipboard": {
"message": "A webböngésződ nem támogat könnyű vágólap másolást. Másold manuálisan inkább."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Az automatikus bejelentkezési kitöltési javaslatok számának megjelenítése a bővítmény ikonján"
},
"showQuickCopyActions": {
"message": "Gyors másolási műveletek megjelenítése a Széfen"
},
"systemDefault": {
"message": "Rendszer alapértelmezett"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Béta"
},
"importantNotice": {
"message": "Fontos megjegyzés"
},
"setupTwoStepLogin": {
"message": "Kétlépéses bejelentkezés beüzemelése"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "A Bitwarden 2025 februárjától kódot küld a fiókhoz tartozó email-címre, amellyel ellenőrizhetők az új eszközökről történő bejelentkezések."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "A fiók védelmének alternatív módjaként beállíthatunk kétlépcsős bejelentkezést vagy módosíthatjuk az email címet egy elérhetőre."
},
"remindMeLater": {
"message": "Emlékeztetés később"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Megbízható a hozzáférés $EMAIL$ email címhez?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Nem, nem érem el"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Igen, megbízhatóan hozzáférek az emailjeimhez"
},
"turnOnTwoStepLogin": {
"message": "Kétlépéses bejelentkezés bekapcsolása"
},
"changeAcctEmail": {
"message": "Fiók email cím megváltoztatása"
},
"extensionWidth": {
"message": "Kiterjesztés szélesség"
},

View File

@ -3,7 +3,7 @@
"message": "Bitwarden"
},
"extName": {
"message": "Bitwarden Pengelola Sandi",
"message": "Pengelola Sandi Bitwarden",
"description": "Extension name, MUST be less than 40 characters (Safari restriction)"
},
"extDesc": {
@ -193,10 +193,10 @@
"message": "Autofill identitas"
},
"fillVerificationCode": {
"message": "Fill verification code"
"message": "Isikan kode verifikasi"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"message": "Isikan Kode Verifikasi",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
@ -648,9 +648,6 @@
"rateExtension": {
"message": "Nilai Ekstensi"
},
"rateExtensionDesc": {
"message": "Mohon pertimbangkan membantu kami dengan ulasan yang baik!"
},
"browserNotSupportClipboard": {
"message": "Peramban Anda tidak mendukung menyalin clipboard dengan mudah. Salin secara manual."
},
@ -3181,7 +3178,7 @@
"message": "Lihat semua pilihan masuk"
},
"viewAllLoginOptionsV1": {
"message": "View all log in options"
"message": "Lihat semua pilihan masuk"
},
"notificationSentDevice": {
"message": "Sebuah pemberitahuan dikirim ke perangkat Anda."
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"message": "Kode Verifikasi Kata Sandi Sekali-Waktu Berbasis Waktu",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"message": "Waktu tersisa sebelum TOTP sekarang kadaluwarsa",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
@ -4339,10 +4336,10 @@
"message": "Pengenalan"
},
"contactInfo": {
"message": "Contact info"
"message": "Info kontak"
},
"downloadAttachment": {
"message": "Download - $ITEMNAME$",
"message": "Unduh - $ITEMNAME$",
"placeholders": {
"itemname": {
"content": "$1",
@ -4351,23 +4348,23 @@
}
},
"cardNumberEndsWith": {
"message": "card number ends with",
"message": "nomor kartu berakhiran",
"description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher."
},
"loginCredentials": {
"message": "Login credentials"
"message": "Kredensial login"
},
"authenticatorKey": {
"message": "Authenticator key"
"message": "Kunci Otentikator"
},
"autofillOptions": {
"message": "Autofill options"
"message": "Pilihan isi otomatis"
},
"websiteUri": {
"message": "Website (URI)"
"message": "Situs web (URI)"
},
"websiteUriCount": {
"message": "Website (URI) $COUNT$",
"message": "$COUNT$ Situs web (URI)",
"description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.",
"placeholders": {
"count": {
@ -4377,16 +4374,16 @@
}
},
"websiteAdded": {
"message": "Website added"
"message": "Situs web ditambahkan"
},
"addWebsite": {
"message": "Add website"
"message": "Tambah situs web"
},
"deleteWebsite": {
"message": "Delete website"
"message": "Hapus situs web"
},
"defaultLabel": {
"message": "Default ($VALUE$)",
"message": "Bawaan ($VALUE$)",
"description": "A label that indicates the default value for a field with the current default value in parentheses.",
"placeholders": {
"value": {
@ -4396,7 +4393,7 @@
}
},
"showMatchDetection": {
"message": "Show match detection $WEBSITE$",
"message": "Tampilkan deteksi kecocokan $WEBSITE$",
"placeholders": {
"website": {
"content": "$1",
@ -4405,7 +4402,7 @@
}
},
"hideMatchDetection": {
"message": "Hide match detection $WEBSITE$",
"message": "Sembunyikan deteksi kecocokan $WEBSITE$",
"placeholders": {
"website": {
"content": "$1",
@ -4414,19 +4411,19 @@
}
},
"autoFillOnPageLoad": {
"message": "Autofill on page load?"
"message": "Isi otomatis ketika halaman dimuat?"
},
"cardExpiredTitle": {
"message": "Expired card"
"message": "Kartu kadaluwarsa"
},
"cardExpiredMessage": {
"message": "If you've renewed it, update the card's information"
"message": "Jika Anda telah memperpanjangnya, perbarui informasi kartu"
},
"cardDetails": {
"message": "Card details"
"message": "Rincian kartu"
},
"cardBrandDetails": {
"message": "$BRAND$ details",
"message": "Rincian $BRAND$",
"placeholders": {
"brand": {
"content": "$1",
@ -4435,43 +4432,43 @@
}
},
"enableAnimations": {
"message": "Enable animations"
"message": "Nyalakan animasi"
},
"showAnimations": {
"message": "Show animations"
"message": "Tampilkan animasi"
},
"addAccount": {
"message": "Add account"
"message": "Tambah akun"
},
"loading": {
"message": "Loading"
"message": "Memuat"
},
"data": {
"message": "Data"
},
"passkeys": {
"message": "Passkeys",
"message": "Kunci sandi",
"description": "A section header for a list of passkeys."
},
"passwords": {
"message": "Passwords",
"message": "Kata Sandi",
"description": "A section header for a list of passwords."
},
"logInWithPasskeyAriaLabel": {
"message": "Log in with passkey",
"message": "Masuk dengan kunci sandi",
"description": "ARIA label for the inline menu button that logs in with a passkey."
},
"assign": {
"message": "Assign"
"message": "Terapkan"
},
"bulkCollectionAssignmentDialogDescriptionSingular": {
"message": "Only organization members with access to these collections will be able to see the item."
"message": "Hanya anggota organisasi dengan akses ke koleksi berikut yang dapat melihat isinya."
},
"bulkCollectionAssignmentDialogDescriptionPlural": {
"message": "Only organization members with access to these collections will be able to see the items."
"message": "Hanya anggota organisasi dengan akses ke koleksi berikut yang dapat melihat isinya."
},
"bulkCollectionAssignmentWarning": {
"message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.",
"message": "Anda telah memilih $TOTAL_COUNT$ benda. Anda tidak dapat memperbarui $READONLY_COUNT$ dari benda karena Anda tidak memiliki izin untuk menyunting.",
"placeholders": {
"total_count": {
"content": "$1",
@ -4483,37 +4480,37 @@
}
},
"addField": {
"message": "Add field"
"message": "Tambahkan bidang"
},
"add": {
"message": "Add"
"message": "Tambah"
},
"fieldType": {
"message": "Field type"
"message": "Jenis bidang"
},
"fieldLabel": {
"message": "Field label"
"message": "Label bidang"
},
"textHelpText": {
"message": "Use text fields for data like security questions"
"message": "Gunakan bidang teks untuk data seperti pertanyaan keamanan"
},
"hiddenHelpText": {
"message": "Use hidden fields for sensitive data like a password"
"message": "Gunakan bidang tersembunyi untuk data sensitif seperti kata sandi"
},
"checkBoxHelpText": {
"message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email"
"message": "Gunakan kotak centang jika Anda ingin mengisi sebuah kotak centang di formullir, seperti mengingat surel"
},
"linkedHelpText": {
"message": "Use a linked field when you are experiencing autofill issues for a specific website."
"message": "Gunakan bidang tertaut ketika Anda mengalami masalah pengisian otomatis untuk situs web tertentu."
},
"linkedLabelHelpText": {
"message": "Enter the the field's html id, name, aria-label, or placeholder."
"message": "Masukkan id, name, aria-label, atau placeholder html dari bidang."
},
"editField": {
"message": "Edit field"
"message": "Sunting bidang"
},
"editFieldLabel": {
"message": "Edit $LABEL$",
"message": "Sunting $LABEL$",
"placeholders": {
"label": {
"content": "$1",
@ -4522,7 +4519,7 @@
}
},
"deleteCustomField": {
"message": "Delete $LABEL$",
"message": "Hapus $LABEL$",
"placeholders": {
"label": {
"content": "$1",
@ -4531,7 +4528,7 @@
}
},
"fieldAdded": {
"message": "$LABEL$ added",
"message": "$LABEL$ ditambahkan",
"placeholders": {
"label": {
"content": "$1",
@ -4540,7 +4537,7 @@
}
},
"reorderToggleButton": {
"message": "Reorder $LABEL$. Use arrow key to move item up or down.",
"message": "Urutkan $LABEL$. Gunakan tombol panah untuk memindahkan benda ke atas atau ke bawah.",
"placeholders": {
"label": {
"content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4768,155 +4768,191 @@
"description": "Represents the space key in screen reader content as a readable word"
},
"tildeCharacterDescriptor": {
"message": "Tilde",
"message": "Tanda gelombang",
"description": "Represents the ~ key in screen reader content as a readable word"
},
"backtickCharacterDescriptor": {
"message": "Backtick",
"message": "Tanda petik terbalik",
"description": "Represents the ` key in screen reader content as a readable word"
},
"exclamationCharacterDescriptor": {
"message": "Exclamation mark",
"message": "Tanda seru",
"description": "Represents the ! key in screen reader content as a readable word"
},
"atSignCharacterDescriptor": {
"message": "At sign",
"message": "Tanda pada",
"description": "Represents the @ key in screen reader content as a readable word"
},
"hashSignCharacterDescriptor": {
"message": "Hash sign",
"message": "Tanda pagar",
"description": "Represents the # key in screen reader content as a readable word"
},
"dollarSignCharacterDescriptor": {
"message": "Dollar sign",
"message": "Tanda dolar",
"description": "Represents the $ key in screen reader content as a readable word"
},
"percentSignCharacterDescriptor": {
"message": "Percent sign",
"message": "Tanda persen",
"description": "Represents the % key in screen reader content as a readable word"
},
"caretCharacterDescriptor": {
"message": "Caret",
"message": "Tanda sisipan",
"description": "Represents the ^ key in screen reader content as a readable word"
},
"ampersandCharacterDescriptor": {
"message": "Ampersand",
"message": "Tanda dan",
"description": "Represents the & key in screen reader content as a readable word"
},
"asteriskCharacterDescriptor": {
"message": "Asterisk",
"message": "Tanda bintang",
"description": "Represents the * key in screen reader content as a readable word"
},
"parenLeftCharacterDescriptor": {
"message": "Left parenthesis",
"message": "Tanda kurung kiri",
"description": "Represents the ( key in screen reader content as a readable word"
},
"parenRightCharacterDescriptor": {
"message": "Right parenthesis",
"message": "Tanda kurung kanan",
"description": "Represents the ) key in screen reader content as a readable word"
},
"hyphenCharacterDescriptor": {
"message": "Underscore",
"message": "Garis bawah",
"description": "Represents the _ key in screen reader content as a readable word"
},
"underscoreCharacterDescriptor": {
"message": "Hyphen",
"message": "Tanda penghubung",
"description": "Represents the - key in screen reader content as a readable word"
},
"plusCharacterDescriptor": {
"message": "Plus",
"message": "Tanda tambah",
"description": "Represents the + key in screen reader content as a readable word"
},
"equalsCharacterDescriptor": {
"message": "Equals",
"message": "Tanda sama dengan",
"description": "Represents the = key in screen reader content as a readable word"
},
"braceLeftCharacterDescriptor": {
"message": "Left brace",
"message": "Kurung kurawal kiri",
"description": "Represents the { key in screen reader content as a readable word"
},
"braceRightCharacterDescriptor": {
"message": "Right brace",
"message": "Kurung kurawal kanan",
"description": "Represents the } key in screen reader content as a readable word"
},
"bracketLeftCharacterDescriptor": {
"message": "Left bracket",
"message": "Tanda kurung siku kiri",
"description": "Represents the [ key in screen reader content as a readable word"
},
"bracketRightCharacterDescriptor": {
"message": "Right bracket",
"message": "Tanda kurung siku kanan",
"description": "Represents the ] key in screen reader content as a readable word"
},
"pipeCharacterDescriptor": {
"message": "Pipe",
"message": "Garis tegak lurus",
"description": "Represents the | key in screen reader content as a readable word"
},
"backSlashCharacterDescriptor": {
"message": "Back slash",
"message": "Garis miring terbalik",
"description": "Represents the back slash key in screen reader content as a readable word"
},
"colonCharacterDescriptor": {
"message": "Colon",
"message": "Tanda titik dua",
"description": "Represents the : key in screen reader content as a readable word"
},
"semicolonCharacterDescriptor": {
"message": "Semicolon",
"message": "Tanda titik koma",
"description": "Represents the ; key in screen reader content as a readable word"
},
"doubleQuoteCharacterDescriptor": {
"message": "Double quote",
"message": "Tanda petik ganda",
"description": "Represents the double quote key in screen reader content as a readable word"
},
"singleQuoteCharacterDescriptor": {
"message": "Single quote",
"message": "Tanda petik tunggal",
"description": "Represents the ' key in screen reader content as a readable word"
},
"lessThanCharacterDescriptor": {
"message": "Less than",
"message": "Tanda kurang dari",
"description": "Represents the < key in screen reader content as a readable word"
},
"greaterThanCharacterDescriptor": {
"message": "Greater than",
"message": "Tanda lebih besar dari",
"description": "Represents the > key in screen reader content as a readable word"
},
"commaCharacterDescriptor": {
"message": "Comma",
"message": "Tanda koma",
"description": "Represents the , key in screen reader content as a readable word"
},
"periodCharacterDescriptor": {
"message": "Period",
"message": "Tanda titik",
"description": "Represents the . key in screen reader content as a readable word"
},
"questionCharacterDescriptor": {
"message": "Question mark",
"message": "Tanda tanya",
"description": "Represents the ? key in screen reader content as a readable word"
},
"forwardSlashCharacterDescriptor": {
"message": "Forward slash",
"message": "Tanda garis miring ke depan",
"description": "Represents the / key in screen reader content as a readable word"
},
"lowercaseAriaLabel": {
"message": "Lowercase"
"message": "Huruf kecil"
},
"uppercaseAriaLabel": {
"message": "Uppercase"
"message": "Huruf kapital"
},
"generatedPassword": {
"message": "Generated password"
"message": "Kata sandi yang dihasilkan"
},
"compactMode": {
"message": "Compact mode"
"message": "Mode ringkas"
},
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
"message": "Lebar ekstensi"
},
"wide": {
"message": "Wide"
"message": "Lebar"
},
"extraWide": {
"message": "Extra wide"
"message": "Ekstra lebar"
}
}

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Valuta l'estensione"
},
"rateExtensionDesc": {
"message": "Aiutaci lasciando una buona recensione!"
},
"browserNotSupportClipboard": {
"message": "Il tuo browser non supporta copiare dagli appunti. Copialo manualmente."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Mostra il numero di suggerimenti di riempimento automatico sull'icona dell'estensione"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Predefinito del sistema"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

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

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "სისტემურად ნაგულისხმევი"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "ವಿಸ್ತರಣೆಯನ್ನು ರೇಟ್ ಮಾಡಿ"
},
"rateExtensionDesc": {
"message": "ಉತ್ತಮ ವಿಮರ್ಶೆಯೊಂದಿಗೆ ನಮಗೆ ಸಹಾಯ ಮಾಡಲು ದಯವಿಟ್ಟು ಪರಿಗಣಿಸಿ!"
},
"browserNotSupportClipboard": {
"message": "ನಿಮ್ಮ ವೆಬ್ ಬ್ರೌಸರ್ ಸುಲಭವಾದ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ನಕಲು ಮಾಡುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ ಅದನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಕಲಿಸಿ."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -193,10 +193,10 @@
"message": "신원 자동 완성"
},
"fillVerificationCode": {
"message": "Fill verification code"
"message": "인증 코드를 입력하세요"
},
"fillVerificationCodeAria": {
"message": "Fill Verification Code",
"message": "인증 코드를 입력하세요",
"description": "Aria label for the heading displayed the inline menu for totp code autofill"
},
"generatePasswordCopied": {
@ -648,9 +648,6 @@
"rateExtension": {
"message": "확장 프로그램 평가"
},
"rateExtensionDesc": {
"message": "좋은 리뷰를 남겨 저희를 도와주세요!"
},
"browserNotSupportClipboard": {
"message": "사용하고 있는 웹 브라우저가 쉬운 클립보드 복사를 지원하지 않습니다. 직접 복사하세요."
},
@ -2069,11 +2066,11 @@
"message": "보안 비밀번호가 생성되었습니다! 웹사이트에서 비밀번호를 업데이트하는 것도 잊지 마세요."
},
"useGeneratorHelpTextPartOne": {
"message": "생성기를 사용하세요",
"message": "생성기를 사용하",
"description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'"
},
"useGeneratorHelpTextPartTwo": {
"message": "강력한 고유 비밀번호를 만들기 위해서는",
"message": "강력한 고유 비밀번호를 만드세요",
"description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'"
},
"vaultTimeoutAction": {
@ -3181,7 +3178,7 @@
"message": "모든 로그인 방식 보기"
},
"viewAllLoginOptionsV1": {
"message": "View all log in options"
"message": "모든 로그인 옵션 보기"
},
"notificationSentDevice": {
"message": "기기에 알림이 전송되었습니다."
@ -3588,11 +3585,11 @@
"description": "Screen reader text (aria-label) for unlock account button in overlay"
},
"totpCodeAria": {
"message": "Time-based One-Time Password Verification Code",
"message": "TOTP 인증 코드",
"description": "Aria label for the totp code displayed in the inline menu for autofill"
},
"totpSecondsSpanAria": {
"message": "Time remaining before current TOTP expires",
"message": "TOTP 만료까지 남은 시간",
"description": "Aria label for the totp seconds displayed in the inline menu for autofill"
},
"fillCredentialsFor": {
@ -3669,7 +3666,7 @@
"message": "데이터 가져오기 성공"
},
"importSuccessNumberOfItems": {
"message": "A total of $AMOUNT$ items were imported.",
"message": "총 $AMOUNT$개의 항목을 가져왔습니다.",
"placeholders": {
"amount": {
"content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "확장 아이콘에 로그인 자동 완성 제안 수 표시"
},
"showQuickCopyActions": {
"message": "보관함에서 빠른 복사 기능 표시"
},
"systemDefault": {
"message": "시스템 기본 설정"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "베타"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "확장 폭"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Įvertinkite šį plėtinį"
},
"rateExtensionDesc": {
"message": "Apsvarstykite galimybę mums padėti palikdami gerą atsiliepimą!"
},
"browserNotSupportClipboard": {
"message": "Jūsų žiniatinklio naršyklė nepalaiko automatinio kopijavimo. Vietoj to nukopijuokite rankiniu būdu."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Novērtēt paplašinājumu"
},
"rateExtensionDesc": {
"message": "Lūgums apsvērt palīdzēt mums ar labu atsauksmi."
},
"browserNotSupportClipboard": {
"message": "Pārlūks neatbalsta vienkāršo ievietošanu starpliktuvē. Tā vietā tas jāievieto starpliktuvē pašrocīgi."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Paplašinājuma ikonā rādīt pieteikšanās automātiskās aizpildes ieteikumu skaitu"
},
"showQuickCopyActions": {
"message": "Glabātavā rādīt ātrās kopēšanas darbības"
},
"systemDefault": {
"message": "Sistēmas noklusējums"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "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": {
"message": "Paplašinājuma platums"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "എക്സ്റ്റൻഷൻ റേറ്റ് ചെയ്യുക "
},
"rateExtensionDesc": {
"message": "ഒരു നല്ല അവലോകനത്തിന് ഞങ്ങളെ സഹായിക്കുന്നത് പരിഗണിക്കുക!"
},
"browserNotSupportClipboard": {
"message": "നിങ്ങളുടെ ബ്രൌസർ എളുപ്പമുള്ള ക്ലിപ്പ്ബോർഡ് പകർത്തൽ പിന്തുണയ്ക്കത്തില്ല. പകരം അത് സ്വമേധയാ പകർക്കുക ."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "विस्तारकाचे मूल्यांकन करा"
},
"rateExtensionDesc": {
"message": "चांगला अभिप्राय देऊन आम्हाला मदत करा!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Gi denne utvidelsen en vurdering"
},
"rateExtensionDesc": {
"message": "Tenk gjerne på om du vil skrive en anmeldelse om oss!"
},
"browserNotSupportClipboard": {
"message": "Nettleseren din støtter ikke kopiering til utklippstavlen på noe enkelt vis. Prøv å kopiere det manuelt i stedet."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Systemforvalg"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Deze extensie beoordelen"
},
"rateExtensionDesc": {
"message": "Je kunt ons helpen door een goede recensie achter te laten!"
},
"browserNotSupportClipboard": {
"message": "Je webbrowser ondersteunt kopiëren naar plakbord niet. Kopieer handmatig."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Aantal login-autofill-suggesties op het extensie-pictogram weergeven"
},
"showQuickCopyActions": {
"message": "Toon snelle kopieeracties in de kluis"
},
"systemDefault": {
"message": "Systeemstandaard"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Belangrijke mededeling"
},
"setupTwoStepLogin": {
"message": "Tweestapsaanmelding instellen"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Vanaf februari 2025 stuurt Bitwarden een code naar het e-mailadres van je account om inloggen op nieuwe apparaten te verifiëren."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Je kunt tweestapsaanmelding instellen als een alternatieve manier om je account te beschermen of je e-mailadres te veranderen naar een waar je toegang toe hebt."
},
"remindMeLater": {
"message": "Herinner me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Heb je betrouwbare toegang tot je e-mail, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Nee, dat heb ik niet"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Ja, ik heb betrouwbare toegang tot mijn e-mail"
},
"turnOnTwoStepLogin": {
"message": "Tweestapsaanmelding inschakelen"
},
"changeAcctEmail": {
"message": "E-mailadres van het account veranderen"
},
"extensionWidth": {
"message": "Extensiebreedte"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

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

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Avaliar a Extensão"
},
"rateExtensionDesc": {
"message": "Por favor considere ajudar-nos com uma boa avaliação!"
},
"browserNotSupportClipboard": {
"message": "O seu navegador web não suporta cópia para a área de transferência. Em alternativa, copie manualmente."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Mostrar o número de sugestões de preenchimento automático de login no ícone da extensão"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Padrão do sistema"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Avaliar a extensão"
},
"rateExtensionDesc": {
"message": "Por favor, considere ajudar-nos com uma boa avaliação!"
},
"browserNotSupportClipboard": {
"message": "O seu navegador Web não suporta a cópia fácil da área de transferência. Em vez disso, copie manualmente."
},
@ -3821,7 +3818,7 @@
"message": "Chave de acesso"
},
"accessing": {
"message": "A aceder"
"message": "A aceder a"
},
"loggedInExclamation": {
"message": "Sessão iniciada!"
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Mostrar o número de sugestões de preenchimento automático de credenciais no ícone da extensão"
},
"showQuickCopyActions": {
"message": "Mostrar ações de cópia rápida no cofre"
},
"systemDefault": {
"message": "Predefinição do sistema"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Aviso importante"
},
"setupTwoStepLogin": {
"message": "Definir a verificação de dois passos"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "O Bitwarden enviará um código para o e-mail da sua conta para verificar as credenciais de novos dispositivos a partir de fevereiro de 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Pode configurar a verificação de dois passos como forma alternativa de proteger a sua conta ou alterar o seu e-mail para um a que possa aceder."
},
"remindMeLater": {
"message": "Lembrar-me mais tarde"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Tem um acesso fiável ao seu e-mail, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Não, não tenho"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Sim, consigo aceder de forma fiável ao meu e-mail"
},
"turnOnTwoStepLogin": {
"message": "Ativar a verificação de dois passos"
},
"changeAcctEmail": {
"message": "Alterar o e-mail da conta"
},
"extensionWidth": {
"message": "Largura da extensão"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Evaluare extensie"
},
"rateExtensionDesc": {
"message": "Vă rugăm să luați în considerare să ne ajutați cu o recenzie bună!"
},
"browserNotSupportClipboard": {
"message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Оценить расширение"
},
"rateExtensionDesc": {
"message": "Пожалуйста, подумайте о том, чтобы помочь нам хорошим отзывом!"
},
"browserNotSupportClipboard": {
"message": "Ваш браузер не поддерживает копирование данных в буфер обмена. Скопируйте вручную."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Показывать количество вариантов автозаполнения логина на значке расширения"
},
"showQuickCopyActions": {
"message": "Показать быстрые действия копирования в хранилище"
},
"systemDefault": {
"message": "Системный"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Важное уведомление"
},
"setupTwoStepLogin": {
"message": "Настроить двухэтапную аутентификацию"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Начиная с февраля 2025 года Bitwarden будет отправлять код на электронную почту вашего аккаунта для подтверждения авторизации с новых устройств."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "В качестве альтернативного способа защиты учетной записи вы можете настроить двухэтапную аутентификацию или сменить электронную почту на ту, к которой вы можете получить доступ."
},
"remindMeLater": {
"message": "Напомнить позже"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Есть ли у вас надежный доступ к электронной почте $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Нет, не знаю"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Да, я имею надежный доступ к своей электронной почте"
},
"turnOnTwoStepLogin": {
"message": "Включить двухэтапную аутентификацию"
},
"changeAcctEmail": {
"message": "Изменить email аккаунта"
},
"extensionWidth": {
"message": "Ширина расширения"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "දිගුව අනුපාතය"
},
"rateExtensionDesc": {
"message": "කරුණාකර හොඳ සමාලෝචනයකින් අපට උදව් කිරීම ගැන සලකා බලන්න!"
},
"browserNotSupportClipboard": {
"message": "ඔබේ වෙබ් බ්රව්සරය පහසු පසුරු පුවරුවක් පිටපත් කිරීමට සහාය නොදක්වයි. ඒ වෙනුවට එය අතින් පිටපත් කරන්න."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Ohodnotiť rozšírenie"
},
"rateExtensionDesc": {
"message": "Prosíme, zvážte napísanie pozitívnej recenzie!"
},
"browserNotSupportClipboard": {
"message": "Váš webový prehliadač nepodporuje automatické kopírovanie do schránky. Kopírujte manuálne."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Zobraziť počet odporúčaných prihlasovacích údajov na ikone rozšírenia"
},
"showQuickCopyActions": {
"message": "Zobraziť akcie rýchleho kopírovania v trezore"
},
"systemDefault": {
"message": "Predvolené systémom"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Dôležité upozornenie"
},
"setupTwoStepLogin": {
"message": "Nastavenie dvojstupňového prihlásenia"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden vám od februára 2025 pošle na e-mail vášho účtu kód na overenie prihlásenia z nových zariadení."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Ako alternatívny spôsob ochrany svojho účtu môžete nastaviť dvojstupňové prihlásenie alebo zmeniť e-mail na taký, ku ktorému máte prístup."
},
"remindMeLater": {
"message": "Pripomenúť neskôr"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Máte spoľahlivý prístup k svojmu e-mailu, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Nie, nemám"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Áno, mám spoľahlivý prístup k svojmu e-mailu"
},
"turnOnTwoStepLogin": {
"message": "Zapnúť dvojstupňové prihlásenie"
},
"changeAcctEmail": {
"message": "Zmeniť e-mail účtu"
},
"extensionWidth": {
"message": "Šírka rozšírenia"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Ocenite to razširitev"
},
"rateExtensionDesc": {
"message": "Premislite, ali bi nam želeli pomagati z dobro oceno!"
},
"browserNotSupportClipboard": {
"message": "Vaš brskalnik ne podpira enostavnega kopiranja na odložišče. Prosimo, kopirajte ročno."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Оцени овај додатак"
},
"rateExtensionDesc": {
"message": "Молимо вас да размотрите да нам помогнете уз добру оцену!"
},
"browserNotSupportClipboard": {
"message": "Ваш прегледач не подржава једноставно копирање у клипборду. Уместо тога копирајте га ручно."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Прикажи број предлога за ауто-попуњавање пријаве на икони додатка"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Системски подразумевано"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Бета"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Ширина додатка"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Betygsätt tillägget"
},
"rateExtensionDesc": {
"message": "Överväg gärna att skriva en recension om oss!"
},
"browserNotSupportClipboard": {
"message": "Din webbläsare har inte stöd för att enkelt kopiera till urklipp. Kopiera till urklipp manuellt istället."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "Systemstandard"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the extension"
},
"rateExtensionDesc": {
"message": "Please consider helping us out with a good review!"
},
"browserNotSupportClipboard": {
"message": "Your web browser does not support easy clipboard copying. Copy it manually instead."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Rate the Extension"
},
"rateExtensionDesc": {
"message": "โปรดพิจารณา ช่วยเราด้วยการตรวจสอบที่ดี!"
},
"browserNotSupportClipboard": {
"message": "เว็บเบราว์เซอร์ของคุณไม่รองรับการคัดลอกคลิปบอร์ดอย่างง่าย คัดลอกด้วยตนเองแทน"
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -421,10 +421,10 @@
"message": "Son eşitleme:"
},
"passGen": {
"message": "Parola üretici"
"message": "Parola üreteci"
},
"generator": {
"message": "Oluşturucu",
"message": "Üreteç",
"description": "Short for 'credential generator'."
},
"passGenInfo": {
@ -648,9 +648,6 @@
"rateExtension": {
"message": "Uzantıyı değerlendirin"
},
"rateExtensionDesc": {
"message": "İyi bir yorum yazarak bizi destekleyebilirsiniz."
},
"browserNotSupportClipboard": {
"message": "Web tarayıcınız panoya kopyalamayı desteklemiyor. Parolayı elle kopyalayın."
},
@ -844,7 +841,7 @@
"message": "Bitwarden can store and fill 2-step verification codes. Select the camera icon to take a screenshot of this website's authenticator QR code, or copy and paste the key into this field."
},
"learnMoreAboutAuthenticators": {
"message": "Learn more about authenticators"
"message": "Kimlik doğrulayıcılar hakkında bilgi alın"
},
"copyTOTP": {
"message": "Kimlik doğrulama anahtarını kopyala (TOTP)"
@ -1327,10 +1324,10 @@
"message": "Kimlik doğrulama uygulamanızdaki 6 haneli doğrulama kodunu girin."
},
"authenticationTimeout": {
"message": "Authentication timeout"
"message": "Kimlik doğrulama zaman aşımı"
},
"authenticationSessionTimedOut": {
"message": "The authentication session timed out. Please restart the login process."
"message": "Kimlik doğrulama oturumu zaman aşımına uğradı. Lütfen giriş sürecini yeniden başlatın."
},
"enterVerificationCodeEmail": {
"message": "$EMAIL$ adresine e-postayla gönderdiğimiz 6 haneli doğrulama kodunu girin.",
@ -1435,7 +1432,7 @@
"message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com"
},
"selfHostedCustomEnvHeader": {
"message": "For advanced configuration, you can specify the base URL of each service independently."
"message": "İleri düzey yapılandırma için her hizmetin taban URL'sini bağımsız olarak belirleyebilirsiniz."
},
"selfHostedEnvFormInvalid": {
"message": "You must add either the base Server URL or at least one custom environment."
@ -3181,7 +3178,7 @@
"message": "Tüm giriş seçeneklerini gör"
},
"viewAllLoginOptionsV1": {
"message": "View all log in options"
"message": "Tüm giriş seçeneklerini gör"
},
"notificationSentDevice": {
"message": "Cihazınıza bir bildirim gönderildi."
@ -4318,13 +4315,13 @@
"message": "Filtreler"
},
"filterVault": {
"message": "Filter vault"
"message": "Kasayı filtrele"
},
"filterApplied": {
"message": "One filter applied"
"message": "1 filtre uygulandı"
},
"filterAppliedPlural": {
"message": "$COUNT$ filters applied",
"message": "$COUNT$ filtre uygulandı",
"placeholders": {
"count": {
"content": "$1",
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Otomatik öneri sayısını uzantı simgesinde göster"
},
"showQuickCopyActions": {
"message": "Kasada hızlı kopyalama komutlarını göster"
},
"systemDefault": {
"message": "Sistem varsayılanı"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Önemli uyarı"
},
"setupTwoStepLogin": {
"message": "İki adımlı girişi ayarla"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Şubat 2025 itibarıyla Bitwarden, yeni cihazlardan yeni girişleri doğrulamanız için e-posta adresinize bir kod gönderecektir."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Hesabınızı korumanın alternatif bir yolu olarak iki adımlı girişi etkinleştirebilirsiniz. Aksi halde e-posta adresinizin doğru olduğundan emin olmalısınız."
},
"remindMeLater": {
"message": "Daha sonra hatırlat"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "$EMAIL$ adresinize sağlıklı bir şekilde erişebiliyor musunuz?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Hayır, erişemiyorum"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Evet, e-postalarıma sağlıklı bir şekilde erişebiliyorum"
},
"turnOnTwoStepLogin": {
"message": "İki adımlı girişi etkinleştir"
},
"changeAcctEmail": {
"message": "Hesap e-postasını değiştir"
},
"extensionWidth": {
"message": "Uzantı genişliği"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Оцінити розширення"
},
"rateExtensionDesc": {
"message": "Розкажіть іншим про свої враження, залишивши хороший відгук!"
},
"browserNotSupportClipboard": {
"message": "Ваш браузер не підтримує копіювання даних в буфер обміну. Скопіюйте вручну."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Показувати кількість пропозицій автозаповнення на піктограмі розширення"
},
"showQuickCopyActions": {
"message": "Показати дії швидкого копіювання у сховищі"
},
"systemDefault": {
"message": "Типово (система)"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Бета"
},
"importantNotice": {
"message": "Важлива інформація"
},
"setupTwoStepLogin": {
"message": "Налаштувати двоетапну перевірку"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden надсилатиме код підтвердження на електронну пошту вашого облікового запису під час входу з нових пристроїв, починаючи з лютого 2025 року."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "Ви можете налаштувати двоетапну перевірку як альтернативний спосіб захисту свого облікового запису, або змінити електронну пошту на таку, до якої ви маєте доступ."
},
"remindMeLater": {
"message": "Нагадати пізніше"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Ви маєте постійний доступ до своєї електронної пошти $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "Ні, не маю"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Так, я маю постійний доступ до своєї електронної пошти"
},
"turnOnTwoStepLogin": {
"message": "Увімкнути двоетапну перевірку"
},
"changeAcctEmail": {
"message": "Змінити адресу е-пошти"
},
"extensionWidth": {
"message": "Ширина вікна розширення"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "Đánh giá tiện ích mở rộng"
},
"rateExtensionDesc": {
"message": "Xin hãy nhìn nhận và đánh giá tốt cho chúng tôi!"
},
"browserNotSupportClipboard": {
"message": "Trình duyệt web của bạn không hỗ trợ dễ dàng sao chép bộ nhớ tạm. Bạn có thể sao chép nó theo cách thủ công để thay thế."
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

View File

@ -648,9 +648,6 @@
"rateExtension": {
"message": "为本扩展打分"
},
"rateExtensionDesc": {
"message": "请给我们好评!"
},
"browserNotSupportClipboard": {
"message": "您的浏览器不支持剪贴板简单复制,请手动复制。"
},
@ -2371,7 +2368,7 @@
"message": "限制查看"
},
"limitSendViewsHint": {
"message": "达到限额后,任何人无法查看此 Send。",
"message": "达到限额后,任何人无法查看此 Send。",
"description": "Displayed under the limit views field on Send"
},
"limitSendViewsCount": {
@ -3557,7 +3554,7 @@
"message": "切换侧边导航"
},
"skipToContent": {
"message": "跳转到正文"
"message": "跳转到内容"
},
"bitwardenOverlayButton": {
"message": "Bitwarden 自动填充菜单按钮",
@ -4501,7 +4498,7 @@
"message": "对于如密码之类的敏感数据,请使用隐藏型字段"
},
"checkBoxHelpText": {
"message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框"
"message": "如果您想自动勾选表单复选框(例如记住电子邮件地址),请使用复选框"
},
"linkedHelpText": {
"message": "当您处理特定网站的自动填充问题时,请使用链接型字段。"
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "在扩展图标上显示自动填充建议的登录的数量"
},
"showQuickCopyActions": {
"message": "在密码库上显示快速复制操作"
},
"systemDefault": {
"message": "跟随系统"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta 版"
},
"importantNotice": {
"message": "重要通知"
},
"setupTwoStepLogin": {
"message": "设置两步登录"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "从 2025 年 02 月开始Bitwarden 将向您的账户电子邮件地址发送一个代码,以验证从新设备上的登录。"
},
"newDeviceVerificationNoticeContentPage2": {
"message": "您可以设置两步登录作为保护账户的替代方法,或将您的电子邮件地址更改为您可以访问的电子邮件地址。"
},
"remindMeLater": {
"message": "稍后提醒我"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "您可以可靠地访问您的电子邮件地址 $EMAIL$ 吗?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "不,我不能"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "是的,我可以可靠地访问我的电子邮件地址"
},
"turnOnTwoStepLogin": {
"message": "开启两步登录"
},
"changeAcctEmail": {
"message": "更改账户电子邮件"
},
"extensionWidth": {
"message": "扩展宽度"
},

View File

@ -248,7 +248,7 @@
"message": "請求密碼提示"
},
"enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": {
"message": "輸入您帳的電子郵件,您的密碼提示會傳送給您"
"message": "輸入您帳的電子郵件,您的密碼提示會傳送給您"
},
"passwordHint": {
"message": "密碼提示"
@ -648,9 +648,6 @@
"rateExtension": {
"message": "為本套件評分"
},
"rateExtensionDesc": {
"message": "請給予我們好評!"
},
"browserNotSupportClipboard": {
"message": "您的瀏覽器不支援剪貼簿簡單複製,請手動複製。"
},
@ -4679,6 +4676,9 @@
"showNumberOfAutofillSuggestions": {
"message": "Show number of login autofill suggestions on extension icon"
},
"showQuickCopyActions": {
"message": "Show quick copy actions on Vault"
},
"systemDefault": {
"message": "System default"
},
@ -4910,6 +4910,42 @@
"beta": {
"message": "Beta"
},
"importantNotice": {
"message": "Important notice"
},
"setupTwoStepLogin": {
"message": "Set up two-step login"
},
"newDeviceVerificationNoticeContentPage1": {
"message": "Bitwarden will send a code to your account email to verify logins from new devices starting in February 2025."
},
"newDeviceVerificationNoticeContentPage2": {
"message": "You can set up two-step login as an alternative way to protect your account or change your email to one you can access."
},
"remindMeLater": {
"message": "Remind me later"
},
"newDeviceVerificationNoticePageOneFormContent": {
"message": "Do you have reliable access to your email, $EMAIL$?",
"placeholders": {
"email": {
"content": "$1",
"example": "your_name@email.com"
}
}
},
"newDeviceVerificationNoticePageOneEmailAccessNo": {
"message": "No, I do not"
},
"newDeviceVerificationNoticePageOneEmailAccessYes": {
"message": "Yes, I can reliably access my email"
},
"turnOnTwoStepLogin": {
"message": "Turn on two-step login"
},
"changeAcctEmail": {
"message": "Change account email"
},
"extensionWidth": {
"message": "Extension width"
},

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>
`;
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`] = `
<div
class="inline-menu-list-container theme_light"

View File

@ -140,6 +140,47 @@ describe("AutofillInlineMenuList", () => {
expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot();
});
it("renders correctly when there are multiple TOTP elements with username displayed", async () => {
const totpCipher1 = createAutofillOverlayCipherDataMock(1, {
type: CipherType.Login,
login: {
totp: "123456",
totpField: true,
username: "user1",
},
});
const totpCipher2 = createAutofillOverlayCipherDataMock(2, {
type: CipherType.Login,
login: {
totp: "654321",
totpField: true,
username: "user2",
},
});
postWindowMessage(
createInitAutofillInlineMenuListMessageMock({
inlineMenuFillType: CipherType.Login,
ciphers: [totpCipher1, totpCipher2],
}),
);
await flushPromises();
const checkSubtitleElement = (username: string) => {
const subtitleElement = autofillInlineMenuList["inlineMenuListContainer"].querySelector(
`span.cipher-subtitle[title="${username}"]`,
);
expect(subtitleElement).not.toBeNull();
expect(subtitleElement.textContent).toBe(username);
};
checkSubtitleElement("user1");
checkSubtitleElement("user2");
expect(autofillInlineMenuList["inlineMenuListContainer"]).toMatchSnapshot();
});
it("creates the view for a totp field", () => {
postWindowMessage(
createInitAutofillInlineMenuListMessageMock({

View File

@ -1163,7 +1163,7 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
}
if (cipher.login?.totpField && cipher.login?.totp) {
return this.buildTotpElement(cipher.login?.totp);
return this.buildTotpElement(cipher.login?.totp, cipher.login?.username);
}
const subTitleText = this.getSubTitleText(cipher);
const cipherSubtitleElement = this.buildCipherSubtitleElement(subTitleText);
@ -1174,13 +1174,24 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
return cipherDetailsElement;
}
/**
* Checks if there is more than one TOTP element being displayed.
*
* @returns {boolean} - Returns true if more than one TOTP element is displayed, otherwise false.
*/
private multipleTotpElements(): boolean {
return (
this.ciphers.filter((cipher) => cipher.login?.totpField && cipher.login?.totp).length > 1
);
}
/**
* Builds a TOTP element for a given TOTP code.
*
* @param totp - The TOTP code to display.
*/
private buildTotpElement(totpCode: string): HTMLDivElement | null {
private buildTotpElement(totpCode: string, username?: string): HTMLDivElement | null {
if (!totpCode) {
return null;
}
@ -1196,12 +1207,17 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement {
containerElement.appendChild(totpHeading);
const subtitleElement = document.createElement("span");
subtitleElement.classList.add("cipher-subtitle");
subtitleElement.textContent = formattedTotpCode;
subtitleElement.setAttribute("aria-label", this.getTranslation("totpCodeAria"));
subtitleElement.setAttribute("data-testid", "totp-code");
containerElement.appendChild(subtitleElement);
if (this.multipleTotpElements() && username) {
const usernameSubtitle = this.buildCipherSubtitleElement(username);
containerElement.appendChild(usernameSubtitle);
}
const totpCodeSpan = document.createElement("span");
totpCodeSpan.classList.add("cipher-subtitle");
totpCodeSpan.textContent = formattedTotpCode;
totpCodeSpan.setAttribute("aria-label", this.getTranslation("totpCodeAria"));
totpCodeSpan.setAttribute("data-testid", "totp-code");
containerElement.appendChild(totpCodeSpan);
return containerElement;
}

View File

@ -739,7 +739,6 @@ export default class MainBackground {
this.accountService,
this.kdfConfigService,
this.keyService,
this.apiService,
);
this.passwordStrengthService = new PasswordStrengthService();
@ -1313,23 +1312,6 @@ export default class MainBackground {
await this.initOverlayAndTabsBackground();
if (flagEnabled("sdk")) {
// Warn if the SDK for some reason can't be initialized
let supported = false;
let error: Error;
try {
supported = await firstValueFrom(this.sdkService.supported$);
} catch (e) {
error = e;
}
if (!supported) {
this.sdkService
.failedToInitialize("background", error)
.catch((e) => this.logService.error(e));
}
}
return new Promise<void>((resolve) => {
setTimeout(async () => {
await this.refreshBadge();

View File

@ -44,6 +44,9 @@ page looks nice when the extension is popped out.
- `above-scroll-area`
- When the page content overflows, this content will be "stuck" to the top of the page upon
scrolling.
- `full-width-notice`
- Similar to `above-scroll-area`, this content will display before `above-scroll-area` without
container margin or padding.
- default
- Whatever content you want in `main`.
@ -108,6 +111,30 @@ Common interactive elements to insert into the `end` slot are:
- "Add" button: this can be accomplished with the Button component and any custom functionality for
that particular page
### Notice
<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 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 {
AvatarModule,
BadgeModule,
BannerModule,
ButtonModule,
I18nMockService,
IconButtonModule,
@ -125,6 +126,18 @@ class MockCurrentAccountComponent {}
})
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({
selector: "mock-vault-page",
template: `
@ -298,6 +311,8 @@ export default {
CommonModule,
RouterModule,
ExtensionContainerComponent,
MockBannerComponent,
MockSearchComponent,
MockVaultSubpageComponent,
MockVaultPageComponent,
MockSendPageComponent,
@ -517,6 +532,22 @@ export const TransparentHeader: Story = {
}),
};
export const Notice: Story = {
render: (args) => ({
props: args,
template: /* HTML */ `
<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 = {
render: (args) => ({
props: args,

View File

@ -1,5 +1,6 @@
<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">
<ng-content select="[slot=full-width-notice]"></ng-content>
<div
#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"

View File

@ -2,7 +2,6 @@
// @ts-strict-ignore
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory";
import { RecoverableSDKError } from "@bitwarden/common/platform/services/sdk/default-sdk.service";
import type { BitwardenClient } from "@bitwarden/sdk-internal";
import { BrowserApi } from "../../browser/browser-api";
@ -72,42 +71,14 @@ export class BrowserSdkClientFactory implements SdkClientFactory {
...args: ConstructorParameters<typeof BitwardenClient>
): Promise<BitwardenClient> {
const startTime = performance.now();
try {
await loadWithTimeout();
} catch (error) {
throw new Error(`Failed to load: ${error.message}`);
}
await load();
const endTime = performance.now();
const elapsed = Math.round((endTime - startTime) / 1000);
const instance = (globalThis as any).init_sdk(...args);
this.logService.info("WASM SDK loaded in", Math.round(endTime - startTime), "ms");
// If it takes 3 seconds or more to load, we want to capture it.
if (elapsed >= 3) {
throw new RecoverableSDKError(instance, elapsed);
}
return instance;
}
}
const loadWithTimeout = async () => {
return new Promise<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,
} from "@bitwarden/angular/auth/guards";
import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard";
import { extensionRefreshRedirect } from "@bitwarden/angular/utils/extension-refresh-redirect";
import { extensionRefreshSwap } from "@bitwarden/angular/utils/extension-refresh-swap";
import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards";
import {
@ -26,7 +25,7 @@ import {
LoginComponent,
LoginSecondaryContentComponent,
LockIcon,
LockV2Component,
LockComponent,
LoginViaAuthRequestComponent,
PasswordHintComponent,
RegistrationFinishComponent,
@ -60,7 +59,6 @@ import {
} from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component";
import { HintComponent } from "../auth/popup/hint.component";
import { HomeComponent } from "../auth/popup/home.component";
import { LockComponent } from "../auth/popup/lock.component";
import { LoginDecryptionOptionsComponentV1 } from "../auth/popup/login-decryption-options/login-decryption-options-v1.component";
import { LoginComponentV1 } from "../auth/popup/login-v1.component";
import { LoginViaAuthRequestComponentV1 } from "../auth/popup/login-via-auth-request-v1.component";
@ -88,8 +86,6 @@ import BrowserPopupUtils from "../platform/popup/browser-popup-utils";
import { popupRouterCacheGuard } from "../platform/popup/view-cache/popup-router-cache.service";
import { CredentialGeneratorHistoryComponent } from "../tools/popup/generator/credential-generator-history.component";
import { CredentialGeneratorComponent } from "../tools/popup/generator/credential-generator.component";
import { GeneratorComponent } from "../tools/popup/generator/generator.component";
import { PasswordGeneratorHistoryComponent } from "../tools/popup/generator/password-generator-history.component";
import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.component";
import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component";
import { SendTypeComponent } from "../tools/popup/send/send-type.component";
@ -105,10 +101,8 @@ import { clearVaultStateGuard } from "../vault/guards/clear-vault-state.guard";
import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component";
import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component";
import { CollectionsComponent } from "../vault/popup/components/vault/collections.component";
import { CurrentTabComponent } from "../vault/popup/components/vault/current-tab.component";
import { PasswordHistoryComponent } from "../vault/popup/components/vault/password-history.component";
import { ShareComponent } from "../vault/popup/components/vault/share.component";
import { VaultFilterComponent } from "../vault/popup/components/vault/vault-filter.component";
import { VaultItemsComponent } from "../vault/popup/components/vault/vault-items.component";
import { VaultV2Component } from "../vault/popup/components/vault/vault-v2.component";
import { ViewComponent } from "../vault/popup/components/vault/view.component";
@ -130,7 +124,6 @@ import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.c
import { RouteElevation } from "./app-routing.animations";
import { debounceNavigationGuard } from "./services/debounce-navigation.service";
import { TabsV2Component } from "./tabs-v2.component";
import { TabsComponent } from "./tabs.component";
/**
* Data properties acceptable for use in extension route objects
@ -176,13 +169,6 @@ const routes: Routes = [
canActivate: [fido2AuthGuard],
data: { elevation: 1 } satisfies RouteDataProperties,
}),
{
path: "lock",
component: LockComponent,
canActivate: [lockGuard()],
canMatch: [extensionRefreshRedirect("/lockV2")],
data: { elevation: 1, doNotSaveUrl: true } satisfies RouteDataProperties,
},
...twofactorRefactorSwap(
TwoFactorComponent,
AnonLayoutWrapperComponent,
@ -342,15 +328,16 @@ const routes: Routes = [
}),
{
path: "generator",
component: GeneratorComponent,
component: CredentialGeneratorComponent,
canActivate: [authGuard],
data: { elevation: 0 } satisfies RouteDataProperties,
},
...extensionRefreshSwap(PasswordGeneratorHistoryComponent, CredentialGeneratorHistoryComponent, {
{
path: "generator-history",
component: CredentialGeneratorHistoryComponent,
canActivate: [authGuard],
data: { elevation: 1 } satisfies RouteDataProperties,
}),
},
{
path: "import",
component: ImportBrowserV2Component,
@ -653,8 +640,8 @@ const routes: Routes = [
],
},
{
path: "lockV2",
canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh), lockGuard()],
path: "lock",
canActivate: [lockGuard()],
data: {
pageIcon: LockIcon,
pageTitle: {
@ -665,19 +652,19 @@ const routes: Routes = [
elevation: 1,
/**
* 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.
*
* Also, this prevents a routing loop when using biometrics to unlock the vault in MV2 (Firefox),
* locking up the browser (https://bitwarden.atlassian.net/browse/PM-16116). This involves the
* `popup-router-cache.service` pushing the `lockV2` route to the history.
* `popup-router-cache.service` pushing the `lock` route to the history.
*/
doNotSaveUrl: true,
} satisfies ExtensionAnonLayoutWrapperData & RouteDataProperties,
children: [
{
path: "",
component: LockV2Component,
component: LockComponent,
},
],
},
@ -748,8 +735,9 @@ const routes: Routes = [
},
],
},
...extensionRefreshSwap(TabsComponent, TabsV2Component, {
{
path: "tabs",
component: TabsV2Component,
data: { elevation: 0 } satisfies RouteDataProperties,
children: [
{
@ -759,23 +747,21 @@ const routes: Routes = [
},
{
path: "current",
component: CurrentTabComponent,
canActivate: [authGuard],
canMatch: [extensionRefreshRedirect("/tabs/vault")],
data: { elevation: 0 } satisfies RouteDataProperties,
runGuardsAndResolvers: "always",
redirectTo: "/tabs/vault",
},
...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, {
{
path: "vault",
component: VaultV2Component,
canActivate: [authGuard, NewDeviceVerificationNoticeGuard],
canDeactivate: [clearVaultStateGuard],
data: { elevation: 0 } satisfies RouteDataProperties,
}),
...extensionRefreshSwap(GeneratorComponent, CredentialGeneratorComponent, {
},
{
path: "generator",
component: CredentialGeneratorComponent,
canActivate: [authGuard],
data: { elevation: 0 } satisfies RouteDataProperties,
}),
},
{
path: "settings",
component: SettingsV2Component,
@ -788,7 +774,7 @@ const routes: Routes = [
data: { elevation: 0 } satisfies RouteDataProperties,
}),
],
}),
},
{
path: "account-switcher",
component: AccountSwitcherComponent,

View File

@ -1,7 +1,6 @@
// FIXME: Update this file to be type safe and remove this and next line
// @ts-strict-ignore
import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit, inject } from "@angular/core";
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
import { NavigationEnd, Router, RouterOutlet } from "@angular/router";
import { Subject, takeUntil, firstValueFrom, concatMap, filter, tap } from "rxjs";
@ -11,9 +10,7 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { SdkService } from "@bitwarden/common/platform/abstractions/sdk/sdk.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { MessageListener } from "@bitwarden/common/platform/messaging";
import { UserId } from "@bitwarden/common/types/guid";
@ -25,7 +22,6 @@ import {
ToastService,
} from "@bitwarden/components";
import { flagEnabled } from "../platform/flags";
import { PopupCompactModeService } from "../platform/popup/layout/popup-compact-mode.service";
import { PopupWidthService } from "../platform/popup/layout/popup-width.service";
import { PopupViewCacheService } from "../platform/popup/view-cache/popup-view-cache.service";
@ -72,31 +68,7 @@ export class AppComponent implements OnInit, OnDestroy {
private toastService: ToastService,
private accountService: AccountService,
private animationControlService: AnimationControlService,
private logService: LogService,
private sdkService: SdkService,
) {
if (flagEnabled("sdk")) {
// Warn if the SDK for some reason can't be initialized
this.sdkService.supported$.pipe(takeUntilDestroyed()).subscribe({
next: (supported) => {
if (!supported) {
this.logService.debug("SDK is not supported");
this.sdkService
.failedToInitialize("popup", undefined)
.catch((e) => this.logService.error(e));
} else {
this.logService.debug("SDK is supported");
}
},
error: (e: unknown) => {
this.sdkService
.failedToInitialize("popup", e as Error)
.catch((e) => this.logService.error(e));
this.logService.error(e);
},
});
}
}
) {}
async ngOnInit() {
initPopupClosedListener();

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

View File

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

View File

@ -18,14 +18,14 @@
"license": "SEE LICENSE IN LICENSE.txt",
"scripts": {
"clean": "rimraf dist",
"build:oss": "webpack",
"build:oss": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack",
"build:oss:debug": "npm run build:oss && node --inspect ./build/bw.js",
"build:oss:watch": "webpack --watch",
"build:oss:prod": "cross-env NODE_ENV=production webpack",
"build:oss:prod:watch": "cross-env NODE_ENV=production webpack --watch",
"debug": "node --inspect ./build/bw.js",
"publish:npm": "npm run build:oss:prod && npm publish --access public",
"build:bit": "webpack -c ../../bitwarden_license/bit-cli/webpack.config.js",
"build:bit": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-cli/webpack.config.js",
"build:bit:debug": "npm run build:bit && node --inspect ./build/bw.js",
"build:bit:watch": "webpack --watch -c ../../bitwarden_license/bit-cli/webpack.config.js",
"build:bit:prod": "cross-env NODE_ENV=production npm run build:bit",

View File

@ -550,7 +550,6 @@ export class ServiceContainer {
this.accountService,
this.kdfConfigService,
this.keyService,
this.apiService,
customUserAgent,
);
@ -864,19 +863,5 @@ export class ServiceContainer {
}
this.inited = true;
if (flagEnabled("sdk")) {
// Warn if the SDK for some reason can't be initialized
let supported = false;
try {
supported = await firstValueFrom(this.sdkService.supported$);
} catch (e) {
// Do nothing.
}
if (!supported) {
this.sdkService.failedToInitialize("cli").catch((e) => this.logService.error(e));
}
}
}
}

View File

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

View File

@ -1,5 +1,5 @@
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");
}

View File

@ -1,5 +1,5 @@
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");
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -42,7 +42,7 @@ pub async fn get_password<'a>(service: &str, account: &str) -> Result<String> {
.to_string_lossy()
};
Ok(String::from(password))
Ok(password)
}
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 = "windows", 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