diff --git a/.eslintrc.json b/.eslintrc.json index fae64d869e8..8485a9f30a0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -96,6 +96,39 @@ } ] } - ] - } + ], + "no-restricted-imports": ["error", { "patterns": ["src/**/*"] }] + }, + "overrides": [ + { + "files": ["libs/common/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/common/*", "src/**/*"] }] + } + }, + { + "files": ["libs/components/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/components/*", "src/**/*"] }] + } + }, + { + "files": ["libs/angular/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/angular/*", "src/**/*"] }] + } + }, + { + "files": ["libs/node/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/node/*", "src/**/*"] }] + } + }, + { + "files": ["libs/electron/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/electron/*", "src/**/*"] }] + } + } + ] } diff --git a/.github/workflows/automatic-issue-responses.yml b/.github/workflows/automatic-issue-responses.yml index 970532ab1ea..8fb18f6b1d8 100644 --- a/.github/workflows/automatic-issue-responses.yml +++ b/.github/workflows/automatic-issue-responses.yml @@ -45,14 +45,14 @@ jobs: Please contact us using our [Contact page](https://bitwarden.com/contact). You can include a link to this issue in the message content. - Alternatively, you can also search for an answer in our [help documentation](https://bitwarden.com/help/) or get help from other Bitwarden users on our [community forums](https://community.bitwarden.com/c/support/). The issue here will be closed. + Alternatively, you can also search for an answer in our [help documentation](https://bitwarden.com/help/) or get help from other Bitwarden users on our [community forums](https://community.bitwarden.com/c/support/). The issue here will now be closed. # Resolved - if: github.event.label.name == 'resolved' name: Resolved uses: peter-evans/close-issue@849549ba7c3a595a064c4b2c56f206ee78f93515 # v2.0.0 with: comment: | - We’ve closed this issue, as it appears the original problem has been resolved. If this happens again or continues to be an problem, please respond to this issue with any additional detail to assist with reproduction and root cause analysis. + We’ve closed this issue, as it appears the original problem has been resolved. If this happens again or continues to be a problem, please respond to this issue with any additional detail to assist with reproduction and root cause analysis. # Stale - if: github.event.label.name == 'stale' name: Stale diff --git a/.github/workflows/build-web-ee.yml b/.github/workflows/build-web-ee.yml deleted file mode 100644 index 678ccd83200..00000000000 --- a/.github/workflows/build-web-ee.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Build Web for EE - -on: - workflow_dispatch: - -jobs: - stub: - name: stub - runs-on: ubuntu-20.04 - steps: - - name: Checkout repo - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 - - - name: Stub - run: print 'This is only a stub' diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 94396b75709..675f5bbc55a 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -80,6 +80,8 @@ jobs: npm_command: "dist:bit:selfhost" - name: "cloud-QA" npm_command: "build:bit:qa" + - name: "ee" + npm_command: "build:bit:ee" steps: - name: Checkout repo @@ -234,12 +236,20 @@ jobs: - name: Log out of Docker run: docker logout - build-qa: - name: Build Docker images for QA environment + build-containers: + name: Build Docker images for bitwardenqa runs-on: ubuntu-22.04 needs: - setup - build-artifacts + strategy: + fail-fast: false + matrix: + include: + - artifact_name: cloud-QA + image_name: web + - artifact_name: ee + image_name: web-ee env: _VERSION: ${{ needs.setup.outputs.version }} steps: @@ -254,17 +264,17 @@ jobs: - name: Log into container registry run: az acr login -n bitwardenqa - - name: Download cloud-QA artifact + - name: Download ${{ matrix.artifact_name }} artifact uses: actions/download-artifact@fb598a63ae348fa914e94cd0ff38f362e927b741 with: - name: web-${{ env._VERSION }}-cloud-QA.zip + name: web-${{ env._VERSION }}-${{ matrix.artifact_name }}.zip path: apps/web/build - name: Build Docker image working-directory: apps/web run: | docker --version - docker build -t bitwardenqa.azurecr.io/web . + docker build -t bitwardenqa.azurecr.io/${{ matrix.image_name }} . - name: Get image tag id: image-tag @@ -286,25 +296,30 @@ jobs: - name: Tag image env: IMAGE_TAG: ${{ steps.image-tag.outputs.value }} - run: docker tag bitwardenqa.azurecr.io/web "bitwardenqa.azurecr.io/web:$IMAGE_TAG" + IMAGE_NAME: ${{ matrix.image_name }} + run: docker tag bitwardenqa.azurecr.io/$IMAGE_NAME "bitwardenqa.azurecr.io/$IMAGE_NAME:$IMAGE_TAG" - name: Tag dev if: github.ref == 'refs/heads/master' - run: docker tag bitwardenqa.azurecr.io/web bitwardenqa.azurecr.io/web:dev + env: + IMAGE_NAME: ${{ matrix.image_name }} + run: docker tag bitwardenqa.azurecr.io/$IMAGE_NAME "bitwardenqa.azurecr.io/$IMAGE_NAME:dev" - name: Push image env: IMAGE_TAG: ${{ steps.image-tag.outputs.value }} - run: docker push "bitwardenqa.azurecr.io/web:$IMAGE_TAG" + IMAGE_NAME: ${{ matrix.image_name }} + run: docker push "bitwardenqa.azurecr.io/$IMAGE_NAME:$IMAGE_TAG" - name: Push dev images if: github.ref == 'refs/heads/master' - run: docker push bitwardenqa.azurecr.io/web:dev + env: + IMAGE_NAME: ${{ matrix.image_name }} + run: docker push "bitwardenqa.azurecr.io/$IMAGE_NAME:dev" - name: Log out of Docker run: docker logout - crowdin-push: name: Crowdin Push if: github.ref == 'refs/heads/master' @@ -355,8 +370,8 @@ jobs: - cloc - setup - build-artifacts + - build-containers - build-commercial-selfhost-image - - build-qa - crowdin-push steps: - name: Check if any job failed diff --git a/.gitignore b/.gitignore index 0774f26cc3d..d7f237aa071 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ coverage # Storybook documentation.json .eslintcache +storybook-static diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index e7f0f7a8015..5805387d8ae 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -38,7 +38,7 @@ "message": "Асноўны пароль" }, "masterPassDesc": { - "message": "Асноўны пароль — ключ да вашага бяспечнага сховішча. Ён вельмі важны, таму не забывайце яго. Аднавіць асноўны пароль немагчыма." + "message": "Асноўны пароль — гэта ключ, які выкарыстоўваецца для доступу да вашага сховішча. Ён вельмі важны, таму не забывайце яго. Аднавіць асноўны пароль немагчыма ў выпадку, калі вы яго забылі." }, "masterPassHintDesc": { "message": "Падказка да асноўнага пароля можа дапамагчы вам успомніць яго, калі вы яго забылі." @@ -107,7 +107,7 @@ "message": "Увайсці ў сховішча" }, "autoFillInfo": { - "message": "Няма ўліковых даных, даступных для аўтазапаўнення ў бягучую ўкладку браўзера." + "message": "Для бягучай укладкі браўзера адсутнічаюць лагіны даступныя для аўтазапаўнення." }, "addLogin": { "message": "Дадаць лагін" @@ -137,7 +137,7 @@ "message": "Код адпраўлены" }, "verificationCode": { - "message": "Код праверкі" + "message": "Праверачны код" }, "confirmIdentity": { "message": "Пацвердзіце сваю асобу для працягу." @@ -190,13 +190,13 @@ "message": "Папкі" }, "noFolders": { - "message": "Няма элементаў для паказу." + "message": "У спісе адсутнічаюць папкі." }, "helpFeedback": { "message": "Даведка і зваротная сувязь" }, "sync": { - "message": "Сінхранізаваць" + "message": "Сінхранізацыя" }, "syncVaultNow": { "message": "Сінхранізаваць сховішча зараз" @@ -227,7 +227,7 @@ "message": "Генерыраваць пароль" }, "regeneratePassword": { - "message": "Стварыць новы пароль" + "message": "Паўторна генерыраваць пароль" }, "options": { "message": "Параметры" @@ -276,10 +276,10 @@ "message": "Рэдагаваць" }, "view": { - "message": "Выгляд" + "message": "Прагляд" }, "noItemsInList": { - "message": "Няма элементаў для паказу." + "message": "У спісе адсутнічаюць элементы." }, "itemInformation": { "message": "Звесткі аб элеменце" @@ -312,7 +312,7 @@ "message": "Выдаліць элемент" }, "viewItem": { - "message": "Прагляд элемента" + "message": "Прагледзець элемент" }, "launch": { "message": "Запусціць" @@ -333,7 +333,7 @@ "message": "Ацаніць пашырэнне" }, "rateExtensionDesc": { - "message": "Падумайце аб тым, каб дапамагчы нам, напісаўшы добрым водгукам!" + "message": "Падумайце пра тое, каб дапамагчы нам добрым водгукам!" }, "browserNotSupportClipboard": { "message": "Ваш вэб-браўзер не падтрымлівае капіяванне даных у буфер абмену. Скапіюйце іх уручную." @@ -342,7 +342,7 @@ "message": "Праверыць асобу" }, "yourVaultIsLocked": { - "message": "Ваша сховішча заблакіравана. Каб працягнуць, увядзіце асноўны пароль." + "message": "Ваша сховішча заблакіравана. Каб працягнуць, пацвердзіце сваю асобу." }, "unlock": { "message": "Разблакіраваць" @@ -364,7 +364,7 @@ "message": "Памылковы асноўны пароль" }, "vaultTimeout": { - "message": "Тайм-аўт сховішча" + "message": "Час чакання сховішча" }, "lockNow": { "message": "Заблакіраваць зараз" @@ -436,13 +436,13 @@ "message": "Пацвярджэнне асноўнага пароля не супадае." }, "newAccountCreated": { - "message": "Ваш уліковы запіс створаны! Вы можаце ўвайсці." + "message": "Ваш уліковы запіс створаны! Цяпер вы можаце ўвайсці ў яго." }, "masterPassSent": { - "message": "Мы адправілі вам на электронную пошту падказку для асноўнага пароля." + "message": "Мы адправілі вам на электронную пошту падказку да асноўнага пароля." }, "verificationCodeRequired": { - "message": "Патрабуецца код праверкі." + "message": "Патрабуецца праверачны код." }, "invalidVerificationCode": { "message": "Памылковы праверачны код" @@ -464,7 +464,7 @@ "message": "Вы выйшлі" }, "loginExpired": { - "message": "Скончыўся тэрмін дзеяння вашага сеансу." + "message": "Тэрмін дзеяння вашага сеансу завяршыўся." }, "logOutConfirmation": { "message": "Вы ўпэўнены, што хочаце выйсці?" @@ -488,10 +488,10 @@ "message": "Змяніць асноўны пароль" }, "changeMasterPasswordConfirmation": { - "message": "Вы можаце змяніць свой асноўны пароль на bitwarden.com. Перайсці на сайт зараз?" + "message": "Вы можаце змяніць свой асноўны пароль у вэб-сховішчы на bitwarden.com. Перайсці на вэб-сайт зараз?" }, "twoStepLoginConfirmation": { - "message": "Двухэтапны ўваход робіць ваш уліковы запіс больш бяспечным, патрабуючы пацвярджэння ўваходу на іншай прыладзе, напрыклад, ключом бяспекі, праграмай для праверкі бяспекі, SMS, тэлефонным выклікам або электроннай поштай. Двухэтапны ўваход уключаецца на bitwarden.com. Перайсці на сайт зараз?" + "message": "Двухэтапны ўваход робіць ваш уліковы запіс больш бяспечным, патрабуючы пацвярджэнне ўваходу на іншай прыладзе з выкарыстаннем ключа бяспекі, праграмы аўтэнтыфікацыі, SMS, тэлефоннага званка або электроннай пошты. Двухэтапны ўваход уключаецца на bitwarden.com. Перайсці на вэб-сайт, каб зрабіць гэта?" }, "editedFolder": { "message": "Папка адрэдагавана" @@ -506,13 +506,13 @@ "message": "Уводзіны ў карыстанне праграмай" }, "gettingStartedTutorialVideo": { - "message": "Праглядзіце невялікі навучальны матэрыял, каб даведацца. як атрымаць максімальную аддачу ад пашырэння браўзера." + "message": "Азнаёмцеся з нашым кароткім дапаможнікам, каб даведацца як атрымаць максімальную перавагу ад пашырэння для браўзера." }, "syncingComplete": { "message": "Сінхранізацыя завершана" }, "syncingFailed": { - "message": "Памылка сінхранізацыі" + "message": "Збой сінхранізацыі" }, "passwordCopied": { "message": "Пароль скапіяваны" @@ -543,7 +543,7 @@ "message": "Вы ўпэўнены, што хочаце адправіць гэты элемент у сметніцу?" }, "deletedItem": { - "message": "Выдалены элемент" + "message": "Элемент адпраўлены ў сметніцу" }, "overwritePassword": { "message": "Перазапісаць пароль" @@ -600,7 +600,7 @@ "message": "Ці павінен Bitwarden запомніць гэты пароль?" }, "notificationAddSave": { - "message": "Так, захаваць зараз" + "message": "Захаваць" }, "enableChangedPasswordNotification": { "message": "Пытацца пра абнаўленні існуючага лагіна" @@ -612,13 +612,13 @@ "message": "Хочаце абнавіць гэты пароль у Bitwarden?" }, "notificationChangeSave": { - "message": "Так, абнавіць зараз" + "message": "Абнавіць" }, "enableContextMenuItem": { "message": "Паказваць параметры кантэкстнага меню" }, "contextMenuItemDesc": { - "message": "Выкарыстоўваць падвоены націск для доступу да генератара пароля і супастаўлення лагінаў для вэб-сайтаў. " + "message": "Выкарыстоўваць падвоены націск для доступу да генератара пароляў і супастаўлення лагінаў для вэб-сайтаў. " }, "defaultUriMatchDetection": { "message": "Прадвызначанае выяўленне супадзення URI", @@ -652,17 +652,17 @@ "message": "Фармат файла" }, "warning": { - "message": "УВАГА", + "message": "ПАПЯРЭДЖАННЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, "confirmVaultExport": { "message": "Пацвердзіць экспартаванне сховішча" }, "exportWarningDesc": { - "message": "Экспартуемы файл утрымлівае даныя вашага сховішча ў незашыфраваным фармаце. Яго не варта захоўваць ці адпраўляць па небяспечным каналам (напрыклад, па электроннай пошце). Выдаліце яго адразу пасля выкарыстання." + "message": "Пры экспартаванні файл утрымлівае даныя вашага сховішча ў незашыфраваным фармаце. Яго не варта захоўваць або адпраўляць па неабароненых каналах (напрыклад, па электроннай пошце). Выдаліце яго адразу пасля выкарыстання." }, "encExportKeyWarningDesc": { - "message": "Падчас экспартавання даныя шыфруюцца з дапамогай ключа шыфравання ўліковага запісу. Калі вы калі-небудзь зменіце ключ шыфравання ўліковага запісу, вам неабходна будзе экспартаваць даныя паўторна, паколькі вы не зможаце расшыфраваць гэты файл экспартавання." + "message": "Пры экспартаванні даныя шыфруюцца з дапамогай ключа шыфравання ўліковага запісу. Калі вы калі-небудзь зменіце ключ шыфравання ўліковага запісу, вам неабходна будзе экспартаваць даныя паўторна, паколькі вы не зможаце расшыфраваць гэты файл экспартавання." }, "encExportAccountWarningDesc": { "message": "Ключы шыфравання з'яўляюцца ўнікальнымі для кожнага ўліковага запісу Bitwarden, таму нельга імпартаваць зашыфраванае сховішча ў іншы ўліковы запіс." @@ -708,7 +708,7 @@ "message": "Ключ аўтэнтыфікацыі (TOTP)" }, "verificationCodeTotp": { - "message": "Код праверкі (TOTP)" + "message": "Праверачны код (TOTP)" }, "copyVerificationCode": { "message": "Скапіяваць праверачны код" @@ -747,7 +747,7 @@ "message": "Функцыя недаступна" }, "updateKey": { - "message": "Вы не можаце выкарыстоўваць гэту функцыю, пакуль не абнавіце свой ключ шыфравання." + "message": "Вы не зможаце выкарыстоўваць гэту функцыю, пакуль не абнавіце свой ключ шыфравання." }, "premiumMembership": { "message": "Прэміяльны статус" @@ -756,13 +756,13 @@ "message": "Кіраваць статусам" }, "premiumManageAlert": { - "message": "Вы можаце кіраваць сваім статусам на bitwarden.com. Перайсці на сайт зараз?" + "message": "Вы можаце кіраваць сваім статусам на bitwarden.com. Перайсці на вэб-сайт зараз?" }, "premiumRefresh": { "message": "Абнавіць статус" }, "premiumNotCurrentMember": { - "message": "На дадзены момант у вас не прэміяльны статус." + "message": "Зараз у вас няма прэміяльнага статусу." }, "premiumSignUpAndGet": { "message": "Падпішыцеся на прэміяльны статус і атрымайце:" @@ -777,7 +777,7 @@ "message": "Гігіена пароляў, здароўе ўліковага запісу і справаздачы аб уцечках даных для забеспячэння бяспекі вашага сховішча." }, "ppremiumSignUpTotp": { - "message": "TOTP-генератар кодаў (2ФА) для ўліковых даных вашага сховішча." + "message": "Генератар праверачных кодаў TOTP (2ФА) для ўваходу ў ваша сховішча." }, "ppremiumSignUpSupport": { "message": "Прыярытэтная падтрымка." @@ -786,16 +786,16 @@ "message": "Усе будучыя функцыі прэміяльнага статусу. Іх будзе больш!" }, "premiumPurchase": { - "message": "Купіць прэміяльны статус" + "message": "Купіць прэміум" }, "premiumPurchaseAlert": { - "message": "Вы можаце купіць прэміяльны статус на bitwarden.com. Перайсці на сайт зараз?" + "message": "Вы можаце купіць прэміяльны статус на bitwarden.com. Перайсці на вэб-сайт зараз?" }, "premiumCurrentMember": { "message": "У вас прэміяльны статус!" }, "premiumCurrentMemberThanks": { - "message": "Дзякуем вам за падтрымку Bitwarden." + "message": "Дзякуй за падтрымку Bitwarden." }, "premiumPrice": { "message": "Усяго за $PRICE$ у год!", @@ -837,7 +837,7 @@ } }, "verificationCodeEmailSent": { - "message": "Адпраўлены ліст для пацвярджэння $EMAIL$.", + "message": "Праверачны ліст адпраўлены на $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -849,7 +849,7 @@ "message": "Запомніць мяне" }, "sendVerificationCodeEmailAgain": { - "message": "Адправіць код пацвярджэння зноў" + "message": "Адправіць праверачны код яшчэ раз" }, "useAnotherTwoStepMethod": { "message": "Выкарыстоўваць іншы метад двухэтапнага ўваходу" @@ -873,10 +873,10 @@ "message": "Уваход недаступны" }, "noTwoStepProviders": { - "message": "У гэтага ўліковага запісу ўключаны двухэтапны ўваход, аднак ні адзін з наладжаных варыянтаў не падтрымліваецца гэтым вэб-браўзерам." + "message": "У гэтага ўліковага запісу ўключаны двухэтапны ўваход, аднак ніводны з наладжаных пастаўшчыкоў двухэтапнай праверкі не падтрымліваецца гэтым браўзерам." }, "noTwoStepProviders2": { - "message": "Выкарыстоўвайце актуальны вэб-браўзер (напрыклад, Chrome) і/або дадайце дадатковыя варыянты праверкі сапраўднасці, якія падтрымліваюцца ў вэб-браўзерах (напрыклад, праграма для праверкі сапраўднасці)." + "message": "Выкарыстоўвайце актуальны браўзер (напрыклад, Chrome) і/або дадайце іншых пастаўшчыкоў, якія маюць лепшую падтрымку разнастайных браўзераў (напрыклад, праграма аўтэнтыфікацыі)." }, "twoStepOptions": { "message": "Параметры двухэтапнага ўваходу" @@ -891,40 +891,40 @@ "message": "Праграма аўтэнтыфікацыі" }, "authenticatorAppDesc": { - "message": "Выкарыстоўвайце праграму для праверкі сапраўднасці (напрыклад, Authy або Google Authenticator) для стварэння кодаў праверкі на аснове часу.", + "message": "Выкарыстоўвайце праграму праграму аўтэнтыфікацыі (напрыклад, Authy або Google Authenticator) для генерацыі праверачных кодаў на падставе часу.", "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." }, "yubiKeyTitle": { "message": "Ключ бяспекі YubiKey OTP" }, "yubiKeyDesc": { - "message": "Выкарыстоўвайце YubiKey для доступу да вашага ўліковага запісу. Працуе з прыладамі YubiKey серый 4, 5 і NEO." + "message": "Выкарыстоўвайце YubiKey для доступу да вашага ўліковага запісу. Працуе з ключамі бяспекі YubiKey 4, 4 Nano, 4C і NEO." }, "duoDesc": { - "message": "Пацвярдзіце з дапамогай Duo Security, выкарыстоўваючы праграму Duo Mobile, SMS, тэлефонны выклік або ключ бяспекі.", + "message": "Праверка з дапамогай Duo Security, выкарыстоўваючы праграму Duo Mobile, SMS, тэлефонны выклік або ключ бяспекі U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "Пацвярдзіце з дапамогай Duo Security для вашай арганізацыі, выкарыстоўваючы праграму Duo Mobile, SMS, тэлефонны выклік або ключ бяспекі.", + "message": "Праверка з дапамогай Duo Security для вашай арганізацыі, выкарыстоўваючы праграму Duo Mobile, SMS, тэлефонны выклік або ключ бяспекі U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "webAuthnTitle": { "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "Выкарыстоўвайце любы ключ з падтрымкай WebAuthn для доступу да свайго ўліковага запісу." + "message": "Выкарыстоўвайце любы ключ бяспекі WebAuthn, каб атрымаць доступ да вашага ўліковага запісу." }, "emailTitle": { "message": "Электронная пошта" }, "emailDesc": { - "message": "Коды пацвярджэння будуць адпраўлены вам па электроннай пошце." + "message": "Праверачныя коды будуць адпраўляцца вам па электронную пошту." }, "selfHostedEnvironment": { "message": "Асяроддзе ўласнага хостынгу" }, "selfHostedEnvironmentFooter": { - "message": "Увядзіце асноўны URL-адрас на вашым серверы." + "message": "Увядзіце асноўны URL-адрас вашага лакальнага размяшчэння ўсталяванага Bitwarden." }, "customEnvironment": { "message": "Карыстальніцкае асяроддзе" @@ -960,7 +960,7 @@ "message": "Калі выяўлена форма ўваходу, то будзе выканана яе аўтазапаўненне падчас загрузкі вэб-старонкі." }, "experimentalFeature": { - "message": "Гэта эксперыментальная функцыя. Выкарыстоўвайце на свой страх і рызыку." + "message": "У дадзены час гэта функцыя з'яўляецца эксперыментальнай. Рызыку падчас яе выкарыстанні вы прымаеце на сябе." }, "defaultAutoFillOnPageLoad": { "message": "Прадвызначаная налада аўтазапаўнення для элементаў уваходу" @@ -1034,13 +1034,13 @@ "message": "Націск за межамі ўсплывальнага акна для прагляду праверачнага кода прывядзе да яго закрыцця. Адкрыць гэта ўсплывальнае акно ў новым акне, якое не закрыецца?" }, "popupU2fCloseMessage": { - "message": "Гэты браўзар не можа апрацоўваць запыты U2F у гэтым усплывальным акне. Вы хочаце адкрыць гэта ўсплывальнае акно ў новым акне, каб мець магчымасць увайсці ў сістэму, выкарыстоўваючы U2F?" + "message": "Дадзены браўзер не можа апрацоўваць запыты U2F у гэтым усплывальным акне. Адкрыць гэта ўсплывальнае акно ў новым акне, каб мець магчымасць увайсці ў сістэму, выкарыстоўваючы U2F?" }, "enableFavicon": { "message": "Паказваць значкі вэб-сайтаў" }, "faviconDesc": { - "message": "Паказваць распазнавальны відарыс побач з кожным з кожным лагінам." + "message": "Паказваць распазнавальны відарыс побач з кожным лагінам." }, "enableBadgeCounter": { "message": "Паказваць лічыльнік на значку" @@ -1190,7 +1190,7 @@ "message": "Уліковыя даныя" }, "typeSecureNote": { - "message": "Бяспечныя нататкі" + "message": "Абароненая нататка" }, "typeCard": { "message": "Картка" @@ -1211,7 +1211,7 @@ "message": "Абраныя" }, "popOutNewWindow": { - "message": "Перайсці ў новае акно" + "message": "Адкрыць у новым акне" }, "refresh": { "message": "Абнавiць" @@ -1226,7 +1226,7 @@ "message": "Лагіны" }, "secureNotes": { - "message": "Бяспечныя нататкі" + "message": "Абароненыя нататкі" }, "clear": { "message": "Ачысціць", @@ -1236,7 +1236,7 @@ "message": "Праверце, ці не скампраметаваны пароль." }, "passwordExposed": { - "message": "Гэты пароль быў скампраметаваны $VALUE$ раз(-ы/-оў). Вы павінны змяніць яго.", + "message": "Гэты пароль быў скампраметаваны наступную колькасць разоў: $VALUE$. Вы павінны змяніць яго.", "placeholders": { "value": { "content": "$1", @@ -1281,7 +1281,7 @@ "message": "Пераключыць параметры" }, "toggleCurrentUris": { - "message": "Уключыць бягучыя URI укладак", + "message": "Пераключыць бягучыя URI", "description": "Toggle the display of the URIs of the currently open tabs in the browser." }, "currentUri": { @@ -1299,7 +1299,7 @@ "message": "Усе элементы" }, "noPasswordsInList": { - "message": "Няма пароляў для паказу." + "message": "У спісе адсутнічаюць паролі." }, "remove": { "message": "Выдаліць" @@ -1322,7 +1322,7 @@ "message": "Вы не з'яўляецеся членам якой-небудзь арганізацыі. Арганізацыі дазваляюць бяспечна абменьвацца элементамі з іншымі карыстальнікамі." }, "noCollectionsInList": { - "message": "Няма калекцый для паказу." + "message": "У спісе адсутнічаюць калекцыі." }, "ownership": { "message": "Уладальнік" @@ -1343,7 +1343,7 @@ "description": "ex. A weak password. Scale: Weak -> Good -> Strong" }, "weakMasterPassword": { - "message": "Слабы асноўны пароль" + "message": "Ненадзейны асноўны пароль" }, "weakMasterPasswordDesc": { "message": "Асноўны пароль, які вы выбралі з'яўляецца ненадзейным. Для належнай абароны ўліковага запісу Bitwarden, вы павінны выкарыстоўваць надзейны асноўны пароль (або парольную фразу). Вы ўпэўнены, што хочаце выкарыстоўваць гэты асноўны пароль?" @@ -1356,7 +1356,7 @@ "message": "Разблакіраваць PIN-кодам" }, "setYourPinCode": { - "message": "Задайце PIN-код для разблакіроўкі Bitwarden. Налады PIN-кода будуць скінуты, калі вы калі-небудзь цалкам выйдзеце з праграмы." + "message": "Прызначце PIN-код для разблакіроўкі Bitwarden. Налады PIN-кода будуць скінуты, калі вы калі-небудзь цалкам выйдзеце з праграмы." }, "pinRequired": { "message": "Патрабуецца PIN-код." @@ -1389,7 +1389,7 @@ "message": "Адна або больш палітык арганізацыі ўплывае на налады генератара." }, "vaultTimeoutAction": { - "message": "Дзеянне пры тайм-аўце" + "message": "Дзеянне пасля заканчэння часу чакання сховішча" }, "lock": { "message": "Заблакіраваць", @@ -1409,7 +1409,7 @@ "message": "Вы ўпэўнены, што хочаце назаўсёды выдаліць гэты элемент?" }, "permanentlyDeletedItem": { - "message": "Выдаленны назаўсёды элемент" + "message": "Элемент выдалены назаўсёды" }, "restoreItem": { "message": "Аднавіць элемент" @@ -1424,7 +1424,7 @@ "message": "Выхад з сістэмы скасуе ўсе магчымасці доступу да сховішча і запатрабуе аўтэнтыфікацыю праз інтэрнэт пасля завяршэння часу чакання. Вы ўпэўнены, што хочаце выкарыстоўваць гэты параметр?" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Пацвярджэнне дзеяння для тайм-аута" + "message": "Пацвярджэнне дзеяння часу чакання" }, "autoFillAndSave": { "message": "Аўтазапоўніць і захаваць" @@ -1436,7 +1436,7 @@ "message": "Аўтазапоўнены элемент" }, "setMasterPassword": { - "message": "Задаць асноўны пароль" + "message": "Прызначыць асноўны пароль" }, "masterPasswordPolicyInEffect": { "message": "Адна або больш палітык арганізацыі патрабуе, каб ваш асноўны пароль адпавядаў наступным патрабаванням:" @@ -1478,7 +1478,7 @@ } }, "masterPasswordPolicyRequirementsNotMet": { - "message": "Ваш новы асноўны пароль не адпавядае патрабаванням палітыкі арганізацыі." + "message": "Ваш новы асноўны пароль не адпавядае патрабаванням палітыкі." }, "acceptPolicies": { "message": "Ставячы гэты сцяжок, вы пагаджаецеся з наступным:" @@ -1502,7 +1502,7 @@ "message": "Праверка сінхранізацыі на камп'ютары" }, "desktopIntegrationVerificationText": { - "message": "Праверце, ці паказвае праграма на камп'ютары гэты адбітак: " + "message": "Праверце, ці паказвае праграма на камп'ютары гэты адбітак пальца: " }, "desktopIntegrationDisabledTitle": { "message": "Інтэграцыя з браўзерам не ўключана" @@ -1517,7 +1517,7 @@ "message": "Для разблакіроўкі па біяметрыі неабходна запусціць праграму Bitwarden на камп'ютары." }, "errorEnableBiometricTitle": { - "message": "Не атрымалася ўключыць біяметрыю" + "message": "Немагчыма ўключыць біяметрыю" }, "errorEnableBiometricDesc": { "message": "Дзеянне было скасавана праграмай на камп'ютары" @@ -1556,7 +1556,7 @@ "message": "Памылка пры запыце дазволу" }, "nativeMessaginPermissionSidebarDesc": { - "message": "Гэта дзеянне немагчыма выканаць у бакавой панэлі. Паспрабуйце паўтарыць гэта дзеянне ва ўсплывальным або асобным акне." + "message": "Гэта дзеянне немагчыма выканаць у бакавой панэлі. Паспрабуйце паўтарыць яго ва ўсплывальным або асобным акне." }, "personalOwnershipSubmitError": { "message": "У адпаведнасці з палітыкай прадпрыемства вам забаронена захоўваць элементы ў асабістым сховішчы. Змяніце параметры ўласнасці на арганізацыю і выберыце з даступных калекцый." @@ -1584,7 +1584,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "searchSends": { - "message": "Пошук Send'аў", + "message": "Пошук у Send'ах", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "addSend": { @@ -1632,7 +1632,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLink": { - "message": "Спасылка Send", + "message": "Спасылка на Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disabled": { @@ -1654,7 +1654,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeHeader": { - "message": "Які гэта тып Send?", + "message": "Які гэта тып Send'a?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNameDesc": { @@ -1770,7 +1770,7 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To use a calendar style date picker **click here** to pop out your window.'" }, "sendFirefoxCustomDatePopoutMessage3": { - "message": "для адкрыцця ў асобным акне.", + "message": "для адкрыцця ў новым акне.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To use a calendar style date picker click here **to pop out your window.**'" }, "expirationDateIsInvalid": { @@ -1801,28 +1801,28 @@ "message": "Пацвярджэнне асноўнага пароля" }, "passwordConfirmationDesc": { - "message": "Гэта дзеянне абаронена. Для працягу, калі ласка, паўторна ўвядзіце свой пароль, каб пацвердзіць вашу асобу." + "message": "Гэта дзеянне абаронена. Для працягу, калі ласка, паўторна ўвядзіце свой асноўны пароль, каб пацвердзіць вашу асобу." }, "emailVerificationRequired": { "message": "Патрабуецца праверка электроннай пошты" }, "emailVerificationRequiredDesc": { - "message": "Вы павінны праверыць свой адрас электроннай пошты, каб выкарыстоўваць гэту функцыю. Вы можаце гэта зрабіць з дапамогай вэб-сховішча." + "message": "Вы павінны праверыць свой адрас электроннай пошты, каб выкарыстоўваць гэту функцыю. Зрабіць гэта можна ў вэб-сховішчы." }, "updatedMasterPassword": { - "message": "Галоўны пароль абноўлены" + "message": "Асноўны пароль абноўлены" }, "updateMasterPassword": { - "message": "Абнавіць галоўны пароль" + "message": "Абнавіць асноўны пароль" }, "updateMasterPasswordWarning": { - "message": "Ваш галоўны пароль не так даўно быў зменены адміністратарам вашай арганізацыі. Для таго, каб атрымаць доступ да вашага сховішча, вы павінны абнавіць яго зараз. У выніку бягучы сеанс будзе завершаны і вам неабходна будзе паўторна ўвайсці. Сеансы на іншых прыладах могуць заставацца актыўнымі на працягу адной гадзіны." + "message": "Ваш асноўны пароль нядаўна быў зменены адміністратарам арганізацыі. Для таго, каб атрымаць доступ да вашага сховішча, вы павінны абнавіць яго зараз. Гэта прывядзе да завяршэння бягучага сеанса і вам неабходна будзе ўвайсці паўторна. Сеансы на іншых прыладах могуць заставацца актыўнымі на працягу адной гадзіны." }, "resetPasswordPolicyAutoEnroll": { "message": "Аўтаматычная рэгістрацыя" }, "resetPasswordAutoEnrollInviteWarning": { - "message": "Гэта арганізацыя мае карпаратыўную палітыку, якая будзе аўтаматычна зарэгіструе ваша скіданне пароля. Рэгістрацыя дазволіць адміністратарам арганізацыі змяняць ваш асноўны пароль." + "message": "Гэта арганізацыя мае палітыку прадпрыемства, якая аўтаматычна зарэгіструе ваша скіданне пароля. Рэгістрацыя дазволіць адміністратарам арганізацыі змяняць ваш асноўны пароль." }, "selectFolder": { "message": "Выбраць папку..." @@ -1837,7 +1837,7 @@ "message": "Хвіліны" }, "vaultTimeoutPolicyInEffect": { - "message": "Палітыка вашай арганізацыі ўплывае на час чакання сховішча. Максімальны дазволены час чакання сховішча $HOURS$ гадз. і $MINUTES$ хв.", + "message": "Палітыка вашай арганізацыі ўплывае на час чакання сховішча. Максімальны дазволены час чакання сховішча складае $HOURS$ гадз. і $MINUTES$ хв.", "placeholders": { "hours": { "content": "$1", @@ -1889,10 +1889,10 @@ "message": "Вы пакінулі арганізацыю." }, "toggleCharacterCount": { - "message": "Пераключыць колькасць сімвалаў" + "message": "Пераключыць лічыльнік сімвалаў" }, "sessionTimeout": { - "message": "Час вашага сеанса завяршыўся. Аўтарызуйцеся паўторна." + "message": "Час чакання вашага сеанса завяршыўся. Калі ласка, увайдзіце паўторна." }, "exportingPersonalVaultTitle": { "message": "Экспартаванне асабістага сховішча" @@ -1910,7 +1910,7 @@ "message": "Памылка" }, "regenerateUsername": { - "message": "Паўторна згенерыраваць імя карыстастальніка" + "message": "Паўторна генерыраваць імя карыстальніка" }, "generateUsername": { "message": "Генерыраваць імя карыстальніка" @@ -1923,13 +1923,13 @@ "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" }, "plusAddressedEmailDesc": { - "message": "Выкарыстоўваць магчымасці пададрасацыі вашага пастаўшчыка паслуг электроннай пошты." + "message": "Выкарыстоўвайце магчымасці пададрасацыі вашага пастаўшчыка паслуг электроннай пошты." }, "catchallEmail": { "message": "Адрас для ўсёй пошты дамена" }, "catchallEmailDesc": { - "message": "Выкарыстоўвайце сваю сканфігураваную скрыню для ўсё пошты дамена." + "message": "Выкарыстоўвайце сваю сканфігураваную скрыню для ўсёй пошты дамена." }, "random": { "message": "Выпадкова" diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index bcfcd5060ce..0047cc61411 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 9085037f549..0a73ff28d96 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 8c3df17fe2b..c47f6f63b2a 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 6674489c638..98b40e03ac7 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index ad541380547..a9bc526f019 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index c4c50d07d69..a398a08342a 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index acad55e4dc8..a1d1a776a89 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 68b3ca0bb11..c64d822b613 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 2f368b4fc36..3a52d70f647 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 69e737c73b4..b36fe0cd95f 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 767b60e70db..f55313d87b3 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index af77247d8f3..8cad01f8763 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 4352e3cb8ce..802693cd565 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index d329d72a777..d7e586da741 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 0efa7fbdb3f..5a8ec8a3558 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index a85bcbf7e6d..a8e84cd33e8 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 9718609b743..fd26e3345e7 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index c22e6b62c5f..cc79141a1c8 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index bd1c5022a2f..360dfddc7c3 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 48082e1ded5..f1fd5631207 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index d329d72a777..d7e586da741 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 4de3a20245b..fe9428998ab 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index d803ba85428..43e2dfd7bda 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 60b2d1adf85..aef801e1bb2 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "văzut ultima dată la $DATE$", + "message": "văzut ultima dată pe: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index a6d371bdc4f..36e072746b8 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 4b4ccdcd1d1..da47adc01b3 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index a2a23c4a761..eb8eff77062 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -2002,13 +2002,13 @@ "message": "Serverversion" }, "selfHosted": { - "message": "Self-Hosted" + "message": "Lokalt installerad" }, "thirdParty": { "message": "Tredje part" }, "thirdPartyServerMessage": { - "message": "Connected to third-party server implementation, $SERVERNAME$. Please verify bugs using the official server, or report them to the third-party server.", + "message": "Ansluten till implementering på tredjepartsserver, $SERVERNAME$. Verifiera buggar med den officiella servern eller rapportera dem till tredjepartsservern.", "placeholders": { "servername": { "content": "$1", diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index 28d94140a26..7c1851aefd1 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index dc471e9c7fe..3e6db9fa609 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -2017,7 +2017,7 @@ } }, "lastSeenOn": { - "message": "last seen on $DATE$", + "message": "last seen on: $DATE$", "placeholders": { "date": { "content": "$1", diff --git a/apps/browser/src/background/runtime.background.ts b/apps/browser/src/background/runtime.background.ts index bb84fb4f0ed..652996e2525 100644 --- a/apps/browser/src/background/runtime.background.ts +++ b/apps/browser/src/background/runtime.background.ts @@ -5,10 +5,9 @@ import { NotificationsService } from "@bitwarden/common/abstractions/notificatio import { SystemService } from "@bitwarden/common/abstractions/system.service"; import { Utils } from "@bitwarden/common/misc/utils"; -import { BrowserEnvironmentService } from "src/services/browser-environment.service"; - import { BrowserApi } from "../browser/browserApi"; import { AutofillService } from "../services/abstractions/autofill.service"; +import { BrowserEnvironmentService } from "../services/browser-environment.service"; import BrowserPlatformUtilsService from "../services/browserPlatformUtils.service"; import MainBackground from "./main.background"; diff --git a/apps/browser/src/content/notificationBar.ts b/apps/browser/src/content/notificationBar.ts index dcb9ce0453b..92730e16292 100644 --- a/apps/browser/src/content/notificationBar.ts +++ b/apps/browser/src/content/notificationBar.ts @@ -1,5 +1,5 @@ -import AddLoginRuntimeMessage from "src/background/models/addLoginRuntimeMessage"; -import ChangePasswordRuntimeMessage from "src/background/models/changePasswordRuntimeMessage"; +import AddLoginRuntimeMessage from "../background/models/addLoginRuntimeMessage"; +import ChangePasswordRuntimeMessage from "../background/models/changePasswordRuntimeMessage"; document.addEventListener("DOMContentLoaded", (event) => { if (window.location.hostname.endsWith("vault.bitwarden.com")) { diff --git a/apps/browser/src/globals.d.ts b/apps/browser/src/globals.d.ts index 7307f696ae9..9662c3d71b9 100644 --- a/apps/browser/src/globals.d.ts +++ b/apps/browser/src/globals.d.ts @@ -1,4 +1,134 @@ declare function escape(s: string): string; declare function unescape(s: string): string; -declare let opr: any; +/** + * @link https://dev.opera.com/extensions/addons-api/ + */ +type OperaAddons = { + /** + * @link https://dev.opera.com/extensions/addons-api/#method-installextension + */ + installExtension: ( + id: string, + success_callback: () => void, + error_callback: (errorMessage: string) => void + ) => void; +}; + +type OperaEvent = { + addListener: (callback: (state: T) => void) => void; +}; + +/** + * @link https://dev.opera.com/extensions/sidebar-action-api/#type-colorarray + */ +type ColorArray = [number, number, number, number]; + +/** + * @link https://dev.opera.com/extensions/sidebar-action-api/#type-imagedatatype + */ +type ImageDataType = ImageData; + +/** + * @link https://dev.opera.com/extensions/sidebar-action-api/ + */ +type OperaSidebarAction = { + /** + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-settitle + */ + setTitle: (details: { title: string; tabId?: number }) => void; + /** + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-gettitle + */ + getTitle: (details: { tabId?: number }, callback: (result: string) => void) => void; + /** + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-seticon + */ + setIcon: ( + details: { + imageData?: ImageDataType | Record; + path?: string | Record; + tabId?: number; + }, + callback?: () => void + ) => void; + /** + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-setpanel + */ + setPanel: (details: { tabId?: number; panel: string }) => void; + /** + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-getpanel + */ + getPanel: (details: { tabId?: number }, callback: (result: string) => void) => void; + /** + * *Not supported on mac* + * + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-setbadgetext + */ + setBadgeText: (details: { text: string; tabId?: number }) => void; + /** + * *Not supported on mac* + * + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-getbadgetext + */ + getBadgeText: (details: { tabId?: number }, callback: (result: string) => void) => void; + /** + * *Not supported on mac* + * + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-setbadgebackgroundcolor + */ + setBadgeBackgroundColor: (details: { color: ColorArray | string; tabId?: number }) => void; + /** + * *Not supported on mac* + * + * @link https://dev.opera.com/extensions/sidebar-action-api/#method-getbadgebackgroundcolor + */ + getBadgeBackgroundColor: ( + details: { tabId?: number }, + callback: (result: ColorArray) => void + ) => void; + /** + * *Not supported on mac* + * + * @link https://dev.opera.com/extensions/sidebar-action-api/#events-onfocus + */ + onFocus: OperaEvent; + /** + * *Not supported on mac* + * + * @link https://dev.opera.com/extensions/sidebar-action-api/#events-onblur + */ + onBlur: OperaEvent; +}; + +type Opera = { + addons: OperaAddons; + sidebarAction: OperaSidebarAction; +}; + +declare namespace chrome { + /** + * This is for firefoxes sidebar action and it is based on the opera one but with a few less methods + * + * @link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sidebarAction + */ + let sidebarAction: + | Omit< + OperaSidebarAction, + | "setBadgeText" + | "getBadgeText" + | "setBadgeBackgroundColor" + | "getBadgeBackgroundColor" + | "onFocus" + | "onBlur" + > + | undefined; +} + +interface Window { + opr: Opera | undefined; + opera: unknown; +} + +declare let opr: Opera | undefined; +declare let opera: unknown | undefined; declare let safari: any; diff --git a/apps/browser/src/popup/scss/misc.scss b/apps/browser/src/popup/scss/misc.scss index b91f44cde37..1d6acfe6417 100644 --- a/apps/browser/src/popup/scss/misc.scss +++ b/apps/browser/src/popup/scss/misc.scss @@ -146,6 +146,10 @@ p.lead { border: 0 !important; } +:not(:focus) > .exists-only-on-parent-focus { + display: none; +} + .password-wrapper { overflow-wrap: break-word; white-space: pre-wrap; diff --git a/apps/browser/src/popup/vault/ciphers.component.ts b/apps/browser/src/popup/vault/ciphers.component.ts index 60a92e238c2..34d567bbe4f 100644 --- a/apps/browser/src/popup/vault/ciphers.component.ts +++ b/apps/browser/src/popup/vault/ciphers.component.ts @@ -19,9 +19,8 @@ import { CipherView } from "@bitwarden/common/models/view/cipherView"; import { CollectionView } from "@bitwarden/common/models/view/collectionView"; import { FolderView } from "@bitwarden/common/models/view/folderView"; -import { BrowserComponentState } from "src/models/browserComponentState"; - import { BrowserApi } from "../../browser/browserApi"; +import { BrowserComponentState } from "../../models/browserComponentState"; import { StateService } from "../../services/abstractions/state.service"; import { VaultFilterService } from "../../services/vaultFilter.service"; import { PopupUtilsService } from "../services/popup-utils.service"; diff --git a/apps/browser/src/popup/vault/vault-filter.component.ts b/apps/browser/src/popup/vault/vault-filter.component.ts index 13b3018b663..0abc16e1eca 100644 --- a/apps/browser/src/popup/vault/vault-filter.component.ts +++ b/apps/browser/src/popup/vault/vault-filter.component.ts @@ -16,9 +16,8 @@ import { CipherView } from "@bitwarden/common/models/view/cipherView"; import { CollectionView } from "@bitwarden/common/models/view/collectionView"; import { FolderView } from "@bitwarden/common/models/view/folderView"; -import { BrowserGroupingsComponentState } from "src/models/browserGroupingsComponentState"; - import { BrowserApi } from "../../browser/browserApi"; +import { BrowserGroupingsComponentState } from "../../models/browserGroupingsComponentState"; import { StateService } from "../../services/abstractions/state.service"; import { VaultFilterService } from "../../services/vaultFilter.service"; import { PopupUtilsService } from "../services/popup-utils.service"; diff --git a/apps/browser/src/popup/vault/view.component.html b/apps/browser/src/popup/vault/view.component.html index 0b5d0fb1528..5fa5d2aba6c 100644 --- a/apps/browser/src/popup/vault/view.component.html +++ b/apps/browser/src/popup/vault/view.component.html @@ -156,7 +156,7 @@ > {{ totpCodeFormatted }} - +