diff --git a/.github/workflows/release-browser.yml b/.github/workflows/release-browser.yml index 671d1b4b790..b18002f1d46 100644 --- a/.github/workflows/release-browser.yml +++ b/.github/workflows/release-browser.yml @@ -25,6 +25,9 @@ jobs: outputs: release-version: ${{ steps.version.outputs.version }} steps: + - name: Checkout repo + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 + - name: Branch check if: ${{ github.event.inputs.release_type != 'Dry Run' }} run: | @@ -35,9 +38,6 @@ jobs: exit 1 fi - - name: Checkout repo - uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 - - name: Check Release Version id: version uses: bitwarden/gh-actions/release-version-check@ea9fab01d76940267b4147cc1c4542431246b9f6 diff --git a/.github/workflows/release-cli.yml b/.github/workflows/release-cli.yml index c6a57eae2af..fe9b02f2a75 100644 --- a/.github/workflows/release-cli.yml +++ b/.github/workflows/release-cli.yml @@ -25,6 +25,9 @@ jobs: outputs: release-version: ${{ steps.version.outputs.version }} steps: + - name: Checkout repo + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 + - name: Branch check if: ${{ github.event.inputs.release_type != 'Dry Run' }} run: | @@ -35,9 +38,6 @@ jobs: exit 1 fi - - name: Checkout repo - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 - - name: Check Release Version id: version uses: bitwarden/gh-actions/release-version-check@ea9fab01d76940267b4147cc1c4542431246b9f6 @@ -132,10 +132,22 @@ jobs: - name: Checkout repo uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 + - name: Login to Azure + uses: Azure/login@24848bc889cfc0a8313c2b3e378ac0d625b9bc16 + with: + creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }} + + - name: Retrieve secrets + id: retrieve-secrets + uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f + with: + keyvault: "bitwarden-prod-kv" + secrets: "cli-choco-api-key" + - name: Setup Chocolatey run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/ env: - CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }} + CHOCO_API_KEY: ${{ steps.retrieve-secrets.outputs.cli-choco-api-key }} - name: Make dist dir shell: pwsh diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index 4d2c7fc713d..189f6a59578 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -25,6 +25,9 @@ jobs: release-version: ${{ steps.version.outputs.version }} release-channel: ${{ steps.release-channel.outputs.channel }} steps: + - name: Checkout repo + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 + - name: Branch check if: ${{ github.event.inputs.release_type != 'Dry Run' }} run: | @@ -35,9 +38,6 @@ jobs: exit 1 fi - - name: Checkout repo - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - - name: Check Release Version id: version uses: bitwarden/gh-actions/release-version-check@ea9fab01d76940267b4147cc1c4542431246b9f6 @@ -200,10 +200,22 @@ jobs: - name: Checkout Repo uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + - name: Login to Azure + uses: Azure/login@24848bc889cfc0a8313c2b3e378ac0d625b9bc16 + with: + creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }} + + - name: Retrieve secrets + id: retrieve-secrets + uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f + with: + keyvault: "bitwarden-prod-kv" + secrets: "cli-choco-api-key" + - name: Setup Chocolatey run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/ env: - CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }} + CHOCO_API_KEY: ${{ steps.retrieve-secrets.outputs.cli-choco-api-key }} - name: Make dist dir shell: pwsh diff --git a/.github/workflows/release-web.yml b/.github/workflows/release-web.yml index 72dfadf232c..3dd5971c90e 100644 --- a/.github/workflows/release-web.yml +++ b/.github/workflows/release-web.yml @@ -22,6 +22,9 @@ jobs: release_version: ${{ steps.version.outputs.version }} tag_version: ${{ steps.version.outputs.tag }} steps: + - name: Checkout repo + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 + - name: Branch check if: ${{ github.event.inputs.release_type != 'Dry Run' }} run: | @@ -32,9 +35,6 @@ jobs: exit 1 fi - - name: Checkout repo - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2 - - name: Check Release Version id: version uses: bitwarden/gh-actions/release-version-check@8f055ef543c7433c967a1b9b04a0f230923233bb @@ -243,7 +243,7 @@ jobs: with: name: "Version v${{ needs.setup.outputs.release_version }}" commit: ${{ github.sha }} - tag: "${{ needs.setup.outputs.tag_version }}" + tag: web-v${{ needs.setup.outputs.tag_version }} body: "" artifacts: "apps/web/artifacts/web-${{ needs.setup.outputs.release_version }}-selfhosted-COMMERCIAL.zip, apps/web/artifacts/web-${{ needs.setup.outputs.release_version }}-selfhosted-open-source.zip" diff --git a/.storybook/tsconfig.json b/.storybook/tsconfig.json index 89c8f20b353..a55b6597e47 100644 --- a/.storybook/tsconfig.json +++ b/.storybook/tsconfig.json @@ -4,7 +4,7 @@ "types": ["node"], "allowSyntheticDefaultImports": true }, - "exclude": ["../src/test.ts", "../src/**/*.spec.ts", "../projects/**/*.spec.ts"], + "exclude": ["../src/test.setup.ts", "../src/**/*.spec.ts", "../projects/**/*.spec.ts"], "include": ["../src/**/*", "../projects/**/*"], "files": ["./typings.d.ts"] } diff --git a/apps/browser/jest.config.js b/apps/browser/jest.config.js index 025db301ebf..dca19ba3bc7 100644 --- a/apps/browser/jest.config.js +++ b/apps/browser/jest.config.js @@ -6,6 +6,7 @@ module.exports = { collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", + setupFilesAfterEnv: ["/test.setup.ts"], preset: "jest-preset-angular", moduleNameMapper: pathsToModuleNameMapper(compilerOptions?.paths || {}, { prefix: "/", diff --git a/apps/browser/package.json b/apps/browser/package.json index 427632db333..7d2b7d34ec9 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -3,12 +3,14 @@ "version": "0.0.0", "scripts": { "build": "webpack", + "build:mv3": "cross-env MANIFEST_VERSION=3 webpack", "build:watch": "webpack --watch", - "build:watch:MV3": "cross-env MANIFEST_VERSION=3 webpack --watch", + "build:watch:mv3": "cross-env MANIFEST_VERSION=3 webpack --watch", "build:prod": "cross-env NODE_ENV=production webpack", "build:prod:watch": "cross-env NODE_ENV=production webpack --watch", "dist": "npm run build:prod && gulp dist", - "dist:chromeMV3": "cross-env MANIFEST_VERSION=3 npm run build:prod && gulp dist:chrome", + "dist:chrome": "npm run build:prod && gulp dist:chrome", + "dist:chrome:mv3": "cross-env MANIFEST_VERSION=3 npm run build:prod && gulp dist:chrome", "dist:firefox": "npm run build:prod && gulp dist:firefox", "dist:opera": "npm run build:prod && gulp dist:opera", "dist:safari": "npm run build:prod && gulp dist:safari", diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index f65da3812c2..8fcb5822a75 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -146,10 +146,10 @@ "message": "Account" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Two-step Login" + "message": "Two-step login" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "about": { "message": "About" @@ -193,7 +193,7 @@ "message": "There are no folders to list." }, "helpFeedback": { - "message": "Help & Feedback" + "message": "Help & feedback" }, "sync": { "message": "Sync" @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "Select" @@ -330,7 +330,7 @@ "message": "Other" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "Immediately" @@ -403,10 +403,10 @@ "message": "4 hours" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "Never" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 15e9895a4bb..e5bf3c3de01 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -567,23 +567,23 @@ "message": "Qovluq yoxdur", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "\"Hesab əlavə et\" bildirişini sıradan çıxart" + "enableAddLoginNotification": { + "message": "Giriş əlavə etmək üçün soruş" }, "addLoginNotificationDesc": { "message": "\"Hesab əlavə et bildirişi\", ilk dəfə giriş edəndə yeni giriş məlumatlarını anbarda saxlamaq istəyib-istəmədiyinizi avtomatik olaraq soruşur." }, - "dontShowCardsCurrentTab": { - "message": "Vərəq səhifəsində kartları göstərmə" + "showCardsCurrentTab": { + "message": "Kartları vərəq səhifəsində göstər" }, - "dontShowCardsCurrentTabDesc": { - "message": "Anbarınızdakı kart elementləri, avto-doldurma müraciətini asanlaşdırmaq üçün \"Hazırkı vərəq\" səhifəsində siyahılanır." + "showCardsCurrentTabDesc": { + "message": "Asan avto-doldurma üçün Vərəq səhifəsində kart elementlərini siyahılayın." }, - "dontShowIdentitiesCurrentTab": { - "message": "Vərəq səhifəsində kimlikləri göstərmə" + "showIdentitiesCurrentTab": { + "message": "Vərəq səhifəsində kimlikləri göstər" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Anbarınızdakı kimlik elementləri, avto-doldurma müraciətini asanlaşdırmaq üçün \"Hazırkı vərəq\" səhifəsində siyahılanır." + "showIdentitiesCurrentTabDesc": { + "message": "Asan avto-doldurma üçün Vərəq səhifəsində kimlik elementlərini siyahılayın." }, "clearClipboard": { "message": "Lövhəni təmizlə", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Bəli, indi saxla" }, - "disableChangedPasswordNotification": { - "message": "\"Parol dəyişdirildi\" bildirişini sıradan çıxart" + "enableChangedPasswordNotification": { + "message": "Mövcud girişin güncəllənməsini soruş" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Parol dəyişdirildi bildirişi\", bir veb saytında parolu dəyişdirdiyinizi aşkarlayanda, anbarınızda qeyd etdiyiniz parolu yeniləməyinizi avtomatik olaraq soruşur." + "changedPasswordNotificationDesc": { + "message": "Bir veb saytda dəyişiklik aşkarlananda giriş parolunun güncəllənməsini soruşun." }, "notificationChangeDesc": { "message": "Bu parolu \"Bitwarden\"də yeniləmək istəyirsiniz?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Bəli, indi yenilə" }, - "disableContextMenuItem": { - "message": "Kontekst menyu seçimlərini sıradan çıxart" + "enableContextMenuItem": { + "message": "Konteks menyu seçimlərini göstər" }, - "disableContextMenuItemDesc": { - "message": "Kontekst menyu seçimləri, hazırkı vərəqinizdə veb sayt üçün parol yaratma və giriş etmə əməliyyatlarına cəld müraciəti təmin edir." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "İlkin URI uyğunluq aşkarlaması", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Təzələmə tamamlandı" }, - "disableAutoTotpCopy": { - "message": "Avtomatik TOTP kopyalamasını sıradan çıxart" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Hesabınıza əlavə edilən kimlik təsdiqləyici açarı varsa, giriş məlumatları avto-doldurulanda TOTP təsdiqləmə kodu da avtomatik olaraq lövhəyə kopyalanacaq." }, - "disableAutoBiometricsPrompt": { - "message": "Açılışda biometrik üçün soruşma" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium üzvlük lazımdır" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Bu səyyah bu açılan pəncərədə U2F tələblərini emal edə bilmir. U2F istifadə edərək giriş etmək üçün bu açılan pəncərəni yeni bir pəncərədə açmaq istəyirsiniz?" }, - "disableFavicon": { - "message": "Veb sayt nişanlarını sıradan çıxart" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Veb sayt nişanları, anbarınızda hər bir giriş elementinin yanında tanımağınıza kömək edən bir təsvir təqdim edir." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Nişan sayğacını sıradan çıxart" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Nişan sayğacı, anbarınızdakı hazırkı səhifə üçün neçə dəfə giriş etdiyinizi göstərir." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Kart sahibinin adı" diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index f484a99fcec..061897a2a9b 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -567,23 +567,23 @@ "message": "Без папкі", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Адключыць апавяшчэнне аб даданні ўліковых даных" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "Апавяшчэнне аб даданні ўліковых даных аўтаматычна прапануе вам захаваць новыя ўліковыя даныя ў сховішчы." }, - "dontShowCardsCurrentTab": { - "message": "Не паказваць карткі на панэлі ўкладак" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Карткі з вашага сховішча пералічаны на 'Бягучай укладцы' для спрашчэння доступу да аўтазапаўнення." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Не показывать Пасведчанні на панэлі картак" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Элементы асабістых даных з вашага сховішча пералічаны на 'Бягучай укладцы' для спрашчэння доступу да аўтазапаўнення." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Ачыстка буфера абмену", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Так, захаваць зараз" }, - "disableChangedPasswordNotification": { - "message": "Адключыць апавяшчэнне аб змяненні пароля" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "Апавяшчэнне аб змяненні пароля аўтаматычна прапануе вам абнавіць пароль уваходу ў сховішча, калі выявіць, што вы змянілі яго на вэб-сайце." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Вы хочаце абнавіць гэты пароль у Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Так, абнавіць зараз" }, - "disableContextMenuItem": { - "message": "Адключыць параметры кантэкстнага меню" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Параметры кантэкстнага меню забяспечваюць хуткі доступ да генератара пароляў і ўліковых даных для сайта на бягучай укладцы." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Выяўленне супадзення URI па змаўчанні", @@ -671,7 +671,7 @@ "message": "Абагуленыя" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Абнаўленне завершана" }, - "disableAutoTotpCopy": { - "message": "Адключыць аўтаматычнае капіяванне TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Калі да вашых уліковых даных прымацаваны ключ праверкі сапраўднасці, то код пацвярджэння TOTP будзе скапіяваны пры аўтазапаўненні ўліковых даных." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Патрабуецца прэміяльны статус" @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Гэты браўзар не можа апрацоўваць запыты U2F у гэтым усплывальным акне. Вы хочаце адкрыць гэта ўсплывальнае акно ў новым акне, каб мець магчымасць увайсці ў сістэму, выкарыстоўваючы U2F?" }, - "disableFavicon": { - "message": "Адключыць значкі вэб-сайтаў" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Значкі вэб-сайтаў паказваюцца з кожным элементам у вашым сховішчы." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Імя ўладальніка карткі" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 8516726da52..0ddfe08b3cf 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -567,23 +567,23 @@ "message": "Няма папка", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Без известия за запазване на регистрации" + "enableAddLoginNotification": { + "message": "Питане за добавяне на запис" }, "addLoginNotificationDesc": { "message": "Известията за запазване на регистрации автоматично ви подканят да запазите новите регистрации в трезора при първото ви вписване в тях." }, - "dontShowCardsCurrentTab": { - "message": "Без карти в основния прозорец" + "showCardsCurrentTab": { + "message": "Показване на карти в страницата с разделите" }, - "dontShowCardsCurrentTabDesc": { - "message": "Скриване на записите за платежните карти, които обичайно се извеждат в основния прозорец за лесно въвеждане." + "showCardsCurrentTabDesc": { + "message": "Показване на картите в страницата с разделите, за лесно автоматично попълване." }, - "dontShowIdentitiesCurrentTab": { - "message": "Без самоличности в основния прозорец" + "showIdentitiesCurrentTab": { + "message": "Показване на самоличности в страницата с разделите" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Скриване на записите за самоличност, които обичайно се извеждат в основния прозорец за лесно въвеждане." + "showIdentitiesCurrentTabDesc": { + "message": "Показване на самоличностите в страницата с разделите, за лесно автоматично попълване." }, "clearClipboard": { "message": "Изчистване на буфера", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Да, нека се запише сега" }, - "disableChangedPasswordNotification": { - "message": "Без известия за обновяване на регистрации" + "enableChangedPasswordNotification": { + "message": "Питане за обновяване на съществуващ запис" }, - "disableChangedPasswordNotificationDesc": { - "message": "Известията за обновяване на регистрации автоматично ви подканят да запазите променените регистрации в трезора при засичането на промяната." + "changedPasswordNotificationDesc": { + "message": "Питане за обновяване на паролата към даден запис, когато бъде засечена промяна в съответния уеб сайт." }, "notificationChangeDesc": { "message": "Да се обнови ли паролата в Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Да, нека се обнови сега" }, - "disableContextMenuItem": { - "message": "Без добавки към контекстното меню" + "enableContextMenuItem": { + "message": "Показване на опции в контекстното меню" }, - "disableContextMenuItemDesc": { - "message": "Добавките към контекстното меню позволяват бърз достъп до данните за сайтовете в текущия раздел, както и създаването на нова парола." + "contextMenuItemDesc": { + "message": "Щракване с десния бутон на мишката дава достъп до генератора на пароли и съответстващите за уеб сайта записи. " }, "defaultUriMatchDetection": { "message": "Стандартно засичане на адреси", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Абонаментът е опреснен" }, - "disableAutoTotpCopy": { - "message": "Без автоматично копиране на временни, еднократни пароли" + "enableAutoTotpCopy": { + "message": "Автоматично копиране на TOTP" }, "disableAutoTotpCopyDesc": { "message": "Ако регистрацията използва и удостоверителен ключ, временният, еднократен код се копира в буфера при всяко автоматично попълване на формуляра." }, - "disableAutoBiometricsPrompt": { - "message": "Да не се изискват биометрични данни при стартиране" + "enableAutoBiometricsPrompt": { + "message": "Питане за биометрични данни при пускане" }, "premiumRequired": { "message": "Изисква се платен абонамент" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Този браузър не поддържа заявки чрез U2F в такъв изскачащ прозорец. Искате ли да се отвори нов прозорец, за да може да се впишете чрез U2F?" }, - "disableFavicon": { - "message": "Без иконки на сайтовете" + "enableFavicon": { + "message": "Показване на иконките на уеб сайтовете" }, - "disableFaviconDesc": { - "message": "Иконките на сайтовете са разпознаваемо изображение за всеки запис в трезора." + "faviconDesc": { + "message": "Показване на разпознаваемо изображение до всеки запис." }, - "disableBadgeCounter": { - "message": "Изключване на значката с брояч" + "enableBadgeCounter": { + "message": "Показване на брояч в значка" }, - "disableBadgeCounterDesc": { - "message": "Значката с брояч показва колко варианта за вписване имате в трезора си за текущата страница." + "badgeCounterDesc": { + "message": "Показване на броя записи, които имате за текущата уеб страница." }, "cardholderName": { "message": "Име на притежателя на картата" diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index 22719cab3e2..1e301072251 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -567,23 +567,23 @@ "message": "কোন ফোল্ডার নেই", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "লগইন যোগ করুন বিজ্ঞপ্তি অক্ষম করুন" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "\"লগইন যোগ করুন বিজ্ঞপ্তি\" স্বয়ংক্রিয়ভাবে আপনই যখনই প্রথমবারের জন্য লগ ইন করেন তখন আপনার ভল্টে নতুন লগইনগুলি সংরক্ষণ করতে অনুরোধ জানায়।" }, - "dontShowCardsCurrentTab": { - "message": "ট্যাব পৃষ্ঠায় কার্ডগুলি দেখাবেন না" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "আপনার ভল্ট থেকে কার্ড বস্তুগুলি সহজেই স্বতঃপূরণের জন্য 'বর্তমান ট্যাব' পৃষ্ঠাতে তালিকাভুক্ত করা হয়েছে।" + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "ট্যাব পৃষ্ঠায় পরিচয় দেখাবেন না" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "আপনার ভল্ট থেকে পরিচিতি বস্তুগুলি সহজেই স্বতঃপূরণের জন্য 'বর্তমান ট্যাব' পৃষ্ঠাতে তালিকাভুক্ত করা হয়েছে।" + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "ক্লিপবোর্ড পরিষ্কার", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "হ্যাঁ, এখনই সংরক্ষণ করুন" }, - "disableChangedPasswordNotification": { - "message": "পাসওয়ার্ড পরিবর্তন বিজ্ঞপ্তি অক্ষম করুন" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"পাসওয়ার্ড পরিবর্তন বিজ্ঞপ্তি\" স্বয়ংক্রিয়ভাবে আপনাকে আপনার ভল্টে একটি লগইনের পাসওয়ার্ড হালনাগাদ করার অনুরোধ জানায় যখনই কোনও ওয়েবসাইটে আপনি এটি পরিবর্তন করেছেন তা সনাক্ত করে।" + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "আপনি কি এই পাসওয়ার্ডটি Bitwarden এ হালনাগাদ করতে চান?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "হ্যাঁ, এখনই হালনাগাদ করুন" }, - "disableContextMenuItem": { - "message": "প্রসঙ্গ মেনু বিকল্পগুলি অক্ষম করুন" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "প্রসঙ্গ মেনু বিকল্পগুলি আপনার বর্তমান ট্যাবের ওয়েবসাইটটির জন্য পাসওয়ার্ড তৈরি এবং লগিনগুলি দ্রুত সরবরাহ করে।" + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "পূর্ব-নির্ধারিত URI মিল সনাক্তকরণ", @@ -639,7 +639,7 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { @@ -671,7 +671,7 @@ "message": "ভাগকৃত" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "পুনঃসতেজ সম্পূর্ণ" }, - "disableAutoTotpCopy": { - "message": "স্বয়ংক্রিয় TOTP অনুলিপি অক্ষম করুন" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "যদি আপনার লগইনের সাথে একটি প্রমাণীকরণ কী থাকে, আপনি যখনই লগইনটি স্বতঃপূরণ করেন তবে TOTP যাচাইকরণ কোডটি স্বয়ংক্রিয়ভাবে আপনার ক্লিপবোর্ডে অনুলিপিত করা হয়।" }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "প্রিমিয়াম আবশ্যক" @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "ব্রাউজারটি এই পপআপ উইন্ডোতে U2F অনুরোধগুলি প্রক্রিয়া করতে পারে না। আপনি কি এই পপআপটি একটি নতুন উইন্ডোতে খুলতে চান যাতে আপনি U2F ব্যবহার করে লগ ইন করতে পারেন?" }, - "disableFavicon": { - "message": "ওয়েবসাইট আইকন অক্ষম করুন" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "ওয়েবসাইট আইকনগুলি আপনার ভল্টের প্রতিটি লগইন বস্তুর পাশে একটি পরিচয়যোগ্য চিত্র সরবরাহ করে।" + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "কার্ডধারীর নাম" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1562,7 +1562,7 @@ "message": "একটি প্রতিষ্ঠানের নীতি আপনার মালিকানা বিকল্পগুলিকে প্রভাবিত করছে।" }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index f65da3812c2..8fcb5822a75 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -146,10 +146,10 @@ "message": "Account" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Two-step Login" + "message": "Two-step login" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "about": { "message": "About" @@ -193,7 +193,7 @@ "message": "There are no folders to list." }, "helpFeedback": { - "message": "Help & Feedback" + "message": "Help & feedback" }, "sync": { "message": "Sync" @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "Select" @@ -330,7 +330,7 @@ "message": "Other" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "Immediately" @@ -403,10 +403,10 @@ "message": "4 hours" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "Never" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index dddb948d7e6..8b1860cd025 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -47,7 +47,7 @@ "message": "Torneu a escriure la contrasenya mestra" }, "masterPassHint": { - "message": "Suggeriment de la contrasenya mestra (opcional)" + "message": "Pista de la contrasenya mestra (opcional)" }, "tab": { "message": "Pestanya" @@ -567,23 +567,23 @@ "message": "Cap carpeta", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Deshabilita la notificació per afegir inicis de sessió" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "La \"Notificació per afegir inicis de sessió\" demana automàticament que guardeu els nous inicis de sessió a la vostra caixa forta quan inicieu la sessió per primera vegada." }, - "dontShowCardsCurrentTab": { - "message": "No mostres les targetes a la pàgina de la pestanya" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Els elements de targeta de la vostra caixa forta es detallen a la pàgina \"Fitxa actual\" per obtenir un fàcil accés amb l'emplenat automàtic." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "No mostres les identitats a la pàgina de la pestanya" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Els elements d'identitat de la vostra caixa forta es detallen a la pàgina \"Fitxa actual\" per obtenir un fàcil accés amb l'emplenat automàtic." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Neteja el porta-retalls", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Guarda" }, - "disableChangedPasswordNotification": { - "message": "Deshabilita la notificació de contrasenya modificada" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "La \"Notificació de contrasenya modificada\" us demanarà automàticament que actualitzeu la contrasenya d'inici de sessió a la vostra caixa forta cada vegada que detecte que s'ha canviat en un lloc web." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Voleu actualitzar aquesta contrasenya a Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Actualitza" }, - "disableContextMenuItem": { - "message": "Inhabilita opcions del menú contextual" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Les opcions del menú contextual proporcionen accés ràpid a la generació de contrasenyes i inici de sessió al lloc web en la vostra pestanya actual." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Detecció de coincidències URI per defecte", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Actualització completa" }, - "disableAutoTotpCopy": { - "message": "Deshabilita la còpia TOTP automàtica" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Si el vostre inici de sessió té una clau d'autenticació associada, el codi de verificació TOTP es copiarà al vostre porta-retalls quan s'òmpliga automàticament l'inici de sessió." }, - "disableAutoBiometricsPrompt": { - "message": "No sol·liciteu biomètrica en iniciar." + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium requerit" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Aquest navegador no pot processar sol·licituds U2F en aquesta finestra emergent. Voleu obrir l'emergent en una finestra nova per poder iniciar la sessió mitjançant U2F?" }, - "disableFavicon": { - "message": "Deshabilitar icones del lloc web" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Les icones del lloc web proporcionen una imatge que es pot reconèixer al costat de cada element d'inici de sessió a la vostra caixa forta." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Deshabilita el comptador d'insígnies" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "El comptador d’insígnies indica quants inicis de sessió teniu de la pàgina actual en la vostra caixa forta." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Nom del titular de la targeta" diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 24408ce92eb..21376841a65 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -567,23 +567,23 @@ "message": "Žádná složka", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Vypnout oznámení Přidat přihlašovací údaje" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "Oznámení „Přidat přihlašovací údaje“ automaticky vyzve k uložení přihlašovacích údajů do trezoru, pokud se s nimi přihlašujete poprvé." + "message": "Notifikace \"Přidat přihlašovací údaje\" automaticky vyzve k uložení přihlašovacích údajů do trezoru, pokud se s nimi poprvé přihlašujete." }, - "dontShowCardsCurrentTab": { - "message": "Nezobrazovat karty na stránce Karta" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Položky karet jsou zobrazovány na stránce „Karta“ pro usnadnění automatického vyplňování." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Nezobrazovat identity na stránce Karta" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Položky identit jsou zobrazovány na stránce „Karta“ pro usnadnění automatického vyplňování." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Vyčistit schránku", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Ano, uložit nyní" }, - "disableChangedPasswordNotification": { - "message": "Vypnout oznámení o změněném heslu" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "„Oznámení o změněném heslu“ vás automaticky požádá o potvrzení uložení aktualizovaného hesla v případě, že aplikace rozpozná vámi provedenou změnu hesla na webu." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Chcete aktualizovat toto heslo v Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Ano, aktualizovat" }, - "disableContextMenuItem": { - "message": "Vypnout kontextové menu" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Kontextové menu poskytuje rychlý přístup k automatickému vyplnění, zkopírování nebo vygenerování přihlašovacích údajů pro aktuální stránku." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Výchozí zjišťování shody URI", @@ -643,7 +643,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Exportovat trezor" + "message": "Exportovat přihlašovací údaje" }, "fileFormat": { "message": "Formát souboru" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Obnova je dokončena" }, - "disableAutoTotpCopy": { - "message": "Vypnout automatické kopírování kódu TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Pokud mají vaše přihlašovací údaje přidán autentizační klíč pro TOTP, vygenerovaný ověřovací kód (TOTP) se automaticky zkopíruje do schránky při každém automatickém vyplnění přihlašovacích údajů." }, - "disableAutoBiometricsPrompt": { - "message": "Neptat se na biometriku při spuštění." + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Vyžaduje prémiové členství" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Tento prohlížeč nemůže zpracovat U2F požadavky ve vyskakovacím okně. Chcete otevřít toto vyskakovací okno v novém okně, abyste se mohli přihlásit pomocí U2F?" }, - "disableFavicon": { - "message": "Vypnout ikonky webových stránek" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Ikonky webových stránek zobrazí snadno rozeznatelný obrázek vedle každé položky ve vašem trezoru." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Nezobrazovat počet přihlašovacích údajů" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Počítadlo zobrazuje, kolik přihlašovacích údajů máte pro aktuální stránku ve svém trezoru." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Jméno držitele karty" diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 301a2399986..b852955131e 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -218,7 +218,7 @@ "message": "Bitwarden web-boks" }, "importItems": { - "message": "Importér elementer" + "message": "Importer elementer" }, "select": { "message": "Vælg" @@ -567,23 +567,23 @@ "message": "Ingen mappe", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Deaktivér Tilføj login notifikation" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "\"Tilføj login notifikation\" spørger dig automatisk om du vil gemme nye logins til din boks, når du logger ind med dem for første gang." }, - "dontShowCardsCurrentTab": { - "message": "Vis ikke kort på fanebladet" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Kort fra din boks er vist på siden 'Aktuel fane' for nem adgang til automatisk udfyldning." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Vis ikke identiteter på fanebladet" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identiteter fra din boks er vist på siden 'Aktuel fane' for nem adgang til automatisk udfyldning." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Ryd udklipsholder", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Gem" }, - "disableChangedPasswordNotification": { - "message": "Deaktivér besked om ændret adgangskode" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Besked om ændret adgangskode\" beder dig automatisk om at opdatere en adgangskode i din boks, når det opdager, at du har ændret den på en hjemmeside." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Vil du opdatere denne adgangskode i Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Opdatér" }, - "disableContextMenuItem": { - "message": "Deaktivér Kontekst-menu valgmuligheder" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Kontekst-menu valgmuligheder giver hurtig adgang til adgangskode generering og login til hjemmesiden i din aktuelle fane." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Standard URI matchmetode", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Opdatering færdig" }, - "disableAutoTotpCopy": { - "message": "Deaktivér Automatisk TOTP kopi" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Hvis dit login har en autentificeringsnøgle tilknyttet, kopieres TOTP verifikationskoden automatisk til din udklipsholder når du auto-udfylder login." }, - "disableAutoBiometricsPrompt": { - "message": "Bed ikke om biometri ved start" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium påkrævet" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Denne browser kan ikke behandle U2F-anmodninger i dette popup-vindue. Vil du åbne denne popup i et nyt vindue, så du kan logge ind ved hjælp af U2F?" }, - "disableFavicon": { - "message": "Slå webikoner fra" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Webikoner vises som et genkendeligt billede ved siden af hvert loginelement i din boks." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Deaktivér Badge-tæller" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge-tæller angiver, hvor mange logins du har for den aktuelle side i din boks." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Kortindehaverens navn" diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 1f46c2c37ef..deb394e192d 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -146,7 +146,7 @@ "message": "Konto" }, "changeMasterPassword": { - "message": "Master-Passwort ändern" + "message": "Masterpasswort ändern" }, "fingerprintPhrase": { "message": "Prüfschlüssel", @@ -157,7 +157,7 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Zwei-Faktor Authentifizierung" + "message": "Zwei-Faktor-Authentifizierung" }, "logOut": { "message": "Abmelden" @@ -193,7 +193,7 @@ "message": "Es gibt keine Ordner zum Anzeigen." }, "helpFeedback": { - "message": "Hilfe & Feedback" + "message": "Hilfe & Rückmeldung" }, "sync": { "message": "Synchronisierung" @@ -215,7 +215,7 @@ "message": "Generiert automatisch ein starkes und einzigartiges Passwort." }, "bitWebVault": { - "message": "Bitwarden Web-Tresor" + "message": "Bitwarden Web-Datenspeicher" }, "importItems": { "message": "Einträge importieren" @@ -567,23 +567,23 @@ "message": "Kein Ordner", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "\"Login hinzufügen\" Benachrichtigung deaktivieren" + "enableAddLoginNotification": { + "message": "Danach fragen Zugangsdaten hinzuzufügen" }, "addLoginNotificationDesc": { - "message": "Die \"Login hinzufügen\" Benachrichtigung fragt dich automatisch ob du neue Zugangsdaten im Tresor speichern möchtest wenn du dich zum ersten mal mit ihnen anmeldest." + "message": "Die \"Login hinzufügen\" Benachrichtigung fragt Sie automatisch, ob Sie neue Zugangsdaten in Ihrem Tresor speichern möchten, wenn Sie sich zum ersten Mal mit ihnen anmelden." }, - "dontShowCardsCurrentTab": { - "message": "Zeige keine Karten auf der Tab Seite" + "showCardsCurrentTab": { + "message": "Karten auf Tab Seite anzeigen" }, - "dontShowCardsCurrentTabDesc": { - "message": "Karten Daten aus deinem Tresors werden unter 'Tab' aufgeführt um automatisches ausfüllen zu vereinfachen." + "showCardsCurrentTabDesc": { + "message": "Karten-Einträge auf der Tab Seite anzeigen, um das automatische Ausfüllen zu vereinfachen." }, - "dontShowIdentitiesCurrentTab": { - "message": "Zeige keine Identitäten auf der Tab Seite" + "showIdentitiesCurrentTab": { + "message": "Identitäten auf Tab Seite anzeigen" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identitäts Daten aus deinem Tresors werden unter 'Tab' aufgeführt um automatisches ausfüllen zu vereinfachen." + "showIdentitiesCurrentTabDesc": { + "message": "Identitäten-Einträge auf der Tab Seite anzeigen, um das automatische Ausfüllen zu vereinfachen." }, "clearClipboard": { "message": "Zwischenablage leeren", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Ja, jetzt speichern" }, - "disableChangedPasswordNotification": { - "message": "Passwort geändert Benachrichtigung deaktivieren" + "enableChangedPasswordNotification": { + "message": "Danach fragen bestehende Zugangsdaten zu aktualisieren" }, - "disableChangedPasswordNotificationDesc": { - "message": "Die \"Passwort geändert Benachrichtigung\" fragt automatisch nach, ein Passwort in deinem Tressor zu aktualisieren, sobald erkannt wurde das du es auf einer Webseite geändert hast." + "changedPasswordNotificationDesc": { + "message": "Danach fragen das Passwort der Zugangsdaten zu aktualisieren, wenn eine Änderung auf einer Webseite erkannt wird." }, "notificationChangeDesc": { "message": "Möchtest du dieses Passwort in Bitwarden aktualisieren?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Aktualisieren" }, - "disableContextMenuItem": { - "message": "Kontextmenü-Optionen deaktivieren" + "enableContextMenuItem": { + "message": "Kontextmenüoptionen anzeigen" }, - "disableContextMenuItemDesc": { - "message": "Kontextmenü-Optionen bieten schnellen Zugriff auf die Passwortgenerierung und Zugangsdaten für die Webseite in Ihrem aktuellen Tab." + "contextMenuItemDesc": { + "message": "Verwende einen zweiten Klick, um auf die Erstellung von Passwörtern und passende Zugangsdaten für die Webseite zuzugreifen. " }, "defaultUriMatchDetection": { "message": "Standard-URI-Match-Erkennung", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Aktualisierung abgeschlossen" }, - "disableAutoTotpCopy": { - "message": "Automatisches TOTP Kopieren deaktivieren" + "enableAutoTotpCopy": { + "message": "TOTP automatisch kopieren" }, "disableAutoTotpCopyDesc": { - "message": "Ist ein Authentifizierungsschlüssel mit deinen Zugangsdaten verknüpft, wird der TOTP Bestätigungscode automatisch in die Zwischenablage kopiert, wenn du die Zugangsdaten einfügen lässt." + "message": "Ist ein Authentifizierungsschlüssel mit Ihren Zugangsdaten verknüpft, wird der TOTP Verifizierungscode automatisch in die Zwischenablage kopiert, wenn Sie die Zugangsdaten automatisch ausfüllen lassen." }, - "disableAutoBiometricsPrompt": { - "message": "Beim Start nicht nach biometrischen Daten fragen" + "enableAutoBiometricsPrompt": { + "message": "Beim Start nach biometrischen Daten fragen" }, "premiumRequired": { "message": "Premium-Mitgliedschaft wird benötigt" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Dieser Browser kann U2F-Anfragen in diesem Popup-Fenster nicht verarbeiten. Möchtest du dieses Popup in einem neuen Fenster öffnen, damit du dich mit U2F anmelden kannst?" }, - "disableFavicon": { - "message": "Icons der Website deaktivieren" + "enableFavicon": { + "message": "Zeige Webseiten-Icons" }, - "disableFaviconDesc": { - "message": "Website-Symbole zeigen ein erkennbares Bild neben jedem Login in deinem Tresor." + "faviconDesc": { + "message": "Ein wiedererkennbares Bild neben jeden Zugangsdaten anzeigen." }, - "disableBadgeCounter": { - "message": "Badge-Zähler deaktivieren" + "enableBadgeCounter": { + "message": "Zeige Badge-Zähler" }, - "disableBadgeCounterDesc": { - "message": "Der Badge-Zähler zeigt an, wie viele Zugangsdaten du für die aktuelle Seite in deinem Tresor hast." + "badgeCounterDesc": { + "message": "Gebe an, wie viele Zugangsdaten du für die aktuelle Webseite besitzt." }, "cardholderName": { "message": "Name des Karteninhabers" diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 85586076dd3..a0cb192ad7b 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -59,7 +59,7 @@ "message": "Το Vault μου" }, "allVaults": { - "message": "All Vaults" + "message": "Όλα τα Vaults" }, "tools": { "message": "Εργαλεία" @@ -567,23 +567,23 @@ "message": "Χωρίς Φάκελο", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Απενεργοποιήστε την Προσθήκη Ειδοποίησης Σύνδεσης" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "Η \"Προσθήκη Ειδοποίησης Σύνδεσης\" σας προτρέπει αυτόματα να αποθηκεύσετε νέες συνδέσεις στο vault σας κάθε φορά που θα συνδεθείτε για πρώτη φορά." }, - "dontShowCardsCurrentTab": { - "message": "Να μην Εμφανίζονται Κάρτες στη Σελίδα Καρτέλας" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Τα στοιχεία καρτών από το vault σας παρατίθενται στη σελίδα \"Τρέχουσα καρτέλα\" για εύκολη πρόσβαση με αυτόματη συμπλήρωση." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Να μην εμφανίζονται ταυτότητες στην καρτέλα" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Στοιχεία ταυτότητας από το vault σας, παρατίθενται στη σελίδα \"Τρέχουσα καρτέλα\" για εύκολη πρόσβαση με αυτόματη συμπλήρωση." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Εκκαθάριση Πρόχειρου", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Ναι, Αποθήκευση Τώρα" }, - "disableChangedPasswordNotification": { - "message": "Απενεργοποίηση ειδοποίησης αλλαγής κωδικού πρόσβασης" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "Η \"Ειδοποίηση Αλλαγής Κωδικού\" σας ζητά αυτόματα να ενημερώσετε τον κωδικό πρόσβασης του εισερχόμενου στο vault σας κάθε φορά που εντοπίζει ότι το έχετε αλλάξει σε έναν ιστότοπο." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Θέλετε να ενημερώσετε αυτό τον κωδικό στο Bitwarden ;" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Ναι, Ενημέρωση Τώρα" }, - "disableContextMenuItem": { - "message": "Απενεργοποιήστε τις Επιλογές του Μενού Περιβάλλοντος" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Οι επιλογές του μενού περιβάλλοντος παρέχουν γρήγορη πρόσβαση στην δημιουργία και σύνδεση κωδικών πρόσβασης για τον ιστότοπο στην τρέχουσα καρτέλα." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Προεπιλεγμένη ανίχνευση αντιστοιχίας URI", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Επιτυχής ανανέωση" }, - "disableAutoTotpCopy": { - "message": "Απενεργοποίηση Aυτόματης Aντιγραφής TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Εάν η σύνδεση έχει συνημμένο κάποιο κλειδί επαλήθευσης, ο κωδικός επαλήθευσης TOTP αντιγράφεται αυτόματα στο πρόχειρο κάθε φορά που συμπληρώνετε αυτόματα τα στοιχεία σύνδεσης." }, - "disableAutoBiometricsPrompt": { - "message": "Μην ζητάτε βιομετρικά στοιχεία κατά την εκκίνηση" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Απαιτείται Έκδοση Premium" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Αυτό το πρόγραμμα περιήγησης δεν μπορεί να επεξεργαστεί αιτήματα του U2F σε αυτό το αναδυόμενο παράθυρο. Θέλετε να ανοίξετε το αναδυόμενο σε νέο παράθυρο, ώστε να μπορείτε να συνδεθείτε χρησιμοποιώντας U2F;" }, - "disableFavicon": { - "message": "Απενεργοποίηση Εικονιδίων Ιστοσελίδας" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Τα εικονίδια ιστοσελίδων παρέχουν μια αναγνωρίσιμη εικόνα δίπλα σε κάθε στοιχείο σύνδεσης της λίστας σας." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Απενεργοποίηση Μετρητή Σημάτων" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Ο μετρητής εμβλημάτων δείχνει πόσες συνδέσεις έχετε για την τρέχουσα σελίδα στο vault σας." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Όνομα κατόχου της κάρτας" @@ -1947,10 +1947,10 @@ "message": "Υπηρεσία" }, "forwardedEmail": { - "message": "Forwarded Email Alias" + "message": "Προωθημένο Email Alias" }, "forwardedEmailDesc": { - "message": "Generate an email alias with an external forwarding service." + "message": "Δημιουργήστε ένα alias email με μια εξωτερική υπηρεσία προώθησης." }, "hostname": { "message": "Hostname", @@ -1960,9 +1960,9 @@ "message": "API Access Token" }, "apiKey": { - "message": "API Key" + "message": "Kλειδί API" }, "ssoKeyConnectorError": { - "message": "Key Connector error: make sure Key Connector is available and working correctly." + "message": "Σφάλμα Key Connector: βεβαιωθείτε ότι το Key Connector είναι διαθέσιμο και λειτουργεί σωστά." } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index f65da3812c2..63464b4de8f 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -146,10 +146,10 @@ "message": "Account" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Two-step Login" + "message": "Two-step login" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "about": { "message": "About" @@ -193,7 +193,7 @@ "message": "There are no folders to list." }, "helpFeedback": { - "message": "Help & Feedback" + "message": "Help & feedback" }, "sync": { "message": "Sync" @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "Select" @@ -330,7 +330,7 @@ "message": "Other" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "Immediately" @@ -403,10 +403,10 @@ "message": "4 hours" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "Never" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." @@ -1846,7 +1846,7 @@ } } }, - "vaultTimeoutToLarge": { + "vaultTimeoutTooLarge": { "message": "Your vault timeout exceeds the restrictions set by your organization." }, "vaultExportDisabled": { diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index cbb5308bac4..8e8dd1a1d27 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -567,23 +567,23 @@ "message": "No folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable add login notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "The \"add login notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." }, - "dontShowCardsCurrentTab": { - "message": "Don't show cards on tab page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'current tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't show identities on tab page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'current tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Clear clipboard", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable changed password notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"changed password notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable context menu options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Default URI match detection", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable automatic TOTP copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium required" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this pop-up window. Do you want to open this pop-up in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable website icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website icons provide a recognisable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognisable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder name" diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index f05a26210e5..f5f8847096e 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -567,23 +567,23 @@ "message": "No folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable add login notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "The \"add login notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." }, - "dontShowCardsCurrentTab": { - "message": "Don't show cards on tab page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'current tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't show identities on tab page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'current tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Clear clipboard", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Yes, save now" }, - "disableChangedPasswordNotification": { - "message": "Disable changed password notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"changed password notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Yes, update now" }, - "disableContextMenuItem": { - "message": "Disable context menu options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Default URI match detection", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable automatic TOTP copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium required" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this pop-up window. Do you want to open this pop-up in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable website icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website icons provide a recognisable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 97ee1332770..7c7be429c62 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -567,23 +567,23 @@ "message": "Sin carpeta", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Deshabilitar notificación para añadir entradas" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "La opción \"Notificación para añadir entradas\" pregunta automáticamente si quieres guardar nuevas entradas en tu caja fuerte cuando te identificas en un sitio web por primera vez." }, - "dontShowCardsCurrentTab": { - "message": "No mostrar tarjetas en la pestaña" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Los elementos de tarjeta de tu caja fuerte aparecen en la página \"pestaña actual\" para facilitar el acceso al autocompletado." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "No mostrar las identidades en la página de ficha" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Los elementos de identidad de tu caja fuerte aparecen en la página \"pestaña actual\" para facilitar el acceso al autocompletado." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Vaciar portapapeles", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Sí, guardar ahora" }, - "disableChangedPasswordNotification": { - "message": "Deshabilitar la notificación de cambio de contraseña" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "La \"notificación de cambio de contraseña\" te pregunta automáticamente si quieres actualizar la contraseña de un usuario de tu caja fuerte cuando detecta que la has cambiado en un sitio web." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "¿Desea actualizar esta contraseña en Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Actualizado" }, - "disableContextMenuItem": { - "message": "Deshabilitar opciones del menú contextual" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Las opciones del menú contextual permiten un acceso rápido al generador de contraseñas y a las entradas para el sitio abierto en tu pestaña actual." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Detección por defecto de coincidencia de URI", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Actualización completada" }, - "disableAutoTotpCopy": { - "message": "Deshabilitar copiado automático de códigos TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Si tu entrada tiene una clave de autenticación adjunta, el código de verificación TOTP es copiado automáticamente al portapapeles cuando autorellenas una entrada." }, - "disableAutoBiometricsPrompt": { - "message": "No solicitar biométricos al iniciar" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium requerido" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Este navegador no puede procesar las peticiones U2F en esta ventana emergente. ¿Desea abrir esta ventana emergente en una nueva ventana para que pueda iniciar sesión usando U2F?" }, - "disableFavicon": { - "message": "Deshabilitar iconos del sitio web" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Los iconos del sitio web añaden una imagen reconocible al lado de cada entrada de tu caja fuerte." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Desactivar contador de insignias" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "El contador de insinuaciones indica cuántos registros tienes para la página actual en tu bóveda." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Nombre en la tarjeta" diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 316ad330c44..a1be1609b7b 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -567,23 +567,23 @@ "message": "Kaust puudub", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Keela \"Lisa konto andmed\" teavitus" + "enableAddLoginNotification": { + "message": "Küsi \"Lisa konto andmed\"" }, "addLoginNotificationDesc": { "message": "\"Lisa konto andmed\" teavitus ilmub pärast esimest sisselogimist ning võimaldab kontoandmeid automaatselt Bitwardenisse lisada." }, - "dontShowCardsCurrentTab": { - "message": "Ära kuva \"Kaart\" vaates krediitkaardi andmeid" + "showCardsCurrentTab": { + "message": "Kuva kaardiandmed hoidla vaates" }, - "dontShowCardsCurrentTabDesc": { - "message": "Krediit- ja teiste kaartide andmed kuvatakse vaikeseadena \"Kaart\" vaates, et neid oleks lihtsam sisestada." + "showCardsCurrentTabDesc": { + "message": "Kuvab hoidla lehel kaardiandmed, et neid saaks kiiresti sisestada" }, - "dontShowIdentitiesCurrentTab": { - "message": "Ära kuva \"Kaart\" vaates identiteete" + "showIdentitiesCurrentTab": { + "message": "Kuva hoidla vaates identiteete" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identiteediandmeid kuvatakse vaikeseadena \"Kaart\" vaates, et neid oleks lihtsam sisestada." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Lõikelaua sisu kustutamine", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Jah, salvesta see" }, - "disableChangedPasswordNotification": { - "message": "Keela Muudetud parooli teavitus" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "Kui mistahes veebilehel on toimunud parooli vahetamine, annab \"Muudetud parooli teavitus\" märku, et värskendaksid seda ka Bitwardeni paroolihoidlas." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Soovid seda parooli ka Bitwardenis uuendada?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Jah, uuenda" }, - "disableContextMenuItem": { - "message": "Keela parema kliki menüü valikud" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Parema kliki menüü abil saad kiiresti parooli genereerida ja konkreetse veebilehe kasutajakonto andmeid sisestada." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Vaike URI sobivuse tuvastamine", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Uuendamine lõpetatud" }, - "disableAutoTotpCopy": { - "message": "Keela automaatne TOTP kopeerimine" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Kui sinu sisselogimise andmetele on juurde lisatud autentimise võti, kopeeritakse TOTP kood automaatse täitmise kasutamisel lõikelauale." }, - "disableAutoBiometricsPrompt": { - "message": "Ära küsi käivitudes biomeetrilist kinnitamist" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Vajalik on Premium versioon" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Kasutatav brauser ei suuda selles aknas U2F päringuid töödelda. Kas avan uue akna, et saaksid U2F abil sisse logida?" }, - "disableFavicon": { - "message": "Keela veebilehel ikoonid" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Ikoonid aitavad hoidlas olevaid veebilehti paremini ära tunda." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Keela kirjete loendur" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Kirjete loendur kuvab Bitwardeni ikoonil konkreetse leheküljega seotud kirjete arvu." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Kaardiomaniku nimi" diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json new file mode 100644 index 00000000000..cb7ecda5b7d --- /dev/null +++ b/apps/browser/src/_locales/eu/messages.json @@ -0,0 +1,1968 @@ +{ + "appName": { + "message": "Bitwarden" + }, + "extName": { + "message": "Bitwarden - Pasahitz kudeatzailea", + "description": "Extension name, MUST be less than 40 characters (Safari restriction)" + }, + "extDesc": { + "message": "Bitwarden, zure gailu guztietarako pasahitzen kudeatzaile seguru eta doakoa da.", + "description": "Extension description" + }, + "loginOrCreateNewAccount": { + "message": "Identifika zaitez edo sortu kontu berri bat zure kutxa gotorrera sartzeko." + }, + "createAccount": { + "message": "Sortu kontua" + }, + "login": { + "message": "Hasi saioa" + }, + "enterpriseSingleSignOn": { + "message": "Enpresentzako saio hasiera bakarra" + }, + "cancel": { + "message": "Ezeztatu" + }, + "close": { + "message": "Itxi" + }, + "submit": { + "message": "Bidali" + }, + "emailAddress": { + "message": "Helbide elektronikoa" + }, + "masterPass": { + "message": "Pasahitz nagusia" + }, + "masterPassDesc": { + "message": "Pasahitz nagusia, kutxa gotorrera sartzeko erabiltzen duzun pasahitza da. Oso garrantzitsua da ez ahaztea, ahazten baduzu, ez dago pasahitza berreskuratzeko modurik." + }, + "masterPassHintDesc": { + "message": "Pasahitz nagusia ahazten baduzu, pista batek pasahitza gogoratzen lagunduko dizu." + }, + "reTypeMasterPass": { + "message": "Idatzi berriro pasahitz nagusia" + }, + "masterPassHint": { + "message": "Pasahitz nagusirako pista (aukerakoa)" + }, + "tab": { + "message": "Fitxak" + }, + "vault": { + "message": "Kutxa gotorra" + }, + "myVault": { + "message": "Nire kutxa gotorra" + }, + "allVaults": { + "message": "Kutxa gotor guztiak" + }, + "tools": { + "message": "Tresnak" + }, + "settings": { + "message": "Ezarpenak" + }, + "currentTab": { + "message": "Uneko fitxa" + }, + "copyPassword": { + "message": "Kopiatu pasahitza" + }, + "copyNote": { + "message": "Kopiatu oharra" + }, + "copyUri": { + "message": "Kopiatu URIa" + }, + "copyUsername": { + "message": "Kopiatu erabiltzaile-izena" + }, + "copyNumber": { + "message": "Kopiatu zenbakia" + }, + "copySecurityCode": { + "message": "Kopiatu segurtasun kodea (CVV)" + }, + "autoFill": { + "message": "Osatze automatikoa" + }, + "generatePasswordCopied": { + "message": "Sortu pasahitza (kopiatuta)" + }, + "copyElementIdentifier": { + "message": "Eremu pertsonalizatuaren izena kopiatu" + }, + "noMatchingLogins": { + "message": "Bat datozen sarrerarik gabe" + }, + "unlockVaultMenu": { + "message": "Desblokeatu kutxa gotorra" + }, + "loginToVaultMenu": { + "message": "Hasi saioa zure kutxa gotorrean" + }, + "autoFillInfo": { + "message": "Ez dago automatikoki betetzeko sarrerarik nabigatzailearen uneko fitxan." + }, + "addLogin": { + "message": "Sarrera gehitu" + }, + "addItem": { + "message": "Gehitu elementua" + }, + "passwordHint": { + "message": "Pasahitza gogoratzeko pista" + }, + "enterEmailToGetHint": { + "message": "Sartu zure kontuko posta elektronikoa pasahitz nagusiaren pista jasotzeko." + }, + "getMasterPasswordHint": { + "message": "Jaso pasahitz nagusiaren pista" + }, + "continue": { + "message": "Jarraitu" + }, + "sendVerificationCode": { + "message": "Bidali egiaztatze-kodea zure posta elektronikora" + }, + "sendCode": { + "message": "Bidali kodea" + }, + "codeSent": { + "message": "Kodea bidalia" + }, + "verificationCode": { + "message": "Egiaztatze-kodea" + }, + "confirmIdentity": { + "message": "Jarraitzeko, berretsi zure nortasuna." + }, + "account": { + "message": "Kontua" + }, + "changeMasterPassword": { + "message": "Aldatu pasahitz nagusia" + }, + "fingerprintPhrase": { + "message": "Hatz-marka digitalaren esaldia", + "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." + }, + "yourAccountsFingerprint": { + "message": "Zure kontuko hatz-marka digitalaren esaldia", + "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." + }, + "twoStepLogin": { + "message": "Bi pausoko saio hasiera" + }, + "logOut": { + "message": "Itxi saioa" + }, + "about": { + "message": "Honi buruz" + }, + "version": { + "message": "\nBertsioa" + }, + "save": { + "message": "Gorde" + }, + "move": { + "message": "Mugitu" + }, + "addFolder": { + "message": "Gehitu karpeta" + }, + "name": { + "message": "Izena" + }, + "editFolder": { + "message": "Editatu Karpeta" + }, + "deleteFolder": { + "message": "Ezabatu karpeta" + }, + "folders": { + "message": "Karpetak" + }, + "noFolders": { + "message": "Ez dago erakusteko karpetarik." + }, + "helpFeedback": { + "message": "Laguntza eta iritziak" + }, + "sync": { + "message": "Sinkronizatu" + }, + "syncVaultNow": { + "message": "Sinkronizatu kutxa gotorra orain" + }, + "lastSync": { + "message": "Azken sinkronizazioa:" + }, + "passGen": { + "message": "Pasahitz sortzailea" + }, + "generator": { + "message": "Sortzailea", + "description": "Short for 'Password Generator'." + }, + "passGenInfo": { + "message": "Pasahitz sendoak eta bakarrak sortzen ditu automatikoki zure sarbideetarako." + }, + "bitWebVault": { + "message": "Bitwarden kutxa gotorra" + }, + "importItems": { + "message": "Inportatu elementuak" + }, + "select": { + "message": "Hautatu" + }, + "generatePassword": { + "message": "Sortu pasahitza" + }, + "regeneratePassword": { + "message": "Birsortu pasahitza" + }, + "options": { + "message": "Aukerak" + }, + "length": { + "message": "Luzera" + }, + "uppercase": { + "message": "Letra larria (A-Z)" + }, + "lowercase": { + "message": "Letra txikia (a-z)" + }, + "numbers": { + "message": "Zenbakiak (0-9)" + }, + "specialCharacters": { + "message": "Karaktere bereziak (!@#$%^&*)" + }, + "numWords": { + "message": "Hitz kopurua" + }, + "wordSeparator": { + "message": "Hitz banatzailea" + }, + "capitalize": { + "message": "Hasierako letra larria", + "description": "Make the first letter of a work uppercase." + }, + "includeNumber": { + "message": "Sartu zenbakia" + }, + "minNumbers": { + "message": "Gutxieneko zenbaki kopurua" + }, + "minSpecial": { + "message": "Gutxieneko karaktere bereziak" + }, + "avoidAmbChar": { + "message": "Saihestu karaktere anbiguoak" + }, + "searchVault": { + "message": "Bilatu kutxa gotorrean" + }, + "edit": { + "message": "Editatu" + }, + "view": { + "message": "Erakutsi" + }, + "noItemsInList": { + "message": "Ez dago erakusteko elementurik." + }, + "itemInformation": { + "message": "Elementuaren informazioa" + }, + "username": { + "message": "Erabiltzaile izena" + }, + "password": { + "message": "Pasahitza" + }, + "passphrase": { + "message": "Pasaesaldia" + }, + "favorite": { + "message": "Gogokoa" + }, + "notes": { + "message": "Oharrak" + }, + "note": { + "message": "Oharra" + }, + "editItem": { + "message": "Editatu elementua" + }, + "folder": { + "message": "Karpeta" + }, + "deleteItem": { + "message": "Ezabatu elementua" + }, + "viewItem": { + "message": "Bistaratu elementua" + }, + "launch": { + "message": "Abiarazi" + }, + "website": { + "message": "Webgunea" + }, + "toggleVisibility": { + "message": "Txandakatu ikusgarritasuna" + }, + "manage": { + "message": "Kudeatu" + }, + "other": { + "message": "Bestelakoak" + }, + "rateExtension": { + "message": "Baloratu gehigarria" + }, + "rateExtensionDesc": { + "message": "Mesedez, aipu on batekin lagundu!" + }, + "browserNotSupportClipboard": { + "message": "Zure web nabigatzaileak ez du onartzen arbelean erraz kopiatzea. Eskuz kopiatu." + }, + "verifyIdentity": { + "message": "Zure nortasuna egiaztatu" + }, + "yourVaultIsLocked": { + "message": "Zure kutxa gotorra blokeatuta dago. Egiaztatu zure nortasuna jarraitzeko." + }, + "unlock": { + "message": "Desblokeatu" + }, + "loggedInAsOn": { + "message": "$HOSTNAME$-en $EMAIL$ bezala saioa hasita.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "hostname": { + "content": "$2", + "example": "bitwarden.com" + } + } + }, + "invalidMasterPassword": { + "message": "Pasahitz nagusi baliogabea" + }, + "vaultTimeout": { + "message": "Kutxa gotorraren itxarote-denbora" + }, + "lockNow": { + "message": "Blokeatu orain" + }, + "immediately": { + "message": "Berehala" + }, + "tenSeconds": { + "message": "10 segundu" + }, + "twentySeconds": { + "message": "20 segundu" + }, + "thirtySeconds": { + "message": "30 segundu" + }, + "oneMinute": { + "message": "Minutu 1" + }, + "twoMinutes": { + "message": "2 minutu" + }, + "fiveMinutes": { + "message": "5 minutu" + }, + "fifteenMinutes": { + "message": "15 minutu" + }, + "thirtyMinutes": { + "message": "30 minutu" + }, + "oneHour": { + "message": "Ordu 1" + }, + "fourHours": { + "message": "4 ordu" + }, + "onLocked": { + "message": "Sistema blokeatzean" + }, + "onRestart": { + "message": "Nabigatzailea berrabiaraztean" + }, + "never": { + "message": "Inoiz ez" + }, + "security": { + "message": "Segurtasuna" + }, + "errorOccurred": { + "message": "Akats bat gertatu da" + }, + "emailRequired": { + "message": "Emaila derrigorrezkoa da." + }, + "invalidEmail": { + "message": "Email helbide baliogabea" + }, + "masterPassRequired": { + "message": "Pasahitz nagusia derrigorrezkoa da." + }, + "masterPassLength": { + "message": "Pasahitz nagusiak gutxienez 8 karaktere izan behar ditu." + }, + "masterPassDoesntMatch": { + "message": "Pasahitz nagusiaren egiaztatzea ez dator bat." + }, + "newAccountCreated": { + "message": "Zure kontua egina dago. Orain saioa has dezakezu." + }, + "masterPassSent": { + "message": "Mezu elektroniko bat bidali dizugu zure pasahitz nagusiaren pistarekin." + }, + "verificationCodeRequired": { + "message": "Egiaztapen-kodea behar da." + }, + "invalidVerificationCode": { + "message": "Egiaztapen-kodea ez da baliozkoa" + }, + "valueCopied": { + "message": "$VALUE$ kopiatuta", + "description": "Value has been copied to the clipboard.", + "placeholders": { + "value": { + "content": "$1", + "example": "Password" + } + } + }, + "autofillError": { + "message": "Ezin izan da orri honetan hautatutako elementua automatikoki bete. Kopiatu eta itsatsi informazioa dagokion tokian." + }, + "loggedOut": { + "message": "Saioa itxita" + }, + "loginExpired": { + "message": "Saioa amaitu da." + }, + "logOutConfirmation": { + "message": "Ziur zaude saioa itxi nahi duzula?" + }, + "yes": { + "message": "Bai" + }, + "no": { + "message": "Ez" + }, + "unexpectedError": { + "message": "Ustekabeko akatsa gertatu da." + }, + "nameRequired": { + "message": "Izena beharrezkoa da." + }, + "addedFolder": { + "message": "Karpeta gehituta" + }, + "changeMasterPass": { + "message": "Aldatu pasahitz nagusia" + }, + "changeMasterPasswordConfirmation": { + "message": "You can change your master password on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "twoStepLoginConfirmation": { + "message": "Two-step login makes your account more secure by requiring you to verify your login with another device such as a security key, authenticator app, SMS, phone call, or email. Two-step login can be enabled on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "editedFolder": { + "message": "Edited folder" + }, + "deleteFolderConfirmation": { + "message": "Are you sure you want to delete this folder?" + }, + "deletedFolder": { + "message": "Deleted folder" + }, + "gettingStartedTutorial": { + "message": "Getting Started Tutorial" + }, + "gettingStartedTutorialVideo": { + "message": "Watch our getting started tutorial to learn how to get the most out of the browser extension." + }, + "syncingComplete": { + "message": "Syncing complete" + }, + "syncingFailed": { + "message": "Syncing failed" + }, + "passwordCopied": { + "message": "Password copied" + }, + "uri": { + "message": "URI" + }, + "uriPosition": { + "message": "URI $POSITION$", + "description": "A listing of URIs. Ex: URI 1, URI 2, URI 3, etc.", + "placeholders": { + "position": { + "content": "$1", + "example": "2" + } + } + }, + "newUri": { + "message": "New URI" + }, + "addedItem": { + "message": "Added item" + }, + "editedItem": { + "message": "Edited item" + }, + "deleteItemConfirmation": { + "message": "Do you really want to send to the trash?" + }, + "deletedItem": { + "message": "Sent item to trash" + }, + "overwritePassword": { + "message": "Overwrite Password" + }, + "overwritePasswordConfirmation": { + "message": "Are you sure you want to overwrite the current password?" + }, + "overwriteUsername": { + "message": "Overwrite Username" + }, + "overwriteUsernameConfirmation": { + "message": "Are you sure you want to overwrite the current username?" + }, + "searchFolder": { + "message": "Search folder" + }, + "searchCollection": { + "message": "Search collection" + }, + "searchType": { + "message": "Search type" + }, + "noneFolder": { + "message": "No Folder", + "description": "This is the folder for uncategorized items" + }, + "enableAddLoginNotification": { + "message": "Ask to add login" + }, + "addLoginNotificationDesc": { + "message": "Ask to add an item if one isn't found in your vault." + }, + "showCardsCurrentTab": { + "message": "Show cards on Tab page" + }, + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." + }, + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" + }, + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." + }, + "clearClipboard": { + "message": "Clear clipboard", + "description": "Clipboard is the operating system thing where you copy/paste data to on your device." + }, + "clearClipboardDesc": { + "message": "Automatically clear copied values from your clipboard.", + "description": "Clipboard is the operating system thing where you copy/paste data to on your device." + }, + "notificationAddDesc": { + "message": "Should Bitwarden remember this password for you?" + }, + "notificationAddSave": { + "message": "Save" + }, + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" + }, + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." + }, + "notificationChangeDesc": { + "message": "Do you want to update this password in Bitwarden?" + }, + "notificationChangeSave": { + "message": "Update" + }, + "enableContextMenuItem": { + "message": "Show context menu options" + }, + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " + }, + "defaultUriMatchDetection": { + "message": "Default URI match detection", + "description": "Default URI match detection for auto-fill." + }, + "defaultUriMatchDetectionDesc": { + "message": "Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill." + }, + "theme": { + "message": "Theme" + }, + "themeDesc": { + "message": "Change the application's color theme." + }, + "dark": { + "message": "Dark", + "description": "Dark color" + }, + "light": { + "message": "Light", + "description": "Light color" + }, + "solarizedDark": { + "message": "Solarized dark", + "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." + }, + "exportVault": { + "message": "Export vault" + }, + "fileFormat": { + "message": "File Format" + }, + "warning": { + "message": "WARNING", + "description": "WARNING (should stay in capitalized letters if the language permits)" + }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, + "exportWarningDesc": { + "message": "This export contains your vault data in an unencrypted format. You should not store or send the exported file over unsecure channels (such as email). Delete it immediately after you are done using it." + }, + "encExportKeyWarningDesc": { + "message": "This export encrypts your data using your account's encryption key. If you ever rotate your account's encryption key you should export again since you will not be able to decrypt this export file." + }, + "encExportAccountWarningDesc": { + "message": "Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account." + }, + "exportMasterPassword": { + "message": "Enter your master password to export your vault data." + }, + "shared": { + "message": "Shared" + }, + "learnOrg": { + "message": "Learn about organizations" + }, + "learnOrgConfirmation": { + "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" + }, + "moveToOrganization": { + "message": "Move to Organization" + }, + "share": { + "message": "Share" + }, + "movedItemToOrg": { + "message": "$ITEMNAME$ moved to $ORGNAME$", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + }, + "orgname": { + "content": "$2", + "example": "Company Name" + } + } + }, + "moveToOrgDesc": { + "message": "Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved." + }, + "learnMore": { + "message": "Learn more" + }, + "authenticatorKeyTotp": { + "message": "Authenticator Key (TOTP)" + }, + "verificationCodeTotp": { + "message": "Verification Code (TOTP)" + }, + "copyVerificationCode": { + "message": "Copy Verification Code" + }, + "attachments": { + "message": "Attachments" + }, + "deleteAttachment": { + "message": "Delete attachment" + }, + "deleteAttachmentConfirmation": { + "message": "Are you sure you want to delete this attachment?" + }, + "deletedAttachment": { + "message": "Deleted attachment" + }, + "newAttachment": { + "message": "Add New Attachment" + }, + "noAttachments": { + "message": "No attachments." + }, + "attachmentSaved": { + "message": "The attachment has been saved." + }, + "file": { + "message": "File" + }, + "selectFile": { + "message": "Select a file." + }, + "maxFileSize": { + "message": "Maximum file size is 500 MB." + }, + "featureUnavailable": { + "message": "Feature Unavailable" + }, + "updateKey": { + "message": "You cannot use this feature until you update your encryption key." + }, + "premiumMembership": { + "message": "Premium membership" + }, + "premiumManage": { + "message": "Manage Membership" + }, + "premiumManageAlert": { + "message": "You can manage your membership on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "premiumRefresh": { + "message": "Refresh Membership" + }, + "premiumNotCurrentMember": { + "message": "You are not currently a premium member." + }, + "premiumSignUpAndGet": { + "message": "Sign up for a premium membership and get:" + }, + "ppremiumSignUpStorage": { + "message": "1 GB encrypted storage for file attachments." + }, + "ppremiumSignUpTwoStep": { + "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + }, + "ppremiumSignUpReports": { + "message": "Password hygiene, account health, and data breach reports to keep your vault safe." + }, + "ppremiumSignUpTotp": { + "message": "TOTP verification code (2FA) generator for logins in your vault." + }, + "ppremiumSignUpSupport": { + "message": "Priority customer support." + }, + "ppremiumSignUpFuture": { + "message": "All future premium features. More coming soon!" + }, + "premiumPurchase": { + "message": "Purchase Premium" + }, + "premiumPurchaseAlert": { + "message": "You can purchase premium membership on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "premiumCurrentMember": { + "message": "You are a premium member!" + }, + "premiumCurrentMemberThanks": { + "message": "Thank you for supporting Bitwarden." + }, + "premiumPrice": { + "message": "All for just $PRICE$ /year!", + "placeholders": { + "price": { + "content": "$1", + "example": "$10" + } + } + }, + "refreshComplete": { + "message": "Refresh complete" + }, + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" + }, + "disableAutoTotpCopyDesc": { + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." + }, + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" + }, + "premiumRequired": { + "message": "Premium Required" + }, + "premiumRequiredDesc": { + "message": "A premium membership is required to use this feature." + }, + "enterVerificationCodeApp": { + "message": "Enter the 6 digit verification code from your authenticator app." + }, + "enterVerificationCodeEmail": { + "message": "Enter the 6 digit verification code that was emailed to $EMAIL$.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "verificationCodeEmailSent": { + "message": "Verification email sent to $EMAIL$.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "rememberMe": { + "message": "Remember me" + }, + "sendVerificationCodeEmailAgain": { + "message": "Send verification code email again" + }, + "useAnotherTwoStepMethod": { + "message": "Use another two-step login method" + }, + "insertYubiKey": { + "message": "Insert your YubiKey into your computer's USB port, then touch its button." + }, + "insertU2f": { + "message": "Insert your security key into your computer's USB port. If it has a button, touch it." + }, + "webAuthnNewTab": { + "message": "To start the WebAuthn 2FA verification. Click the button below to open a new tab and follow the instructions provided in the new tab." + }, + "webAuthnNewTabOpen": { + "message": "Open new tab" + }, + "webAuthnAuthenticate": { + "message": "Authenticate WebAuthn" + }, + "loginUnavailable": { + "message": "Login Unavailable" + }, + "noTwoStepProviders": { + "message": "This account has two-step login enabled, however, none of the configured two-step providers are supported by this web browser." + }, + "noTwoStepProviders2": { + "message": "Please use a supported web browser (such as Chrome) and/or add additional providers that are better supported across web browsers (such as an authenticator app)." + }, + "twoStepOptions": { + "message": "Two-step Login Options" + }, + "recoveryCodeDesc": { + "message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account." + }, + "recoveryCodeTitle": { + "message": "Recovery Code" + }, + "authenticatorAppTitle": { + "message": "Authenticator App" + }, + "authenticatorAppDesc": { + "message": "Use an authenticator app (such as Authy or Google Authenticator) to generate time-based verification codes.", + "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." + }, + "yubiKeyTitle": { + "message": "YubiKey OTP Security Key" + }, + "yubiKeyDesc": { + "message": "Use a YubiKey to access your account. Works with YubiKey 4, 4 Nano, 4C, and NEO devices." + }, + "duoDesc": { + "message": "Verify with Duo Security using the Duo Mobile app, SMS, phone call, or U2F security key.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "duoOrganizationDesc": { + "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "webAuthnTitle": { + "message": "FIDO2 WebAuthn" + }, + "webAuthnDesc": { + "message": "Use any WebAuthn enabled security key to access your account." + }, + "emailTitle": { + "message": "Email" + }, + "emailDesc": { + "message": "Verification codes will be emailed to you." + }, + "selfHostedEnvironment": { + "message": "Self-hosted Environment" + }, + "selfHostedEnvironmentFooter": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation." + }, + "customEnvironment": { + "message": "Custom Environment" + }, + "customEnvironmentFooter": { + "message": "For advanced users. You can specify the base URL of each service independently." + }, + "baseUrl": { + "message": "Server URL" + }, + "apiUrl": { + "message": "API Server URL" + }, + "webVaultUrl": { + "message": "Web Vault Server URL" + }, + "identityUrl": { + "message": "Identity Server URL" + }, + "notificationsUrl": { + "message": "Notifications Server URL" + }, + "iconsUrl": { + "message": "Icons Server URL" + }, + "environmentSaved": { + "message": "The environment URLs have been saved." + }, + "enableAutoFillOnPageLoad": { + "message": "Auto-fill on page load" + }, + "enableAutoFillOnPageLoadDesc": { + "message": "If a login form is detected, auto-fill when the web page loads." + }, + "experimentalFeature": { + "message": "This is currently an experimental feature. Use at your own risk." + }, + "defaultAutoFillOnPageLoad": { + "message": "Default autofill setting for login items" + }, + "defaultAutoFillOnPageLoadDesc": { + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." + }, + "itemAutoFillOnPageLoad": { + "message": "Auto-fill on page load (if enabled in Options)" + }, + "autoFillOnPageLoadUseDefault": { + "message": "Use default setting" + }, + "autoFillOnPageLoadYes": { + "message": "Auto-fill on page load" + }, + "autoFillOnPageLoadNo": { + "message": "Do not auto-fill on page load" + }, + "commandOpenPopup": { + "message": "Open vault popup" + }, + "commandOpenSidebar": { + "message": "Open vault in sidebar" + }, + "commandAutofillDesc": { + "message": "Auto-fill the last used login for the current website" + }, + "commandGeneratePasswordDesc": { + "message": "Generate and copy a new random password to the clipboard" + }, + "commandLockVaultDesc": { + "message": "Lock the vault" + }, + "privateModeWarning": { + "message": "Private mode support is experimental and some features are limited." + }, + "customFields": { + "message": "Custom Fields" + }, + "copyValue": { + "message": "Copy Value" + }, + "value": { + "message": "Value" + }, + "newCustomField": { + "message": "New Custom Field" + }, + "dragToSort": { + "message": "Drag to sort" + }, + "cfTypeText": { + "message": "Text" + }, + "cfTypeHidden": { + "message": "Hidden" + }, + "cfTypeBoolean": { + "message": "Boolean" + }, + "cfTypeLinked": { + "message": "Linked", + "description": "This describes a field that is 'linked' (tied) to another field." + }, + "linkedValue": { + "message": "Linked value", + "description": "This describes a value that is 'linked' (tied) to another value." + }, + "popup2faCloseMessage": { + "message": "Clicking outside the popup window to check your email for your verification code will cause this popup to close. Do you want to open this popup in a new window so that it does not close?" + }, + "popupU2fCloseMessage": { + "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" + }, + "enableFavicon": { + "message": "Show website icons" + }, + "faviconDesc": { + "message": "Show a recognizable image next to each login." + }, + "enableBadgeCounter": { + "message": "Show badge counter" + }, + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." + }, + "cardholderName": { + "message": "Cardholder Name" + }, + "number": { + "message": "Number" + }, + "brand": { + "message": "Brand" + }, + "expirationMonth": { + "message": "Expiration Month" + }, + "expirationYear": { + "message": "Expiration Year" + }, + "expiration": { + "message": "Expiration" + }, + "january": { + "message": "January" + }, + "february": { + "message": "February" + }, + "march": { + "message": "March" + }, + "april": { + "message": "April" + }, + "may": { + "message": "May" + }, + "june": { + "message": "June" + }, + "july": { + "message": "July" + }, + "august": { + "message": "August" + }, + "september": { + "message": "September" + }, + "october": { + "message": "October" + }, + "november": { + "message": "November" + }, + "december": { + "message": "December" + }, + "securityCode": { + "message": "Security Code" + }, + "ex": { + "message": "ex." + }, + "title": { + "message": "Title" + }, + "mr": { + "message": "Mr" + }, + "mrs": { + "message": "Mrs" + }, + "ms": { + "message": "Ms" + }, + "dr": { + "message": "Dr" + }, + "firstName": { + "message": "First Name" + }, + "middleName": { + "message": "Middle Name" + }, + "lastName": { + "message": "Last Name" + }, + "fullName": { + "message": "Full Name" + }, + "identityName": { + "message": "Identity Name" + }, + "company": { + "message": "Company" + }, + "ssn": { + "message": "Social Security Number" + }, + "passportNumber": { + "message": "Passport Number" + }, + "licenseNumber": { + "message": "License Number" + }, + "email": { + "message": "Email" + }, + "phone": { + "message": "Phone" + }, + "address": { + "message": "Address" + }, + "address1": { + "message": "Address 1" + }, + "address2": { + "message": "Address 2" + }, + "address3": { + "message": "Address 3" + }, + "cityTown": { + "message": "City / Town" + }, + "stateProvince": { + "message": "State / Province" + }, + "zipPostalCode": { + "message": "Zip / Postal Code" + }, + "country": { + "message": "Country" + }, + "type": { + "message": "Type" + }, + "typeLogin": { + "message": "Login" + }, + "typeLogins": { + "message": "Logins" + }, + "typeSecureNote": { + "message": "Secure Note" + }, + "typeCard": { + "message": "Card" + }, + "typeIdentity": { + "message": "Identity" + }, + "passwordHistory": { + "message": "Password History" + }, + "back": { + "message": "Back" + }, + "collections": { + "message": "Collections" + }, + "favorites": { + "message": "Favorites" + }, + "popOutNewWindow": { + "message": "Pop out to a new window" + }, + "refresh": { + "message": "Refresh" + }, + "cards": { + "message": "Cards" + }, + "identities": { + "message": "Identities" + }, + "logins": { + "message": "Logins" + }, + "secureNotes": { + "message": "Secure Notes" + }, + "clear": { + "message": "Clear", + "description": "To clear something out. example: To clear browser history." + }, + "checkPassword": { + "message": "Check if password has been exposed." + }, + "passwordExposed": { + "message": "This password has been exposed $VALUE$ time(s) in data breaches. You should change it.", + "placeholders": { + "value": { + "content": "$1", + "example": "2" + } + } + }, + "passwordSafe": { + "message": "This password was not found in any known data breaches. It should be safe to use." + }, + "baseDomain": { + "message": "Base domain", + "description": "Domain name. Ex. website.com" + }, + "domainName": { + "message": "Domain name", + "description": "Domain name. Ex. website.com" + }, + "host": { + "message": "Host", + "description": "A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'." + }, + "exact": { + "message": "Exact" + }, + "startsWith": { + "message": "Starts with" + }, + "regEx": { + "message": "Regular expression", + "description": "A programming term, also known as 'RegEx'." + }, + "matchDetection": { + "message": "Match Detection", + "description": "URI match detection for auto-fill." + }, + "defaultMatchDetection": { + "message": "Default match detection", + "description": "Default URI match detection for auto-fill." + }, + "toggleOptions": { + "message": "Toggle Options" + }, + "toggleCurrentUris": { + "message": "Toggle Current URIs", + "description": "Toggle the display of the URIs of the currently open tabs in the browser." + }, + "currentUri": { + "message": "Current URI", + "description": "The URI of one of the current open tabs in the browser." + }, + "organization": { + "message": "Organization", + "description": "An entity of multiple related people (ex. a team or business organization)." + }, + "types": { + "message": "Types" + }, + "allItems": { + "message": "All Items" + }, + "noPasswordsInList": { + "message": "There are no passwords to list." + }, + "remove": { + "message": "Remove" + }, + "default": { + "message": "Default" + }, + "dateUpdated": { + "message": "Updated", + "description": "ex. Date this item was updated" + }, + "datePasswordUpdated": { + "message": "Password Updated", + "description": "ex. Date this password was updated" + }, + "neverLockWarning": { + "message": "Are you sure you want to use the \"Never\" option? Setting your lock options to \"Never\" stores your vault's encryption key on your device. If you use this option you should ensure that you keep your device properly protected." + }, + "noOrganizationsList": { + "message": "You do not belong to any organizations. Organizations allow you to securely share items with other users." + }, + "noCollectionsInList": { + "message": "There are no collections to list." + }, + "ownership": { + "message": "Ownership" + }, + "whoOwnsThisItem": { + "message": "Who owns this item?" + }, + "strong": { + "message": "Strong", + "description": "ex. A strong password. Scale: Weak -> Good -> Strong" + }, + "good": { + "message": "Good", + "description": "ex. A good password. Scale: Weak -> Good -> Strong" + }, + "weak": { + "message": "Weak", + "description": "ex. A weak password. Scale: Weak -> Good -> Strong" + }, + "weakMasterPassword": { + "message": "Weak Master Password" + }, + "weakMasterPasswordDesc": { + "message": "The master password you have chosen is weak. You should use a strong master password (or a passphrase) to properly protect your Bitwarden account. Are you sure you want to use this master password?" + }, + "pin": { + "message": "PIN", + "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." + }, + "unlockWithPin": { + "message": "Unlock with PIN" + }, + "setYourPinCode": { + "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." + }, + "pinRequired": { + "message": "PIN code is required." + }, + "invalidPin": { + "message": "Invalid PIN code." + }, + "unlockWithBiometrics": { + "message": "Unlock with biometrics" + }, + "awaitDesktop": { + "message": "Awaiting confirmation from desktop" + }, + "awaitDesktopDesc": { + "message": "Please confirm using biometrics in the Bitwarden Desktop application to enable biometrics for browser." + }, + "lockWithMasterPassOnRestart": { + "message": "Lock with master password on browser restart" + }, + "selectOneCollection": { + "message": "You must select at least one collection." + }, + "cloneItem": { + "message": "Clone Item" + }, + "clone": { + "message": "Clone" + }, + "passwordGeneratorPolicyInEffect": { + "message": "One or more organization policies are affecting your generator settings." + }, + "vaultTimeoutAction": { + "message": "Vault timeout action" + }, + "lock": { + "message": "Lock", + "description": "Verb form: to make secure or inaccesible by" + }, + "trash": { + "message": "Trash", + "description": "Noun: a special folder to hold deleted items" + }, + "searchTrash": { + "message": "Search trash" + }, + "permanentlyDeleteItem": { + "message": "Permanently Delete Item" + }, + "permanentlyDeleteItemConfirmation": { + "message": "Are you sure you want to permanently delete this item?" + }, + "permanentlyDeletedItem": { + "message": "Permanently Deleted item" + }, + "restoreItem": { + "message": "Restore Item" + }, + "restoreItemConfirmation": { + "message": "Are you sure you want to restore this item?" + }, + "restoredItem": { + "message": "Restored Item" + }, + "vaultTimeoutLogOutConfirmation": { + "message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?" + }, + "vaultTimeoutLogOutConfirmationTitle": { + "message": "Timeout Action Confirmation" + }, + "autoFillAndSave": { + "message": "Auto-fill and Save" + }, + "autoFillSuccessAndSavedUri": { + "message": "Auto-filled Item and Saved URI" + }, + "autoFillSuccess": { + "message": "Auto-filled Item" + }, + "setMasterPassword": { + "message": "Set Master Password" + }, + "masterPasswordPolicyInEffect": { + "message": "One or more organization policies require your master password to meet the following requirements:" + }, + "policyInEffectMinComplexity": { + "message": "Minimum complexity score of $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, + "policyInEffectMinLength": { + "message": "Minimum length of $LENGTH$", + "placeholders": { + "length": { + "content": "$1", + "example": "14" + } + } + }, + "policyInEffectUppercase": { + "message": "Contain one or more uppercase characters" + }, + "policyInEffectLowercase": { + "message": "Contain one or more lowercase characters" + }, + "policyInEffectNumbers": { + "message": "Contain one or more numbers" + }, + "policyInEffectSpecial": { + "message": "Contain one or more of the following special characters $CHARS$", + "placeholders": { + "chars": { + "content": "$1", + "example": "!@#$%^&*" + } + } + }, + "masterPasswordPolicyRequirementsNotMet": { + "message": "Your new master password does not meet the policy requirements." + }, + "acceptPolicies": { + "message": "By checking this box you agree to the following:" + }, + "acceptPoliciesError": { + "message": "Terms of Service and Privacy Policy have not been acknowledged." + }, + "termsOfService": { + "message": "Terms of Service" + }, + "privacyPolicy": { + "message": "Privacy Policy" + }, + "hintEqualsPassword": { + "message": "Your password hint cannot be the same as your password." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Desktop sync verification" + }, + "desktopIntegrationVerificationText": { + "message": "Please verify that the desktop application shows this fingerprint: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Browser integration is not enabled" + }, + "desktopIntegrationDisabledDesc": { + "message": "Browser integration is not enabled in the Bitwarden Desktop application. Please enable it in the settings within the desktop application." + }, + "startDesktopTitle": { + "message": "Start the Bitwarden Desktop application" + }, + "startDesktopDesc": { + "message": "The Bitwarden Desktop application needs to be started before unlock with biometrics can be used." + }, + "errorEnableBiometricTitle": { + "message": "Unable to enable biometrics" + }, + "errorEnableBiometricDesc": { + "message": "Action was canceled by the desktop application" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Desktop application invalidated the secure communication channel. Please retry this operation" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Desktop communication interrupted" + }, + "nativeMessagingWrongUserDesc": { + "message": "The desktop application is logged into a different account. Please ensure both applications are logged into the same account." + }, + "nativeMessagingWrongUserTitle": { + "message": "Account missmatch" + }, + "biometricsNotEnabledTitle": { + "message": "Biometrics not enabled" + }, + "biometricsNotEnabledDesc": { + "message": "Browser biometrics requires desktop biometric to be enabled in the settings first." + }, + "biometricsNotSupportedTitle": { + "message": "Biometrics not supported" + }, + "biometricsNotSupportedDesc": { + "message": "Browser biometrics is not supported on this device." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Permission not provided" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Without permission to communicate with the Bitwarden Desktop Application we cannot provide biometrics in the browser extension. Please try again." + }, + "nativeMessaginPermissionSidebarTitle": { + "message": "Permission request error" + }, + "nativeMessaginPermissionSidebarDesc": { + "message": "This action cannot be done in the sidebar, please retry the action in the popup or popout." + }, + "personalOwnershipSubmitError": { + "message": "Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available Collections." + }, + "personalOwnershipPolicyInEffect": { + "message": "An organization policy is affecting your ownership options." + }, + "excludedDomains": { + "message": "Excluded domains" + }, + "excludedDomainsDesc": { + "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." + }, + "excludedDomainsInvalidDomain": { + "message": "$DOMAIN$ is not a valid domain", + "placeholders": { + "domain": { + "content": "$1", + "example": "googlecom" + } + } + }, + "send": { + "message": "Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "searchSends": { + "message": "Search Sends", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "addSend": { + "message": "Add Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeText": { + "message": "Text" + }, + "sendTypeFile": { + "message": "File" + }, + "allSends": { + "message": "All Sends", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, + "expired": { + "message": "Expired" + }, + "pendingDeletion": { + "message": "Pending deletion" + }, + "passwordProtected": { + "message": "Password protected" + }, + "copySendLink": { + "message": "Copy Send link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "removePassword": { + "message": "Remove Password" + }, + "delete": { + "message": "Delete" + }, + "removedPassword": { + "message": "Removed Password" + }, + "deletedSend": { + "message": "Deleted Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendLink": { + "message": "Send link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "disabled": { + "message": "Disabled" + }, + "removePasswordConfirmation": { + "message": "Are you sure you want to remove the password?" + }, + "deleteSend": { + "message": "Delete Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deleteSendConfirmation": { + "message": "Are you sure you want to delete this Send?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editSend": { + "message": "Edit Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeHeader": { + "message": "What type of Send is this?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendNameDesc": { + "message": "A friendly name to describe this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendFileDesc": { + "message": "The file you want to send." + }, + "deletionDate": { + "message": "Deletion Date" + }, + "deletionDateDesc": { + "message": "The Send will be permanently deleted on the specified date and time.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "expirationDate": { + "message": "Expiration Date" + }, + "expirationDateDesc": { + "message": "If set, access to this Send will expire on the specified date and time.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "oneDay": { + "message": "1 day" + }, + "days": { + "message": "$DAYS$ days", + "placeholders": { + "days": { + "content": "$1", + "example": "2" + } + } + }, + "custom": { + "message": "Custom" + }, + "maximumAccessCount": { + "message": "Maximum Access Count" + }, + "maximumAccessCountDesc": { + "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendPasswordDesc": { + "message": "Optionally require a password for users to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendNotesDesc": { + "message": "Private notes about this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendDisableDesc": { + "message": "Disable this Send so that no one can access it.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendShareDesc": { + "message": "Copy this Send's link to clipboard upon save.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTextDesc": { + "message": "The text you want to send." + }, + "sendHideText": { + "message": "Hide this Send's text by default.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "currentAccessCount": { + "message": "Current Access Count" + }, + "createSend": { + "message": "Create New Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "newPassword": { + "message": "New Password" + }, + "sendDisabled": { + "message": "Send Disabled", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendDisabledWarning": { + "message": "Due to an enterprise policy, you are only able to delete an existing Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createdSend": { + "message": "Created Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editedSend": { + "message": "Edited Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendLinuxChromiumFileWarning": { + "message": "In order to choose a file, open the extension in the sidebar (if possible) or pop out to a new window by clicking this banner." + }, + "sendFirefoxFileWarning": { + "message": "In order to choose a file using Firefox, open the extension in the sidebar or pop out to a new window by clicking this banner." + }, + "sendSafariFileWarning": { + "message": "In order to choose a file using Safari, pop out to a new window by clicking this banner." + }, + "sendFileCalloutHeader": { + "message": "Before you start" + }, + "sendFirefoxCustomDatePopoutMessage1": { + "message": "To use a calendar style date picker", + "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.'" + }, + "sendFirefoxCustomDatePopoutMessage2": { + "message": "click here", + "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": "to pop out your window.", + "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": { + "message": "The expiration date provided is not valid." + }, + "deletionDateIsInvalid": { + "message": "The deletion date provided is not valid." + }, + "expirationDateAndTimeRequired": { + "message": "An expiration date and time are required." + }, + "deletionDateAndTimeRequired": { + "message": "A deletion date and time are required." + }, + "dateParsingError": { + "message": "There was an error saving your deletion and expiration dates." + }, + "hideEmail": { + "message": "Hide my email address from recipients." + }, + "sendOptionsPolicyInEffect": { + "message": "One or more organization policies are affecting your Send options." + }, + "passwordPrompt": { + "message": "Master password re-prompt" + }, + "passwordConfirmation": { + "message": "Master password confirmation" + }, + "passwordConfirmationDesc": { + "message": "This action is protected. To continue, please re-enter your master password to verify your identity." + }, + "emailVerificationRequired": { + "message": "Email Verification Required" + }, + "emailVerificationRequiredDesc": { + "message": "You must verify your email to use this feature. You can verify your email in the web vault." + }, + "updatedMasterPassword": { + "message": "Updated Master Password" + }, + "updateMasterPassword": { + "message": "Update Master Password" + }, + "updateMasterPasswordWarning": { + "message": "Your Master Password was recently changed by an administrator in your organization. In order to access the vault, you must update it now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + }, + "resetPasswordPolicyAutoEnroll": { + "message": "Automatic Enrollment" + }, + "resetPasswordAutoEnrollInviteWarning": { + "message": "This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password." + }, + "selectFolder": { + "message": "Select folder..." + }, + "ssoCompleteRegistration": { + "message": "In order to complete logging in with SSO, please set a master password to access and protect your vault." + }, + "hours": { + "message": "Hours" + }, + "minutes": { + "message": "Minutes" + }, + "vaultTimeoutPolicyInEffect": { + "message": "Your organization policies are affecting your vault timeout. Maximum allowed Vault Timeout is $HOURS$ hour(s) and $MINUTES$ minute(s)", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutToLarge": { + "message": "Your vault timeout exceeds the restrictions set by your organization." + }, + "vaultExportDisabled": { + "message": "Vault Export Disabled" + }, + "personalVaultExportPolicyInEffect": { + "message": "One or more organization policies prevents you from exporting your personal vault." + }, + "copyCustomFieldNameInvalidElement": { + "message": "Unable to identify a valid form element. Try inspecting the HTML instead." + }, + "copyCustomFieldNameNotUnique": { + "message": "No unique identifier found." + }, + "convertOrganizationEncryptionDesc": { + "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "leaveOrganization": { + "message": "Leave Organization" + }, + "removeMasterPassword": { + "message": "Remove Master Password" + }, + "removedMasterPassword": { + "message": "Master password removed." + }, + "leaveOrganizationConfirmation": { + "message": "Are you sure you want to leave this organization?" + }, + "leftOrganization": { + "message": "You have left the organization." + }, + "toggleCharacterCount": { + "message": "Toggle character count" + }, + "sessionTimeout": { + "message": "Your session has timed out. Please go back and try logging in again." + }, + "exportingPersonalVaultTitle": { + "message": "Exporting Personal Vault" + }, + "exportingPersonalVaultDescription": { + "message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "error": { + "message": "Error" + }, + "regenerateUsername": { + "message": "Regenerate Username" + }, + "generateUsername": { + "message": "Generate Username" + }, + "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" + }, + "plusAddressedEmailDesc": { + "message": "Use your email provider's sub-addressing capabilities." + }, + "catchallEmail": { + "message": "Catch-all Email" + }, + "catchallEmailDesc": { + "message": "Use your domain's configured catch-all inbox." + }, + "random": { + "message": "Random" + }, + "randomWord": { + "message": "Random Word" + }, + "websiteName": { + "message": "Website Name" + }, + "whatWouldYouLikeToGenerate": { + "message": "What would you like to generate?" + }, + "passwordType": { + "message": "Password Type" + }, + "service": { + "message": "Service" + }, + "forwardedEmail": { + "message": "Forwarded Email Alias" + }, + "forwardedEmailDesc": { + "message": "Generate an email alias with an external forwarding service." + }, + "hostname": { + "message": "Hostname", + "description": "Part of a URL." + }, + "apiAccessToken": { + "message": "API Access Token" + }, + "apiKey": { + "message": "API Key" + }, + "ssoKeyConnectorError": { + "message": "Key Connector error: make sure Key Connector is available and working correctly." + } +} diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index e9624f85471..15b7b803753 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -567,23 +567,23 @@ "message": "بدون پوشه", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "غیرفعال کردن اعلانیه اضافه کردن ورودی" + "enableAddLoginNotification": { + "message": "درخواست اضافه کردن ورود به سیستم" }, "addLoginNotificationDesc": { "message": "\"افزودن اعلانیه ورود\" به صورت خودکار از شما می خواهد هر بار که برای اولین بار وارد سیستم میشوید ورودی های جدید را در گاوصندوق خود ذخیره کنید." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "نمایش کارت‌ها در صفحه برگه" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "برای پر کردن خودکار آسان، موارد کارت را در صفحه برگه فهرست کن." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "نشان دادن هویت در صفحه برگه" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "موارد هویتی را در صفحه برگه برای پر کردن خودکار آسان فهرست کن." }, "clearClipboard": { "message": "پاک‌سازی کلیپ‌ برد", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "بله، ذخیره کن" }, - "disableChangedPasswordNotification": { - "message": "غیر فعال کردن اعلان تغییر کلمه عبور" + "enableChangedPasswordNotification": { + "message": "درخواست برای بروزرسانی ورود به سیستم موجود" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"اعلانیه کلمه عبور تغییر کرده\" بصورت خودکار شما را از بروزرسانی کلمه عبور در گاوصندوق مطلع میکند هر زمان که شما آن را در یک وبسایت تغییر داده باشید." + "changedPasswordNotificationDesc": { + "message": "هنگامی که تغییری در یک وب‌سایت شناسایی شد، درخواست به‌روزرسانی کلمه عبور ورود کن." }, "notificationChangeDesc": { "message": "آیا مایل به بروزرسانی این پسورد در Bitwarden هستید؟" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "بله، بروزرسانی کن" }, - "disableContextMenuItem": { - "message": "غیر فعال کردن گزینه های منوی متن" + "enableContextMenuItem": { + "message": "نمایش گزینه های منوی زمینه" }, - "disableContextMenuItemDesc": { - "message": "گزینه های منوی متن دسترسی سریع به ساخت کلمه عبور و ورود به سیستم برای وبسایت در برگه فعلی را برای شما فراهم میکند." + "contextMenuItemDesc": { + "message": "از یک کلیک ثانویه برای دسترسی به تولید کلمه عبور و ورودهای منطبق برای وب سایت استفاده کن." }, "defaultUriMatchDetection": { "message": "بازرسی تطابق URL پیشفرض", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "نوسازی کامل شد" }, - "disableAutoTotpCopy": { - "message": "غیرفعال کردن کپی خودکار TOTP" + "enableAutoTotpCopy": { + "message": "TOTP را به صورت خودکار کپی کن" }, "disableAutoTotpCopyDesc": { "message": "اگر ورود شما دارای یک کلید تأیید کننده است که به آن متصل شده است، هر زمان که بصورت خودکار وارد سایت شوید کد تأیید TOTP به صورت خودکار به کلیپ بورد شما کپی می شود." }, - "disableAutoBiometricsPrompt": { - "message": "در هنگام راه اندازی، درخواست biometrics نکنید." + "enableAutoBiometricsPrompt": { + "message": "درخواست بیومتریک هنگام راه اندازی" }, "premiumRequired": { "message": "در نسخه پرمیوم کار میکند" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "این مرورگر نمیتواند درخواستهای U2F را در این پنجره پاپ آپ پردازش کند. آیا می خواهید این پنجره را در یک پنجره جدید باز کنید تا بتوانید با استفاده از U2F وارد شوید؟" }, - "disableFavicon": { - "message": "غیرفعال سازی آیکون های وبسایت" + "enableFavicon": { + "message": "نمایش نمادهای وب سایت" }, - "disableFaviconDesc": { - "message": "آیکون های وبسایت یک تصویر قابل تشخیص در کنار هر داده ورودی ارائه میدهد." + "faviconDesc": { + "message": "یک تصویر قابل تشخیص در کنار هر ورود نشان دهید." }, - "disableBadgeCounter": { - "message": "شمارنده نشان را غیرفعال کن" + "enableBadgeCounter": { + "message": "نمایش شمارنده نشان" }, - "disableBadgeCounterDesc": { - "message": "شمارنده نشان، نشان می دهد که چه تعداد ورود به سیستم برای صفحه فعلی در گاو‌صندوق خود دارید." + "badgeCounterDesc": { + "message": "تعداد ورود به صفحه وب فعلی را مشخص کن." }, "cardholderName": { "message": "نام صاحب کارت" diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 32063a1b474..310f9eca1cc 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -403,7 +403,7 @@ "message": "4 tuntia" }, "onLocked": { - "message": "Kun järjestelmän lukitaan" + "message": "Kun järjestelmä lukitaan" }, "onRestart": { "message": "Kun selain käynnistetään uudelleen" @@ -567,23 +567,23 @@ "message": "Ei kansiota", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Älä näytä \"Lisää kirjautumistieto\" -kehotetta" + "enableAddLoginNotification": { + "message": "Kysy lisätäänkö kirjautimistieto" }, "addLoginNotificationDesc": { - "message": "\"Lisää kirjautumistieto\" -kehote kysyy, haluatko tallentaa kirjautumistiedot holviisi kun kirjaudut niillä ensimmäistä kertaa." + "message": "Kysy lisätäänkö uusi kohde, jos holvissa ei vielä ole sopivaa kohdetta." }, - "dontShowCardsCurrentTab": { - "message": "Älä näytä välilehdille korttiehdotuksia" + "showCardsCurrentTab": { + "message": "Näytä kortit välilehtiosiossa" }, - "dontShowCardsCurrentTabDesc": { - "message": "Holvissasi olevat kortit tunnistetaan ja näytetään selaimen avoimelle välilehdelle, jotta niiden valinta täyttöä varten on helppoa." + "showCardsCurrentTabDesc": { + "message": "Kortit näytetään laajennuksen välilehtisivulla niiden automaattisen täytön helpottamiseksi." }, - "dontShowIdentitiesCurrentTab": { - "message": "Älä näytä välilehdille henkilöllisyysehdotuksia" + "showIdentitiesCurrentTab": { + "message": "Näytä henkilöllisyydet välilehtiosiossa" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Holvissasi olevat henkilöllisyydet tunnistetaan ja näytetään selaimen avoimelle välilehdelle, jotta niiden valinta täyttöä varten on helppoa." + "showIdentitiesCurrentTabDesc": { + "message": "Henkilöllisyydet näytetään laajennuksen välilehtisivulla niiden automaattisen täytön helpottamiseksi." }, "clearClipboard": { "message": "Tyhjennä leikepöytä", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Tallenna" }, - "disableChangedPasswordNotification": { - "message": "Älä näytä \"Salasana vaihdettu\" -kehotetta" + "enableChangedPasswordNotification": { + "message": "Kysy päivitetäänkö olemassa oleva kirjautimistieto" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Salasana vaihdettu\" -ilmoitus ehdottaa holviisi tallennetun kirjautumistiedon salasanan automaattista päivitystä kun se havaitsee, että olet vaihtanut sen verkkosivustolla." + "changedPasswordNotificationDesc": { + "message": "Kysy päivitetäänkö kirjautumistiedon salasana, kun sivustolla havaitaan muutos." }, "notificationChangeDesc": { "message": "Haluatko päivittää salasanan Bitwardeniin?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Päivitä" }, - "disableContextMenuItem": { - "message": "Älä näytä kontekstivalikon valintoja" + "enableContextMenuItem": { + "message": "Näytä sisältövalikon valinnat" }, - "disableContextMenuItemDesc": { - "message": "Hiiren kakkospainikkeen pikavalikon kautta pääset nopeasti käsiksi salasanojen luontiin ja nykyisellä välilehdellä avoinna olevan sivuston kirjautumisteitoihin." + "contextMenuItemDesc": { + "message": "Käytä salasanageneraattoria ja avoimelle sivulle soveltuvia kirjautumistietoja hiiren kakkospainikkeella avattavasta valikosta." }, "defaultUriMatchDetection": { - "message": "URI:n tunnistuksen oletustapa", + "message": "URI:n oletusarvoinen täsmäystapa", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Päivitys on valmis" }, - "disableAutoTotpCopy": { - "message": "Älä kopioi TOTP-koodeja automaattisesti" + "enableAutoTotpCopy": { + "message": "Kopioi TOTP-koodi automaattisesti" }, "disableAutoTotpCopyDesc": { - "message": "Jos kirjautumistietoosi on liitetty kaksivaiheisen todennusmenetelmän avain, kopioidaan kaksivaiheisen kirjautumisen TOTP-todennuskoodi automaattisesti leikepöydälle kun suoritat kohteen automaattisen täytön." + "message": "Jos kirjautumistieto sisältää kaksivaiheisen todennusmenetelmän avaimen, kopioidaan TOTP-todennuskoodi leikepöydälle kohteen automaattisen täytön yhteydessä." }, - "disableAutoBiometricsPrompt": { - "message": "Älä pyydä biometristä avausta käynnistettäessä." + "enableAutoBiometricsPrompt": { + "message": "Pyydä Biometristä todennusta käynnistettäessä" }, "premiumRequired": { "message": "Premium vaaditaan" @@ -951,10 +951,10 @@ "message": "Palvelinten URL-osoitteet tallennettiin." }, "enableAutoFillOnPageLoad": { - "message": "Täytä automaattisesti sivun avautuessa" + "message": "Automaattinen täyttö sivun avautuessa" }, "enableAutoFillOnPageLoadDesc": { - "message": "Jos sivulla havaitaan kirjautumislomake, täytetään kirjautumistiedot automaattisesti sivun avautuessa." + "message": "Jos havaitaan kirjautumislomake, suorita automaattinen täyttö sivun avautuessa." }, "experimentalFeature": { "message": "Tämä on vielä kokeellinen toiminto. Käytä omalla vastuullasi." @@ -963,7 +963,7 @@ "message": "Automaattisen täytön oletusasetus kirjautumistiedoille" }, "defaultAutoFillOnPageLoadDesc": { - "message": "Kun \"Täytä automaattisesti sivun avautuessa\" on käytössä, voi sen ottaa käyttöön tai poistaa käytöstä yksittäisille kirjautumistiedoille. Tämä on oletusarvo niille kirjautumistiedoille, joille asetusta ei ole erikseen määritetty." + "message": "Voit ottaa automaattisen täytön käyttöön tai poistaa sen käytöstä kirjautumistietokohtaisesti muokkaamalla kohdetta." }, "itemAutoFillOnPageLoad": { "message": "Automaattinen täyttö sivun avautuessa (jos kytketty asetuksista käyttöön)" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Tämä selain ei voi käsitellä U2F-pyyntöjä tässä ponnahdusikkunassa. Haluatko avata näkymän uuteen ikkunaan, jotta voit vahvistaa kirjautumisen U2F-todennuslaitteella?" }, - "disableFavicon": { - "message": "Älä näytä sivustojen kuvakkeita" + "enableFavicon": { + "message": "Näytä verkkosivustojen kuvakkeet" }, - "disableFaviconDesc": { - "message": "Kirjautumistietojen vieressä näytettävät sivustojen kuvakkeet helpottavat kohteiden tunnistusta." + "faviconDesc": { + "message": "Näytä tunnistettava kuva jokaiselle kirjautumistiedolle." }, - "disableBadgeCounter": { - "message": "Älä näytä kuvakkeen laskuria" + "enableBadgeCounter": { + "message": "Näytä laskuri" }, - "disableBadgeCounterDesc": { - "message": "Työkalupalkin kuvakkeessa näytetään laskuri, joka kertoo avoimeen sivuun kohdistuvien kirjautumistietojen lukumäärän holvissasi." + "badgeCounterDesc": { + "message": "Ilmaisee nykyiselle sivulle sopivien kirjautumistietojen määrän." }, "cardholderName": { "message": "Kortinhaltijan nimi" diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 0e1dbdd6532..1eab3d718c0 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -146,10 +146,10 @@ "message": "Account" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Two-step Login" + "message": "Two-step login" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "about": { "message": "About" @@ -193,7 +193,7 @@ "message": "There are no folders to list." }, "helpFeedback": { - "message": "Help & Feedback" + "message": "Help & feedback" }, "sync": { "message": "Sync" @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "Select" @@ -330,7 +330,7 @@ "message": "Other" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "Immediately" @@ -403,10 +403,10 @@ "message": "4 hours" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "Never" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index e857e28fe3a..3cbccf45690 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Identification en deux étapes" + "message": "Identification à deux facteurs" }, "logOut": { - "message": "Se déconnecter" + "message": "Déconnexion" }, "about": { "message": "À propos" @@ -215,10 +215,10 @@ "message": "Générer automatiquement des mots de passe forts et uniques pour vos identifiants." }, "bitWebVault": { - "message": "Coffre en ligne de Bitwarden" + "message": "Coffre en ligne de bitwarden" }, "importItems": { - "message": "Importer des éléments" + "message": "Importer des identifiants" }, "select": { "message": "Sélectionner" @@ -403,7 +403,7 @@ "message": "4 heures" }, "onLocked": { - "message": "Au verrouillage du système" + "message": "Au verrouillage" }, "onRestart": { "message": "Au redémarrage du navigateur" @@ -567,23 +567,23 @@ "message": "Aucun dossier", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Désactiver la notification d'ajout d'identifiant" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "La \"Notification de demande d'ajout d'identifiant\" apparaît automatiquement pour vous proposer d'enregistrer dans votre coffre les identifiants que vous utilisez pour la première fois." + "message": "La \"Notification de demande d'ajout d'identifiant\" apparait automatiquement pour vous demander d'enregistrer dans votre coffre les identifiants que vous utilisez pour la première fois." }, - "dontShowCardsCurrentTab": { - "message": "Ne pas afficher les cartes sur la page Onglet courant" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Les cartes stockées dans votre coffre sont listées sur la page \"Onglet courant\" pour un accès facile lors du remplissage automatique." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Ne pas afficher les identités sur la page Onglet courant" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Les identités stockées dans votre coffre sont listées sur la page \"Onglet courant\" pour un accès facile lors du remplissage automatique." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Effacer le presse-papiers", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Enregistrer" }, - "disableChangedPasswordNotification": { - "message": "Désactiver la notification de changement de mot de passe" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "La \"Notification de changement de mot de passe\" vous propose automatiquement de mettre à jour un mot de passe dans votre coffre lorsqu'il est changé sur un site web." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Souhaitez-vous mettre à jour ce mot de passe dans Bitwarden ?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Mettre à jour" }, - "disableContextMenuItem": { - "message": "Désactiver les options de menu contextuel" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Les options du menu contextuel permettent un accès rapide à la génération de mots de passe et aux identifiants enregistrés pour le site web de l'onglet actuel." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Détection de correspondance URI par défaut", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Actualisation terminée" }, - "disableAutoTotpCopy": { - "message": "Désactiver la copie automatique du TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Si une clé d'authentification est rattachée à votre identifiant, alors le code de vérification TOTP est automatiquement copié dans le presse-papiers lorsque vous renseignez l'identifiant." }, - "disableAutoBiometricsPrompt": { - "message": "Ne pas demander de biométrie au démarrage" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Adhésion Premium requise" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Ce navigateur ne peut pas traiter les requêtes U2F dans cette popup. Voulez-vous ouvrir cette popup dans une nouvelle fenêtre pour que vous puissiez vous connecter en utilisant U2F ?" }, - "disableFavicon": { - "message": "Désactiver les icônes des sites web" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Les icônes des sites web permettent d'avoir une icône reconnaissable à côté de chaque identifiant dans votre coffre." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Désactiver le compteur de badge" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Le compteur de badge indique le nombre d'identifiants vous avez pour la page actuelle dans votre coffre." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Nom du titulaire de la carte" diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 7afa4154bf8..d50dd3045d8 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -567,23 +567,23 @@ "message": "ללא תיקייה", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "בטל את ההודעה \"שמור פרטי כניסה\"" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "ההודעה \"שמור פרטי כניסה\" מופיעה בכל פעם שתכנס לאתר חדש בפעם הראשונה." }, - "dontShowCardsCurrentTab": { - "message": "אל תציג כרטיסים העמוד הלשונית" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "פרטי כרטיס מהכספת שלך מופיעים בעמוד 'הלשונית הנוכחית' לגישה קלה להשלמה האוטומטית." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "אל תציג זהויות בעמוד הלשונית" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "פרטי זהות מהכספת שלך מופיעים בעמוד 'הלשונית הנוכחית' לגישה קלה להשלמה האוטומטית." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "נקה לוח העתקות", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "כן, שמור עכשיו" }, - "disableChangedPasswordNotification": { - "message": "בטל התראת \"סיסמה שונתה\"" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "ההתראה \"סיסמה שונתה\" תופיע בכל פעם שהמערכת מזהה שינוי בסיסמה באתר אם פרטי הכניסה הקודמים שמורים שבכספת." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "האם ברצונך לעדכן את הסיסמה הזו בתוכנת Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "כן, עדכן עכשיו" }, - "disableContextMenuItem": { - "message": "בטל את אפשרויות תפריט ההקשר" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "אפשרויות תפריט ההקשר מספקים גישה מהירה ליצירת סיסמאות חדשות ולפרטי כניסה לאתר עבור הלשונית הנוכחית בדפדפן." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "ברירת מחדל לזיהוי התאמת כתובות", @@ -639,7 +639,7 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { @@ -806,14 +806,14 @@ "refreshComplete": { "message": "הרענון הושלם" }, - "disableAutoTotpCopy": { - "message": "בטל העתקה אוטומטית של קוד TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "אם פרטי הכניסה שלך מקושרים לאפליקציית אימות, קוד האימות TOTP מועתק אוטומטית ללוח שלך ברגע שמתבצעת ההשלמה האוטומטית לטופס הכניסה." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "נדרש חשבון פרימיום" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "דפדפן זה לא יכול לעבד בקשות U2F בחלון צף זה. האם ברצונך לפתוח את החלון הצף כחלון חדש רגיל כדי שתוכל להכנס באמצעות U2F?" }, - "disableFavicon": { - "message": "בטל אייקונים של האתר" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "יכולת הצג אייקונים-של-האתר מאפשרת הצגה של תמונה או אייקון מוכר ליד פרטי הכניסה שבכספת שלך." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "שם בעל הכרטיס" @@ -1562,7 +1562,7 @@ "message": "מדיניות ארגונית משפיעה על אפשרויות הבעלות שלך." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 920517df7fc..f9cd4d1fa99 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -567,23 +567,23 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "क्लिपबोर्ड खाली करें", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Yes, Save Now" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "क्या आप बिटवर्डन में इस पासवर्ड को अपडेट करना चाहते हैं?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Yes, Update Now" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "संदर्भ मेनू विकल्प आपके वर्तमान टैब में वेबसाइट के लिए पासवर्ड जनरेशन और लॉगिन तक त्वरित पहुंच प्रदान करते हैं।" + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "डिफॉल्ट URI मैच डिटेक्शन", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "ताज़ा पूरा" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "यदि आपके लॉगिन में एक प्रमाणक कुंजी जुड़ी हुई है, तो जब भी आप लॉगिन को ऑटो-फिल करते हैं तो TOTP सत्यापन कोड स्वचालित रूप से आपके क्लिपबोर्ड पर कॉपी किया जाता है।" }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "यह ब्राउज़र इस पॉपअप विंडो में U2F अनुरोधों को संसाधित नहीं कर सकता है।क्या आप इस पॉपअप को एक नई विंडो में खोलना चाहते हैं ताकि आप U2F का उपयोग करके लॉग इन कर सकें?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provides a recognizable icon next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "बैज काउंटर को अक्षम कर दो" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "बैज काउंटर निर्देश करता है कि आपके वॉल्ट में वर्तमान पृष्ठ के लिए आपके पास कितने लॉगिन हैं।" + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 8f81254c3f8..a85fd4a650e 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Prijava u dva koraka" + "message": "Prijava dvostrukom autentifikacijom" }, "logOut": { - "message": "Odjavi se" + "message": "Odjava" }, "about": { "message": "O aplikaciji" @@ -567,23 +567,23 @@ "message": "Nema mape", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Onemogući upit za dodavanje prijave" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "Upit za dodavanje prijave pojavljuje se kada se otkrije prva prijava na neko web mjesto. Bitwarden će te pitatati želiš li uneseno korisničko ime i lozinku spremiti u svoj trezor." }, - "dontShowCardsCurrentTab": { - "message": "Ne prikazuj platne kartice" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Ne prikazuje Platne kartice iz tvog trezora prilikom prikaza stavki dostupnih za jednostavnu auto-ispunu." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Ne prikazuj Identitete" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Ne prikazuje Identitete iz tvog trezora prilikom prikaza stavki dostupnih za jednostavnu auto-ispunu." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Očisti međuspremnik", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Spremi" }, - "disableChangedPasswordNotification": { - "message": "Onemogući upit za spremanje ažurirane lozinke" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "Upit za spremanje ažurirane lozinke pojavljuje se kada se otkrije da je na nekoj web stranici unesena lozinka drugačija od one spremljene u trezoru. Bitwarden će te pitatati želiš li ažurirati lozinku u trezoru." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Želiš li ovu lozinku ažurirati u Bitwarden-u?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Ažuriraj" }, - "disableContextMenuItem": { - "message": "Onemogući kontekstualni izbornik u pregledniku" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Kontekstualni izbornik omogućuje brzi pristup korisničkim imenima i lozinkama, kao i generiranje i kopiranje generirane lozinke jednim klikom." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Zadano otkrivanje URI podudaranja", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Osvježavanje završeno" }, - "disableAutoTotpCopy": { - "message": "Onemogući automatsko kopiranje TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Ako se za prijavu koristi dvostruka autentifikacija, TOTP kontrolni kôd se automatski kopira u međuspremnik nakon auto-ispune korisničkog imena i lozinke." }, - "disableAutoBiometricsPrompt": { - "message": "Ne traži biometriju pri pokretanju" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Potrebno premium članstvo" @@ -1033,17 +1033,17 @@ "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?" }, - "disableFavicon": { - "message": "Onemogući ikone web mjesta" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Prepoznatljive ikone web mjesta prikazuju se pored prijava u tvom trezoru." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Onemogući brojač znački" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Brojač znački prikazuje koliko u tvojem trezoru ima spremljenih prijava za trenutnu stranicu." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Vlasnik kartice" diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 3d3bab74d72..f74e2f4ae66 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -567,23 +567,23 @@ "message": "Nincs mappa", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Bejelentkezés értesítés hozzáadás letiltása" + "enableAddLoginNotification": { + "message": "Bejelentkezés hozzáadás kérése" }, "addLoginNotificationDesc": { "message": "A \"Bejelentkezés értesítés hozzáadása\" automatikusan felajánlja a bejelentkezés széfbe mentését az első bejelentkezéskor." }, - "dontShowCardsCurrentTab": { - "message": "A kártyák ne jelenjenek meg a fül oldalon" + "showCardsCurrentTab": { + "message": "Kártyák megjelenítése a Fül oldalon" }, - "dontShowCardsCurrentTabDesc": { - "message": "A széf kártyaelemei az 'Aktuális fül' oldalon jelennek meg a könnyű automatikus kitöltéshez." + "showCardsCurrentTabDesc": { + "message": "Kártyaelemek listázása a Fül oldalon a könnyű automatikus kitöltéshez." }, - "dontShowIdentitiesCurrentTab": { - "message": "A személyazonosságok ne jelenjenek meg a Fül oldalon" + "showIdentitiesCurrentTab": { + "message": "Azonosítások megjelenítése a Fül oldalon" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "A széf személyazonosság elemei az 'Aktuális fül' oldalon jelennek meg a könnyű automatikus kitöltéshez." + "showIdentitiesCurrentTabDesc": { + "message": "Azonosítás elemek listázása a Fül oldalon a könnyű automatikus kitöltéshez." }, "clearClipboard": { "message": "Vágólap ürítése", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Mentés" }, - "disableChangedPasswordNotification": { - "message": "Megváltozott jelszó értesítés letiltása" + "enableChangedPasswordNotification": { + "message": "Létező bejelentkezés frissítés kérése" }, - "disableChangedPasswordNotificationDesc": { - "message": "A \"Megváltozott jelszó értesítés\" automatikusan felajánlja a bejelentkezési jelszó frissítését a széfben, ha annak megváltoztatását érzékeli a webhelyen." + "changedPasswordNotificationDesc": { + "message": "A bejelentkezési jelszó frissítésének kérése a webhelyen történő változás érzékelésekor." }, "notificationChangeDesc": { "message": "Frissítésre kerüljön a jelszó a Bitwardenben?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Frissítés" }, - "disableContextMenuItem": { - "message": "Helyi menüopciók kikapcsolása" + "enableContextMenuItem": { + "message": "Helyi menü opciók megjelenítése" }, - "disableContextMenuItemDesc": { - "message": "Helyi menü opciók gyors hozzáférést biztosít jelszó generáláshoz és bejelentkezésekhez a weboldalhoz amin éppen vagy." + "contextMenuItemDesc": { + "message": "Másodlagos kattintással férhetünk hozzá a webhely jelszó-generálásához és a egyező bejelentkezésekhez." }, "defaultUriMatchDetection": { "message": "Alapértelmezett URI egyezés érzékelés", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Frissítés megtörtént" }, - "disableAutoTotpCopy": { - "message": "Egyszeri jelszó automatikus másolás tiltása" + "enableAutoTotpCopy": { + "message": "TOTP automatikus másolása" }, "disableAutoTotpCopyDesc": { - "message": "Ha a bejelentkezésedhez csatolva van egy hitelesítő kód, a TOTP ellenőrző kód automatikusan másolva lesz a vágólapodra bejelentkezésed automatikus kitöltése esetén." + "message": "Ha a bejelentkezéshez csatolva van egy hitelesítő kulcs, a TOTP ellenőrző kód automatikusan a vágólapra kerül a bejelentkezési adatok megadásánál." }, - "disableAutoBiometricsPrompt": { - "message": "Nincs biometrika kérés indításkor" + "enableAutoBiometricsPrompt": { + "message": "Biometria kérése indításkor" }, "premiumRequired": { "message": "Prémium funkció szükséges" @@ -954,7 +954,7 @@ "message": "Automatikus kitöltés engedélyezése oldal betöltéskor" }, "enableAutoFillOnPageLoadDesc": { - "message": "Ha egy bejelentkezési űrlap észlelésre került, automatikusan töltse ki az adatokat az oldal betöltésekor." + "message": "Ha egy bejelentkezési űrlap észlelésre került, az adatok automatikus kitöltése az oldal betöltésekor." }, "experimentalFeature": { "message": "Ez jelenleg egy kísérleti funkció. Csak saját felelősségedre használd." @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Ez a böngésző nem dolgozza fel az U2F kéréseket ebben a felbukkanó ablakban. Szeretnénk megnyitni a felbukkanó ablakot új böngészőablakban az U2F segítségével történő bejelentkezéshez?" }, - "disableFavicon": { - "message": "Webhely ikonok letiltása" + "enableFavicon": { + "message": "Webhely ikonok megjelenítése" }, - "disableFaviconDesc": { - "message": "A webhelyek ikonjai felismerhető ikonként jelennek meg a széf összes eleme mellett." + "faviconDesc": { + "message": "Felismerhető kép megjelenítése minden bejelentkezés mellett." }, - "disableBadgeCounter": { - "message": "Számláló jelvény letiltása" + "enableBadgeCounter": { + "message": "Számláló jelvény megjelenítése" }, - "disableBadgeCounterDesc": { - "message": "A jelvényszámláló jelzi az aktuális oldalhoz a bejelentkezések számát a stárolóban." + "badgeCounterDesc": { + "message": "Jelöljük meg, hogy hány bejelentkezés van az aktuális weboldalnál." }, "cardholderName": { "message": "Kártyatulajdonos neve" diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index e7af0b9a63f..3a46c3958df 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -567,23 +567,23 @@ "message": "Tidak Ada Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Nonaktifkan Notifikasi Penambahan Info Masuk" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "\"Notifikasi Penambahan Info Masuk\" secara otomatis akan meminta Anda untuk menyimpan info masuk baru ke brankas Anda saat Anda masuk untuk pertama kalinya." }, - "dontShowCardsCurrentTab": { - "message": "Jangan Tampilkan Kartu pada Laman Tab" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Item kartu dari brankas Anda akan ditampilkan pada laman 'Tab' untuk mempermudah akses isi-otomatis." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Jangan Tampilkan Identitas pada Laman Tab" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Item identitas dari brankas Anda akan ditampilkan pada laman 'Tab' untuk mempermudah akses isi-otomatis." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Hapus Papan Klip", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Iya, Simpan Sekarang" }, - "disableChangedPasswordNotification": { - "message": "Nonaktifkan Notifikasi Perubahan Kata Sandi" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Notifikasi Perubahan Kata Sandi\" secara otomatis akan meminta Anda untuk memperbarui kata sandi info masuk di brankas Anda ketika mendeteksi bahwa Anda telah mengubahnya lewat situs web." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Apakah Anda ingin memperbarui kata sandi ini di Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Iya, Perbarui Sekarang" }, - "disableContextMenuItem": { - "message": "Nonaktifkan Opsi Menu Konteks" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Pilihan menu konteks menyediakan akses cepat ke pembuat sandi dan info masuk untuk situs web di tab Anda saat ini." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Deteksi Kecocokan URI Bawaan", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Penyegaran selesai" }, - "disableAutoTotpCopy": { - "message": "Nonaktifkan Penyalinan Otomatis TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Jika info masuk Anda memiliki kunci autentikasi yang menyertainya, kode verifikasi TOTP akan disalin secara otomatis ke clipboard Anda setiap kali Anda mengisi info masuk secara otomatis." }, - "disableAutoBiometricsPrompt": { - "message": "Jangan minta biometrik saat dinyalakan." + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Membutuhkan Keanggotaan Premium" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Peramban ini tidak bisa memproses permintaan U2F di jendela popup ini. Apakah Anda ingin membuka popup ini di jendela baru sehingga Anda dapat masuk menggunakan U2F?" }, - "disableFavicon": { - "message": "Nonaktifkan Ikon Situs Web" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Ikon Situs Web menyediakan gambar yang mudah dikenali di sebelah item info masuk di dalam brankas Anda." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Matikan angka penghitung " + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Angka penghitung menandakan jumlah login yang kamu punya untuk website saat ini yang ada di dalam vault kamu." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Nama Pemegang Kartu" diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index dc9927e6c37..cb21c1a2a0b 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -367,7 +367,7 @@ "message": "Timeout cassaforte" }, "lockNow": { - "message": "Blocca ora" + "message": "Blocca" }, "immediately": { "message": "Immediatamente" @@ -403,7 +403,7 @@ "message": "4 ore" }, "onLocked": { - "message": "Al blocco del computer" + "message": "Al Blocco Computer" }, "onRestart": { "message": "Al riavvio del browser" @@ -567,23 +567,23 @@ "message": "Nessuna cartella", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disabilita notifica di aggiunta login" + "enableAddLoginNotification": { + "message": "Chiedi di aggiungere il login" }, "addLoginNotificationDesc": { "message": "\"Aggiungi notifica di login\" richiede automaticamente di salvare i nuovi login nella tua cassaforte ogni volta che accedi per la prima volta." }, - "dontShowCardsCurrentTab": { - "message": "Non mostrare le carte nella pagina delle schede" + "showCardsCurrentTab": { + "message": "Mostra le carte nella pagina delle schede" }, - "dontShowCardsCurrentTabDesc": { - "message": "I dati della carta dalla tua cassaforte sono elencati nella sezione \"Scheda attuale\" per facilitare il riempimento automatico." + "showCardsCurrentTabDesc": { + "message": "Elenca le carte nella pagina della scheda per un facile completamento automatico." }, - "dontShowIdentitiesCurrentTab": { - "message": "Non mostrare le identità nella pagina delle schede" + "showIdentitiesCurrentTab": { + "message": "Mostra le identità nella pagina della scheda" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Le identità della tua cassaforte sono elencati nella sezione \"Scheda attuale\" per facilitare il completamento automatico." + "showIdentitiesCurrentTabDesc": { + "message": "Elenca le carte nella pagina della scheda per un facile completamento automatico." }, "clearClipboard": { "message": "Cancella appunti", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Sì, salva ora" }, - "disableChangedPasswordNotification": { - "message": "Disabilita notifica di modifica delle password" + "enableChangedPasswordNotification": { + "message": "Chiedi di aggiornare il login esistente" }, - "disableChangedPasswordNotificationDesc": { - "message": "La \"notifica di cambio password\" chiede automaticamente di aggiornare la password di un account della cassaforte ogni qualvolta viene rilevata una modifica su un sito web." + "changedPasswordNotificationDesc": { + "message": "Chiedi di aggiornare la password di accesso quando viene rilevato un cambiamento su un sito web." }, "notificationChangeDesc": { "message": "Vuoi aggiornare questa password in Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Sì, aggiorna ora" }, - "disableContextMenuItem": { - "message": "Disabilita integrazione del menu contestuale" + "enableContextMenuItem": { + "message": "Mostra le opzioni del menu contestuale" }, - "disableContextMenuItemDesc": { - "message": "Le opzioni del menu contestuale forniscono accesso rapido alla generazione di password e ai login per il sito web nella scheda corrente." + "contextMenuItemDesc": { + "message": "Utilizza un clic secondario per accedere alla generazione di password e login per il sito web. " }, "defaultUriMatchDetection": { "message": "Rilevamento corrispondenza URI predefinito", @@ -747,7 +747,7 @@ "message": "Non puoi utilizzare questa funzione finché non aggiorni la tua chiave di cifratura." }, "premiumMembership": { - "message": "Abbonamento Premium" + "message": "Abbonamento premium" }, "premiumManage": { "message": "Gestisci abbonamento" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Aggiornamento completato" }, - "disableAutoTotpCopy": { - "message": "Disattiva copia TOTP automatica" + "enableAutoTotpCopy": { + "message": "Copia TOTP automaticamente" }, "disableAutoTotpCopyDesc": { - "message": "Se il tuo login ha un autenticatore collegato, il codice ti verifica TOTP è automaticamente copiato negli appunti ogni volta che auto-completi il login." + "message": "Se il login ha una chiave di autenticazione, il codice di verifica TOTP viene automaticamente copiato negli appunti ogni volta che si compila automaticamente l'accesso." }, - "disableAutoBiometricsPrompt": { - "message": "Non richiedere dati biometrici all'avvio" + "enableAutoBiometricsPrompt": { + "message": "Richiedi dati biometrici all'avvio" }, "premiumRequired": { "message": "Premium richiesto" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Questo browser non può elaborare richieste U2F in questa finestra a comparsa. Vuoi aprire questo popup in una nuova finestra in modo da poter accedere usando U2F?" }, - "disableFavicon": { - "message": "Disabilita icone dei siti web" + "enableFavicon": { + "message": "Mostra icone del sito" }, - "disableFaviconDesc": { - "message": "Le icone del sito web forniscono un'immagine riconoscibile accanto a ogni elemento di login della tua cassaforte." + "faviconDesc": { + "message": "Mostra un'immagine riconoscibile accanto a ogni login." }, - "disableBadgeCounter": { - "message": "Disabilita contatore delle occorrenze" + "enableBadgeCounter": { + "message": "Mostra contatore" }, - "disableBadgeCounterDesc": { - "message": "Il contatore delle occorrenze indica quanti accessi hai per la pagina corrente nella tua cassaforte." + "badgeCounterDesc": { + "message": "Indica quanti login hai per la pagina web corrente." }, "cardholderName": { "message": "Titolare della carta" diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 8f826c953f4..2ee4916870a 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -567,23 +567,23 @@ "message": "フォルダーなし", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "ログイン情報追加の通知を無効化" + "enableAddLoginNotification": { + "message": "ログイン情報の追加を尋ねる" }, "addLoginNotificationDesc": { "message": "初めてログインしたとき保管庫にログイン情報を保存するよう「ログイン情報を追加」通知を自動的に表示します。" }, - "dontShowCardsCurrentTab": { - "message": "タブページにカードを表示しない" + "showCardsCurrentTab": { + "message": "タブページにカードを表示" }, - "dontShowCardsCurrentTabDesc": { - "message": "保管庫にあるカードアイテムは自動入力しやすいよう「タブ」に表示されます。" + "showCardsCurrentTabDesc": { + "message": "自動入力を簡単にするために、タブページにカードアイテムを表示します" }, - "dontShowIdentitiesCurrentTab": { - "message": "タブページに ID を表示しない" + "showIdentitiesCurrentTab": { + "message": "タブページに ID を表示" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "保管庫にある ID アイテムは自動入力しやすいよう「タブ」に表示されます。" + "showIdentitiesCurrentTabDesc": { + "message": "自動入力を簡単にするために、タブページに ID アイテムを表示します" }, "clearClipboard": { "message": "クリップボードの消去", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "保存する" }, - "disableChangedPasswordNotification": { - "message": "パスワードの変更通知を無効化" + "enableChangedPasswordNotification": { + "message": "既存のログイン情報の更新を尋ねる" }, - "disableChangedPasswordNotificationDesc": { - "message": "ウェブサイトでパスワードを変更したことを検出したとき、保管庫のパスワードを更新するために自動的に「パスワードの変更通知」を表示します。" + "changedPasswordNotificationDesc": { + "message": "ウェブサイトで変更があったとき、ログイン情報のパスワードを更新するか尋ねます" }, "notificationChangeDesc": { "message": "Bitwarden でこのパスワードを更新しますか?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "今すぐ更新する" }, - "disableContextMenuItem": { - "message": "コンテキストメニューオプションを無効化" + "enableContextMenuItem": { + "message": "コンテキストメニューオプションを表示" }, - "disableContextMenuItemDesc": { - "message": "コンテキストメニューのオプションで、現在のタブのウェブサイトのログイン情報やパスワード生成に素早くアクセスできます。" + "contextMenuItemDesc": { + "message": "コンテキストメニューでパスワード生成やログイン情報の入力をできるようにします" }, "defaultUriMatchDetection": { "message": "デフォルトの URI 一致検出方法", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "更新完了" }, - "disableAutoTotpCopy": { - "message": "認証コードの自動コピーを無効化" + "enableAutoTotpCopy": { + "message": "TOTP を自動的にコピー" }, "disableAutoTotpCopyDesc": { "message": "ログイン情報に認証キーが添付されている場合、自動入力した時に認証コードが自動的にクリップボードへコピーされます。" }, - "disableAutoBiometricsPrompt": { - "message": "起動時に生体認証のプロンプトを表示しない" + "enableAutoBiometricsPrompt": { + "message": "起動時に生体認証を要求する" }, "premiumRequired": { "message": "プレミアム会員専用" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "このブラウザーでは U2F 要求をポップアップウインドウでは実行できません。U2F でログインできるよう、新しいウインドウで開き直しますか?" }, - "disableFavicon": { - "message": "ウェブサイトアイコンの無効化" + "enableFavicon": { + "message": "ウェブサイトのアイコンを表示" }, - "disableFaviconDesc": { - "message": "保管庫のアイテム毎にウェブサイトのアイコンを表示します。" + "faviconDesc": { + "message": "ログイン情報の隣にアイコン画像を表示します" }, - "disableBadgeCounter": { - "message": "バッジカウンターを無効化" + "enableBadgeCounter": { + "message": "バッジカウンターを表示" }, - "disableBadgeCounterDesc": { - "message": "保管庫にある、現在のページのログイン情報をバッジカウンターで表示します。" + "badgeCounterDesc": { + "message": "現在のページに一致するログイン情報の数を表示します" }, "cardholderName": { "message": "カードの名義人名" diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 55f58eb1811..1469a4e6279 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -146,10 +146,10 @@ "message": "ანგარიში" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "მონიშვნა" @@ -330,7 +330,7 @@ "message": "სხვა" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "დაუყონებლივ" @@ -403,10 +403,10 @@ "message": "4 საათი" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "არასოდეს" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index f65da3812c2..8fcb5822a75 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -146,10 +146,10 @@ "message": "Account" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Two-step Login" + "message": "Two-step login" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "about": { "message": "About" @@ -193,7 +193,7 @@ "message": "There are no folders to list." }, "helpFeedback": { - "message": "Help & Feedback" + "message": "Help & feedback" }, "sync": { "message": "Sync" @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "Select" @@ -330,7 +330,7 @@ "message": "Other" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "Immediately" @@ -403,10 +403,10 @@ "message": "4 hours" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "Never" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 0bf3e03a261..ad29134d88d 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -567,23 +567,23 @@ "message": "ಫೋಲ್ಡರ್ ಇಲ್ಲ", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "ಲಾಗಿನ್ ಅಧಿಸೂಚನೆಯನ್ನು ಸೇರಿಸಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "\"ಲಾಗಿನ್ ಅಧಿಸೂಚನೆಯನ್ನು ಸೇರಿಸಿ\" ನೀವು ಮೊದಲ ಬಾರಿಗೆ ಪ್ರವೇಶಿಸಿದಾಗಲೆಲ್ಲಾ ಹೊಸ ಲಾಗಿನ್‌ಗಳನ್ನು ನಿಮ್ಮ ವಾಲ್ಟ್‌ಗೆ ಉಳಿಸಲು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕೇಳುತ್ತದೆ." }, - "dontShowCardsCurrentTab": { - "message": "ಟ್ಯಾಬ್ ಪುಟದಲ್ಲಿ ಕಾರ್ಡ್‌ಗಳನ್ನು ತೋರಿಸಬೇಡಿ" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "ಸ್ವಯಂ-ಭರ್ತಿ ಸುಲಭ ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಮ್ಮ ವಾಲ್ಟ್‌ನಿಂದ ಕಾರ್ಡ್ ವಸ್ತುಗಳನ್ನು 'ಪ್ರಸ್ತುತ ಟ್ಯಾಬ್' ಪುಟದಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿದೆ." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "ಟ್ಯಾಬ್ ಪುಟದಲ್ಲಿ ಗುರುತುಗಳನ್ನು ತೋರಿಸಬೇಡಿ" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "ಸ್ವಯಂ-ಭರ್ತಿ ಸುಲಭ ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಮ್ಮ ವಾಲ್ಟ್‌ನಿಂದ ಗುರುತಿನ ವಸ್ತುಗಳನ್ನು 'ಪ್ರಸ್ತುತ ಟ್ಯಾಬ್' ಪುಟದಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿದೆ." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ತೆರವುಗೊಳಿಸಿ", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "ಹೌದು, ಈಗ ಉಳಿಸಿ" }, - "disableChangedPasswordNotification": { - "message": "ಬದಲಾವಣೆ ಪಾಸ್ವರ್ಡ್ ಅಧಿಸೂಚನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"ಬದಲಾಯಿಸಿದ ಪಾಸ್ವರ್ಡ್ ಅಧಿಸೂಚನೆ\" ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿಮ್ಮ ಉತ್ತೇಜಿಸುವ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನೀವು ವೆಬ್ಸೈಟ್ನಲ್ಲಿ ಬದಲಿಸಿದೆ ಎಂದು ಪತ್ತೆಹಚ್ಚಿದಾಗ ನಿಮ್ಮ ವಾಲ್ಟ್ನಲ್ಲಿ ಲಾಗಿನ್ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನವೀಕರಿಸಲು ನಿಮ್ಮನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಪೇಕ್ಷಿಸುತ್ತದೆ." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "ಈ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಿಟ್ವರ್ಡ್ನಲ್ಲಿ ನವೀಕರಿಸಲು ನೀವು ಬಯಸುತ್ತೀರಾ?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "ಹೌದು, ಈಗ ನವೀಕರಿಸಿ" }, - "disableContextMenuItem": { - "message": "ಸನ್ನಿವೇಶ ಮೆನು ಆಯ್ಕೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "ಸನ್ನಿವೇಶ ಮೆನು ಆಯ್ಕೆಗಳು ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಟ್ಯಾಬ್ನಲ್ಲಿ ವೆಬ್ಸೈಟ್ಗೆ ಪಾಸ್ವರ್ಡ್ ಪೀಳಿಗೆಯ ಮತ್ತು ಲಾಗಿನ್ಗಳಿಗೆ ತ್ವರಿತ ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುತ್ತದೆ." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "ಡೀಫಾಲ್ಟ್ ಯುಆರ್ಐ ಹೊಂದಾಣಿಕೆ ಪತ್ತೆ", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "ರಿಫ್ರೆಶ್ ಪೂರ್ಣಗೊಂಡಿದೆ" }, - "disableAutoTotpCopy": { - "message": "ಸ್ವಯಂಚಾಲಿತ TOTP ನಕಲನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "ನಿಮ್ಮ ಲಾಗಿನ್‌ಗೆ ದೃಢೀಕರಣ ಕೀಲಿಯನ್ನು ಲಗತ್ತಿಸಿದ್ದರೆ, ನೀವು ಲಾಗಿನ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಭರ್ತಿ ಮಾಡಿದಾಗಲೆಲ್ಲಾ TOTP ಪರಿಶೀಲನಾ ಕೋಡ್ ನಿಮ್ಮ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಕಲಿಸಲ್ಪಡುತ್ತದೆ." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "ಪ್ರೀಮಿಯಂ ಅಗತ್ಯವಿದೆ" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "ಈ ಬ್ರೌಸರ್ ಈ ಪಾಪ್ಅಪ್ ವಿಂಡೋದಲ್ಲಿ ಯು 2 ಎಫ್ ವಿನಂತಿಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ಪಾಪ್ಅಪ್ ಅನ್ನು ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಲು ನೀವು ಬಯಸುವಿರಾ, ಇದರಿಂದ ನೀವು ಯು 2 ಎಫ್ ಬಳಸಿ ಲಾಗ್ ಇನ್ ಆಗಬಹುದು." }, - "disableFavicon": { - "message": "ವೆಬ್‌ಸೈಟ್ ಚಿಹ್ನೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "ವೆಬ್‌ಸೈಟ್ ಐಕಾನ್‌ಗಳು ನಿಮ್ಮ ವಾಲ್ಟ್‌ನಲ್ಲಿರುವ ಪ್ರತಿ ಲಾಗಿನ್ ಐಟಂನ ಪಕ್ಕದಲ್ಲಿ ಗುರುತಿಸಬಹುದಾದ ಚಿತ್ರವನ್ನು ಒದಗಿಸುತ್ತದೆ." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "ಬ್ಯಾಡ್ಜ್ ಕೌಂಟರ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "ನಿಮ್ಮ ವಾಲ್ಟ್ನಲ್ಲಿ ಪ್ರಸ್ತುತ ಪುಟಕ್ಕಾಗಿ ನೀವು ಎಷ್ಟು ಲಾಗಿನ್ಗಳನ್ನು ಹೊಂದಿದ್ದೀರಿ ಎಂದು ಬ್ಯಾಡ್ಜ್ ಕೌಂಟರ್ ಸೂಚಿಸುತ್ತದೆ." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "ಕಾರ್ಡುದಾರನ ಹೆಸರು" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 412179cadea..0cc063e4d4d 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -567,23 +567,23 @@ "message": "폴더 없음", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "로그인 추가 알림 사용 안 함" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "\"로그인 추가 알림\"을 사용하면 새 로그인을 사용할 때마다 보관함에 그 로그인을 추가할 것인지 물어봅니다." }, - "dontShowCardsCurrentTab": { - "message": "탭 페이지에 카드 표시 안 함" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "보관함의 카드 항목은 쉽게 자동 완성할 수 있게끔 '현재 탭' 페이지에 나열되어 있습니다." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "탭 페이지에 신원 표시 안 함" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "보관함의 신원 항목은 쉽게 자동 완성할 수 있게끔 '현재 탭' 페이지에 나열되어 있습니다." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "클립보드 비우기", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "예, 지금 저장하겠습니다." }, - "disableChangedPasswordNotification": { - "message": "비밀번호 변경 알림 사용 안 함" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"비밀번호 변경 알림\"을 사용하면 사용자가 웹 사이트에서 비밀번호를 변경했을 경우, 보관함에 저장된 비밀번호를 업데이트할 것인지 자동으로 물어봅니다." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Bitwarden에 저장되어 있는 비밀번호를 이 비밀번호로 변경하시겠습니까?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "예, 지금 변경하겠습니다." }, - "disableContextMenuItem": { - "message": "오른쪽 클릭 메뉴 옵션 사용 안 함" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "오른쪽 클릭 메뉴 옵션을 사용하면 비밀번호 생성이나 현재 탭 웹 사이트의 로그인에 빠르게 접근할 수 있습니다." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "기본 URI 일치 인식", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "새로 고침 완료" }, - "disableAutoTotpCopy": { - "message": "TOTP 자동 복사 사용 안 함" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "로그인에 인증 키가 연결되어 있을 경우, 그 로그인을 자동 완성할 때마다 TOTP 인증 코드가 클립보드에 자동으로 복사됩니다." }, - "disableAutoBiometricsPrompt": { - "message": "시작할 때 생체 인증 요구하지 않음" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "프리미엄 멤버십 필요" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "이 브라우저의 팝업 창에서는 U2F 요청을 처리할 수 없습니다. U2F로 로그인할 수 있도록 이 창을 새 창에서 여시겠습니까?" }, - "disableFavicon": { - "message": "웹 사이트 아이콘 사용 안 함" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "웹 사이트 아이콘을 사용하면 보관함 각 항목 옆에 이미지를 보여줍니다." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "배지에 개수 표시 사용 안 함" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "배지에는 보관함에 등록된 현재 페이지에 대한 로그인의 개수가 표시됩니다." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "카드 소유자 이름" diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 5243b7421ca..c599f5c9bc9 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -567,23 +567,23 @@ "message": "Be aplanko", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Išjungti Pridėti prisijungimą pranešimą" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "Prisijungimo pridėjimo pranešimas automatiškai Jūs paragina išsaugoti naujus prisijungimus Jūsų saugykloje, kuomet prisijungiate pirmą kartą." }, - "dontShowCardsCurrentTab": { - "message": "Nerodyti kortelių skirtuko puslapyje" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Kortelių įrašai yra nurodyti „Dabartinis skirtukas“ puslapyje lengvai laukelių užpildymo prieigai." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Nerodyti tapatybių skirtuko puslapyje" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Saugyklos tapatybių įrašai yra nurodyti „Dabartinis skirtukas“ puslapyje lengvai laukelių užpildymo prieigai." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Išvalyti iškarpinę", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Taip, išsaugoti dabar" }, - "disableChangedPasswordNotification": { - "message": "Išjungti pakeisto slaptažodžio pranešimą" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "„Pakeisto slaptažodžio pranešimas“ automatiškai ragina atnaujinti slaptažodį saugykloje, kai aptinkamas pakeitimas svetainėje." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Ar norite atnaujinti šį slaptažodį „Bitwarden“?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Taip, atnaujinti dabar" }, - "disableContextMenuItem": { - "message": "Išjungti kontekstinio meniu nustatymus" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Kontekstinio meniu nustatymai suteikia greitą prieigą prie slaptažodžių generavimo ir svetainės prisijungimų dabartiniame skirtuke." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,7 +639,7 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Atnaujinimas įvykdytas" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index c4fa6a3acd4..0a3e3b98a3d 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -567,23 +567,23 @@ "message": "Nav mapes", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Atspējot piekļuves vienumu pievienošanas paziņojumu" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "Iestatījums \"Piekļuves vienumu pievienošanas paziņojumi\" piedāvā saglabāt jaunus pieslēgšanās ierakstus, kad vien tie tiek izmantoti pirmo reizi ierakstoties." }, - "dontShowCardsCurrentTab": { - "message": "Nerādīt kartes cilnes lapā" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Glabātavas karšu vienumi tiek attēloti 'Pašreizējā cilne' lapā vieglai piekļūšanai automātiskajai aizpildīšanai." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Nerādīt identitātes cilnes pārskatā" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Glabātavas identitātes vienumi tiek attēloti 'Pašreizējā cilne' lapā vieglai piekļūšanai automātiskajai aizpildīšanai." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Notīrīt starpliktuvi", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Jā, saglabāt" }, - "disableChangedPasswordNotification": { - "message": "Atspējot mainītas paroles paziņojumu" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Mainītas paroles paziņojums\" vaicā atjaunināt pieteikšanās vienuma paroli glabātavā, kad vien tiek noteikts, ka tā ir mainīta tīmekļa vietnē." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Vai atjaunināt šo paroli Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Jā, atjaunināt" }, - "disableContextMenuItem": { - "message": "Atspējot konteksta izvēlnes iespējas" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Konteksta izvēlnes iespējas piedāvā ātru piekļūšanu paroļu veidošanai un tīmekļa vietnes pieteikšanās vienumiem pašreizējā cilnē." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Noklusējuma URI atbilstības noteikšana", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Atsvaidzināšana pabeigta" }, - "disableAutoTotpCopy": { - "message": "Atspējot automātisku TOTP ievietošanu starpliktuvē" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Ja pierakstīšanās datiem ir pievienota autentificētāja atslēga, TOTP apstiprinājuma kods tiks automātiski pārkopēts uz starpliktuvi, kad vien tiks automātiski aizpildīta pierakstīšanās veidne." }, - "disableAutoBiometricsPrompt": { - "message": "Palaišanas brīdī nevaicāt par biometriju." + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Nepieciešams Premium" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Šis pārlūks nevar apstrādāt U2F pieprasījumus šajā uznirstošajā logā. Vai atvērt to atsevišķā logā, lai varētu pierakstīties, izmantojot U2F?" }, - "disableFavicon": { - "message": "Atspējot tīmekļa vietņu ikonas" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Tīmekļa vietņu ikonas nodrošina atpazīstamu attēlu pie katra glabātavas pieteikšanās vienuma." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Atspējot skaitītāja nozīmīti" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Skaitītāja nozīmīte norāda, cik pierakstīšanās vienumu pašreizējai lapai ir atrodami glabātavā." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Kartes īpašnieka vārds" diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 723bab77526..5f781ed6bdb 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -567,23 +567,23 @@ "message": "ഫോൾഡറിൽ ഉൾപ്പെടാത്ത", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "പ്രവേശനം ചേർക്കുക എന്ന അറിയിപ്പ് പ്രവർത്തനരഹിതമാക്കുക" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "നിങ്ങൾ ആദ്യമായി സൈറ്റിൽ പ്രവേശിക്കുമ്പോൾ നിങ്ങളുടെ വാൾട്ടിലേക്കു തനിയെ പ്രവേശനം ഉൾപെടുത്താൻ \"പ്രവേശനം ചേർക്കുക എന്ന അറിയിപ്പ്\" ആവശ്യപ്പെടും." }, - "dontShowCardsCurrentTab": { - "message": "ടാബ് പേജിൽ കാർഡുകൾ കാണിക്കരുത്" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "സ്വപ്രേരിതമായി പൂരിപ്പിക്കുന്നതിന് നിങ്ങളുടെ നിലവറയിൽ നിന്നുള്ള കാർഡ് ഇനങ്ങൾ 'നിലവിലെ ടാബ്' പേജിൽ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട്." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "ടാബ് പേജിൽ ഐഡന്റിറ്റികൾ കാണിക്കരുത്" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "സ്വയമേവ എളുപ്പത്തിൽ പൂരിപ്പിക്കുന്നതിന് നിങ്ങളുടെ നിലവറയിൽ നിന്നുള്ള ഐഡന്റിറ്റി ഇനങ്ങൾ 'നിലവിലെ ടാബ്' പേജിൽ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട്." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "ക്ലിപ്ബോര്‍ഡ് മായ്ക്കുക", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "ശരി, ഇപ്പോൾ സംരക്ഷിക്കുക" }, - "disableChangedPasswordNotification": { - "message": "മാറ്റിയ പാസ്‌വേഡ് അറിയിപ്പ് പ്രവർത്തനരഹിതമാക്കുക" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "ഒരു വെബ്‌സൈറ്റിൽ നിങ്ങൾ അത് മാറ്റിയതായി കണ്ടെത്തുമ്പോഴെല്ലാം നിങ്ങളുടെ നിലവറയിൽ ഒരു ലോഗിൻ പാസ്‌വേഡ് അപ്‌ഡേറ്റുചെയ്യാൻ \"മാറ്റിയ പാസ്‌വേഡ് അറിയിപ്പ്\" യാന്ത്രികമായി ആവശ്യപ്പെടുന്നു." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "ബിറ്റ്വാർഡനിൽ ഈ പാസ്‌വേഡ് അപ്‌ഡേറ്റ് ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "ശരി, ഇപ്പോൾ അപ്ഡേറ്റ് ചെയ്യുക" }, - "disableContextMenuItem": { - "message": "സന്ദർഭ മെനു ഓപ്ഷനുകൾ അപ്രാപ്തമാക്കുക" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "നിങ്ങളുടെ നിലവിലെ ടാബിലെ വെബ്‌സൈറ്റിനായുള്ള പാസ്‌വേഡ് ജനറേഷനിലേക്കും ലോഗിനുകളിലേക്കും സന്ദർഭ മെനു ഓപ്ഷനുകൾ ദ്രുത പ്രവേശനം നൽകുന്നു." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "സാധാരണ URI പൊരുത്തം കണ്ടെത്തൽ", @@ -639,7 +639,7 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { @@ -671,7 +671,7 @@ "message": "പങ്കിട്ടവ" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "റിഫ്രഷ് പൂർത്തിയായി" }, - "disableAutoTotpCopy": { - "message": "ഓട്ടോമാറ്റിക് TOTP പകർപ്പ് പ്രവർത്തനരഹിതമാക്കുക" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "നിങ്ങളുടെ പ്രവേശനം ഒരു ഓതന്റിക്കേറ്റർ കീയുമായി ബന്ധപെടുത്തിയട്ടുടെങ്കിൽ, പ്രവേശനം ഓട്ടോഫിൽ ചെയ്യുമ്പോഴെല്ലാം TOTP സ്ഥിരീകരണ കോഡ് നിങ്ങളുടെ ക്ലിപ്ബോർഡിൽ ഓട്ടോമാറ്റിക്കയായി പകർത്തപ്പെടും." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "പ്രീമിയം അംഗത്വം ആവശ്യമാണ്" @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "ഈ ബ്ര pop സറിന് ഈ പോപ്പ്അപ്പ് വിൻഡോയിൽ U2F അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല. യു 2 എഫ് ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യാൻ ഈ പോപ്പ്അപ്പ് ഒരു പുതിയ വിൻഡോയിൽ തുറക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?" }, - "disableFavicon": { - "message": "വെബ്‌സൈറ്റ് ഐക്കണുകൾ പ്രവർത്തനരഹിതമാക്കുക" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "വെബ്സൈറ്റ് ഐക്കണുകൾ തങ്ങളുടെ വാൾട്ടിലെ ലോഗിൻ ഇന്നതിന്റ്റെ അടുത്തായി തിരിച്ചറിയുന്ന ഒരു ചിത്രം ഉൾപ്പെടുത്തുന്നു." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "കാർഡ് ഉടമയുടെ പേര്" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 3285be8eb14..f4e1baf0efa 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -567,23 +567,23 @@ "message": "Ingen mappe", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Deaktiver «Legg til innlogging»-beskjedene" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "\"Legg til innlogging\"-beskjeden ber deg automatisk om å lagre nye innlogginger til hvelvet ditt hver gang du logger på dem for første gang." }, - "dontShowCardsCurrentTab": { - "message": "Ikke vis kort på fanesiden" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Kortene fra hvelvet ditt er listet opp på «Nåværende fane»-siden for enkel tilgang til autoutfylling." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Ikke vis identiteter på fanesiden" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identitetene fra hvelvet ditt er listet opp på «Nåværende fane»-siden for enkel autoutfyllingstilgang." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Tøm utklippstavlen", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Ja, lagre nå" }, - "disableChangedPasswordNotification": { - "message": "Deaktiver beskjeder om passordendringer" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "«Endret passord»-beskjeden spør deg automatisk om å oppdatere et innloggingspassord i hvelvet ditt, dersom den oppdager at du har endret det på et nettsted." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Vil du oppdatere dette passordet i Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Ja, oppdater nå" }, - "disableContextMenuItem": { - "message": "Deaktiver sammenhengsmeny-innstillinger" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Sammenhengsmeny-alternativer sørger for rask tilgang til passordgenerering og innlogginger for nettstedet i din nåværende fane." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Standard URI-samsvarsgjenkjenning", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Oppfriskning fullført" }, - "disableAutoTotpCopy": { - "message": "Deaktiver automatisk TOTP-kopiering" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Dersom din innlogging har en autentiseringsnøkkel knyttet til den, blir TOTP-verifiseringskoden automatisk kopiert til utklippstavlen din når enn du auto-utfyller innloggingen." }, - "disableAutoBiometricsPrompt": { - "message": "Ikke be om biometri under åpning" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium er påkrevd" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Denne nettleseren kan ikke behandle U2F-forespørsler i dette popup-vinduet. Vil du åpne denne popupen i et nytt vindu, slik at du kan logge deg på med U2F?" }, - "disableFavicon": { - "message": "Skru av nettstedsikoner" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Nettstedsikoner viser et karakteristisk bilde ved siden av hvert innloggingelement i hvelvet ditt." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Deaktiver Badge Teller" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Bade-teller indikerer hvor mange innlogginger du har for den nåværende siden i hvelvet ditt." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Kortholderens navn" diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 8710e21e985..a383527cad9 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -330,7 +330,7 @@ "message": "Overig" }, "rateExtension": { - "message": "Deze extensie beoordelen" + "message": "Extensie beoordelen" }, "rateExtensionDesc": { "message": "Je kunt ons helpen door een goede recensie achter te laten!" @@ -567,23 +567,23 @@ "message": "Geen map", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Melding bij nieuwe login uitschakelen" + "enableAddLoginNotification": { + "message": "Vraag om toevoegen login" }, "addLoginNotificationDesc": { "message": "\"Melding bij nieuwe login\" vraagt automatisch om nieuwe sites in de kluis op te slaan wanneer je ergens voor de eerste keer inlogt." }, - "dontShowCardsCurrentTab": { - "message": "Kaarten verbergen op tab" + "showCardsCurrentTab": { + "message": "Kaarten weergeven op tabpagina" }, - "dontShowCardsCurrentTabDesc": { - "message": "Kaartitems uit je kluis staan op de pagina 'Huidige Tab' om automatisch invullen te vereenvoudigen." + "showCardsCurrentTabDesc": { + "message": "Kaartenitems weergeven op de tabpagina voor gemakkelijk automatisch invullen." }, - "dontShowIdentitiesCurrentTab": { - "message": "Identiteiten verbergen op tab" + "showIdentitiesCurrentTab": { + "message": "Identiteiten weergeven op tabpagina" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identiteitsitems uit je kluis staan op de pagina 'Huidige Tab' om automatisch invullen te vereenvoudigen." + "showIdentitiesCurrentTabDesc": { + "message": "Identiteiten weergeven op de tabpagina voor gemakkelijk automatisch invullen." }, "clearClipboard": { "message": "Klembord wissen", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Ja, nu opslaan" }, - "disableChangedPasswordNotification": { - "message": "Melding gewijzigd wachtwoord uitschakelen" + "enableChangedPasswordNotification": { + "message": "Vraag om bijwerken bestaande login" }, - "disableChangedPasswordNotificationDesc": { - "message": "De \"Melding gewijzigd wachtwoord\" stelt automatisch voor om een wachtwoord in je kluis bij te werken wanneer het op een website is gewijzigd." + "changedPasswordNotificationDesc": { + "message": "Vraag om bijwerken van het wachtwoord van een login zodra een wijziging op een website is gedetecteerd." }, "notificationChangeDesc": { "message": "Wilt je dit wachtwoord in Bitwarden bijwerken?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Ja, nu bijwerken" }, - "disableContextMenuItem": { - "message": "Contextmenu-opties uitschakelen" + "enableContextMenuItem": { + "message": "Contextmenu-opties weergeven" }, - "disableContextMenuItemDesc": { - "message": "Contextmenu-opties bieden snelle toegang tot de wachtwoordgenerator en logins voor de website in de huidige tab." + "contextMenuItemDesc": { + "message": "Gebruik de tweede klikfunctie voor toegang tot wachtwoordgeneratie en het matchen van logins voor de website." }, "defaultUriMatchDetection": { "message": "Standaard URI-overeenkomstdetectie", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Bijwerken voltooid" }, - "disableAutoTotpCopy": { - "message": "TOTP automatisch kopiëren uitschakelen" + "enableAutoTotpCopy": { + "message": "TOTP automatisch kopiëren" }, "disableAutoTotpCopyDesc": { - "message": "Als je login gekoppeld is met een authenticatiecode, wordt de TOTP-verificatiecode automatisch naar het klembord gekopieerd bij het automatisch invullen van de login." + "message": "Als aan je login een authenticatorsleutel is gekoppeld, wordt de TOTP-verificatiecode automatisch gekopieerd naar je klembord wanneer je de login automatisch invult." }, - "disableAutoBiometricsPrompt": { - "message": "Bij opstarten niet om biometrisch ontgrendelen vragen" + "enableAutoBiometricsPrompt": { + "message": "Vraag om biometrie bij opstarten" }, "premiumRequired": { "message": "Premium is vereist" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Deze browser kan U2F-verzoeken niet verwerken in dit popupvenster. Wilt je deze pop-up openen in een nieuw venster zodat je kunt inloggen met U2F?" }, - "disableFavicon": { - "message": "Websitepictogrammen uitschakelen" + "enableFavicon": { + "message": "Websitepictogrammen weergeven" }, - "disableFaviconDesc": { - "message": "Websitepictogrammen geven een herkenbare afbeelding naast elk item in je kluis weer." + "faviconDesc": { + "message": "Een herkenbare afbeelding naast iedere login weergeven." }, - "disableBadgeCounter": { - "message": "Badgeteller uitschakelen" + "enableBadgeCounter": { + "message": "Teller weergeven" }, - "disableBadgeCounterDesc": { - "message": "De badgeteller geeft aan hoeveel logins je in je kluis hebt voor de huidige pagina." + "badgeCounterDesc": { + "message": "Indicatie van het aantal logins dat je hebt voor de huidige webpagina." }, "cardholderName": { "message": "Naam kaarthouder" diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index f65da3812c2..8fcb5822a75 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -146,10 +146,10 @@ "message": "Account" }, "changeMasterPassword": { - "message": "Change Master Password" + "message": "Change master password" }, "fingerprintPhrase": { - "message": "Fingerprint Phrase", + "message": "Fingerprint phrase", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Two-step Login" + "message": "Two-step login" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "about": { "message": "About" @@ -193,7 +193,7 @@ "message": "There are no folders to list." }, "helpFeedback": { - "message": "Help & Feedback" + "message": "Help & feedback" }, "sync": { "message": "Sync" @@ -215,10 +215,10 @@ "message": "Automatically generate strong, unique passwords for your logins." }, "bitWebVault": { - "message": "Bitwarden Web Vault" + "message": "Bitwarden web vault" }, "importItems": { - "message": "Import Items" + "message": "Import items" }, "select": { "message": "Select" @@ -330,7 +330,7 @@ "message": "Other" }, "rateExtension": { - "message": "Rate the Extension" + "message": "Rate the extension" }, "rateExtensionDesc": { "message": "Please consider helping us out with a good review!" @@ -364,10 +364,10 @@ "message": "Invalid master password" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "lockNow": { - "message": "Lock Now" + "message": "Lock now" }, "immediately": { "message": "Immediately" @@ -403,10 +403,10 @@ "message": "4 hours" }, "onLocked": { - "message": "On System Lock" + "message": "On system lock" }, "onRestart": { - "message": "On Browser Restart" + "message": "On browser restart" }, "never": { "message": "Never" @@ -567,26 +567,26 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { - "message": "Clear Clipboard", + "message": "Clear clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Save" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Update" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,11 +639,11 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Export Vault" + "message": "Export vault" }, "fileFormat": { "message": "File Format" @@ -671,7 +671,7 @@ "message": "Shared" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -747,7 +747,7 @@ "message": "You cannot use this feature until you update your encryption key." }, "premiumMembership": { - "message": "Premium Membership" + "message": "Premium membership" }, "premiumManage": { "message": "Manage Membership" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 23f087cdce1..11c8d457606 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -367,7 +367,7 @@ "message": "Blokowanie sejfu" }, "lockNow": { - "message": "Zablokuj" + "message": "Zablokuj teraz" }, "immediately": { "message": "Natychmiast" @@ -406,7 +406,7 @@ "message": "Po zablokowaniu komputera" }, "onRestart": { - "message": "Po restarcie przeglądarki" + "message": "Po uruchomieniu przeglądarki" }, "never": { "message": "Nigdy" @@ -567,23 +567,23 @@ "message": "Nieprzypisane", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Wyłącz powiadomienia automatycznego logowania" + "enableAddLoginNotification": { + "message": "Poproś o dodanie danych logowania" }, "addLoginNotificationDesc": { "message": "\"Dodaj powiadomienia logowania\" automatycznie wyświetla monit o zapisanie nowych danych logowania do sejfu przy każdym pierwszym logowaniu." }, - "dontShowCardsCurrentTab": { - "message": "Nie pokazuj kart w zakładce \"Obecna karta\"" + "showCardsCurrentTab": { + "message": "Pokaż karty na stronie Karta" }, - "dontShowCardsCurrentTabDesc": { - "message": "Karty zapisane w sejfie są wyświetlane w zakładce \"Obecna karta\"." + "showCardsCurrentTabDesc": { + "message": "Wyświetlaj elementy karty na stronie Karta, aby ułatwić autouzupełnianie." }, - "dontShowIdentitiesCurrentTab": { - "message": "Nie pokazuj tożsamości w zakładce \"Obecna karta\"" + "showIdentitiesCurrentTab": { + "message": "Pokaż tożsamości na stronie Karta" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Tożsamości zapisane w sejfie są wyświetlane w zakładce \"Obecna karta\"." + "showIdentitiesCurrentTabDesc": { + "message": "Wyświetlaj elementy tożsamości na stronie Karta, aby ułatwić autouzupełnianie." }, "clearClipboard": { "message": "Wyczyść schowek", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Zapisz" }, - "disableChangedPasswordNotification": { - "message": "Wyłącz powiadomienie o zmianie hasła" + "enableChangedPasswordNotification": { + "message": "Poproś o aktualizację istniejących danych logowania" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Powiadomienie o zmianie hasła\" automatycznie zapyta Cię o zaktualizowanie hasła w sejfie za każdym razem, gdy wykryje zmianę hasła na danej stronie." + "changedPasswordNotificationDesc": { + "message": "Poproś o aktualizację hasła danych logowania po wykryciu zmiany w witrynie." }, "notificationChangeDesc": { "message": "Czy chcesz zaktualizować to hasło w Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Zaktualizuj" }, - "disableContextMenuItem": { - "message": "Wyłącz opcje menu kontekstowego" + "enableContextMenuItem": { + "message": "Pokaż opcje menu kontekstowego" }, - "disableContextMenuItemDesc": { - "message": "Opcje menu kontekstowego zapewniają szybki dostęp do generowania haseł oraz do danych logowania dla obecnej karty." + "contextMenuItemDesc": { + "message": "Użyj drugiego kliknięcia, aby uzyskać dostęp do generowania haseł i pasujących danych logowania do witryny. " }, "defaultUriMatchDetection": { - "message": "Domyślne wykrywanie dopasowania", + "message": "Domyślna metoda dopasowania adresu", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Odświeżanie zostało zakończone" }, - "disableAutoTotpCopy": { - "message": "Wyłącz automatyczne kopiowanie kodu TOTP" + "enableAutoTotpCopy": { + "message": "Kopiuj TOTP automatycznie" }, "disableAutoTotpCopyDesc": { "message": "Jeśli dane logowania posiadają dołączony klucz uwierzytelniający TOTP, kod weryfikacyjny jest automatycznie kopiowany do schowka przy każdym autouzupełnianiu danych logowania." }, - "disableAutoBiometricsPrompt": { - "message": "Zapamiętaj autoryzację biometryczną" + "enableAutoBiometricsPrompt": { + "message": "Poproś o dane biometryczne przy uruchomieniu" }, "premiumRequired": { "message": "Konto Premium jest wymagane" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Ta przeglądarka nie może przetworzyć żądania U2F w tym oknie. Czy chcesz otworzyć nowe okno przeglądarki, aby zalogować się przy pomocy klucza U2F?" }, - "disableFavicon": { - "message": "Wyłącz ikony stron" + "enableFavicon": { + "message": "Pokaż ikony witryn" }, - "disableFaviconDesc": { - "message": "Wyświetlaj rozpoznawalną ikonę serwisu obok danych logowania w sejfie." + "faviconDesc": { + "message": "Pokaż rozpoznawalny obraz obok każdych danych logowania." }, - "disableBadgeCounter": { - "message": "Wyłącz licznik danych logowania" + "enableBadgeCounter": { + "message": "Pokaż licznik na ikonie" }, - "disableBadgeCounterDesc": { - "message": "Licznik informuje, ile danych logowania zawiera sejf dla obecnej strony." + "badgeCounterDesc": { + "message": "Wskaż, ile masz danych logowania do bieżącej strony internetowej." }, "cardholderName": { "message": "Właściciel karty" diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 3e1b3b15e11..831ecfe1c43 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -403,7 +403,7 @@ "message": "4 horas" }, "onLocked": { - "message": "Quando o Sistema for Bloqueado" + "message": "No bloqueio" }, "onRestart": { "message": "Ao Reiniciar" @@ -567,23 +567,23 @@ "message": "Nenhuma Pasta", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Desativar Notificação de Adicionar Credencial" + "enableAddLoginNotification": { + "message": "Peça para adicionar login" }, "addLoginNotificationDesc": { "message": "A \"Notificação de Adicionar Login\" pede para salvar automaticamente novas logins para o seu cofre quando você inicia uma sessão em um site pela primeira vez." }, - "dontShowCardsCurrentTab": { - "message": "Não Mostrar Cartões na Página 'Aba'" + "showCardsCurrentTab": { + "message": "Mostrar cartões na aba atual" }, - "dontShowCardsCurrentTabDesc": { - "message": "Os itens de cartão do seu cofre estão listados na página 'Aba Atual' para facilitar o acesso ao preenchimento automático." + "showCardsCurrentTabDesc": { + "message": "Listar itens do cartão na Aba para facilitar preenchimento automático." }, - "dontShowIdentitiesCurrentTab": { - "message": "Não Mostrar Identidades na Página \"Aba\"" + "showIdentitiesCurrentTab": { + "message": "Mostrar identidades na aba atual" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Os itens de identidade do seu cofre estão listados na página 'Aba Atual' para facilitar o acesso ao preenchimento automático." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Limpar Área de Transferência", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Salvar" }, - "disableChangedPasswordNotification": { - "message": "Desativar Notificação de Alteração da Senha" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "A \"Notificação de Alteração da Senha\" solicita automaticamente que você atualize a senha de uma credencial no seu cofre quando detecta que você a alterou em um site." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Você quer atualizar esta senha no Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Atualizar" }, - "disableContextMenuItem": { - "message": "Desativar Opções do Menu de Contexto" + "enableContextMenuItem": { + "message": "Mostrar opções de menu de contexto" }, - "disableContextMenuItemDesc": { - "message": "As opções do menu de contexto fornecem acesso rápido à geração de senha e credenciais para o site na sua aba atual." + "contextMenuItemDesc": { + "message": "Use um duplo clique para acessar a geração de usuários e senhas correspondentes para o site. " }, "defaultUriMatchDetection": { "message": "Detecção de Correspondência de URI Padrão", @@ -639,7 +639,7 @@ "description": "Light color" }, "solarizedDark": { - "message": "Escuro Solarizado", + "message": "Solarized (escuro)", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Atualização completa" }, - "disableAutoTotpCopy": { - "message": "Desativar Cópia Automática de TOTP" + "enableAutoTotpCopy": { + "message": "Copiar TOTP automaticamente" }, "disableAutoTotpCopyDesc": { "message": "Se a sua credencial tiver uma chave de autenticação anexada, o código de verificação TOTP será copiado automaticamente para a área de transferência quando você autopreencher a credencial." }, - "disableAutoBiometricsPrompt": { - "message": "Não solicitar por biometria na inicialização." + "enableAutoBiometricsPrompt": { + "message": "Pedir biometria ao iniciar" }, "premiumRequired": { "message": "Requer Assinatura Premium" @@ -954,7 +954,7 @@ "message": "Ativar o Autopreenchimento ao Carregar a Página" }, "enableAutoFillOnPageLoadDesc": { - "message": "Se um formulário de login for detectado, realize automaticamente um autopreenchimento quando a página web carregar." + "message": "Se um formulário de login for detectado, realizar automaticamente um auto-preenchimento quando a página web carregar." }, "experimentalFeature": { "message": "Atualmente, este é um recurso experimental. Utilize por sua conta e risco." @@ -963,10 +963,10 @@ "message": "Configuração de autopreenchimento padrão para itens de credenciais" }, "defaultAutoFillOnPageLoadDesc": { - "message": "Depois de ativar o Autopreenchimento ao carregar a página, você pode ativar ou desativar o recurso para itens de credenciais individuais. Esta é a configuração padrão para itens de credenciais que não são configurados separadamente." + "message": "Depois de habilitar o Auto-preenchimento ao carregar a página, você pode habilitar ou desabilitar o recurso para itens de credenciais individuais. Esta é a configuração padrão para itens de credenciais que não são configurados separadamente." }, "itemAutoFillOnPageLoad": { - "message": "Autopreencher no Carregamento da Página (se ativado nas Opções)" + "message": "Auto-preencher no Carregamento da Página (se ativado nas Opções)" }, "autoFillOnPageLoadUseDefault": { "message": "Usar configuração padrão" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Este navegador não pode processar requisições U2F nesta janela popup. Você quer abrir este popup em uma nova janela para que você possa entrar usando U2F?" }, - "disableFavicon": { - "message": "Desativar Ícones de Site" + "enableFavicon": { + "message": "Mostrar ícones do site" }, - "disableFaviconDesc": { - "message": "O Ícone do Site fornece uma imagem reconhecível ao lado de cada credencial no seu cofre." + "faviconDesc": { + "message": "Mostrar uma imagem reconhecível ao lado de cada login." }, - "disableBadgeCounter": { - "message": "Desativar Contador" + "enableBadgeCounter": { + "message": "Mostrar contador de insígnia" }, - "disableBadgeCounterDesc": { - "message": "O contador indica a quantidade de credenciais que você tem para a página atual no seu cofre." + "badgeCounterDesc": { + "message": "Indique quantos acessos você tem para a página “web” atual." }, "cardholderName": { "message": "Titular do Cartão" diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index b22a7712173..a260f46af95 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -149,7 +149,7 @@ "message": "Schimbare parolă principală" }, "fingerprintPhrase": { - "message": "Frază amprentă", + "message": "Fraza amprentă", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,7 +157,7 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Autentificare în două etape" + "message": "Autentificare în doi pași" }, "logOut": { "message": "Deconectare" @@ -218,7 +218,7 @@ "message": "Seif web Bitwarden" }, "importItems": { - "message": "Import elemente" + "message": "Import de articole" }, "select": { "message": "Selectare" @@ -403,7 +403,7 @@ "message": "4 ore" }, "onLocked": { - "message": "La blocarea dispozitivului" + "message": "La blocarea sistemului" }, "onRestart": { "message": "La repornirea browserului" @@ -567,23 +567,23 @@ "message": "Fără dosar", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Dezactivare \"Notificare de adăugare a autentificărilor\"" + "enableAddLoginNotification": { + "message": "Solicitați adăugarea autentificării" }, "addLoginNotificationDesc": { - "message": "\"Notificarea de adăugare a autentificării\" vă solicită automat salvarea noilor conturi în seif de fiecare dată când vă conectați la ele pentru prima dată." + "message": "Solicitați adăugarea unui element dacă nu se găsește unul în seif." }, - "dontShowCardsCurrentTab": { - "message": "Nu se afișează carduri în pagina filei curente" + "showCardsCurrentTab": { + "message": "Afișați cardurile pe pagina Filă" }, - "dontShowCardsCurrentTabDesc": { - "message": "Informațiile de tip card din seiful dvs. sunt afișate în pagina din \"Fila curentă\" pentru acces ușor la auto-completare." + "showCardsCurrentTabDesc": { + "message": "Listați elementele cardului pe pagina Filă pentru a facilita completarea automată." }, - "dontShowIdentitiesCurrentTab": { - "message": "Nu se afișează identități în pagina filei curente" + "showIdentitiesCurrentTab": { + "message": "Afișați identitățile pe pagina Filă" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Informațiile de tip identitate din seiful dvs. sunt afișate în pagina din \"Fila curentă\" pentru acces ușor la auto-completare." + "showIdentitiesCurrentTabDesc": { + "message": "Listați elementelor de identitate de pe pagina Filă pentru a facilita completarea automată." }, "clearClipboard": { "message": "Golire clipboard", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Salvare" }, - "disableChangedPasswordNotification": { - "message": "Dezactivare notificare de modificare a parolei" + "enableChangedPasswordNotification": { + "message": "Solicitați actualizarea autentificării existente" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Notificarea de modificare a parolei\" vă propune automat să actualizați o parolă din seif oricând se detectează că ați modificat-o pe un sait." + "changedPasswordNotificationDesc": { + "message": "Solicitați actualizarea unei parole de autentificare atunci când este detectată o modificare pe un site web." }, "notificationChangeDesc": { "message": "Doriți să actualizați această parolă în Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Actualizare" }, - "disableContextMenuItem": { - "message": "Dezactivare opțiuni meniu contextual" + "enableContextMenuItem": { + "message": "Afișați opțiunile meniului contextual" }, - "disableContextMenuItemDesc": { - "message": "Opțiunile din meniul contextual oferă acces rapid la generarea de parole și la autentificările pentru saitul web din fila curentă." + "contextMenuItemDesc": { + "message": "Utilizați un clic secundar pentru a accesa generarea de parole și conectările potrivite pentru site-ul web." }, "defaultUriMatchDetection": { - "message": "Detectare de potrivire URI implicită", + "message": "Detectare implicită a potrivirii URI", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -747,7 +747,7 @@ "message": "Nu puteți utiliza această caracteristică înainte de a actualiza cheia de criptare." }, "premiumMembership": { - "message": "Membru Premium" + "message": "Abonament Premium" }, "premiumManage": { "message": "Gestionare statut de membru" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Actualizare completă" }, - "disableAutoTotpCopy": { - "message": "Dezactivare copiere automată a codului TOTP" + "enableAutoTotpCopy": { + "message": "Copiați automat TOTP" }, "disableAutoTotpCopyDesc": { - "message": "Dacă autentificarea dvs. are o cheie atașată, codul de verificare TOTP este copiat în clipboard de fiecare dată când efectuați auto-completarea datelor de conectare." + "message": "Dacă o autentificare are o cheie de autentificare, copiați codul de verificare TOTP în clipboard când completați automat autentificarea." }, - "disableAutoBiometricsPrompt": { - "message": "Nu solicitați datele biometrice la pornire" + "enableAutoBiometricsPrompt": { + "message": "Solicitați date biometrice la pornire" }, "premiumRequired": { "message": "Este necesară versiunea Premium" @@ -951,10 +951,10 @@ "message": "URL-urile mediului au fost salvate." }, "enableAutoFillOnPageLoad": { - "message": "Activare auto-completare la încărcarea paginii" + "message": "Completare automată la încărcarea paginii" }, "enableAutoFillOnPageLoadDesc": { - "message": "Dacă este detectat un formular de autentificare, se efectuează automat o completare a acestuia la încărcarea paginii." + "message": "Dacă se detectează un formular de autentificare, completați-l automat la încărcarea paginii web." }, "experimentalFeature": { "message": "În acest moment, aceasta funcțiune este experimentală. O puteți folosi pe propria răspundere." @@ -963,10 +963,10 @@ "message": "Setarea implicită de completare automată pentru articole de conectare" }, "defaultAutoFillOnPageLoadDesc": { - "message": "După activarea completării automate la încărcarea paginii, puteți activa sau dezactiva funcția pentru elementele de conectare individuale. Aceasta este setarea implicită pentru articolele de conectare care nu sunt configurate separat." + "message": "Puteți dezactiva completarea automată la încărcarea paginii pentru elementele de autentificare individuale din vizualizarea Editare element." }, "itemAutoFillOnPageLoad": { - "message": "Completare automată la încărcarea paginii (dacă este activată în opțiuni)" + "message": "Completare automată la încărcarea paginii (dacă este activată în Opțiuni)" }, "autoFillOnPageLoadUseDefault": { "message": "Utilizați setarea implicită" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Acest browser nu poate procesa cererile U2F în această fereastră pop-up. Doriți să deschideți acest pop-up într-o fereastră nouă, astfel încât să vă puteți conecta utilizând U2F?" }, - "disableFavicon": { - "message": "Dezactivare iconuri sait" + "enableFavicon": { + "message": "Afișați pictogramele site-ului web" }, - "disableFaviconDesc": { - "message": "Iconurile saiturilor oferă o imagine identificabilă lângă fiecare element de conectare din seiful dvs." + "faviconDesc": { + "message": "Afișează o imagine ușor de recunoscut lângă fiecare autentificare." }, - "disableBadgeCounter": { - "message": "Dezactivați contorul de insigne" + "enableBadgeCounter": { + "message": "Afișați contorul de insigne" }, - "disableBadgeCounterDesc": { - "message": "Contorul de insigne arată câte conectări aveți în seiful dvs. pentru pagina curentă." + "badgeCounterDesc": { + "message": "Indică numărul de autentificări pe care le aveți pentru pagina web curentă." }, "cardholderName": { "message": "Deținător card" diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index ff7671a4b53..d507c95aa64 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -160,7 +160,7 @@ "message": "Двухфакторная аутентификация" }, "logOut": { - "message": "Выйти" + "message": "Выход" }, "about": { "message": "О Bitwarden" @@ -406,7 +406,7 @@ "message": "Вместе с компьютером" }, "onRestart": { - "message": "При перезапуске" + "message": "При перезапуске браузера" }, "never": { "message": "Никогда" @@ -567,26 +567,26 @@ "message": "Без папки", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Отключить уведомление о добавлении логина" + "enableAddLoginNotification": { + "message": "Спрашивать при добавлении логина" }, "addLoginNotificationDesc": { - "message": "Уведомление о добавлении логина автоматически предложит вам сохранить новые логины в хранилище." + "message": "Запросить добавление элемента, если его нет в вашем хранилище." }, - "dontShowCardsCurrentTab": { - "message": "Не показывать карты на вкладке" + "showCardsCurrentTab": { + "message": "Показывать карты на вкладке" }, - "dontShowCardsCurrentTabDesc": { - "message": "Карты из вашего хранилища перечислены на 'Текущей вкладке' для упрощения доступа к автозаполнению." + "showCardsCurrentTabDesc": { + "message": "Карты будут отображены на вкладке для удобного автозаполнения." }, - "dontShowIdentitiesCurrentTab": { - "message": "Не показывать Личности на вкладке" + "showIdentitiesCurrentTab": { + "message": "Показывать Личности на вкладке" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Личности из вашего хранилища перечислены на 'Текущей вкладке' для упрощения доступа к автозаполнению." + "showIdentitiesCurrentTabDesc": { + "message": "Личности будут отображены на вкладке для удобного автозаполнения." }, "clearClipboard": { - "message": "Очистка буфера обмена", + "message": "Очистить буфер обмена", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Сохранить" }, - "disableChangedPasswordNotification": { - "message": "Отключить уведомление об изменении пароля" + "enableChangedPasswordNotification": { + "message": "Спрашивать при обновлении существующего логина" }, - "disableChangedPasswordNotificationDesc": { - "message": "Уведомление об изменении пароля автоматически предложит вам обновить пароль входа в хранилище, когда обнаружит, что вы изменили его на веб-сайте." + "changedPasswordNotificationDesc": { + "message": "Спрашивать обновление пароля логина при обнаружении изменения на веб-сайте." }, "notificationChangeDesc": { "message": "Обновить этот пароль в Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Обновить" }, - "disableContextMenuItem": { - "message": "Отключить опции контекстного меню" + "enableContextMenuItem": { + "message": "Показать опции контекстного меню" }, - "disableContextMenuItemDesc": { - "message": "Опции контекстного меню обеспечивают быстрый доступ к генератору паролей и логинам для сайта на текущей вкладке." + "contextMenuItemDesc": { + "message": "С помощью двойного щелчка можно получить доступ к генерации паролей и сопоставлению логинов для веб-сайта." }, "defaultUriMatchDetection": { "message": "Обнаружение совпадения URI по умолчанию", @@ -643,7 +643,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Экспорт хранилища" + "message": "Экспортировать хранилище" }, "fileFormat": { "message": "Формат файла" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Обновление завершено" }, - "disableAutoTotpCopy": { - "message": "Отключить автоматическое копирование TOTP" + "enableAutoTotpCopy": { + "message": "Копировать TOTP автоматически" }, "disableAutoTotpCopyDesc": { - "message": "Если к вашему логину прикреплен ключ проверки подлинности, то код подтверждения TOTP будет скопирован при автозаполнении логина." + "message": "Если к вашему логину прикреплен ключ аутентификации, то код подтверждения TOTP будет скопирован при автозаполнении логина." }, - "disableAutoBiometricsPrompt": { - "message": "Не запрашивать биометрию при запуске" + "enableAutoBiometricsPrompt": { + "message": "Запрашивать биометрию при запуске" }, "premiumRequired": { "message": "Необходим Премиум" @@ -951,10 +951,10 @@ "message": "URL-адреса среды сохранены." }, "enableAutoFillOnPageLoad": { - "message": "Включить автозаполнение при загрузке страницы" + "message": "Автозаполнение при загрузке страницы" }, "enableAutoFillOnPageLoadDesc": { - "message": "При обнаружении формы входа выполняется автозаполнение во время загрузки веб-страницы." + "message": "Если обнаружена форма входа, автозаполнение выполняется при загрузке веб-страницы." }, "experimentalFeature": { "message": "Это экспериментальная функция. Используйте на свой страх и риск." @@ -963,7 +963,7 @@ "message": "Настройка автозаполнения по умолчанию для логинов" }, "defaultAutoFillOnPageLoadDesc": { - "message": "После включения автозаполнения при загрузке страницы вы можете включить или отключить эту функцию для отдельных логинов. Это настройка по умолчанию для логинов, которые не были настроены отдельно." + "message": "Вы можете отключить автозаполнение при загрузке страницы для отдельных логинов в режиме редактирования элемента." }, "itemAutoFillOnPageLoad": { "message": "Автозаполнение при загрузке страницы (если включено в настройках)" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Этот браузер не может обрабатывать запросы U2F в этом всплывающем окне. Вы хотите открыть это всплывающее окно в новом окне, чтобы иметь возможность войти в систему, используя U2F?" }, - "disableFavicon": { - "message": "Отключить значки веб-сайтов" + "enableFavicon": { + "message": "Показать значки веб-сайтов" }, - "disableFaviconDesc": { - "message": "Значки веб-сайтов отображаются рядом с каждым элементом в вашем хранилище." + "faviconDesc": { + "message": "Отображать узнаваемое изображение рядом с каждым логином." }, - "disableBadgeCounter": { - "message": "Отключить счетчик значка" + "enableBadgeCounter": { + "message": "Показать счетчик на значке" }, - "disableBadgeCounterDesc": { - "message": "Счетчик значка показывает, сколько в вашем хранилище логинов для текущей страницы." + "badgeCounterDesc": { + "message": "Показывает количество логинов для текущей веб-страницы." }, "cardholderName": { "message": "Имя владельца карты" diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 8b821eab3b2..5849355ecbf 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -567,23 +567,23 @@ "message": "බහලුමක් නැත", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "අක්රීය කරන්න ලොගින් වන්න නිවේදනය" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "මෙම “ලොගින් වන්න නිවේදනය එකතු කරන්න” ස්වයංක්රීයව ඔබ පළමු වරට ඔවුන් තුලට ප්රවිෂ්ට සෑම අවස්ථාවකදීම ඔබගේ සුරක්ෂිතාගාරය නව පිවිසුම් බේරා ගැනීමට ඔබෙන් විමසනු." }, - "dontShowCardsCurrentTab": { - "message": "ටැබ් පිටුවේ කාඩ්පත් පෙන්වන්න එපා" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "ඔබගේ සුරක්ෂිතාගාරයේ කාඩ්පත් අයිතම පහසුවෙන් ස්වයංක්රීයව පිරවීමේ ප්රවේශය සඳහා 'වත්මන් ටැබ් 'පිටුවේ ලැයිස්තුගත කර ඇත." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "ටැබ් පිටුවේ අනන්යතා පෙන්වන්න එපා" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "ඔබගේ සුරක්ෂිතාගාරයේ අනන්යතා අයිතම පහසුවෙන් ස්වයංක්රීය-පිරවීමේ ප්රවේශය සඳහා 'වත්මන් ටැබ්' පිටුවේ ලැයිස්තුගත කර ඇත." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "පසුරු පුවරුවට පැහැදිලි", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "සුරකින්න" }, - "disableChangedPasswordNotification": { - "message": "වෙනස් කළ මුරපද නිවේදනය අක්රීය කරන්න" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "මෙම “වෙනස් මුරපදය නිවේදනය” ස්වයංක්රීයව ඔබ වෙබ් අඩවිය මත එය වෙනස් කර ඇති බව හඳුනාගන්නා සෑම අවස්ථාවකදීම ඔබගේ සුරක්ෂිතාගාරයේ පිවිසුම් මුරපදය යාවත්කාලීන කිරීමට ඔබෙන් විමසනු ඇත." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Bitwarden හි මෙම මුරපදය යාවත්කාලීන කිරීමට ඔබට අවශ්යද?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "යාවත්කාල" }, - "disableContextMenuItem": { - "message": "සන්දර්භය මෙනු විකල්ප අක්රීය කරන්න" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "සන්දර්භය මෙනු විකල්පයන් ඔබගේ වත්මන් පටිත්තෙහි ඇති වෙබ් අඩවිය සඳහා මුරපද උත්පාදනය සහ පිවිසුම් සඳහා ඉක්මන් ප්රවේශයක් ලබා දෙයි." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "පෙරනිමි URI තරග හඳුනා", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "සම්පූර්ණ නැවුම් කරන්න" }, - "disableAutoTotpCopy": { - "message": "ස්වයංක්රීය TOTP පිටපත් අක්රීය" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "ඔබගේ පිවිසුමට සත්යාපන යතුරක් අමුණා තිබේ නම්, ඔබ පිවිසුම ස්වයංක්රීයව පුරවන සෑම අවස්ථාවකදීම TOTP සත්යාපන කේතය ස්වයංක්රීයව ඔබගේ පසුරු පුවරුවට පිටපත් කරනු ලැබේ." }, - "disableAutoBiometricsPrompt": { - "message": "දියත් කිරීම සඳහා ජෛව මිතික විද්යාව සඳහා විමසුම් නොකරන්න" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "වාරික අවශ්ය" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "මෙම බ්රවුසරයට මෙම උත්පතන කවුළුව තුළ U2F ඉල්ලීම් සැකසීමට නොහැක. ඔබට U2F භාවිතයෙන් පිවිසිය හැකි වන පරිදි නව කවුළුවක මෙම උත්පතන විවෘත කිරීමට අවශ්යද?" }, - "disableFavicon": { - "message": "වෙබ් අඩවි අයිකන අක්රීය කරන්න" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "වෙබ් අඩවි අයිකන ඔබගේ සුරක්ෂිතාගාරයේ එක් එක් පිවිසුම් අයිතමයට යාබදව හඳුනාගත හැකි රූපයක් ලබා දෙයි." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "බැජ් කවුන්ටරය අක්රීය කරන්න" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "බැජ් කවුන්ටරය ඔබ ඔබේ සුරක්ෂිතාගාරයේ වත්මන් පිටුව සඳහා කොපමණ පිවිසුම් පෙන්නුම් කරයි." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "කාඞ්පත් හිමි නම" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 4f4d1e50d61..7afc581fdc1 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -364,7 +364,7 @@ "message": "Neplatné hlavné heslo" }, "vaultTimeout": { - "message": "Časový limit pre trezor vypršal" + "message": "Časový limit pre trezor" }, "lockNow": { "message": "Uzamknúť teraz" @@ -403,10 +403,10 @@ "message": "4 hodiny" }, "onLocked": { - "message": "Pri uzamknutí" + "message": "Keď je systém uzamknutý" }, "onRestart": { - "message": "Po reštarte" + "message": "Po reštarte prehliadača" }, "never": { "message": "Nikdy" @@ -567,23 +567,23 @@ "message": "Žiadny priečinok", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Vypnúť notifikáciu Pridať prihlasovacie údaje" + "enableAddLoginNotification": { + "message": "Požiadať o pridanie prihlásenia" }, "addLoginNotificationDesc": { - "message": "\"Notifikácia Pridať prihlasovacie údaje\" vás automaticky upozorní na uloženie nových údajov do vášho trezoru vždy, keď sa s nimi prihlasujete poprvýkrát." + "message": "Opýtať sa na pridanie prihlasovacích údajov ak ich ešte nemáte v trezore." }, - "dontShowCardsCurrentTab": { - "message": "Nezobrazovať platobné karty na stránke \"Aktuálna karta\"" + "showCardsCurrentTab": { + "message": "Zobraziť karty na stránke \"Aktuálna karta\"" }, - "dontShowCardsCurrentTabDesc": { - "message": "Položky kariet sa zobrazujú na stránke „Aktuálna karta“ pre ľahšie automatické vypĺňanie." + "showCardsCurrentTabDesc": { + "message": "Zoznam položiek karty na stránke \"Aktuálna karta\" na jednoduché automatické vyplnenie." }, - "dontShowIdentitiesCurrentTab": { - "message": "Nezobrazovať identity na stránke Karta" + "showIdentitiesCurrentTab": { + "message": "Zobraziť identity na stránke \"Aktuálna karta\"" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity z vášho trezoru sa zobrazujú na stránke \"Aktuálna karta\" pre ľahké automatické vypĺňanie." + "showIdentitiesCurrentTabDesc": { + "message": "Zoznam položiek identity na stránke \"Aktuálna karta\" na jednoduché automatické vypĺňanie." }, "clearClipboard": { "message": "Vymazať schránku", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Uložiť" }, - "disableChangedPasswordNotification": { - "message": "Vypnúť oznámenie o zmene hesla" + "enableChangedPasswordNotification": { + "message": "Požiadať o aktualizáciu existujúceho prihlasovania" }, - "disableChangedPasswordNotificationDesc": { - "message": "Oznámenie o zmene hesla sa vás automaticky opýta na aktualizáciu prihlasovacích údajov vo vašom trezore vždy, keď zistí, že ste ho zmenili na stránke." + "changedPasswordNotificationDesc": { + "message": "Požiadať o aktualizáciu prihlasovacieho hesla, ak sa zistí zmena na stránke." }, "notificationChangeDesc": { "message": "Chcete aktualizovať toto heslo v Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Aktualizovať" }, - "disableContextMenuItem": { - "message": "Vypnúť možnosti kontextového menu" + "enableContextMenuItem": { + "message": "Zobraziť možnosti kontextovej ponuky" }, - "disableContextMenuItemDesc": { - "message": "Možnosti kontextového menu ponúkajú rýchly prístup k prihlasovacím údajom a generovaniu hesiel pre stránku vo vašej aktuálnej karte." + "contextMenuItemDesc": { + "message": "Sekundárnym kliknutím získate prístup k vygenerovaniu hesiel a zodpovedajúcim prihláseniam pre webovú stránku. " }, "defaultUriMatchDetection": { "message": "Predvolené mapovanie", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Obnova kompletná" }, - "disableAutoTotpCopy": { - "message": "Vypnúť automatické kopírovanie TOTP" + "enableAutoTotpCopy": { + "message": "Automaticky kopírovať TOTP" }, "disableAutoTotpCopyDesc": { "message": "Ak je kľúč overovateľa spojený s vašim prihlásením, TOTP verifikačný kód bude automaticky skopírovaný do schránky vždy, keď použijete automatické vypĺňanie." }, - "disableAutoBiometricsPrompt": { - "message": "Pri spustení nevyžadovať biometrické údaje" + "enableAutoBiometricsPrompt": { + "message": "Pri spustení požiadať o biometriu" }, "premiumRequired": { "message": "Vyžaduje prémiový účet" @@ -954,7 +954,7 @@ "message": "Povoliť automatické vypĺňanie pri načítaní stránky" }, "enableAutoFillOnPageLoadDesc": { - "message": "Ak je prihlasovací formulár detegovaný, automaticky vykonať vypĺňanie pri načítaní stránky." + "message": "Ak je detekovaný prihlasovací formulár, automaticky vykonať vypĺňanie pri načítaní stránky." }, "experimentalFeature": { "message": "Toto je zatiaľ experimentálna funkcia. Použite na vlastné riziko." @@ -963,7 +963,7 @@ "message": "Predvolené nastavenie automatického vypĺňania pre prihlasovacie položky" }, "defaultAutoFillOnPageLoadDesc": { - "message": "Po zapnutí funkcie Automatické vypĺňanie pri načítaní stránky môžete túto funkciu zapnúť alebo vypnúť pre jednotlivé položky prihlásenia. Toto je predvolené nastavenie pre prihlasovacie položky, ktoré nie sú samostatne nakonfigurované." + "message": "Pri úprave položky prihlásenia môžete individuálne zapnúť alebo vypnúť automatické vypĺňanie pri načítaní stránky pre danú položku." }, "itemAutoFillOnPageLoad": { "message": "Automatické vypĺňanie pri načítaní stránky (ak je povolené v možnostiach)" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Tento prehliadač nedokáže spracovať U2F požiadavku v popup okne. Chcete ho otvoriť v novom okne aby ste sa mohli prihlásiť pomocou U2F?" }, - "disableFavicon": { - "message": "Nezobrazovať ikony stránok" + "enableFavicon": { + "message": "Zobrazovať favikony stránok" }, - "disableFaviconDesc": { - "message": "Ikony stránok poskytujú rozoznateľný obrázok vedľa každého prihlasovacieho údaju vo webovom trezore." + "faviconDesc": { + "message": "Pri každom prihlásení zobrazí rozpoznateľný obrázok." }, - "disableBadgeCounter": { - "message": "Zakázať počítadlo na ikone" + "enableBadgeCounter": { + "message": "Zobraziť počítadlo na ikone" }, - "disableBadgeCounterDesc": { - "message": "Zakáže počítadlo na ikone, ktoré zobrazuje počet prihlasovacích údajov v trezore pre aktuálnu stránku." + "badgeCounterDesc": { + "message": "Ukazuje, koľko prihlásení máte pre aktuálnu webovú stránku." }, "cardholderName": { "message": "Meno vlastníka karty" diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index e2b7af24da0..814776b346a 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -567,23 +567,23 @@ "message": "Brez mape", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { - "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." + "message": "Ask to add an item if one isn't found in your vault." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Ne prikazuj identitete" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Počisti odložišče", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Da, shrani zdaj" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Do you want to update this password in Bitwarden?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Da, posodobi zdaj" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -639,7 +639,7 @@ "description": "Light color" }, "solarizedDark": { - "message": "Solarized Dark", + "message": "Solarized dark", "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { @@ -671,7 +671,7 @@ "message": "V skupni rabi" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Osveževanje zaključeno" }, - "disableAutoTotpCopy": { - "message": "Onemogočite avtomatsko kopiranje TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Če za prijavo uporabljate avtentikacijski ključ je TOTP verifikacijska koda avtomatično kopirana v vaše odložišče kadarkoli avto-izpolnite prijavo." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium članstvo je potrebno" @@ -951,10 +951,10 @@ "message": "The environment URLs have been saved." }, "enableAutoFillOnPageLoad": { - "message": "Enable Auto-fill on Page Load" + "message": "Auto-fill on page load" }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Uporabi privzete nastavitve" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Ta spletni brskalnik ne more obdelati U2F zahteve v tem pojavnem oknu. Želite odpreti to pojavno okno v novem oknu, tako, da se lahko prijavite z U2F?" }, - "disableFavicon": { - "message": "Onemogoči ikone spletnih mest" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Ikone spletnih mest ponujajo prepoznavne ikone zraven prijav v vašem trezorju." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Ime imetnika kartice" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "Lock", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index fce7143995e..40722a4da8e 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -567,23 +567,23 @@ "message": "Без фасцикле", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Онемогући обавештење Додај Пријаву" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "„Нотификације Додај Лозинку“ аутоматски тражи да сачувате нове пријаве у сефу кад год се први пут пријавите на њих." }, - "dontShowCardsCurrentTab": { - "message": "Не приказуј кредитне картице на страници" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Ставке кредитне картице из вашег сефа наведене су на страници „Тренутна картица“ ради једноставног приступа аутоматског попуњавања." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Не приказуј идентитете на страници" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Идентитети из вашег сефа наведени су на страници „Тренутна картица“ ради једноставног приступа аутоматског попуњавања." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Обриши привремену меморију", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Сачувај" }, - "disableChangedPasswordNotification": { - "message": "Онемогући обавештење о промењеним лозинкама" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "„Нотификација Промењена Лозинка“ аутоматски тражи да ажурирате лозинку за пријављивање у сефу сваки пут када открије да сте је променили на веб сајту." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Да ли желите да ажурирате ову лозинку за Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Ажурирај" }, - "disableContextMenuItem": { - "message": "Онемогући опције у контекстном менију" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Опције контекстуалног менија пружају брз приступ генерисању лозинки и пријавама за веб сајт на вашом тренутном језичку." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Стандардно налажење УРЛ", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Освежавање је завршено" }, - "disableAutoTotpCopy": { - "message": "Угаси аутоматско копирање једнократног кода" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Ако је за вашу пријаву приложен аутентификациони кључ, једнократни код се аутоматски копира у вашој привременој меморији кад год ауто-попуните пријаву." }, - "disableAutoBiometricsPrompt": { - "message": "Не тражи биометрику након покретања." + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Потребан Премијум" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Овај прегледач не може да обрађује U2F захтеве у овом искачућем прозору. Да ли желите да отворите овај искачући прозор у новом прозору како бисте могли да се пријавите користећи U2F?" }, - "disableFavicon": { - "message": "Онемогући иконице сајта" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Иконе веб сајта пружају препознатљиву слику поред сваке пријаве у сефу." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Онемогући бројач на иконици" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Бројач иконице указује колико пријава имате за тренутну страницу у вашем сефу." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Име Власника Картице" diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index d31c17cd7fc..3ea4caa0ed1 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -567,23 +567,23 @@ "message": "Ingen mapp", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Inaktivera aviseringar för nya inloggningar" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "Aviseringar för nya inloggningar frågar dig om du vill lägga till en inloggning automatiskt till ditt valv, när du använder en inloggning som inte redan finns i ditt valv." }, - "dontShowCardsCurrentTab": { - "message": "Visa inte kort på fliksida" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Kortobjekt från ditt valv listas på 'nuvarande flik'-sidan för enkel automatisk ifyllnad." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Visa inte identiteter på fliksidan" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identitetsobjekt från ditt valv listas på 'nuvarande flik'-sidan för enkel automatisk ifyllnad." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Rensa urklipp", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Spara" }, - "disableChangedPasswordNotification": { - "message": "Inaktivera notifikation för ändrade lösenord" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "”Notifikation för ändrade lösenord” uppmanar dig automatiskt att uppdatera ett lösenord i ditt valv när den upptäcker att du har ändrat det på en webbplats." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Vill du uppdatera det här lösenordet i Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Uppdatera" }, - "disableContextMenuItem": { - "message": "Inaktivera innehållsmenyn" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Innehållsmenyn (högerklick) ger dig snabbare åtkomst för att skapa ett slumpmässigt lösenord, och för att fylla i en inloggning i den nuvarande fliken." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Standardmatchning för URI", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Uppdatering färdig" }, - "disableAutoTotpCopy": { - "message": "Inaktivera automatisk TOTP-kopiering" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Om din inloggning har en autentiseringsnyckel kopplad till den, kommer TOTP-verifieringskoden att automatiskt kopieras till urklipp när du automatiskt fyller i inloggningen." }, - "disableAutoBiometricsPrompt": { - "message": "Fråga inte efter biometri vid uppstart" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium krävs" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Den här webbläsaren kan inte bearbeta U2F-förfrågningar i detta popup-fönster. Vill du öppna ett nytt fönster så att du kan logga in med U2F?" }, - "disableFavicon": { - "message": "Inaktivera webbplatsikoner" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Webbplatsikoner ger en igenkännbar ikon bredvid varje inloggningsobjekt i ditt valv." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Inaktivera märkesräknare" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Märkesräknare visar hur många inloggningar du har för den aktuella sidan i ditt valv." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Kortinnehavarens namn" @@ -1916,7 +1916,7 @@ "message": "Typ av användarnamn" }, "plusAddressedEmail": { - "message": "Plus Addressed Email", + "message": "Plusadresserad e-post", "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" }, "plusAddressedEmailDesc": { @@ -1947,10 +1947,10 @@ "message": "Tjänst" }, "forwardedEmail": { - "message": "Forwarded Email Alias" + "message": "Vidarebefordrande e-postalias" }, "forwardedEmailDesc": { - "message": "Generate an email alias with an external forwarding service." + "message": "Skapa ett e-postalias med en extern vidarebefordranstjänst." }, "hostname": { "message": "Värdnamn", @@ -1963,6 +1963,6 @@ "message": "API-nyckel" }, "ssoKeyConnectorError": { - "message": "Key Connector error: make sure Key Connector is available and working correctly." + "message": "Key Connector-fel: säkerställ att Key Connector är tillgänglig och fungerar korrekt." } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index 173c286c804..ebf4779b11a 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -567,23 +567,23 @@ "message": "No Folder", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Disable Add Login Notification" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "ล้างคลิปบอร์ด", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Yes, Save Now" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "คุณต้องการอัปเดตรหัสผ่านนี้ใน Bitwarden หรือไม่?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "Yes, Update Now" }, - "disableContextMenuItem": { - "message": "Disable Context Menu Options" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { - "message": "Default URI Match Detection", + "message": "Default URI match detection", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -671,7 +671,7 @@ "message": "แชร์แล้ว" }, "learnOrg": { - "message": "Learn about Organizations" + "message": "Learn about organizations" }, "learnOrgConfirmation": { "message": "Bitwarden allows you to share your vault items with others by using an organization. Would you like to visit the bitwarden.com website to learn more?" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Refresh complete" }, - "disableAutoTotpCopy": { - "message": "Disable Automatic TOTP Copy" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { - "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." + "message": "If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login." }, - "disableAutoBiometricsPrompt": { - "message": "Do not prompt for biometrics on launch" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Premium Required" @@ -954,7 +954,7 @@ "message": "Enable Auto-fill On Page Load." }, "enableAutoFillOnPageLoadDesc": { - "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + "message": "If a login form is detected, auto-fill when the web page loads." }, "experimentalFeature": { "message": "This is currently an experimental feature. Use at your own risk." @@ -963,10 +963,10 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" + "message": "Auto-fill on page load (if enabled in Options)" }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" }, - "disableFavicon": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Website Icons provides a recognizable icon next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Disable Badge Counter" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Badge counter indicates how many logins you have for the current page in your vault." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Cardholder Name" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1386,7 +1386,7 @@ "message": "One or more organization policies are affecting your generator settings." }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "lock": { "message": "ล็อก", @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index fcd6a8b17fc..c44e99086c1 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -146,10 +146,10 @@ "message": "Hesap" }, "changeMasterPassword": { - "message": "Ana parolayı değiştir" + "message": "Ana Parolayı Değiştir" }, "fingerprintPhrase": { - "message": "Parmak izi ifadesi", + "message": "Özgün Cümle", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -157,10 +157,10 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "İki aşamalı giriş" + "message": "İki Aşamalı Giriş" }, "logOut": { - "message": "Çıkış yap" + "message": "Çıkış Yap" }, "about": { "message": "Hakkında" @@ -193,7 +193,7 @@ "message": "Listelenecek klasör yok." }, "helpFeedback": { - "message": "Yardım ve geribildirim" + "message": "Yardım & Geribildirim" }, "sync": { "message": "Eşitle" @@ -215,10 +215,10 @@ "message": "Hesaplarınız için otomatik olarak güçlü, özgün parolalar oluşturun." }, "bitWebVault": { - "message": "Bitwarden web kasası" + "message": "Bitwarden Web Kasası" }, "importItems": { - "message": "Hesapları içe aktar" + "message": "Hesapları İçe Aktar" }, "select": { "message": "Seç" @@ -367,7 +367,7 @@ "message": "Kasa zaman aşımı" }, "lockNow": { - "message": "Şimdi kilitle" + "message": "Şimdi Kilitle" }, "immediately": { "message": "Hemen" @@ -403,10 +403,10 @@ "message": "4 saat" }, "onLocked": { - "message": "Sistem kilitlenince" + "message": "Sistem Kilitliyken" }, "onRestart": { - "message": "Tarayıcı yeniden başlatılınca" + "message": "Tarayıcı Yeniden Başlatıldığında" }, "never": { "message": "Asla" @@ -567,26 +567,26 @@ "message": "Klasör yok", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "\"Hesap ekle\" bildirimini kapat" + "enableAddLoginNotification": { + "message": "Hesap eklemeyi öner" }, "addLoginNotificationDesc": { - "message": "\"Hesap ekle\" bildirimi, ilk kez kullandığınız hesap bilgilerini kasanıza kaydetmek isteyip istemediğinizi otomatik olarak sorar." + "message": "\"Hesap Ekle Bildirimi\" otomatik olarak, ilk kez oturum açtığınız hesabınızı kasanıza kaydetmeniz için uyarı verir." }, - "dontShowCardsCurrentTab": { - "message": "Sekme sayfasında kartları gösterme" + "showCardsCurrentTab": { + "message": "Sekme sayfasında kartları göster" }, - "dontShowCardsCurrentTabDesc": { - "message": "Kasanızdaki banka/kredi kartları, otomatik doldurmayı kolaylaştırmak için \"geçerli sekme\" sayfasında listelenir." + "showCardsCurrentTabDesc": { + "message": "Kolay otomatik doldurma için sekme sayfasında kart öğelerini listele" }, - "dontShowIdentitiesCurrentTab": { - "message": "Sekme sayfasında kimlikleri gösterme" + "showIdentitiesCurrentTab": { + "message": "Sekme sayfasında kimlikleri göster" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Kasanızdaki kimlik kayıtları, otomatik doldurmayı kolaylaştırmak için \"geçerli sekme\" sayfasında listelenir." + "showIdentitiesCurrentTabDesc": { + "message": "Kolay otomatik doldurma için sekme sayfasında kimlik öğelerini listele" }, "clearClipboard": { - "message": "Panoyu temizle", + "message": "Panoyu Temizle", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Kaydet" }, - "disableChangedPasswordNotification": { - "message": "\"Parola değiştirildi\" bildirimini kapat" + "enableChangedPasswordNotification": { + "message": "Mevcut hesapları güncellemeyi öner" }, - "disableChangedPasswordNotificationDesc": { - "message": "\"Parola değiştirildi\" bildirimi, bir web sitesindeki parolanızı değiştirdiğiniz algılanınca otomatik olarak kasanızda kayıtlı parolayı güncellemenizi sağlar." + "changedPasswordNotificationDesc": { + "message": "Sitede bir değişiklik tespit edildiğinde hesap parolasını güncellemeyi öner." }, "notificationChangeDesc": { "message": "Bu parolayı Bitwarden'da güncellemek ister misiniz?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Güncelle" }, - "disableContextMenuItem": { - "message": "Sağ tıklama menüsünü kapat" + "enableContextMenuItem": { + "message": "Bağlam menüsü seçeneklerini göster" }, - "disableContextMenuItemDesc": { - "message": "Sağ tıklama menüsü, parola oluşturma aracına ve açık sekmeye ait hesaplara hızlı erişim sağlar." + "contextMenuItemDesc": { + "message": "Parola oluşturma ve eşlesen hesaplara ulaşmak için sağ tıklamayı kullan." }, "defaultUriMatchDetection": { "message": "Varsayılan URI eşleşme tespiti", @@ -643,7 +643,7 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportVault": { - "message": "Kasayı dışa aktar" + "message": "Kasayı Dışa Aktar" }, "fileFormat": { "message": "Dosya biçimi" @@ -747,7 +747,7 @@ "message": "Şifreleme anahtarınızı güncellemeden bu özelliği kullanamazsınız." }, "premiumMembership": { - "message": "Premium üyelik" + "message": "Premium Üyelik" }, "premiumManage": { "message": "Üyeliğimi yönet" @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Yenileme tamamlandı" }, - "disableAutoTotpCopy": { - "message": "Otomatik TOTP kopyalamayı kapat" + "enableAutoTotpCopy": { + "message": "TOTP'yi otomatik kopyala" }, "disableAutoTotpCopyDesc": { "message": "Hesabınıza bağlı bir kimlik doğrulama anahtarı varsa giriş bilgilerini otomatik olarak doldurduğunuzda TOTP doğrulama kodu da otomatik olarak panonuza kopyalanır." }, - "disableAutoBiometricsPrompt": { - "message": "Açılışta biyometri doğrulaması isteme" + "enableAutoBiometricsPrompt": { + "message": "Açılışta biyometri doğrulaması iste" }, "premiumRequired": { "message": "Premium gerekli" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Bu tarayıcı bu açılır pencerede U2F isteklerini işleyemiyor. U2F kullanarak giriş yapmak için bu açılır pencereyi yeni bir pencerede açmak ister misiniz?" }, - "disableFavicon": { - "message": "Site simgelerini devre dışı bırak" + "enableFavicon": { + "message": "Web sitesi simgelerini göster" }, - "disableFaviconDesc": { - "message": "Web sitesi simgeleri, kasanızdaki her kaydın yanında o siteyi tanımanıza yardımcı olan bir resim sunar." + "faviconDesc": { + "message": "Hesapların yanında tanıdık görseller göster." }, - "disableBadgeCounter": { - "message": "Düğmedeki sayacı devre dışı bırak" + "enableBadgeCounter": { + "message": "Rozet sayacını göster" }, - "disableBadgeCounterDesc": { - "message": "Düğmedeki sayaç, görüntülenen sayfaya ait kaç hesabınız olduğunu gösterir." + "badgeCounterDesc": { + "message": "Geçerli web sayfasına ait kaç tane hesabınız olduğunu gösterir." }, "cardholderName": { "message": "Kart sahibinin adı" diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index c1cd5add43d..13dda620af0 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -149,7 +149,7 @@ "message": "Змінити головний пароль" }, "fingerprintPhrase": { - "message": "Фраза відбитку", + "message": "Фраза відбитка", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "yourAccountsFingerprint": { @@ -193,7 +193,7 @@ "message": "Немає тек." }, "helpFeedback": { - "message": "Допомога і зворотній зв'язок" + "message": "Допомога і зворотний зв'язок" }, "sync": { "message": "Синхронізація" @@ -218,7 +218,7 @@ "message": "Веб сховище Bitwarden" }, "importItems": { - "message": "Імпорт записів" + "message": "Імпортувати записи" }, "select": { "message": "Обрати" @@ -367,7 +367,7 @@ "message": "Час очікування сховища" }, "lockNow": { - "message": "Заблокувати зараз" + "message": "Блокувати зараз" }, "immediately": { "message": "Негайно" @@ -403,10 +403,10 @@ "message": "4 години" }, "onLocked": { - "message": "При блокуванні системи" + "message": "З блокуванням системи" }, "onRestart": { - "message": "При перезапуску браузера" + "message": "З перезапуском браузера" }, "never": { "message": "Ніколи" @@ -567,23 +567,23 @@ "message": "Без теки", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Вимкнути сповіщення про новий запис" + "enableAddLoginNotification": { + "message": "Запитувати про додавання запису" }, "addLoginNotificationDesc": { - "message": "Сповіщення про додавання пароля автоматично пропонує зберегти нові паролі у вашому сховищі під час першого входу." + "message": "Запитувати про додавання запису, якщо його немає у вашому сховищі." }, - "dontShowCardsCurrentTab": { - "message": "Не показувати картки на вкладці" + "showCardsCurrentTab": { + "message": "Показувати картки на вкладці" }, - "dontShowCardsCurrentTabDesc": { - "message": "Картки з вашого сховища показано на сторінці поточної вкладки для швидкого доступу." + "showCardsCurrentTabDesc": { + "message": "Показувати список карток на сторінці вкладки для легкого автозаповнення." }, - "dontShowIdentitiesCurrentTab": { - "message": "Не показувати посвідчення на вкладці" + "showIdentitiesCurrentTab": { + "message": "Показувати посвідчення на вкладці" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Посвідчення з вашого сховища показано на сторінці поточної вкладки для швидкого доступу." + "showIdentitiesCurrentTabDesc": { + "message": "Показувати список посвідчень на сторінці вкладки для легкого автозаповнення." }, "clearClipboard": { "message": "Очистити буфер обміну", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Зберегти" }, - "disableChangedPasswordNotification": { - "message": "Вимкнути сповіщення зміненого пароля" + "enableChangedPasswordNotification": { + "message": "Запитувати про оновлення запису" }, - "disableChangedPasswordNotificationDesc": { - "message": "Сповіщення зміненого пароля автоматично запитує вас про оновлення пароля у сховищі, коли виявлено його зміну на вебсайті." + "changedPasswordNotificationDesc": { + "message": "Запитувати про оновлення пароля запису, якщо на вебсайті виявлено його зміну." }, "notificationChangeDesc": { "message": "Ви хочете оновити цей пароль в Bitwarden?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Оновити" }, - "disableContextMenuItem": { - "message": "Вимкнути в контекстному меню" + "enableContextMenuItem": { + "message": "Показувати в контекстному меню" }, - "disableContextMenuItemDesc": { - "message": "Можливості контекстного меню забезпечують швидкий доступ до генерування пароля й входу для вебсайту поточної вкладки." + "contextMenuItemDesc": { + "message": "Використовувати доступ до генератора паролів та відповідних записів для вебсайту через контекстне меню." }, "defaultUriMatchDetection": { "message": "Типове виявлення збігів URI", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Оновлення завершено" }, - "disableAutoTotpCopy": { - "message": "Вимкнути авто-копіювання TOTP" + "enableAutoTotpCopy": { + "message": "Автоматично копіювати коди TOTP" }, "disableAutoTotpCopyDesc": { "message": "Якщо ваш запис має вкладений ключ авторизації, код підтвердження TOTP автоматично копіюється до буфера обміну щоразу при автозаповненні." }, - "disableAutoBiometricsPrompt": { - "message": "Не запитувати біометрію при запуску" + "enableAutoBiometricsPrompt": { + "message": "Запитувати біометрію під час запуску" }, "premiumRequired": { "message": "Необхідний преміум статус" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Цей браузер не може обробити U2F запити в цьому виринаючому вікні. Хочете відкрити його у новому вікні, щоб ви змогли увійти з використанням U2F?" }, - "disableFavicon": { - "message": "Вимкнути піктограми вебсайтів" + "enableFavicon": { + "message": "Показувати піктограми вебсайтів" }, - "disableFaviconDesc": { - "message": "Впізнавані піктограми вебсайтів додаються біля кожного запису вашого сховища." + "faviconDesc": { + "message": "Показувати впізнаване зображення біля кожного запису." }, - "disableBadgeCounter": { - "message": "Вимкнути лічильник значка" + "enableBadgeCounter": { + "message": "Показувати лічильник" }, - "disableBadgeCounterDesc": { - "message": "Лічильник значка показує кількість записів у сховищі для поточної сторінки." + "badgeCounterDesc": { + "message": "Показувати індикатор кількості записів для поточної вебсторінки." }, "cardholderName": { "message": "Ім'я власника картки" diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index d48ced626f2..dec923fb217 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -567,23 +567,23 @@ "message": "Không có thư mục", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "Vô hiệu thông báo Thêm đăng nhập" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "'Thông báo Thêm đăng nhập' sẽ tự động nhắc bạn lưu các đăng nhập mới vào hầm an toàn của bạn bất cứ khi nào bạn đăng nhập trang web lần đầu tiên." }, - "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "showCardsCurrentTab": { + "message": "Show cards on Tab page" }, - "dontShowCardsCurrentTabDesc": { - "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "showIdentitiesCurrentTab": { + "message": "Show identities on Tab page" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "Dọn dẹp khay nhớ tạm", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "Vâng, Lưu Ngay" }, - "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "The \"Changed Password Notification\" automatically prompts you to update a login's password in your vault whenever it detects that you have changed it on a website." + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "Bạn có muốn cập nhật mật khẩu này trên Bitwarden không?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "Yes, Update Now" }, - "disableContextMenuItem": { - "message": "Tắt tuỳ chọn trong Menu Ngữ Cảnh" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "Tùy chọn menu ngữ cảnh giúp bạn truy cập nhanh thông tin đăng nhập và tạo mật khẩu cho trang web trong tab mà bạn đang mở." + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "Phương thức kiểm tra URI mặc định", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "Làm mới hoàn tất" }, - "disableAutoTotpCopy": { - "message": "Vô hiệu hoá tự động sao chép TOTP" + "enableAutoTotpCopy": { + "message": "Copy TOTP automatically" }, "disableAutoTotpCopyDesc": { "message": "Nếu đăng nhập của bạn có một khóa xác thực gắn liền với nó, mã xác nhận TOTP sẽ được tự động sao chép vào bộ nhớ tạm của bạn bất cứ khi nào bạn tự động điền thông tin đăng nhập." }, - "disableAutoBiometricsPrompt": { - "message": "Không nhắc bảo mật sinh trắc học khi khởi chạy" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "Cần có tài khoản cao cấp" @@ -963,7 +963,7 @@ "message": "Default autofill setting for login items" }, "defaultAutoFillOnPageLoadDesc": { - "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." + "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, "itemAutoFillOnPageLoad": { "message": "Tự động điền khi tải trang (nếu được kích hoạt trong Tùy chọn)" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "Trình duyệt này không thể xử lý các yêu cầu U2F trong cửa sổ popup này. Bạn có muốn mở popup này trong cửa sổ mới để bạn có thể đăng nhập thông qua U2F?" }, - "disableFavicon": { - "message": "Vô hiệu hoá biểu tượng trang web" + "enableFavicon": { + "message": "Show website icons" }, - "disableFaviconDesc": { - "message": "Biểu tượng trang web cung cấp các biểu tượng nhận dạng trang web bên cạnh mỗi mục đăng nhập trong kho mật khẩu của bạn." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, - "disableBadgeCounter": { - "message": "Hủy bộ đếm số" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "Bộ đếm số chỉ ra bao nhiêu tài khoản đăng nhập bạn có với trang hiện tại." + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "Tên chủ thẻ" @@ -1249,7 +1249,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domain name", "description": "Domain name. Ex. website.com" }, "host": { @@ -1562,7 +1562,7 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded Domains" + "message": "Excluded domains" }, "excludedDomainsDesc": { "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 42138d15bdc..41217fd6287 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -146,7 +146,7 @@ "message": "账户" }, "changeMasterPassword": { - "message": "修改主密码" + "message": "更改主密码" }, "fingerprintPhrase": { "message": "指纹短语", @@ -160,7 +160,7 @@ "message": "两步登录" }, "logOut": { - "message": "退出账户" + "message": "注销" }, "about": { "message": "关于" @@ -193,7 +193,7 @@ "message": "没有可列出的文件夹。" }, "helpFeedback": { - "message": "帮助和反馈" + "message": "帮助与反馈" }, "sync": { "message": "同步" @@ -406,7 +406,7 @@ "message": "系统锁定时" }, "onRestart": { - "message": "重启浏览器时" + "message": "浏览器重启时" }, "never": { "message": "从不" @@ -540,7 +540,7 @@ "message": "您确定要删除此项目吗?" }, "deletedItem": { - "message": "发送项目到回收站" + "message": "项目已发送到回收站" }, "overwritePassword": { "message": "覆盖密码" @@ -567,26 +567,26 @@ "message": "默认文件夹", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "禁用添加登录项目通知" + "enableAddLoginNotification": { + "message": "要求添加登录" }, "addLoginNotificationDesc": { - "message": "当您第一次登录时,「添加登录项目通知」会自动提醒您将新的登录保存到您的密码库。" + "message": "在密码库中找不到项目时询问添加一个项目。" }, - "dontShowCardsCurrentTab": { - "message": "标签页上不显示支付卡" + "showCardsCurrentTab": { + "message": "在标签页上显示支付卡" }, - "dontShowCardsCurrentTabDesc": { - "message": "密码库中的支付卡项目会在「当前标签页」页面列出,以便于自动填充。" + "showCardsCurrentTabDesc": { + "message": "在标签页上列出支付卡项目,以便于自动填充。" }, - "dontShowIdentitiesCurrentTab": { - "message": "标签页上不显示身份" + "showIdentitiesCurrentTab": { + "message": "在标签页上显示身份" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "密码库中的身份项目会在「当前标签页」页面列出,以便于自动填充。" + "showIdentitiesCurrentTabDesc": { + "message": "在标签页上列出身份项目,以便于自动填充。" }, "clearClipboard": { - "message": "清除剪贴板", + "message": "清空剪贴板", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "保存" }, - "disableChangedPasswordNotification": { - "message": "禁用密码变更通知" + "enableChangedPasswordNotification": { + "message": "要求更新现有的登录" }, - "disableChangedPasswordNotificationDesc": { - "message": "当检测到您已变更网站上的密码时,「密码变更通知」将自动提醒您更新密码库中相应登录的密码。" + "changedPasswordNotificationDesc": { + "message": "在网站上检测到更改时要求更新登录密码。" }, "notificationChangeDesc": { "message": "是否要在 Bitwarden 中更新此密码?" @@ -611,14 +611,14 @@ "notificationChangeSave": { "message": "更新" }, - "disableContextMenuItem": { - "message": "禁用上下文菜单选项" + "enableContextMenuItem": { + "message": "显示上下文菜单选项" }, - "disableContextMenuItemDesc": { - "message": "上下文菜单选项可以让您快速访问密码生成器,以及快速登陆当前标签页中的网站。" + "contextMenuItemDesc": { + "message": "使用辅助点击来访问网站的密码生成和匹配登录。" }, "defaultUriMatchDetection": { - "message": "默认的 URI 匹配检测方式", + "message": "默认 URI 匹配检测", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { @@ -806,14 +806,14 @@ "refreshComplete": { "message": "刷新完成" }, - "disableAutoTotpCopy": { - "message": "禁用自动 TOTP 复制" + "enableAutoTotpCopy": { + "message": "自动复制 TOTP" }, "disableAutoTotpCopyDesc": { - "message": "如果您的登录信息包含一个验证器密钥,当自动填充该登录项目时,TOTP 验证码将会自动复制到剪贴板。" + "message": "如果登录包含验证器密钥,当自动填充此登录时,TOTP 验证码将复制到剪贴板。" }, - "disableAutoBiometricsPrompt": { - "message": "启动时不提示生物识别" + "enableAutoBiometricsPrompt": { + "message": "启动时要求生物识别" }, "premiumRequired": { "message": "需要高级会员" @@ -951,10 +951,10 @@ "message": "各环境 URL 已保存。" }, "enableAutoFillOnPageLoad": { - "message": "启用页面加载时的自动填充" + "message": "页面加载时自动填充" }, "enableAutoFillOnPageLoadDesc": { - "message": "如果网页加载时检测到登录表单,自动进行自动填充。" + "message": "网页加载时如果检测到登录表单,则自动填充。" }, "experimentalFeature": { "message": "目前这是一项实验功能。使用需自担风险。" @@ -963,7 +963,7 @@ "message": "登录项目的默认自动填充设置" }, "defaultAutoFillOnPageLoadDesc": { - "message": "启用页面加载时自动填充后,您可以为单个登录项目启用或禁用此功能。这是未单独配置的登录项目的默认设置。" + "message": "您可以从项目编辑视图中为单个登录项目关闭页面加载时自动填充。" }, "itemAutoFillOnPageLoad": { "message": "页面加载时自动填充(如果选项中已启用)" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "此浏览器无法处理此弹出窗口中的 U2F 请求。您想要在新窗口中打开此弹出窗口吗?" }, - "disableFavicon": { - "message": "禁用网站图标" + "enableFavicon": { + "message": "显示网站图标" }, - "disableFaviconDesc": { - "message": "在您密码库的每个登录项目旁边显示一个可识别的图标。" + "faviconDesc": { + "message": "在每个登录旁显示一个可识别的图像。" }, - "disableBadgeCounter": { - "message": "禁用角标计数器" + "enableBadgeCounter": { + "message": "显示角标计数器" }, - "disableBadgeCounterDesc": { - "message": "角标计数器表示您的密码库中可用于当前页面的登录的数量。" + "badgeCounterDesc": { + "message": "指示可用于当前网页的登录项目的数量。" }, "cardholderName": { "message": "持卡人姓名" diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 778cdd3dba0..257394a02c7 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -403,10 +403,10 @@ "message": "4 小時" }, "onLocked": { - "message": "系統鎖定時" + "message": "於系統鎖定時" }, "onRestart": { - "message": "重新啟動瀏覽器時" + "message": "於瀏覽器重新啟動時" }, "never": { "message": "永不" @@ -540,7 +540,7 @@ "message": "確定要刪除此項目嗎?" }, "deletedItem": { - "message": "將項目移至垃圾桶" + "message": "已將項目移至垃圾桶" }, "overwritePassword": { "message": "覆寫密碼" @@ -567,23 +567,23 @@ "message": "(未分類)", "description": "This is the folder for uncategorized items" }, - "disableAddLoginNotification": { - "message": "停用新增登入資料通知" + "enableAddLoginNotification": { + "message": "Ask to add login" }, "addLoginNotificationDesc": { "message": "當您首次登入時,「新增登入資料通知」會自動提醒您在密碼庫中新增登入資料。" }, - "dontShowCardsCurrentTab": { - "message": "不要在分頁頁面顯示支付卡" + "showCardsCurrentTab": { + "message": "於分頁頁面顯示支付卡" }, - "dontShowCardsCurrentTabDesc": { - "message": "將密碼庫中的支付卡項目列在「目前分頁」頁面上,以便於自動填入。" + "showCardsCurrentTabDesc": { + "message": "List card items on the Tab page for easy auto-fill." }, - "dontShowIdentitiesCurrentTab": { - "message": "不要在分頁頁面顯示身分" + "showIdentitiesCurrentTab": { + "message": "於分頁頁面顯示身分" }, - "dontShowIdentitiesCurrentTabDesc": { - "message": "將密碼庫中的身分項目列在「目前分頁」頁面上,以便於自動填入。" + "showIdentitiesCurrentTabDesc": { + "message": "List identity items on the Tab page for easy auto-fill." }, "clearClipboard": { "message": "清除剪貼簿", @@ -599,11 +599,11 @@ "notificationAddSave": { "message": "儲存" }, - "disableChangedPasswordNotification": { - "message": "停用密碼變更通知" + "enableChangedPasswordNotification": { + "message": "Ask to update existing login" }, - "disableChangedPasswordNotificationDesc": { - "message": "偵測到您變更網站上的密碼時,「密碼變更通知」將會自動提醒您更新密碼庫的密碼。" + "changedPasswordNotificationDesc": { + "message": "Ask to update a login's password when a change is detected on a website." }, "notificationChangeDesc": { "message": "是否要在 Bitwarden 中更新此密碼?" @@ -611,11 +611,11 @@ "notificationChangeSave": { "message": "更新" }, - "disableContextMenuItem": { - "message": "停用右鍵選單選項" + "enableContextMenuItem": { + "message": "Show context menu options" }, - "disableContextMenuItemDesc": { - "message": "右鍵選單選項幫您快速使用密碼產生器,以及快速登入目前分頁中的網站。" + "contextMenuItemDesc": { + "message": "Use a secondary click to access password generation and matching logins for the website. " }, "defaultUriMatchDetection": { "message": "預設的 URI 一致性偵測", @@ -806,14 +806,14 @@ "refreshComplete": { "message": "狀態更新完成" }, - "disableAutoTotpCopy": { - "message": "停用自動 TOTP 複製" + "enableAutoTotpCopy": { + "message": "自動複製 TOTP" }, "disableAutoTotpCopyDesc": { - "message": "若您的登入資料已包含驗證器金鑰,TOTP 驗證碼會在您自動填入時自動複製至您的剪貼簿。" + "message": "若登入資料已包含驗證器金鑰,在自動填入此登入資料時,TOTP 驗證碼將複製至您的剪貼簿。" }, - "disableAutoBiometricsPrompt": { - "message": "不要在啟動時提示生物特徵辨識" + "enableAutoBiometricsPrompt": { + "message": "Ask for biometrics on launch" }, "premiumRequired": { "message": "需要進階會員資格" @@ -951,7 +951,7 @@ "message": "已儲存環境 URL。" }, "enableAutoFillOnPageLoad": { - "message": "啟用頁面載入時的自動填入功能" + "message": "頁面載入時自動填入" }, "enableAutoFillOnPageLoadDesc": { "message": "如果網頁載入時偵測到登入表單,則自動執行表單填入。" @@ -1033,17 +1033,17 @@ "popupU2fCloseMessage": { "message": "此瀏覽器不能在彈出式視窗中處理 U2F 要求。是否在新視窗開啟此對話方塊,以便您能夠使用 U2F 登入?" }, - "disableFavicon": { - "message": "停用網站圖示顯示功能" + "enableFavicon": { + "message": "顯示網站圖示" }, - "disableFaviconDesc": { - "message": "在您密碼庫的每個登入資料旁顯示一個可辨識的圖示。" + "faviconDesc": { + "message": "在每個登入資料旁顯示一個可辨識的圖片。" }, - "disableBadgeCounter": { - "message": "停用圖示計數器" + "enableBadgeCounter": { + "message": "Show badge counter" }, - "disableBadgeCounterDesc": { - "message": "圖示計數器可顯示您密碼庫中可用於目前頁面的登入資料數量。" + "badgeCounterDesc": { + "message": "Indicate how many logins you have for the current web page." }, "cardholderName": { "message": "持卡人姓名" diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 02a283f2154..725cb1954b4 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -24,7 +24,7 @@ import { ProviderService as ProviderServiceAbstraction } from "@bitwarden/common import { SearchService as SearchServiceAbstraction } from "@bitwarden/common/abstractions/search.service"; import { SendService as SendServiceAbstraction } from "@bitwarden/common/abstractions/send.service"; import { SettingsService as SettingsServiceAbstraction } from "@bitwarden/common/abstractions/settings.service"; -import { StorageService as StorageServiceAbstraction } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { SyncService as SyncServiceAbstraction } from "@bitwarden/common/abstractions/sync.service"; import { SystemService as SystemServiceAbstraction } from "@bitwarden/common/abstractions/system.service"; import { TokenService as TokenServiceAbstraction } from "@bitwarden/common/abstractions/token.service"; @@ -47,12 +47,14 @@ import { CipherService } from "@bitwarden/common/services/cipher.service"; import { CollectionService } from "@bitwarden/common/services/collection.service"; import { ConsoleLogService } from "@bitwarden/common/services/consoleLog.service"; import { ContainerService } from "@bitwarden/common/services/container.service"; +import { EncryptService } from "@bitwarden/common/services/encrypt.service"; import { EnvironmentService } from "@bitwarden/common/services/environment.service"; import { EventService } from "@bitwarden/common/services/event.service"; import { ExportService } from "@bitwarden/common/services/export.service"; import { FileUploadService } from "@bitwarden/common/services/fileUpload.service"; import { FolderService } from "@bitwarden/common/services/folder.service"; import { KeyConnectorService } from "@bitwarden/common/services/keyConnector.service"; +import { MemoryStorageService } from "@bitwarden/common/services/memoryStorage.service"; import { NotificationsService } from "@bitwarden/common/services/notifications.service"; import { OrganizationService } from "@bitwarden/common/services/organization.service"; import { PasswordGenerationService } from "@bitwarden/common/services/passwordGeneration.service"; @@ -79,11 +81,13 @@ import { AutofillService as AutofillServiceAbstraction } from "../services/abstr import { StateService as StateServiceAbstraction } from "../services/abstractions/state.service"; import AutofillService from "../services/autofill.service"; import { BrowserCryptoService } from "../services/browserCrypto.service"; +import BrowserLocalStorageService from "../services/browserLocalStorage.service"; import BrowserMessagingService from "../services/browserMessaging.service"; import BrowserMessagingPrivateModeBackgroundService from "../services/browserMessagingPrivateModeBackground.service"; import BrowserPlatformUtilsService from "../services/browserPlatformUtils.service"; -import BrowserStorageService from "../services/browserStorage.service"; import I18nService from "../services/i18n.service"; +import { KeyGenerationService } from "../services/keyGeneration.service"; +import { LocalBackedSessionStorageService } from "../services/localBackedSessionStorage.service"; import { StateService } from "../services/state.service"; import { VaultFilterService } from "../services/vaultFilter.service"; import VaultTimeoutService from "../services/vaultTimeout.service"; @@ -100,8 +104,9 @@ import WebRequestBackground from "./webRequest.background"; export default class MainBackground { messagingService: MessagingServiceAbstraction; - storageService: StorageServiceAbstraction; - secureStorageService: StorageServiceAbstraction; + storageService: AbstractStorageService; + secureStorageService: AbstractStorageService; + memoryStorageService: AbstractStorageService; i18nService: I18nServiceAbstraction; platformUtilsService: PlatformUtilsServiceAbstraction; logService: LogServiceAbstraction; @@ -141,6 +146,7 @@ export default class MainBackground { twoFactorService: TwoFactorServiceAbstraction; vaultFilterService: VaultFilterService; usernameGenerationService: UsernameGenerationServiceAbstraction; + encryptService: EncryptService; onUpdatedRan: boolean; onReplacedRan: boolean; @@ -181,9 +187,17 @@ export default class MainBackground { this.messagingService = isPrivateMode ? new BrowserMessagingPrivateModeBackgroundService() : new BrowserMessagingService(); - this.storageService = new BrowserStorageService(); - this.secureStorageService = new BrowserStorageService(); this.logService = new ConsoleLogService(false); + this.cryptoFunctionService = new WebCryptoFunctionService(window); + this.storageService = new BrowserLocalStorageService(); + this.secureStorageService = new BrowserLocalStorageService(); + this.memoryStorageService = + chrome.runtime.getManifest().manifest_version == 3 + ? new LocalBackedSessionStorageService( + new EncryptService(this.cryptoFunctionService, this.logService, false), + new KeyGenerationService(this.cryptoFunctionService) + ) + : new MemoryStorageService(); this.stateMigrationService = new StateMigrationService( this.storageService, this.secureStorageService, @@ -192,6 +206,7 @@ export default class MainBackground { this.stateService = new StateService( this.storageService, this.secureStorageService, + this.memoryStorageService, this.logService, this.stateMigrationService, new StateFactory(GlobalState, Account) @@ -219,9 +234,10 @@ export default class MainBackground { } ); this.i18nService = new I18nService(BrowserApi.getUILanguage(window)); - this.cryptoFunctionService = new WebCryptoFunctionService(window); + this.encryptService = new EncryptService(this.cryptoFunctionService, this.logService, true); this.cryptoService = new BrowserCryptoService( this.cryptoFunctionService, + this.encryptService, this.platformUtilsService, this.logService, this.stateService @@ -366,11 +382,7 @@ export default class MainBackground { this.policyService, this.stateService ); - this.totpService = new TotpService( - this.cryptoFunctionService, - this.logService, - this.stateService - ); + this.totpService = new TotpService(this.cryptoFunctionService, this.logService); this.autofillService = new AutofillService( this.cipherService, this.stateService, diff --git a/apps/browser/src/browser/browserApi.ts b/apps/browser/src/browser/browserApi.ts index ad4d7b27883..d3796e78a70 100644 --- a/apps/browser/src/browser/browserApi.ts +++ b/apps/browser/src/browser/browserApi.ts @@ -1,7 +1,3 @@ -import { Utils } from "@bitwarden/common/misc/utils"; - -import { SafariApp } from "./safariApp"; - export class BrowserApi { static isWebExtensionsApi: boolean = typeof browser !== "undefined"; static isSafariApi: boolean = @@ -150,39 +146,6 @@ export class BrowserApi { } } - static downloadFile(win: Window, blobData: any, blobOptions: any, fileName: string) { - if (BrowserApi.isSafariApi) { - const type = blobOptions != null ? blobOptions.type : null; - let data: string = null; - if (type === "text/plain" && typeof blobData === "string") { - data = blobData; - } else { - data = Utils.fromBufferToB64(blobData); - } - SafariApp.sendMessageToApp( - "downloadFile", - JSON.stringify({ - blobData: data, - blobOptions: blobOptions, - fileName: fileName, - }), - true - ); - } else { - const blob = new Blob([blobData], blobOptions); - if (navigator.msSaveOrOpenBlob) { - navigator.msSaveBlob(blob, fileName); - } else { - const a = win.document.createElement("a"); - a.href = URL.createObjectURL(blob); - a.download = fileName; - win.document.body.appendChild(a); - a.click(); - win.document.body.removeChild(a); - } - } - } - static gaFilter() { return process.env.ENV !== "production"; } diff --git a/apps/browser/src/manifest.json b/apps/browser/src/manifest.json index b9dfaa10775..0054762b049 100644 --- a/apps/browser/src/manifest.json +++ b/apps/browser/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2022.5.0", + "version": "2022.6.0", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", diff --git a/apps/browser/src/manifest.json.v3 b/apps/browser/src/manifest.v3.json similarity index 98% rename from apps/browser/src/manifest.json.v3 rename to apps/browser/src/manifest.v3.json index 18e5db22176..b0fdc924593 100644 --- a/apps/browser/src/manifest.json.v3 +++ b/apps/browser/src/manifest.v3.json @@ -64,9 +64,7 @@ "unlimitedStorage", "clipboardRead", "clipboardWrite", - "idle", - "webRequest", - "declarativeNetRequest" + "idle" ], "optional_permissions": ["nativeMessaging"], "host_permissions": ["http://*/*", "https://*/*"], diff --git a/apps/browser/src/popup/app.component.ts b/apps/browser/src/popup/app.component.ts index 7f401461b17..504abbe158f 100644 --- a/apps/browser/src/popup/app.component.ts +++ b/apps/browser/src/popup/app.component.ts @@ -1,7 +1,15 @@ -import { ChangeDetectorRef, Component, NgZone, OnInit, SecurityContext } from "@angular/core"; +import { + ChangeDetectorRef, + Component, + NgZone, + OnDestroy, + OnInit, + SecurityContext, +} from "@angular/core"; import { DomSanitizer } from "@angular/platform-browser"; import { NavigationEnd, Router, RouterOutlet } from "@angular/router"; import { IndividualConfig, ToastrService } from "ngx-toastr"; +import { Subject, takeUntil } from "rxjs"; import Swal, { SweetAlertIcon } from "sweetalert2"; import { AuthService } from "@bitwarden/common/abstractions/auth.service"; @@ -23,10 +31,12 @@ import { routerTransition } from "./app-routing.animations"; `, }) -export class AppComponent implements OnInit { +export class AppComponent implements OnInit, OnDestroy { private lastActivity: number = null; private activeUserId: string; + private destroy$: Subject = new Subject(); + constructor( private toastrService: ToastrService, private broadcasterService: BroadcasterService, @@ -46,7 +56,7 @@ export class AppComponent implements OnInit { // Clear them aggressively to make sure this doesn't occur await this.clearComponentStates(); - this.stateService.activeAccount.subscribe((userId) => { + this.stateService.activeAccount.pipe(takeUntil(this.destroy$)).subscribe((userId) => { this.activeUserId = userId; }); @@ -121,7 +131,7 @@ export class AppComponent implements OnInit { BrowserApi.messageListener("app.component", (window as any).bitwardenPopupMainMessageListener); - this.router.events.subscribe(async (event) => { + this.router.events.pipe(takeUntil(this.destroy$)).subscribe(async (event) => { if (event instanceof NavigationEnd) { const url = event.urlAfterRedirects || event.url || ""; if ( @@ -146,6 +156,11 @@ export class AppComponent implements OnInit { }); } + ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); + } + getState(outlet: RouterOutlet) { if (outlet.activatedRouteData.state === "ciphers") { const routeDirection = diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index 343ad24a237..ae8bef72647 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -1,5 +1,6 @@ import { A11yModule } from "@angular/cdk/a11y"; import { DragDropModule } from "@angular/cdk/drag-drop"; +import { LayoutModule } from "@angular/cdk/layout"; import { OverlayModule } from "@angular/cdk/overlay"; import { ScrollingModule } from "@angular/cdk/scrolling"; import { CurrencyPipe, DatePipe, registerLocaleData } from "@angular/common"; @@ -181,6 +182,7 @@ registerLocaleData(localeZhTw, "zh-TW"); DragDropModule, FormsModule, JslibModule, + LayoutModule, OverlayModule, ReactiveFormsModule, ScrollingModule, diff --git a/apps/browser/src/popup/scss/misc.scss b/apps/browser/src/popup/scss/misc.scss index 8752ad70882..b91f44cde37 100644 --- a/apps/browser/src/popup/scss/misc.scss +++ b/apps/browser/src/popup/scss/misc.scss @@ -388,6 +388,28 @@ input[type="password"]::-ms-reveal { } } +h1, +h2, +h3, +label, +a, +button, +p, +img, +.box-header, +.box-footer, +.callout, +.row-label, +.modal-title, +.overlay-container, +.swal2-container { + user-select: none; +} + +app-vault-view .box-footer { + user-select: auto; +} + // Workaround for slow performance on external monitors on Chrome + MacOS // See: https://bugs.chromium.org/p/chromium/issues/detail?id=971701#c64 @keyframes redraw { diff --git a/apps/browser/src/popup/services/init.service.ts b/apps/browser/src/popup/services/init.service.ts index e95a2e154c0..a73792cc10f 100644 --- a/apps/browser/src/popup/services/init.service.ts +++ b/apps/browser/src/popup/services/init.service.ts @@ -1,9 +1,9 @@ import { Injectable } from "@angular/core"; +import { AbstractThemingService } from "@bitwarden/angular/services/theming/theming.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService as LogServiceAbstraction } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; -import { ThemeType } from "@bitwarden/common/enums/themeType"; import { StateService as StateServiceAbstraction } from "../../services/abstractions/state.service"; @@ -16,7 +16,8 @@ export class InitService { private i18nService: I18nService, private popupUtilsService: PopupUtilsService, private stateService: StateServiceAbstraction, - private logService: LogServiceAbstraction + private logService: LogServiceAbstraction, + private themingService: AbstractThemingService ) {} init() { @@ -32,15 +33,7 @@ export class InitService { } const htmlEl = window.document.documentElement; - const theme = await this.platformUtilsService.getEffectiveTheme(); - htmlEl.classList.add("theme_" + theme); - this.platformUtilsService.onDefaultSystemThemeChange(async (sysTheme) => { - const bwTheme = await this.stateService.getTheme(); - if (bwTheme == null || bwTheme === ThemeType.System) { - htmlEl.classList.remove("theme_" + ThemeType.Light, "theme_" + ThemeType.Dark); - htmlEl.classList.add("theme_" + sysTheme); - } - }); + await this.themingService.monitorThemeChanges(); htmlEl.classList.add("locale_" + this.i18nService.translationLocale); // Workaround for slow performance on external monitors on Chrome + MacOS diff --git a/apps/browser/src/popup/services/popup-utils.service.ts b/apps/browser/src/popup/services/popup-utils.service.ts index 3b2556b99d8..c224f417a31 100644 --- a/apps/browser/src/popup/services/popup-utils.service.ts +++ b/apps/browser/src/popup/services/popup-utils.service.ts @@ -30,12 +30,12 @@ export class PopupUtilsService { return this.privateMode; } - getContentScrollY(win: Window, scrollingContainer = "content"): number { + getContentScrollY(win: Window, scrollingContainer = "main"): number { const content = win.document.getElementsByTagName(scrollingContainer)[0]; return content.scrollTop; } - setContentScrollY(win: Window, scrollY: number, scrollingContainer = "content"): void { + setContentScrollY(win: Window, scrollY: number, scrollingContainer = "main"): void { if (scrollY != null) { const content = win.document.getElementsByTagName(scrollingContainer)[0]; content.scrollTop = scrollY; diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts index 265776ab231..0c60df6c2f9 100644 --- a/apps/browser/src/popup/services/services.module.ts +++ b/apps/browser/src/popup/services/services.module.ts @@ -4,6 +4,7 @@ import { LockGuard as BaseLockGuardService } from "@bitwarden/angular/guards/loc import { UnauthGuard as BaseUnauthGuardService } from "@bitwarden/angular/guards/unauth.guard"; import { JslibServicesModule, + MEMORY_STORAGE, SECURE_STORAGE, } from "@bitwarden/angular/services/jslib-services.module"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; @@ -17,6 +18,7 @@ import { CryptoFunctionService } from "@bitwarden/common/abstractions/cryptoFunc import { EnvironmentService } from "@bitwarden/common/abstractions/environment.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FileUploadService } from "@bitwarden/common/abstractions/fileUpload.service"; import { FolderService } from "@bitwarden/common/abstractions/folder.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -34,7 +36,7 @@ import { SearchService as SearchServiceAbstraction } from "@bitwarden/common/abs import { SendService } from "@bitwarden/common/abstractions/send.service"; import { SettingsService } from "@bitwarden/common/abstractions/settings.service"; import { StateService as BaseStateServiceAbstraction } from "@bitwarden/common/abstractions/state.service"; -import { StorageService as StorageServiceAbstraction } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { SyncService } from "@bitwarden/common/abstractions/sync.service"; import { TokenService } from "@bitwarden/common/abstractions/token.service"; import { TotpService } from "@bitwarden/common/abstractions/totp.service"; @@ -50,6 +52,7 @@ import MainBackground from "../../background/main.background"; import { BrowserApi } from "../../browser/browserApi"; import { AutofillService } from "../../services/abstractions/autofill.service"; import { StateService as StateServiceAbstraction } from "../../services/abstractions/state.service"; +import { BrowserFileDownloadService } from "../../services/browserFileDownloadService"; import BrowserMessagingService from "../../services/browserMessaging.service"; import BrowserMessagingPrivateModePopupService from "../../services/browserMessagingPrivateModePopup.service"; import { VaultFilterService } from "../../services/vaultFilter.service"; @@ -185,8 +188,8 @@ function getBgService(service: keyof MainBackground) { deps: [], }, { - provide: StorageServiceAbstraction, - useFactory: getBgService("storageService"), + provide: AbstractStorageService, + useFactory: getBgService("storageService"), deps: [], }, { provide: AppIdService, useFactory: getBgService("appIdService"), deps: [] }, @@ -249,9 +252,13 @@ function getBgService(service: keyof MainBackground) { }, { provide: SECURE_STORAGE, - useFactory: getBgService("secureStorageService"), + useFactory: getBgService("secureStorageService"), deps: [], }, + { + provide: MEMORY_STORAGE, + useFactory: getBgService("memoryStorageService"), + }, { provide: StateServiceAbstraction, useFactory: getBgService("stateService"), @@ -267,6 +274,10 @@ function getBgService(service: keyof MainBackground) { useExisting: StateServiceAbstraction, deps: [], }, + { + provide: FileDownloadService, + useClass: BrowserFileDownloadService, + }, ], }) export class ServicesModule {} diff --git a/apps/browser/src/popup/settings/export.component.ts b/apps/browser/src/popup/settings/export.component.ts index f049c037ace..c2f90317596 100644 --- a/apps/browser/src/popup/settings/export.component.ts +++ b/apps/browser/src/popup/settings/export.component.ts @@ -6,6 +6,7 @@ import { ExportComponent as BaseExportComponent } from "@bitwarden/angular/compo import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -27,7 +28,8 @@ export class ExportComponent extends BaseExportComponent { private router: Router, logService: LogService, userVerificationService: UserVerificationService, - formBuilder: FormBuilder + formBuilder: FormBuilder, + fileDownloadService: FileDownloadService ) { super( cryptoService, @@ -39,7 +41,8 @@ export class ExportComponent extends BaseExportComponent { window, logService, userVerificationService, - formBuilder + formBuilder, + fileDownloadService ); } diff --git a/apps/browser/src/popup/settings/options.component.html b/apps/browser/src/popup/settings/options.component.html index 4281c97e527..877710438c6 100644 --- a/apps/browser/src/popup/settings/options.component.html +++ b/apps/browser/src/popup/settings/options.component.html @@ -63,12 +63,12 @@
- +
@@ -77,12 +77,12 @@
- +
@@ -92,31 +92,31 @@
- +
- +
- +
@@ -137,58 +137,58 @@
- +
- +
- +
- +
- +
- +
- +
- +
diff --git a/apps/browser/src/popup/settings/options.component.ts b/apps/browser/src/popup/settings/options.component.ts index 21c3deb0f2e..e29d224f63d 100644 --- a/apps/browser/src/popup/settings/options.component.ts +++ b/apps/browser/src/popup/settings/options.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from "@angular/core"; +import { AbstractThemingService } from "@bitwarden/angular/services/theming/theming.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; @@ -12,17 +13,17 @@ import { UriMatchType } from "@bitwarden/common/enums/uriMatchType"; templateUrl: "options.component.html", }) export class OptionsComponent implements OnInit { - disableFavicon = false; - disableBadgeCounter = false; + enableFavicon = false; + enableBadgeCounter = false; enableAutoFillOnPageLoad = false; autoFillOnPageLoadDefault = false; autoFillOnPageLoadOptions: any[]; - disableAutoTotpCopy = false; - disableContextMenuItem = false; - disableAddLoginNotification = false; - disableChangedPasswordNotification = false; - dontShowCards = false; - dontShowIdentities = false; + enableAutoTotpCopy = false; // TODO: Does it matter if this is set to false or true? + enableContextMenuItem = false; + enableAddLoginNotification = false; + enableChangedPasswordNotification = false; + showCardsCurrentTab = false; + showIdentitiesCurrentTab = false; showClearClipboard = true; theme: ThemeType; themeOptions: any[]; @@ -38,7 +39,8 @@ export class OptionsComponent implements OnInit { private messagingService: MessagingService, private stateService: StateService, private totpService: TotpService, - i18nService: I18nService + i18nService: I18nService, + private themingService: AbstractThemingService ) { this.themeOptions = [ { name: i18nService.t("default"), value: ThemeType.System }, @@ -76,21 +78,21 @@ export class OptionsComponent implements OnInit { this.autoFillOnPageLoadDefault = (await this.stateService.getAutoFillOnPageLoadDefault()) ?? true; - this.disableAddLoginNotification = await this.stateService.getDisableAddLoginNotification(); + this.enableAddLoginNotification = !(await this.stateService.getDisableAddLoginNotification()); - this.disableChangedPasswordNotification = - await this.stateService.getDisableChangedPasswordNotification(); + this.enableChangedPasswordNotification = + !(await this.stateService.getDisableChangedPasswordNotification()); - this.disableContextMenuItem = await this.stateService.getDisableContextMenuItem(); + this.enableContextMenuItem = !(await this.stateService.getDisableContextMenuItem()); - this.dontShowCards = await this.stateService.getDontShowCardsCurrentTab(); - this.dontShowIdentities = await this.stateService.getDontShowIdentitiesCurrentTab(); + this.showCardsCurrentTab = !(await this.stateService.getDontShowCardsCurrentTab()); + this.showIdentitiesCurrentTab = !(await this.stateService.getDontShowIdentitiesCurrentTab()); - this.disableAutoTotpCopy = !(await this.totpService.isAutoCopyEnabled()); + this.enableAutoTotpCopy = !(await this.stateService.getDisableAutoTotpCopy()); - this.disableFavicon = await this.stateService.getDisableFavicon(); + this.enableFavicon = !(await this.stateService.getDisableFavicon()); - this.disableBadgeCounter = await this.stateService.getDisableBadgeCounter(); + this.enableBadgeCounter = !(await this.stateService.getDisableBadgeCounter()); this.theme = await this.stateService.getTheme(); @@ -101,22 +103,22 @@ export class OptionsComponent implements OnInit { } async updateAddLoginNotification() { - await this.stateService.setDisableAddLoginNotification(this.disableAddLoginNotification); + await this.stateService.setDisableAddLoginNotification(!this.enableAddLoginNotification); } async updateChangedPasswordNotification() { await this.stateService.setDisableChangedPasswordNotification( - this.disableChangedPasswordNotification + !this.enableChangedPasswordNotification ); } - async updateDisableContextMenuItem() { - await this.stateService.setDisableContextMenuItem(this.disableContextMenuItem); + async updateContextMenuItem() { + await this.stateService.setDisableContextMenuItem(!this.enableContextMenuItem); this.messagingService.send("bgUpdateContextMenu"); } async updateAutoTotpCopy() { - await this.stateService.setDisableAutoTotpCopy(this.disableAutoTotpCopy); + await this.stateService.setDisableAutoTotpCopy(!this.enableAutoTotpCopy); } async updateAutoFillOnPageLoad() { @@ -127,26 +129,25 @@ export class OptionsComponent implements OnInit { await this.stateService.setAutoFillOnPageLoadDefault(this.autoFillOnPageLoadDefault); } - async updateDisableFavicon() { - await this.stateService.setDisableFavicon(this.disableFavicon); + async updateFavicon() { + await this.stateService.setDisableFavicon(!this.enableFavicon); } - async updateDisableBadgeCounter() { - await this.stateService.setDisableBadgeCounter(this.disableBadgeCounter); + async updateBadgeCounter() { + await this.stateService.setDisableBadgeCounter(!this.enableBadgeCounter); this.messagingService.send("bgUpdateContextMenu"); } - async updateShowCards() { - await this.stateService.setDontShowCardsCurrentTab(this.dontShowCards); + async updateShowCardsCurrentTab() { + await this.stateService.setDontShowCardsCurrentTab(!this.showCardsCurrentTab); } - async updateShowIdentities() { - await this.stateService.setDontShowIdentitiesCurrentTab(this.dontShowIdentities); + async updateShowIdentitiesCurrentTab() { + await this.stateService.setDontShowIdentitiesCurrentTab(!this.showIdentitiesCurrentTab); } async saveTheme() { - await this.stateService.setTheme(this.theme); - window.setTimeout(() => window.location.reload(), 200); + await this.themingService.updateConfiguredTheme(this.theme); } async saveDefaultUriMatch() { diff --git a/apps/browser/src/popup/settings/settings.component.html b/apps/browser/src/popup/settings/settings.component.html index 3f441835c54..62d6bde5689 100644 --- a/apps/browser/src/popup/settings/settings.component.html +++ b/apps/browser/src/popup/settings/settings.component.html @@ -60,13 +60,13 @@ />
- +
-
@@ -166,18 +166,18 @@
-
- {{ "disableFaviconDesc" | i18n }} + {{ "faviconDesc" | i18n }}
diff --git a/apps/desktop/src/app/accounts/settings.component.ts b/apps/desktop/src/app/accounts/settings.component.ts index eaa1073884e..d8ef021155c 100644 --- a/apps/desktop/src/app/accounts/settings.component.ts +++ b/apps/desktop/src/app/accounts/settings.component.ts @@ -3,6 +3,7 @@ import { FormControl } from "@angular/forms"; import { debounceTime } from "rxjs/operators"; import { ModalService } from "@bitwarden/angular/services/modal.service"; +import { AbstractThemingService } from "@bitwarden/angular/services/theming/theming.service.abstraction"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; @@ -24,7 +25,7 @@ import { SetPinComponent } from "../components/set-pin.component"; export class SettingsComponent implements OnInit { vaultTimeoutAction: string; pin: boolean = null; - disableFavicons = false; + enableFavicons = false; enableBrowserIntegration = false; enableBrowserIntegrationFingerprint = false; enableMinToTray = false; @@ -43,8 +44,8 @@ export class SettingsComponent implements OnInit { supportsBiometric: boolean; biometric: boolean; biometricText: string; - noAutoPromptBiometrics: boolean; - noAutoPromptBiometricsText: string; + autoPromptBiometrics: boolean; + autoPromptBiometricsText: string; alwaysShowDock: boolean; showAlwaysShowDock = false; openAtLogin: boolean; @@ -74,7 +75,8 @@ export class SettingsComponent implements OnInit { private stateService: StateService, private messagingService: MessagingService, private cryptoService: CryptoService, - private modalService: ModalService + private modalService: ModalService, + private themingService: AbstractThemingService ) { const isMac = this.platformUtilsService.getDevice() === DeviceType.MacOsDesktop; @@ -179,7 +181,7 @@ export class SettingsComponent implements OnInit { this.pin = pinSet[0] || pinSet[1]; // Account preferences - this.disableFavicons = await this.stateService.getDisableFavicon(); + this.enableFavicons = !(await this.stateService.getDisableFavicon()); this.enableBrowserIntegration = await this.stateService.getEnableBrowserIntegration(); this.enableBrowserIntegrationFingerprint = await this.stateService.getEnableBrowserIntegrationFingerprint(); @@ -188,8 +190,8 @@ export class SettingsComponent implements OnInit { this.supportsBiometric = await this.platformUtilsService.supportsBiometric(); this.biometric = await this.vaultTimeoutService.isBiometricLockSet(); this.biometricText = await this.stateService.getBiometricText(); - this.noAutoPromptBiometrics = await this.stateService.getNoAutoPromptBiometrics(); - this.noAutoPromptBiometricsText = await this.stateService.getNoAutoPromptBiometricsText(); + this.autoPromptBiometrics = !(await this.stateService.getNoAutoPromptBiometrics()); + this.autoPromptBiometricsText = await this.stateService.getNoAutoPromptBiometricsText(); } async saveVaultTimeoutOptions() { @@ -259,27 +261,27 @@ export class SettingsComponent implements OnInit { } else { await this.stateService.setBiometricUnlock(null); await this.stateService.setNoAutoPromptBiometrics(null); - this.noAutoPromptBiometrics = false; + this.autoPromptBiometrics = false; } await this.stateService.setBiometricLocked(false); await this.cryptoService.toggleKey(); } - async updateNoAutoPromptBiometrics() { + async updateAutoPromptBiometrics() { if (!this.biometric) { - this.noAutoPromptBiometrics = false; + this.autoPromptBiometrics = false; } - if (this.noAutoPromptBiometrics) { - await this.stateService.setNoAutoPromptBiometrics(true); - } else { + if (this.autoPromptBiometrics) { await this.stateService.setNoAutoPromptBiometrics(null); + } else { + await this.stateService.setNoAutoPromptBiometrics(true); } } async saveFavicons() { - await this.stateService.setDisableFavicon(this.disableFavicons); - await this.stateService.setDisableFavicon(this.disableFavicons, { + await this.stateService.setDisableFavicon(!this.enableFavicons); + await this.stateService.setDisableFavicon(!this.enableFavicons, { storageLocation: StorageLocation.Disk, }); this.messagingService.send("refreshCiphers"); @@ -342,8 +344,7 @@ export class SettingsComponent implements OnInit { } async saveTheme() { - await this.stateService.setTheme(this.theme); - window.setTimeout(() => window.location.reload(), 200); + await this.themingService.updateConfiguredTheme(this.theme); } async saveMinOnCopyToClipboard() { diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index 300104ee72b..9732173b564 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -10,6 +10,7 @@ import { import { DomSanitizer } from "@angular/platform-browser"; import { Router } from "@angular/router"; import { IndividualConfig, ToastrService } from "ngx-toastr"; +import { Subject, takeUntil } from "rxjs"; import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref"; import { ModalService } from "@bitwarden/angular/services/modal.service"; @@ -96,6 +97,8 @@ export class AppComponent implements OnInit { private isIdle = false; private activeUserId: string = null; + private destroy$: Subject = new Subject(); + constructor( private broadcasterService: BroadcasterService, private tokenService: TokenService, @@ -127,9 +130,10 @@ export class AppComponent implements OnInit { ) {} ngOnInit() { - this.stateService.activeAccount.subscribe((userId) => { + this.stateService.activeAccount.pipe(takeUntil(this.destroy$)).subscribe((userId) => { this.activeUserId = userId; }); + this.ngZone.runOutsideAngular(() => { setTimeout(async () => { await this.updateAppMenu(); @@ -360,6 +364,8 @@ export class AppComponent implements OnInit { } ngOnDestroy() { + this.destroy$.next(); + this.destroy$.complete(); this.broadcasterService.unsubscribe(BroadcasterSubscriptionId); } diff --git a/apps/desktop/src/app/modules/vault-filter/components/organization-filter.component.html b/apps/desktop/src/app/modules/vault-filter/components/organization-filter.component.html index cc623417580..686e29b4f35 100644 --- a/apps/desktop/src/app/modules/vault-filter/components/organization-filter.component.html +++ b/apps/desktop/src/app/modules/vault-filter/components/organization-filter.component.html @@ -45,7 +45,7 @@ - +
`, diff --git a/apps/web/src/app/modules/loose-components.module.ts b/apps/web/src/app/modules/loose-components.module.ts index bd6364e99f6..c172e554a61 100644 --- a/apps/web/src/app/modules/loose-components.module.ts +++ b/apps/web/src/app/modules/loose-components.module.ts @@ -71,9 +71,7 @@ import { SettingsComponent as OrgSettingComponent } from "../organizations/setti import { TwoFactorSetupComponent as OrgTwoFactorSetupComponent } from "../organizations/settings/two-factor-setup.component"; import { AcceptFamilySponsorshipComponent } from "../organizations/sponsorships/accept-family-sponsorship.component"; import { FamiliesForEnterpriseSetupComponent } from "../organizations/sponsorships/families-for-enterprise-setup.component"; -import { ExportComponent as OrgExportComponent } from "../organizations/tools/export.component"; import { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from "../organizations/tools/exposed-passwords-report.component"; -import { ImportComponent as OrgImportComponent } from "../organizations/tools/import.component"; import { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from "../organizations/tools/inactive-two-factor-report.component"; import { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from "../organizations/tools/reused-passwords-report.component"; import { ToolsComponent as OrgToolsComponent } from "../organizations/tools/tools.component"; @@ -145,9 +143,7 @@ import { UserBillingHistoryComponent } from "../settings/user-billing-history.co import { UserSubscriptionComponent } from "../settings/user-subscription.component"; import { VaultTimeoutInputComponent } from "../settings/vault-timeout-input.component"; import { VerifyEmailComponent } from "../settings/verify-email.component"; -import { ExportComponent } from "../tools/export.component"; import { GeneratorComponent } from "../tools/generator.component"; -import { ImportComponent } from "../tools/import.component"; import { PasswordGeneratorHistoryComponent } from "../tools/password-generator-history.component"; import { ToolsComponent } from "../tools/tools.component"; import { AddEditCustomFieldsComponent } from "../vault/add-edit-custom-fields.component"; @@ -216,14 +212,12 @@ import { OrganizationBadgeModule } from "./vault/modules/organization-badge/orga EmergencyAccessTakeoverComponent, EmergencyAccessViewComponent, EmergencyAddEditComponent, - ExportComponent, ExposedPasswordsReportComponent, FamiliesForEnterpriseSetupComponent, FolderAddEditComponent, FooterComponent, FrontendLayoutComponent, HintComponent, - ImportComponent, InactiveTwoFactorReportComponent, LockComponent, LoginComponent, @@ -247,11 +241,9 @@ import { OrganizationBadgeModule } from "./vault/modules/organization-badge/orga OrgCollectionsComponent, OrgEntityEventsComponent, OrgEventsComponent, - OrgExportComponent, OrgExposedPasswordsReportComponent, OrgGroupAddEditComponent, OrgGroupsComponent, - OrgImportComponent, OrgInactiveTwoFactorReportComponent, OrgManageCollectionsComponent, OrgManageComponent, @@ -378,14 +370,12 @@ import { OrganizationBadgeModule } from "./vault/modules/organization-badge/orga EmergencyAccessTakeoverComponent, EmergencyAccessViewComponent, EmergencyAddEditComponent, - ExportComponent, ExposedPasswordsReportComponent, FamiliesForEnterpriseSetupComponent, FolderAddEditComponent, FooterComponent, FrontendLayoutComponent, HintComponent, - ImportComponent, InactiveTwoFactorReportComponent, LockComponent, LoginComponent, @@ -409,11 +399,9 @@ import { OrganizationBadgeModule } from "./vault/modules/organization-badge/orga OrgCollectionsComponent, OrgEntityEventsComponent, OrgEventsComponent, - OrgExportComponent, OrgExposedPasswordsReportComponent, OrgGroupAddEditComponent, OrgGroupsComponent, - OrgImportComponent, OrgInactiveTwoFactorReportComponent, OrgManageCollectionsComponent, OrgManageComponent, diff --git a/apps/web/src/app/modules/organizations/users/enroll-master-password-reset.component.html b/apps/web/src/app/modules/organizations/users/enroll-master-password-reset.component.html index e232a7987fa..f72602ac911 100644 --- a/apps/web/src/app/modules/organizations/users/enroll-master-password-reset.component.html +++ b/apps/web/src/app/modules/organizations/users/enroll-master-password-reset.component.html @@ -32,16 +32,9 @@
- + + {{ "save" | i18n }} +
diff --git a/apps/web/src/app/organizations/settings/download-license.component.ts b/apps/web/src/app/organizations/settings/download-license.component.ts index 8d2383c18bc..05927c1ec3a 100644 --- a/apps/web/src/app/organizations/settings/download-license.component.ts +++ b/apps/web/src/app/organizations/settings/download-license.component.ts @@ -1,8 +1,8 @@ import { Component, EventEmitter, Input, Output } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @Component({ selector: "app-download-license", @@ -18,7 +18,7 @@ export class DownloadLicenseComponent { constructor( private apiService: ApiService, - private platformUtilsService: PlatformUtilsService, + private fileDownloadService: FileDownloadService, private logService: LogService ) {} @@ -34,12 +34,10 @@ export class DownloadLicenseComponent { ); const license = await this.formPromise; const licenseString = JSON.stringify(license, null, 2); - this.platformUtilsService.saveFile( - window, - licenseString, - null, - "bitwarden_organization_license.json" - ); + this.fileDownloadService.download({ + fileName: "bitwarden_organization_license.json", + blobData: licenseString, + }); this.onDownloaded.emit(); } catch (e) { this.logService.error(e); diff --git a/apps/web/src/app/organizations/tools/export.component.ts b/apps/web/src/app/organizations/tools/import-export/org-export.component.ts similarity index 84% rename from apps/web/src/app/organizations/tools/export.component.ts rename to apps/web/src/app/organizations/tools/import-export/org-export.component.ts index 8cec45f1d6e..1cdc7700680 100644 --- a/apps/web/src/app/organizations/tools/export.component.ts +++ b/apps/web/src/app/organizations/tools/import-export/org-export.component.ts @@ -7,6 +7,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -14,13 +15,13 @@ import { PolicyService } from "@bitwarden/common/abstractions/policy.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; import { UserVerificationService } from "@bitwarden/common/abstractions/userVerification.service"; -import { ExportComponent as BaseExportComponent } from "../../tools/export.component"; +import { ExportComponent } from "../../../tools/import-export/export.component"; @Component({ selector: "app-org-export", - templateUrl: "../../tools/export.component.html", + templateUrl: "../../../tools/import-export/export.component.html", }) -export class ExportComponent extends BaseExportComponent { +export class OrganizationExportComponent extends ExportComponent { constructor( cryptoService: CryptoService, i18nService: I18nService, @@ -35,7 +36,8 @@ export class ExportComponent extends BaseExportComponent { modalService: ModalService, apiService: ApiService, stateService: StateService, - modalConfig: ModalConfig + modalConfig: ModalConfig, + fileDownloadService: FileDownloadService ) { super( cryptoService, @@ -50,7 +52,8 @@ export class ExportComponent extends BaseExportComponent { modalService, apiService, stateService, - modalConfig + modalConfig, + fileDownloadService ); } diff --git a/apps/web/src/app/organizations/tools/import-export/org-import-export-routing.module.ts b/apps/web/src/app/organizations/tools/import-export/org-import-export-routing.module.ts new file mode 100644 index 00000000000..8570a066ee6 --- /dev/null +++ b/apps/web/src/app/organizations/tools/import-export/org-import-export-routing.module.ts @@ -0,0 +1,35 @@ +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; + +import { Permissions } from "@bitwarden/common/enums/permissions"; + +import { PermissionsGuard } from "../../guards/permissions.guard"; + +import { OrganizationExportComponent } from "./org-export.component"; +import { OrganizationImportComponent } from "./org-import.component"; + +const routes: Routes = [ + { + path: "import", + component: OrganizationImportComponent, + canActivate: [PermissionsGuard], + data: { + titleId: "importData", + permissions: [Permissions.AccessImportExport], + }, + }, + { + path: "export", + component: OrganizationExportComponent, + canActivate: [PermissionsGuard], + data: { + titleId: "exportVault", + permissions: [Permissions.AccessImportExport], + }, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], +}) +export class OrganizationImportExportRoutingModule {} diff --git a/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts b/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts new file mode 100644 index 00000000000..b450f12dbd4 --- /dev/null +++ b/apps/web/src/app/organizations/tools/import-export/org-import-export.module.ts @@ -0,0 +1,48 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; +import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; +import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; +import { ImportService as ImportServiceAbstraction } from "@bitwarden/common/abstractions/import.service"; +import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; +import { ImportService } from "@bitwarden/common/services/import.service"; + +import { LooseComponentsModule } from "../../../modules/loose-components.module"; + +import { OrganizationExportComponent } from "./org-export.component"; +import { OrganizationImportExportRoutingModule } from "./org-import-export-routing.module"; +import { OrganizationImportComponent } from "./org-import.component"; + +@NgModule({ + imports: [ + CommonModule, + JslibModule, + LooseComponentsModule, + FormsModule, + ReactiveFormsModule, + OrganizationImportExportRoutingModule, + ], + declarations: [OrganizationImportComponent, OrganizationExportComponent], + providers: [ + { + provide: ImportServiceAbstraction, + useClass: ImportService, + deps: [ + CipherService, + FolderService, + ApiService, + I18nService, + CollectionService, + PlatformUtilsService, + CryptoService, + ], + }, + ], +}) +export class OrganizationImportExportModule {} diff --git a/apps/web/src/app/organizations/tools/import.component.ts b/apps/web/src/app/organizations/tools/import-export/org-import.component.ts similarity index 90% rename from apps/web/src/app/organizations/tools/import.component.ts rename to apps/web/src/app/organizations/tools/import-export/org-import.component.ts index d6383edacf1..2bc29bed8b3 100644 --- a/apps/web/src/app/organizations/tools/import.component.ts +++ b/apps/web/src/app/organizations/tools/import-export/org-import.component.ts @@ -10,13 +10,13 @@ import { OrganizationService } from "@bitwarden/common/abstractions/organization import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { PolicyService } from "@bitwarden/common/abstractions/policy.service"; -import { ImportComponent as BaseImportComponent } from "../../tools/import.component"; +import { ImportComponent } from "../../../tools/import-export/import.component"; @Component({ selector: "app-org-import", - templateUrl: "../../tools/import.component.html", + templateUrl: "../../../tools/import-export/import.component.html", }) -export class ImportComponent extends BaseImportComponent { +export class OrganizationImportComponent extends ImportComponent { organizationName: string; constructor( diff --git a/apps/web/src/app/organizations/vault/attachments.component.ts b/apps/web/src/app/organizations/vault/attachments.component.ts index 463cc7e03a1..aac10c8d8ef 100644 --- a/apps/web/src/app/organizations/vault/attachments.component.ts +++ b/apps/web/src/app/organizations/vault/attachments.component.ts @@ -3,6 +3,7 @@ import { Component } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -29,7 +30,8 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { stateService: StateService, platformUtilsService: PlatformUtilsService, apiService: ApiService, - logService: LogService + logService: LogService, + fileDownloadService: FileDownloadService ) { super( cipherService, @@ -38,7 +40,8 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { stateService, platformUtilsService, apiService, - logService + logService, + fileDownloadService ); } diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index f5896cccf6f..8b2e6a6f923 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -24,8 +24,11 @@ import { VerifyRecoverDeleteComponent } from "./accounts/verify-recover-delete.c import { HomeGuard } from "./guards/home.guard"; import { FrontendLayoutComponent } from "./layouts/frontend-layout.component"; import { UserLayoutComponent } from "./layouts/user-layout.component"; +import { IndividualVaultModule } from "./modules/vault/modules/individual-vault/individual-vault.module"; +import { OrganizationsRoutingModule } from "./organizations/organization-routing.module"; import { AcceptFamilySponsorshipComponent } from "./organizations/sponsorships/accept-family-sponsorship.component"; import { FamiliesForEnterpriseSetupComponent } from "./organizations/sponsorships/families-for-enterprise-setup.component"; +import { ReportsRoutingModule } from "./reports/reports-routing.module"; import { AccessComponent } from "./send/access.component"; import { SendComponent } from "./send/send.component"; import { AccountComponent } from "./settings/account.component"; @@ -34,11 +37,11 @@ import { DomainRulesComponent } from "./settings/domain-rules.component"; import { EmergencyAccessViewComponent } from "./settings/emergency-access-view.component"; import { EmergencyAccessComponent } from "./settings/emergency-access.component"; import { PreferencesComponent } from "./settings/preferences.component"; +import { SecurityRoutingModule } from "./settings/security-routing.module"; import { SettingsComponent } from "./settings/settings.component"; import { SponsoredFamiliesComponent } from "./settings/sponsored-families.component"; -import { ExportComponent } from "./tools/export.component"; +import { SubscriptionRoutingModule } from "./settings/subscription-routing.module"; import { GeneratorComponent } from "./tools/generator.component"; -import { ImportComponent } from "./tools/import.component"; import { ToolsComponent } from "./tools/tools.component"; const routes: Routes = [ @@ -150,9 +153,7 @@ const routes: Routes = [ children: [ { path: "vault", - loadChildren: async () => - (await import("./modules/vault/modules/individual-vault/individual-vault.module")) - .IndividualVaultModule, + loadChildren: () => IndividualVaultModule, }, { path: "sends", component: SendComponent, data: { title: "Send" } }, { @@ -173,8 +174,7 @@ const routes: Routes = [ }, { path: "security", - loadChildren: async () => - (await import("./settings/security-routing.module")).SecurityRoutingModule, + loadChildren: () => SecurityRoutingModule, }, { path: "domain-rules", @@ -183,8 +183,7 @@ const routes: Routes = [ }, { path: "subscription", - loadChildren: async () => - (await import("./settings/subscription-routing.module")).SubscriptionRoutingModule, + loadChildren: () => SubscriptionRoutingModule, }, { path: "emergency-access", @@ -214,8 +213,13 @@ const routes: Routes = [ canActivate: [AuthGuard], children: [ { path: "", pathMatch: "full", redirectTo: "generator" }, - { path: "import", component: ImportComponent, data: { titleId: "importData" } }, - { path: "export", component: ExportComponent, data: { titleId: "exportVault" } }, + { + path: "", + loadChildren: () => + import("./tools/import-export/import-export.module").then( + (m) => m.ImportExportModule + ), + }, { path: "generator", component: GeneratorComponent, @@ -225,18 +229,14 @@ const routes: Routes = [ }, { path: "reports", - loadChildren: async () => - (await import("./reports/reports-routing.module")).ReportsRoutingModule, + loadChildren: () => ReportsRoutingModule, }, { path: "setup/families-for-enterprise", component: FamiliesForEnterpriseSetupComponent }, ], }, { path: "organizations", - loadChildren: () => - import("./organizations/organization-routing.module").then( - (m) => m.OrganizationsRoutingModule - ), + loadChildren: () => OrganizationsRoutingModule, }, ]; diff --git a/apps/web/src/app/reports/breach-report.component.html b/apps/web/src/app/reports/breach-report.component.html index 6d7c0401f05..e74898c41cb 100644 --- a/apps/web/src/app/reports/breach-report.component.html +++ b/apps/web/src/app/reports/breach-report.component.html @@ -17,10 +17,9 @@ {{ "breachCheckUsernameEmail" | i18n }}
- + + {{ "checkBreaches" | i18n }} +

{{ "reportError" | i18n }}...

diff --git a/apps/web/src/app/reports/exposed-passwords-report.component.html b/apps/web/src/app/reports/exposed-passwords-report.component.html index f0a882f793c..32cfaf20191 100644 --- a/apps/web/src/app/reports/exposed-passwords-report.component.html +++ b/apps/web/src/app/reports/exposed-passwords-report.component.html @@ -2,17 +2,9 @@

{{ "exposedPasswordsReport" | i18n }}

{{ "exposedPasswordsReportDesc" | i18n }}

- + + {{ "checkExposedPasswords" | i18n }} +
{{ "noExposedPasswords" | i18n }} diff --git a/apps/web/src/app/send/access.component.ts b/apps/web/src/app/send/access.component.ts index a0a3a081ce5..fca9a1deff3 100644 --- a/apps/web/src/app/send/access.component.ts +++ b/apps/web/src/app/send/access.component.ts @@ -4,6 +4,7 @@ import { ActivatedRoute } from "@angular/router"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { CryptoFunctionService } from "@bitwarden/common/abstractions/cryptoFunction.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { SEND_KDF_ITERATIONS } from "@bitwarden/common/enums/kdfType"; @@ -44,7 +45,8 @@ export class AccessComponent implements OnInit { private apiService: ApiService, private platformUtilsService: PlatformUtilsService, private route: ActivatedRoute, - private cryptoService: CryptoService + private cryptoService: CryptoService, + private fileDownloadService: FileDownloadService ) {} get sendText() { @@ -109,7 +111,11 @@ export class AccessComponent implements OnInit { try { const buf = await response.arrayBuffer(); const decBuf = await this.cryptoService.decryptFromBytes(buf, this.decKey); - this.platformUtilsService.saveFile(window, decBuf, null, this.send.file.fileName); + this.fileDownloadService.download({ + fileName: this.send.file.fileName, + blobData: decBuf, + downloadMethod: "save", + }); } catch (e) { this.platformUtilsService.showToast("error", null, this.i18nService.t("errorOccurred")); } diff --git a/apps/web/src/app/services/init.service.ts b/apps/web/src/app/services/init.service.ts index 1a9178b28ef..047a28da180 100644 --- a/apps/web/src/app/services/init.service.ts +++ b/apps/web/src/app/services/init.service.ts @@ -1,6 +1,7 @@ import { Inject, Injectable } from "@angular/core"; import { WINDOW } from "@bitwarden/angular/services/jslib-services.module"; +import { AbstractThemingService } from "@bitwarden/angular/services/theming/theming.service.abstraction"; import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/abstractions/crypto.service"; import { EnvironmentService as EnvironmentServiceAbstraction, @@ -9,11 +10,9 @@ import { import { EventService as EventLoggingServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service"; import { NotificationsService as NotificationsServiceAbstraction } from "@bitwarden/common/abstractions/notifications.service"; -import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "@bitwarden/common/abstractions/platformUtils.service"; import { StateService as StateServiceAbstraction } from "@bitwarden/common/abstractions/state.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/abstractions/twoFactor.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout.service"; -import { ThemeType } from "@bitwarden/common/enums/themeType"; import { ContainerService } from "@bitwarden/common/services/container.service"; import { EventService as EventLoggingService } from "@bitwarden/common/services/event.service"; import { VaultTimeoutService as VaultTimeoutService } from "@bitwarden/common/services/vaultTimeout.service"; @@ -31,8 +30,8 @@ export class InitService { private eventLoggingService: EventLoggingServiceAbstraction, private twoFactorService: TwoFactorServiceAbstraction, private stateService: StateServiceAbstraction, - private platformUtilsService: PlatformUtilsServiceAbstraction, - private cryptoService: CryptoServiceAbstraction + private cryptoService: CryptoServiceAbstraction, + private themingService: AbstractThemingService ) {} init() { @@ -44,7 +43,6 @@ export class InitService { this.environmentService.setUrls(urls); setTimeout(() => this.notificationsService.init(), 3000); - (this.vaultTimeoutService as VaultTimeoutService).init(true); const locale = await this.stateService.getLocale(); await (this.i18nService as I18nService).init(locale); @@ -52,16 +50,7 @@ export class InitService { this.twoFactorService.init(); const htmlEl = this.win.document.documentElement; htmlEl.classList.add("locale_" + this.i18nService.translationLocale); - - // Initial theme is set in index.html which must be updated if there are any changes to theming logic - this.platformUtilsService.onDefaultSystemThemeChange(async (sysTheme) => { - const bwTheme = await this.stateService.getTheme(); - if (bwTheme === ThemeType.System) { - htmlEl.classList.remove("theme_" + ThemeType.Light, "theme_" + ThemeType.Dark); - htmlEl.classList.add("theme_" + sysTheme); - } - }); - + await this.themingService.monitorThemeChanges(); const containerService = new ContainerService(this.cryptoService); containerService.attachToWindow(this.win); }; diff --git a/apps/web/src/app/services/services.module.ts b/apps/web/src/app/services/services.module.ts index 2860ea4a837..b89bb23c756 100644 --- a/apps/web/src/app/services/services.module.ts +++ b/apps/web/src/app/services/services.module.ts @@ -8,6 +8,7 @@ import { STATE_SERVICE_USE_CACHE, LOCALES_DIRECTORY, SYSTEM_LANGUAGE, + MEMORY_STORAGE, } from "@bitwarden/angular/services/jslib-services.module"; import { ModalService as ModalServiceAbstraction, @@ -20,19 +21,20 @@ import { CollectionService as CollectionServiceAbstraction } from "@bitwarden/co import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/abstractions/crypto.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@bitwarden/common/abstractions/cryptoFunction.service"; import { ExportService as ExportServiceAbstraction } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FolderService as FolderServiceAbstraction } from "@bitwarden/common/abstractions/folder.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service"; -import { ImportService as ImportServiceAbstraction } from "@bitwarden/common/abstractions/import.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService as MessagingServiceAbstraction } from "@bitwarden/common/abstractions/messaging.service"; import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "@bitwarden/common/abstractions/passwordReprompt.service"; import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "@bitwarden/common/abstractions/platformUtils.service"; import { StateService as BaseStateServiceAbstraction } from "@bitwarden/common/abstractions/state.service"; import { StateMigrationService as StateMigrationServiceAbstraction } from "@bitwarden/common/abstractions/stateMigration.service"; -import { StorageService as StorageServiceAbstraction } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { StateFactory } from "@bitwarden/common/factories/stateFactory"; import { ExportService } from "@bitwarden/common/services/export.service"; import { ImportService } from "@bitwarden/common/services/import.service"; +import { MemoryStorageService } from "@bitwarden/common/services/memoryStorage.service"; import { StateService as StateServiceAbstraction } from "../../abstractions/state.service"; import { Account } from "../../models/account"; @@ -40,7 +42,6 @@ import { GlobalState } from "../../models/globalState"; import { BroadcasterMessagingService } from "../../services/broadcasterMessaging.service"; import { HtmlStorageService } from "../../services/htmlStorage.service"; import { I18nService } from "../../services/i18n.service"; -import { MemoryStorageService } from "../../services/memoryStorage.service"; import { PasswordRepromptService } from "../../services/passwordReprompt.service"; import { StateService } from "../../services/state.service"; import { StateMigrationService } from "../../services/stateMigration.service"; @@ -54,6 +55,7 @@ import { InitService } from "./init.service"; import { ModalService } from "./modal.service"; import { PolicyListService } from "./policy-list.service"; import { RouterService } from "./router.service"; +import { WebFileDownloadService } from "./webFileDownload.service"; @NgModule({ imports: [ToastrModule, JslibServicesModule], @@ -84,13 +86,17 @@ import { RouterService } from "./router.service"; useClass: I18nService, deps: [SYSTEM_LANGUAGE, LOCALES_DIRECTORY], }, - { provide: StorageServiceAbstraction, useClass: HtmlStorageService }, + { provide: AbstractStorageService, useClass: HtmlStorageService }, { provide: SECURE_STORAGE, // TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency. // We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome. useClass: process.env.NODE_ENV === "development" ? HtmlStorageService : MemoryStorageService, }, + { + provide: MEMORY_STORAGE, + useClass: MemoryStorageService, + }, { provide: PlatformUtilsServiceAbstraction, useClass: WebPlatformUtilsService, @@ -125,14 +131,15 @@ import { RouterService } from "./router.service"; { provide: StateMigrationServiceAbstraction, useClass: StateMigrationService, - deps: [StorageServiceAbstraction, SECURE_STORAGE, STATE_FACTORY], + deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY], }, { provide: StateServiceAbstraction, useClass: StateService, deps: [ - StorageServiceAbstraction, + AbstractStorageService, SECURE_STORAGE, + MEMORY_STORAGE, LogService, StateMigrationServiceAbstraction, STATE_FACTORY, @@ -147,6 +154,10 @@ import { RouterService } from "./router.service"; provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService, }, + { + provide: FileDownloadService, + useClass: WebFileDownloadService, + }, HomeGuard, ], }) diff --git a/apps/web/src/app/services/webFileDownload.service.ts b/apps/web/src/app/services/webFileDownload.service.ts new file mode 100644 index 00000000000..de1626c8df1 --- /dev/null +++ b/apps/web/src/app/services/webFileDownload.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from "@angular/core"; + +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; +import { FileDownloadBuilder } from "@bitwarden/common/abstractions/fileDownload/fileDownloadBuilder"; +import { FileDownloadRequest } from "@bitwarden/common/abstractions/fileDownload/fileDownloadRequest"; +import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; + +@Injectable() +export class WebFileDownloadService implements FileDownloadService { + constructor(private platformUtilsService: PlatformUtilsService) {} + + download(request: FileDownloadRequest): void { + const builder = new FileDownloadBuilder(request); + const a = window.document.createElement("a"); + if (builder.downloadMethod === "save") { + a.download = request.fileName; + } else if (!this.platformUtilsService.isSafari()) { + a.target = "_blank"; + } + a.href = URL.createObjectURL(builder.blob); + a.style.position = "fixed"; + window.document.body.appendChild(a); + a.click(); + window.document.body.removeChild(a); + } +} diff --git a/apps/web/src/app/settings/change-kdf.component.html b/apps/web/src/app/settings/change-kdf.component.html index f5eae39be4d..b06cf01d060 100644 --- a/apps/web/src/app/settings/change-kdf.component.html +++ b/apps/web/src/app/settings/change-kdf.component.html @@ -71,8 +71,7 @@
- + + {{ "changeKdf" | i18n }} + diff --git a/apps/web/src/app/settings/change-password.component.html b/apps/web/src/app/settings/change-password.component.html index 990d950604d..90df85042e6 100644 --- a/apps/web/src/app/settings/change-password.component.html +++ b/apps/web/src/app/settings/change-password.component.html @@ -87,8 +87,7 @@ - + + {{ "changeMasterPassword" | i18n }} + diff --git a/apps/web/src/app/settings/emergency-access-add-edit.component.html b/apps/web/src/app/settings/emergency-access-add-edit.component.html index 488980a41e0..e7198e19030 100644 --- a/apps/web/src/app/settings/emergency-access-add-edit.component.html +++ b/apps/web/src/app/settings/emergency-access-add-edit.component.html @@ -100,20 +100,9 @@ - {{ "disableIconsDesc" | i18n }} + {{ "faviconDesc" | i18n }}
diff --git a/apps/web/src/app/settings/preferences.component.ts b/apps/web/src/app/settings/preferences.component.ts index 5431ba45306..53c68fa12ed 100644 --- a/apps/web/src/app/settings/preferences.component.ts +++ b/apps/web/src/app/settings/preferences.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { FormControl } from "@angular/forms"; +import { AbstractThemingService } from "@bitwarden/angular/services/theming/theming.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -15,7 +16,7 @@ import { Utils } from "@bitwarden/common/misc/utils"; }) export class PreferencesComponent implements OnInit { vaultTimeoutAction = "lock"; - disableIcons: boolean; + enableFavicons: boolean; enableGravatars: boolean; enableFullWidth: boolean; theme: ThemeType; @@ -34,7 +35,8 @@ export class PreferencesComponent implements OnInit { private i18nService: I18nService, private vaultTimeoutService: VaultTimeoutService, private platformUtilsService: PlatformUtilsService, - private messagingService: MessagingService + private messagingService: MessagingService, + private themingService: AbstractThemingService ) { this.vaultTimeouts = [ { name: i18nService.t("oneMinute"), value: 1 }, @@ -70,7 +72,7 @@ export class PreferencesComponent implements OnInit { async ngOnInit() { this.vaultTimeout.setValue(await this.vaultTimeoutService.getVaultTimeout()); this.vaultTimeoutAction = await this.stateService.getVaultTimeoutAction(); - this.disableIcons = await this.stateService.getDisableFavicon(); + this.enableFavicons = !(await this.stateService.getDisableFavicon()); this.enableGravatars = await this.stateService.getEnableGravitars(); this.enableFullWidth = await this.stateService.getEnableFullWidth(); @@ -95,17 +97,13 @@ export class PreferencesComponent implements OnInit { this.vaultTimeout.value, this.vaultTimeoutAction ); - await this.stateService.setDisableFavicon(this.disableIcons); + await this.stateService.setDisableFavicon(!this.enableFavicons); await this.stateService.setEnableGravitars(this.enableGravatars); await this.stateService.setEnableFullWidth(this.enableFullWidth); this.messagingService.send("setFullWidth"); if (this.theme !== this.startingTheme) { - await this.stateService.setTheme(this.theme); + await this.themingService.updateConfiguredTheme(this.theme); this.startingTheme = this.theme; - const effectiveTheme = await this.platformUtilsService.getEffectiveTheme(); - const htmlEl = window.document.documentElement; - htmlEl.classList.remove("theme_" + ThemeType.Light, "theme_" + ThemeType.Dark); - htmlEl.classList.add("theme_" + effectiveTheme); } await this.stateService.setLocale(this.locale); if (this.locale !== this.startingLocale) { diff --git a/apps/web/src/app/settings/premium.component.html b/apps/web/src/app/settings/premium.component.html index 4d6613aa1ef..63995b457ac 100644 --- a/apps/web/src/app/settings/premium.component.html +++ b/apps/web/src/app/settings/premium.component.html @@ -68,16 +68,9 @@ "licenseFileDesc" | i18n: "bitwarden_premium_license.json" }}
- + + {{ "submit" | i18n }} +
@@ -125,8 +118,7 @@

{{ "paymentChargedAnnually" | i18n }} - + + {{ "submit" | i18n }} + diff --git a/apps/web/src/app/settings/two-factor-setup.component.html b/apps/web/src/app/settings/two-factor-setup.component.html index 8a4a1f698cb..698e7fd9c07 100644 --- a/apps/web/src/app/settings/two-factor-setup.component.html +++ b/apps/web/src/app/settings/two-factor-setup.component.html @@ -77,22 +77,9 @@ {{ "deviceVerificationDesc" | i18n }} - + + {{ "save" | i18n }} + diff --git a/apps/web/src/app/settings/user-subscription.component.ts b/apps/web/src/app/settings/user-subscription.component.ts index 64ca0589ec6..5eb1442bf5a 100644 --- a/apps/web/src/app/settings/user-subscription.component.ts +++ b/apps/web/src/app/settings/user-subscription.component.ts @@ -2,6 +2,7 @@ import { Component, OnInit } from "@angular/core"; import { Router } from "@angular/router"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -30,7 +31,8 @@ export class UserSubscriptionComponent implements OnInit { private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, private router: Router, - private logService: LogService + private logService: LogService, + private fileDownloadService: FileDownloadService ) { this.selfHosted = platformUtilsService.isSelfHost(); } @@ -139,12 +141,10 @@ export class UserSubscriptionComponent implements OnInit { } const licenseString = JSON.stringify(this.sub.license, null, 2); - this.platformUtilsService.saveFile( - window, - licenseString, - null, - "bitwarden_premium_license.json" - ); + this.fileDownloadService.download({ + fileName: "bitwarden_premium_license.json", + blobData: licenseString, + }); } updateLicense() { diff --git a/apps/web/src/app/tools/export.component.html b/apps/web/src/app/tools/import-export/export.component.html similarity index 100% rename from apps/web/src/app/tools/export.component.html rename to apps/web/src/app/tools/import-export/export.component.html diff --git a/apps/web/src/app/tools/export.component.ts b/apps/web/src/app/tools/import-export/export.component.ts similarity index 95% rename from apps/web/src/app/tools/export.component.ts rename to apps/web/src/app/tools/import-export/export.component.ts index 555d07315fc..965ac7f3a7a 100644 --- a/apps/web/src/app/tools/export.component.ts +++ b/apps/web/src/app/tools/import-export/export.component.ts @@ -7,6 +7,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -42,7 +43,8 @@ export class ExportComponent extends BaseExportComponent { modalService: ModalService, apiService: ApiService, stateService: StateService, - modalConfig: ModalConfig + modalConfig: ModalConfig, + fileDownloadService: FileDownloadService ) { super( cryptoService, @@ -58,7 +60,8 @@ export class ExportComponent extends BaseExportComponent { modalService, apiService, stateService, - modalConfig + modalConfig, + fileDownloadService ); } diff --git a/apps/web/src/app/tools/import-export/import-export-routing.module.ts b/apps/web/src/app/tools/import-export/import-export-routing.module.ts new file mode 100644 index 00000000000..101e149d7f8 --- /dev/null +++ b/apps/web/src/app/tools/import-export/import-export-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; + +import { ExportComponent } from "./export.component"; +import { ImportComponent } from "./import.component"; + +const routes: Routes = [ + { + path: "import", + component: ImportComponent, + data: { titleId: "importData" }, + }, + { + path: "export", + component: ExportComponent, + data: { titleId: "exportVault" }, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], +}) +export class ImportExportRoutingModule {} diff --git a/apps/web/src/app/tools/import-export/import-export.module.ts b/apps/web/src/app/tools/import-export/import-export.module.ts new file mode 100644 index 00000000000..b34f78324a6 --- /dev/null +++ b/apps/web/src/app/tools/import-export/import-export.module.ts @@ -0,0 +1,48 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; +import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; +import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; +import { FolderService } from "@bitwarden/common/abstractions/folder.service"; +import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; +import { ImportService as ImportServiceAbstraction } from "@bitwarden/common/abstractions/import.service"; +import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; +import { ImportService } from "@bitwarden/common/services/import.service"; + +import { LooseComponentsModule } from "../../modules/loose-components.module"; + +import { ExportComponent } from "./export.component"; +import { ImportExportRoutingModule } from "./import-export-routing.module"; +import { ImportComponent } from "./import.component"; + +@NgModule({ + imports: [ + CommonModule, + JslibModule, + LooseComponentsModule, + FormsModule, + ReactiveFormsModule, + ImportExportRoutingModule, + ], + declarations: [ImportComponent, ExportComponent], + providers: [ + { + provide: ImportServiceAbstraction, + useClass: ImportService, + deps: [ + CipherService, + FolderService, + ApiService, + I18nService, + CollectionService, + PlatformUtilsService, + CryptoService, + ], + }, + ], +}) +export class ImportExportModule {} diff --git a/apps/web/src/app/tools/import.component.html b/apps/web/src/app/tools/import-export/import.component.html similarity index 100% rename from apps/web/src/app/tools/import.component.html rename to apps/web/src/app/tools/import-export/import.component.html diff --git a/apps/web/src/app/tools/import.component.ts b/apps/web/src/app/tools/import-export/import.component.ts similarity index 100% rename from apps/web/src/app/tools/import.component.ts rename to apps/web/src/app/tools/import-export/import.component.ts diff --git a/apps/web/src/app/vault/attachments.component.ts b/apps/web/src/app/vault/attachments.component.ts index fdf2d9f70e5..080c06e37e5 100644 --- a/apps/web/src/app/vault/attachments.component.ts +++ b/apps/web/src/app/vault/attachments.component.ts @@ -4,6 +4,7 @@ import { AttachmentsComponent as BaseAttachmentsComponent } from "@bitwarden/ang import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -24,7 +25,8 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { stateService: StateService, platformUtilsService: PlatformUtilsService, apiService: ApiService, - logService: LogService + logService: LogService, + fileDownloadService: FileDownloadService ) { super( cipherService, @@ -34,7 +36,8 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { apiService, window, logService, - stateService + stateService, + fileDownloadService ); } diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 0acfdfbc9b7..5374e8379fd 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -62,7 +62,7 @@ "message": "Vervaldatum" }, "securityCode": { - "message": "Security Code (CVV)" + "message": "Sekerheidskode (CVV)" }, "identityName": { "message": "Identiteitnaam" @@ -167,7 +167,7 @@ "message": "Booleaans" }, "cfTypeLinked": { - "message": "Linked", + "message": "Gekoppel", "description": "This describes a field that is 'linked' (related) to another field." }, "remove": { @@ -191,7 +191,7 @@ "description": "Domain name. Ex. website.com" }, "domainName": { - "message": "Domain Name", + "message": "Domeinnaam", "description": "Domain name. Ex. website.com" }, "host": { @@ -306,16 +306,16 @@ "message": "Beveiligde nota" }, "typeLoginPlural": { - "message": "Logins" + "message": "Aantekeninge" }, "typeCardPlural": { - "message": "Cards" + "message": "Kaarte" }, "typeIdentityPlural": { - "message": "Identities" + "message": "Identiteite" }, "typeSecureNotePlural": { - "message": "Secure Notes" + "message": "Beveiligde notas" }, "folders": { "message": "Vouers" @@ -333,7 +333,7 @@ "message": "Van" }, "fullName": { - "message": "Full Name" + "message": "Volle naam" }, "address1": { "message": "Adres 1" @@ -422,7 +422,7 @@ "description": "Copy URI to clipboard" }, "me": { - "message": "Me" + "message": "Ek" }, "myVault": { "message": "My kluis" @@ -712,7 +712,7 @@ } }, "verificationCodeEmailSent": { - "message": "Verification email sent to $EMAIL$.", + "message": "E-pos met bevestigingskode is na $EMAIL$ gestuur.", "placeholders": { "email": { "content": "$1", @@ -730,16 +730,16 @@ "message": "Gebruik ’n ander tweestapaantekenmetode" }, "insertYubiKey": { - "message": "Insert your YubiKey into your computer's USB port, then touch its button." + "message": "Plaas u YubiKey in u rekenaar se USB-poort en druk dan op sy knop." }, "insertU2f": { - "message": "Insert your security key into your computer's USB port. If it has a button, touch it." + "message": "Plaas u beveilingsleutel in u rekenaar se USB-poort. Indien dit ’n knop het, druk dit dan." }, "loginUnavailable": { "message": "Aantekening onbeskikbaar" }, "noTwoStepProviders": { - "message": "This account has two-step login enabled, however, none of the configured two-step providers are supported by this web browser." + "message": "Tweestapaantekening is op die rekening geaktiveer, maar hierdie webblaaier ondersteun geen van die gekonfigureerde aanbieders nie." }, "noTwoStepProviders2": { "message": "Gebruik asb. ’n ondersteunde webblaaier (soos Chrome) en/of bykomende verskaffers wat beter oor webblaaiers ondersteun word (soos ’n waarmerktoep)." @@ -748,7 +748,7 @@ "message": "Opsies vir tweestapaantekening" }, "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account." + "message": "Het u toegang tot al u tweestapaanbieders verloor? Gebruik dan u terugstelkode om alle tweestapaanbieders op u rekening te deaktiveer." }, "recoveryCodeTitle": { "message": "Terugstelkode" @@ -761,39 +761,39 @@ "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." }, "yubiKeyTitle": { - "message": "YubiKey OTP Security Key" + "message": "YubiKey-OTP-beveiligingsleutel" }, "yubiKeyDesc": { "message": "Gebruik ’n YubiKey vir toegang tot u rekening. Werk met YubiKey reeks 4, reeks 5 en NEO-toestelle." }, "duoDesc": { - "message": "Verify with Duo Security using the Duo Mobile app, SMS, phone call, or U2F security key.", + "message": "Bevestig met Duo Security d.m.v. die Duo Mobile-toep, SMS, spraakoproep of ’n U2F-beveiligingsleutel.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", + "message": "Bevestig met Duo Security vir u organisasie d.m.v. die Duo Mobile-toep, SMS, spraakoproep of ’n U2F-beveiligingsleutel.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "u2fDesc": { - "message": "Use any FIDO U2F enabled security key to access your account." + "message": "Gebruik ’n FICO U2F-beveilingssleutel om toegang tot u rekening te verkry." }, "u2fTitle": { - "message": "FIDO U2F Security Key" + "message": "FIDO U2F-beveiligingsleutel" }, "webAuthnTitle": { "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "Use any WebAuthn enabled security key to access your account." + "message": "Gebruik ’n WebAuthn-beveilingssleutel om toegang tot u rekening te verkry." }, "webAuthnMigrated": { - "message": "(Migrated from FIDO)" + "message": "(Gemigreer van FIDO)" }, "emailTitle": { "message": "E-pos" }, "emailDesc": { - "message": "Verification codes will be emailed to you." + "message": "U sal bevestigingskodes per e-pos ontvang." }, "continue": { "message": "Gaan voort" @@ -1028,7 +1028,7 @@ "message": "Gevaarsone" }, "dangerZoneDesc": { - "message": "Careful, these actions are not reversible!" + "message": "Versigtig, hierdie aksies is onomkeerbaar!" }, "deauthorizeSessions": { "message": "Deauthorize Sessions" @@ -1043,10 +1043,10 @@ "message": "All Sessions Deauthorized" }, "purgeVault": { - "message": "Purge Vault" + "message": "Ledig kluis" }, "purgedOrganizationVault": { - "message": "Purged organization vault." + "message": "Organisasiekluis is geledig." }, "vaultAccessedByProvider": { "message": "Vault accessed by provider." @@ -1058,10 +1058,10 @@ "message": "Proceed below to delete all items in the organization's vault." }, "purgeVaultWarning": { - "message": "Purging your vault is permanent. It cannot be undone." + "message": "Ledig van u kluis is permanent. Dit kan nie ontdaan word nie." }, "vaultPurged": { - "message": "Your vault has been purged." + "message": "U kluis is geledig." }, "deleteAccount": { "message": "Skrap rekening" @@ -1076,7 +1076,7 @@ "message": "Rekening geskrap" }, "accountDeletedDesc": { - "message": "Your account has been closed and all associated data has been deleted." + "message": "U rekening is gesluit en alle geassosieerde data is geskrap." }, "myAccount": { "message": "My rekening" @@ -1094,7 +1094,7 @@ "message": "There was a problem with the data you tried to import. Please resolve the errors listed below in your source file and try again." }, "importSuccess": { - "message": "Data has been successfully imported into your vault." + "message": "Data is suksesvol na u kluis ingevoer." }, "importWarning": { "message": "You are importing data to $ORGANIZATION$. Your data may be shared with members of this organization. Do you want to proceed?", @@ -1106,7 +1106,7 @@ } }, "importFormatError": { - "message": "Data is not formatted correctly. Please check your import file and try again." + "message": "Data nie korrek geformatteer. Gaan u invoerlêer na en probeer weer." }, "importNothingError": { "message": "Niks is ingevoer nie." @@ -1115,13 +1115,13 @@ "message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data." }, "selectFormat": { - "message": "Select the format of the import file" + "message": "Kies die invoerlêer se formaat" }, "selectImportFile": { "message": "Kies die invoerlêer" }, "orCopyPasteFileContents": { - "message": "or copy/paste the import file contents" + "message": "of kopieer/plak die inhoude van die invoerlêer" }, "instructionsFor": { "message": "Instruksies vir $NAME$", @@ -1140,10 +1140,10 @@ "message": "Voorkeure" }, "preferencesDesc": { - "message": "Customize your web vault experience." + "message": "Maak u webkluiservaring pas." }, "preferencesUpdated": { - "message": "Preferences updated" + "message": "Voorkeure bygewerk" }, "language": { "message": "Taal" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Verander die taal wat deur die webkluis gebruik word." }, - "disableIcons": { - "message": "Deaktiveer webwerfikone" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Webwerfikone verskaf ’n herkenbare beeld langs elke aantekenitem in u kluis." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Aktiveer Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1199,7 +1199,7 @@ "message": "Nuwe passgemaakte domein" }, "newCustomDomainDesc": { - "message": "Enter a list of domains separated by commas. Only \"base\" domains are allowed. Do not enter subdomains. For example, enter \"google.com\" instead of \"www.google.com\". You can also enter \"androidapp://package.name\" to associate an android app with other website domains." + "message": "Voer ’n lys met domeine, geskei met komma’s, in. Slegs basisdomeine word toegestaan. Moenie subdomeine invoer nie. Gebruik bv. “google.com” i.p.v. “www.google.com”. U kan ook “androidapp://package.name” invoeren om ’n Android-toep aan ander webwerfdomeine te koppel." }, "customDomainX": { "message": "Pasgemaakte domein $INDEX$", @@ -1238,6 +1238,9 @@ "enabled": { "message": "Geaktiveer" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premie", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Deaktiveer" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Hierdie tweestapaantekenaanbieder is vir u rekening geaktiveer." }, @@ -1288,7 +1294,7 @@ "message": "Windows-toestelle" }, "twoStepAuthenticatorAppsRecommended": { - "message": "These apps are recommended, however, other authenticator apps will also work." + "message": "Hierdie toeps word aanbeveel, maar ander waarmerktoeps sal ook werk." }, "twoStepAuthenticatorScanCode": { "message": "Skandeer hierdie QR-kode met u waarmerktoep" @@ -1309,16 +1315,16 @@ "message": "Two-step login provider disabled." }, "twoFactorYubikeyAdd": { - "message": "Add a new YubiKey to your account" + "message": "Voeg ’n nuwe YubiKey tot u rekening toe" }, "twoFactorYubikeyPlugIn": { - "message": "Plug the YubiKey into your computer's USB port." + "message": "Prop die YubiKey by u rekenaar se USB-poort in." }, "twoFactorYubikeySelectKey": { - "message": "Select the first empty YubiKey input field below." + "message": "Kies die eerste leë YubiKey-invoerveld hier onder." }, "twoFactorYubikeyTouchButton": { - "message": "Touch the YubiKey's button." + "message": "Druk op die YubiKey se knop." }, "twoFactorYubikeySaveForm": { "message": "Bewaar die vorm." @@ -1387,7 +1393,7 @@ "message": "API-gasheernaam" }, "twoFactorEmailDesc": { - "message": "Follow these steps to set up two-step login with email:" + "message": "Volg hierdie stappe om tweestapaantekening met e-pos op te stel:" }, "twoFactorEmailEnterEmail": { "message": "Enter the email that you wish to receive verification codes" @@ -1447,7 +1453,7 @@ "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn enabled browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F enabled)." }, "twoFactorRecoveryYourCode": { - "message": "Your Bitwarden two-step login recovery code" + "message": "U herstelkode vir Bitwarden-tweestapaantekening" }, "twoFactorRecoveryNoCode": { "message": "You have not enabled any two-step login providers yet. After you have enabled a two-step login provider you can check back here for your recovery code." @@ -1464,13 +1470,13 @@ "description": "Vault Health Reports can be used to evaluate the security of your Bitwarden Personal or Organization Vault." }, "unsecuredWebsitesReport": { - "message": "Unsecure Websites" + "message": "Onbeveiligde webwerwe" }, "unsecuredWebsitesReportDesc": { - "message": "URLs that start with http:// don’t use the best available encryption. Change the Login URIs for these accounts to https:// for safer browsing." + "message": "Bronadresse wat met http:// begin gebruik nie die beste beskikbare enkripsie nie. Verander die aantekenbronadres vir hierdie rekeninge na https:// vir veiliger blaaiery." }, "unsecuredWebsitesFound": { - "message": "Unsecured Websites Found" + "message": "Onbeveiligde webwerwe gevind" }, "unsecuredWebsitesFoundDesc": { "message": "We found $COUNT$ items in your vault with unsecured URIs. You should change their URI scheme to https:// if the website allows it.", @@ -1485,7 +1491,7 @@ "message": "No items in your vault have unsecured URIs." }, "inactive2faReport": { - "message": "Inactive Two-step Login" + "message": "Onaktiewe tweestapaantekening" }, "inactive2faReportDesc": { "message": "Two-step Login adds a layer of protection to your accounts. Turn on Two-Step Login using Bitwarden Authenticator for these accounts or use an alternative method." @@ -1509,10 +1515,10 @@ "message": "Instruksies" }, "exposedPasswordsReport": { - "message": "Exposed Passwords" + "message": "Blootgestelde wagwoorde" }, "exposedPasswordsReportDesc": { - "message": "Passwords exposed in a data breach are easy targets for attackers. Change these passwords to prevent potential break-ins." + "message": "Wagwoorde wat in ’n databreuk blootgestel is is maklike teikens vir aanvallers. Verander hierdie wagwoorde om potensiële inbrake te voorkom." }, "exposedPasswordsFound": { "message": "Blootgestelde wagwoorde gevind" @@ -1527,10 +1533,10 @@ } }, "noExposedPasswords": { - "message": "No items in your vault have passwords that have been exposed in known data breaches." + "message": "Daar is geen items in u kluis wat blootgestelde wagwoorde gebruik nie." }, "checkExposedPasswords": { - "message": "Check Exposed Passwords" + "message": "Gaan blootgestelde wagwoorde na" }, "exposedXTimes": { "message": "$COUNT$ keer blootgestel", @@ -1542,16 +1548,16 @@ } }, "weakPasswordsReport": { - "message": "Weak Passwords" + "message": "Swak wagwoorde" }, "weakPasswordsReportDesc": { - "message": "Weak passwords can be easily guessed by attackers. Change these passwords to strong ones using the Password Generator." + "message": "Swak wagwoorde kan maklik deur aanvallers geraai word. Verander hierdie wagwoorde na sterkes d.m.v. die wagwoordgenereerder." }, "weakPasswordsFound": { "message": "Swak wagwoorde gevind" }, "weakPasswordsFoundDesc": { - "message": "We found $COUNT$ items in your vault with passwords that are not strong. You should update them to use stronger passwords.", + "message": "Ons het $COUNT$ swak wagwoorde in u kluis gevind. U behoort dit by te werk en sterker wagwoorde te gebruik.", "placeholders": { "count": { "content": "$1", @@ -1563,10 +1569,10 @@ "message": "Geen items in u kluis het swak wagwoorde nie." }, "reusedPasswordsReport": { - "message": "Reused Passwords" + "message": "Hergebruikte wagwoorde" }, "reusedPasswordsReportDesc": { - "message": "Reusing passwords makes it easier for attackers to break into multiple accounts. Change these passwords so that each is unique." + "message": "Die hergebruik van wagwoorde maak dit maklik vir aanvallers om by meerdere rekeninge in te breek. Verander hierdie wagwoorde sodat elkeen uniek is." }, "reusedPasswordsFound": { "message": "Hergebruikte wagwoorde gevind" @@ -1599,13 +1605,13 @@ "message": "Breached accounts can expose your personal information. Secure breached accounts by enabling 2FA or creating a stronger password." }, "breachCheckUsernameEmail": { - "message": "Check any usernames or email addresses that you use." + "message": "Gaan enige gebruikersname of e-posadresse wat u gebruik na." }, "checkBreaches": { "message": "Check Breaches" }, "breachUsernameNotFound": { - "message": "$USERNAME$ was not found in any known data breaches.", + "message": "$USERNAME$ is in geen bekende databreuke gevind nie.", "placeholders": { "username": { "content": "$1", @@ -1618,7 +1624,7 @@ "description": "ex. Good News, No Breached Accounts Found!" }, "breachUsernameFound": { - "message": "$USERNAME$ was found in $COUNT$ different data breaches online.", + "message": "$USERNAME$ is in $COUNT$ verskillende databreuke aanlyn gevind.", "placeholders": { "username": { "content": "$1", @@ -1634,7 +1640,7 @@ "message": "Breached Accounts Found" }, "compromisedData": { - "message": "Compromised data" + "message": "Gekompromitteerde data" }, "website": { "message": "Webwerf" @@ -1655,7 +1661,7 @@ "message": "Fakturering" }, "accountCredit": { - "message": "Account Credit", + "message": "Rekeningkrediet", "description": "Financial term. In the case of Bitwarden, a positive balance means that you owe money, while a negative balance means that you have a credit (Bitwarden owes you money)." }, "accountBalance": { @@ -1663,7 +1669,7 @@ "description": "Financial term. In the case of Bitwarden, a positive balance means that you owe money, while a negative balance means that you have a credit (Bitwarden owes you money)." }, "addCredit": { - "message": "Add Credit", + "message": "Voeg krediet toe", "description": "Add more credit to your account's balance." }, "amount": { @@ -1702,7 +1708,7 @@ "message": "Wagwoordhigiëne, rekeningwelstand en databreukverslae om u kluis veilig te hou." }, "premiumSignUpTotp": { - "message": "TOTP verification code (2FA) generator for logins in your vault." + "message": "TOTP-bevestigingskodegenereerder (2FA) vir aantekenings in u kluis." }, "premiumSignUpSupport": { "message": "Klantediens met hoë prioriteit." @@ -2116,7 +2122,7 @@ "message": "Skep onbeperkte versamelings" }, "gbEncryptedFileStorage": { - "message": "$SIZE$ encrypted file storage", + "message": "$SIZE$ geënkripteerde lêerberging", "placeholders": { "size": { "content": "$1", @@ -2131,13 +2137,13 @@ "message": "Users get access to Premium Features" }, "controlAccessWithGroups": { - "message": "Control user access with Groups" + "message": "Beheer gebruikertoegang met groepe" }, "syncUsersFromDirectory": { - "message": "Sync your users and Groups from a directory" + "message": "Sinchroniseer u gebruikers en groepe wanuit ’n gids" }, "trackAuditLogs": { - "message": "Track user actions with audit logs" + "message": "Spoor gebruikeraksies na met ouditlogboeke" }, "enforce2faDuo": { "message": "Enforce 2FA with Duo" @@ -2146,7 +2152,7 @@ "message": "Klantediens met hoë prioriteit" }, "xDayFreeTrial": { - "message": "$COUNT$ day free trial, cancel anytime", + "message": "$COUNT$ dae gratis proef, kanselleer enige tyd", "placeholders": { "count": { "content": "$1", @@ -2203,7 +2209,7 @@ "message": "Beleide" }, "singleSignOn": { - "message": "Single Sign-On" + "message": "Enkelaantekening" }, "editPolicy": { "message": "Wysig Beleid" @@ -2226,8 +2232,14 @@ "removeUserConfirmation": { "message": "Is u seker u wil hierdie gebruiker verwyder?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { - "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + "message": "Waarskuwing! Hierdie gebruiker vereis Key Connector om hul enkripsie te bestuur. Indien u die gebruiker uit u organisasie verwyder, word sy rekening permanent gedeaktiveer. Dit kan nie ontdaan word nie. Wil u voortgaan?" }, "externalId": { "message": "Eksterne ID" @@ -2269,7 +2281,7 @@ "message": "Invite a new user to your organization by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." }, "inviteMultipleEmailDesc": { - "message": "You can invite up to $COUNT$ users at a time by comma separating a list of email addresses.", + "message": "U kan tot $COUNT$ gebruikers op ’n slag nooi deur e-posadresse in ’n lys met kommas te skei.", "placeholders": { "count": { "content": "$1", @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Het aanhegsel vir item $ID$ geskep.", "placeholders": { @@ -2644,7 +2692,7 @@ } }, "createdOrganizationId": { - "message": "Created organization $ID$.", + "message": "Organisasie $ID$ is geskep.", "placeholders": { "id": { "content": "$1", @@ -2653,7 +2701,7 @@ } }, "addedOrganizationId": { - "message": "Added organization $ID$.", + "message": "Organisasie $ID$ is toegevoeg.", "placeholders": { "id": { "content": "$1", @@ -2662,7 +2710,7 @@ } }, "removedOrganizationId": { - "message": "Removed organization $ID$.", + "message": "Organisasie $ID$ is verwyder.", "placeholders": { "id": { "content": "$1", @@ -2776,10 +2824,10 @@ "message": "Werk Blaaier By" }, "updateBrowserDesc": { - "message": "You are using an unsupported web browser. The web vault may not function properly." + "message": "U gebruik ’n onondersteunde webblaaier. Die webkluis werk dalk nie soos normaal nie." }, "joinOrganization": { - "message": "Join Organization" + "message": "Sluit aan by organisasie" }, "joinOrganizationDesc": { "message": "You've been invited to join the organization listed above. To accept the invitation, you need to log in or create a new Bitwarden account." @@ -2803,7 +2851,7 @@ } }, "rememberEmail": { - "message": "Remember email" + "message": "Onthou e-pos" }, "recoverAccountTwoStepDesc": { "message": "If you cannot access your account through your normal two-step login methods, you can use your two-step login recovery code to disable all two-step providers on your account." @@ -2845,7 +2893,7 @@ "message": "User accounts will remain active after deletion but will no longer be associated to this organization." }, "deletingOrganizationIsPermanentWarning": { - "message": "Deleting $ORGANIZATION$ is permanent and irreversible.", + "message": "Die skrap van $ORGANIZATION$ is permanent en onomkeerbaar.", "placeholders": { "organization": { "content": "$1", @@ -2986,7 +3034,7 @@ "message": "Subscription updated" }, "additionalOptions": { - "message": "Additional Options" + "message": "Bykomende opsies" }, "additionalOptionsDesc": { "message": "For additional help in managing your subscription, please contact Customer Support." @@ -3061,7 +3109,7 @@ } }, "keyUpdated": { - "message": "Key Updated" + "message": "Sleutel bygewerk" }, "updateKeyTitle": { "message": "Werk sleutel by" @@ -3148,7 +3196,7 @@ "message": "4 uur" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Bygewerk", @@ -3492,10 +3540,10 @@ "message": "You may now close this tab and continue in the extension." }, "includeAllTeamsFeatures": { - "message": "All Teams features, plus:" + "message": "Alle Spanne-funksies, plus:" }, "includeSsoAuthentication": { - "message": "SSO Authentication via SAML2.0 and OpenID Connect" + "message": "SSO waarmerking d.m.v. SAML2.0 en OpenID Connect" }, "includeEnterprisePolicies": { "message": "Ondernemingsbeleide" @@ -3528,7 +3576,7 @@ "message": "Organization members who are not Owners or Administrators and are already a member of another organization will be removed from your organization." }, "requireSso": { - "message": "Single Sign-On Authentication" + "message": "Enkelaantekenwaarmerking" }, "requireSsoPolicyDesc": { "message": "Require users to log in with the Enterprise Single Sign-On method." @@ -3618,6 +3666,9 @@ "disabled": { "message": "Gedeaktiveer" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send-skakel", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -3668,7 +3719,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendHiddenByDefault": { - "message": "This send is hidden by default. You can toggle its visibility using the button below.", + "message": "Hierdie send is by verstek versteek. U kan sy sigbaarheid wissel deur die knop hier onder.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "downloadFile": { @@ -3835,7 +3886,7 @@ "message": "Require users to save vault items to an organization by removing the personal ownership option." }, "personalOwnershipExemption": { - "message": "Organization Owners and Administrators are exempt from this policy's enforcement." + "message": "Organisasie-eienaars en -administrateurs is vrygestel van die afdwing van hierdie beleid." }, "personalOwnershipSubmitError": { "message": "Weens ’n ondernemingsbeleid mag u geen wagwoorde in u persoonlike kluis bewaar nie. Verander die eienaarskap na ’n organisasie en kies uit ’n van die beskikbare versamelings." @@ -3920,22 +3971,22 @@ "message": "Bestuur alle versamelings" }, "createNewCollections": { - "message": "Create New Collections" + "message": "Skep nuwe versamelings" }, "editAnyCollection": { - "message": "Edit Any Collection" + "message": "Wysig enige versameling" }, "deleteAnyCollection": { - "message": "Delete Any Collection" + "message": "Skrap enige versameling" }, "manageAssignedCollections": { "message": "Bestuur toegekende versamelings" }, "editAssignedCollections": { - "message": "Edit Assigned Collections" + "message": "Wysig toegekende versamelings" }, "deleteAssignedCollections": { - "message": "Delete Assigned Collections" + "message": "Skrap toegekende versamelings" }, "manageGroups": { "message": "Bestuur groepe" @@ -4219,11 +4270,17 @@ "removeUsersWarning": { "message": "Is u seker u wil die volgende gebruikers verwyder? Die proses duur enkele sekondes en kan nie onderbreek of gekanselleer word nie." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { - "message": "Theme" + "message": "Tema" }, "themeDesc": { - "message": "Choose a theme for your web vault." + "message": "Kies ’n tema vir u webkluis." }, "themeSystem": { "message": "Gebruik stelseltema" @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Suksesvol verwyder" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Uitgesluit, nie van toepassing vir hierdie aksie." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Verwyder gebruikers" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Fout" }, @@ -4265,31 +4334,31 @@ "message": "Bestuur gebruikers moet geaktiveer wees met die Wagwoordherstel-toestemming" }, "setupProvider": { - "message": "Provider Setup" + "message": "Aanbiederopstelling" }, "setupProviderLoginDesc": { - "message": "You've been invited to setup a new provider. To continue, you need to log in or create a new Bitwarden account." + "message": "U is genooi om ’n nuwe aanbieder op te stel. Om voort te gaan moet u aanteken of ’n nuwe Bitwarden-rekening skep." }, "setupProviderDesc": { "message": "Please enter the details below to complete the provider setup. Contact Customer Support if you have any questions." }, "providerName": { - "message": "Provider Name" + "message": "Aanbiedernaam" }, "providerSetup": { - "message": "The provider has been set up." + "message": "Die aanbieder is opgestel." }, "clients": { "message": "Clients" }, "providerAdmin": { - "message": "Provider Admin" + "message": "Aanbiederadmin" }, "providerAdminDesc": { "message": "The highest access user that can manage all aspects of your provider as well as access and manage client organizations." }, "serviceUser": { - "message": "Service User" + "message": "Diensgebruiker" }, "serviceUserDesc": { "message": "Service users can access and manage all client organizations." @@ -4310,7 +4379,7 @@ "message": "You can access this provider once an administrator confirms your membership. We'll send you an email when that happens." }, "providerUsersNeedConfirmed": { - "message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the provider until they are confirmed." + "message": "U het gebruikers wat die uitnodiging aanvaar het, maar nog bevestig moet word. Gebruikers sal nie toegang tot die aanbieder hê tot hulle bevestig is nie." }, "provider": { "message": "Aanbieder" @@ -4341,7 +4410,7 @@ } }, "organizationJoinedProvider": { - "message": "Organization was successfully added to the provider" + "message": "Organisasie is suksesvol tot die aanbieder toegevoeg" }, "accessingUsingProvider": { "message": "Accessing organization using provider $PROVIDER$", @@ -4353,7 +4422,7 @@ } }, "providerIsDisabled": { - "message": "Provider is disabled." + "message": "Aanbieder is gedeaktiveer." }, "providerUpdated": { "message": "Aanbieder bygewerk" @@ -4380,7 +4449,7 @@ "message": "Are you sure you want to detach this organization? The organization will continue to exist but will no longer be managed by the provider." }, "add": { - "message": "Add" + "message": "Voeg toe" }, "updatedMasterPassword": { "message": "Hoofwagwoord bygewerk" @@ -4392,7 +4461,7 @@ "message": "U hoofwagwoord is onlangs deur ’n administrateur in u organisasie verander. Om toegang tot u kluis te verkry moet u u hoofwagwoord nóú bywerk. Deur voort te gaan word u uit u huidige sessie geteken, waarna u weer sal moet aanteken. Aktiewe sessies op ander toestelle kan vir tot ’n uur steeds aktief bly." }, "masterPasswordInvalidWarning": { - "message": "Your Master Password does not meet the policy requirements of this organization. In order to join the organization, you must update your Master Password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + "message": "U hoofwagwoord voldoen nie aan hierdie organisasie se beleidsvereistes nie. Om by die organisasie aan te sluit moet u u hoofwagwoord nóú bywerk. Deur voort te gaan word u uit u huidige sessie geteken, waarna u weer sal moet aanteken. Aktiewe sessies op ander toestelle kan vir tot ’n uur steeds aktief bly." }, "maximumVaultTimeout": { "message": "Kluis-uittel" @@ -4450,7 +4519,7 @@ "message": "Een of meer organisasiebeleide verhoed u om u persoonlike kluis uit te stuur." }, "selectType": { - "message": "Select SSO Type" + "message": "Kies SSO-tipe" }, "type": { "message": "Tipe" @@ -4480,7 +4549,7 @@ "message": "Client Secret" }, "metadataAddress": { - "message": "Metadata Address" + "message": "Metadata-adres" }, "oidcRedirectBehavior": { "message": "OIDC Redirect Behavior" @@ -4540,13 +4609,13 @@ "message": "Binding Type" }, "idpSingleSignOnServiceUrl": { - "message": "Single Sign On Service URL" + "message": "Enkelaantekendiensbronadres" }, "idpSingleLogoutServiceUrl": { - "message": "Single Log Out Service URL" + "message": "Enkeluittekendiensbronadres" }, "idpX509PublicCert": { - "message": "X509 Public Certificate" + "message": "X509 openbare sertifikaat" }, "idpOutboundSigningAlgorithm": { "message": "Outbound Signing Algorithm" @@ -4558,46 +4627,46 @@ "message": "Allow outbound logout requests" }, "idpSignAuthenticationRequests": { - "message": "Sign authentication requests" + "message": "Onderteken waarmerkversoeke" }, "ssoSettingsSaved": { - "message": "Single Sign-On configuration was saved." + "message": "Enkelaantekenopstelling is bewaar." }, "sponsoredFamilies": { - "message": "Free Bitwarden Families" + "message": "Gratis Bitwarden Gesinne" }, "sponsoredFamiliesEligible": { - "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + "message": "U en u gesin kom in aanmerking vir gratis Bitwarden Gesinne. Los af met u persoonlike e-pos om u data veilig te hou selfs wanneer u nie op kantoor is nie." }, "sponsoredFamiliesEligibleCard": { - "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + "message": "Los u gratis Bitwarden vir Gesinne-plan vandag af om u data veilig te hou selfs wanneer u nie op kantoor is nie." }, "sponsoredFamiliesInclude": { - "message": "The Bitwarden for Families plan include" + "message": "Die Bitwarden vir Gesinne-plan sluit in" }, "sponsoredFamiliesPremiumAccess": { - "message": "Premium access for up to 6 users" + "message": "Premie-toegang vir tot 6 gebruikers" }, "sponsoredFamiliesSharedCollections": { - "message": "Shared collections for Family secrets" + "message": "Gedeelde versamelings vir gesinsgeheime" }, "badToken": { - "message": "The link is no longer valid. Please have the sponsor resend the offer." + "message": "Hierdie skakel is nie meer geldig nie. Laat die borg die aanbod weer stuur." }, "reclaimedFreePlan": { - "message": "Reclaimed free plan" + "message": "Teruggeëiste gratis plan" }, "redeem": { - "message": "Redeem" + "message": "Los af" }, "sponsoredFamiliesSelectOffer": { - "message": "Select the organization you would like sponsored" + "message": "Kies die organisasie wat u wil hê geborg moet wees" }, "familiesSponsoringOrgSelect": { - "message": "Which Free Families offer would you like to redeem?" + "message": "Welke gratis Gesinne-aanbod wil u aflos?" }, "sponsoredFamiliesEmail": { - "message": "Enter your personal email to redeem Bitwarden Families" + "message": "Voer u persoonlike e-posadres in om Bitwarden Gesinne af te los" }, "sponsoredFamiliesLeaveCopy": { "message": "If you remove an offer or are removed from the sponsoring organization, your Families sponsorship will expire at the next renewal date." @@ -4612,7 +4681,7 @@ "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." }, "sponsoredFamiliesAcceptFailedShort": { - "message": "Unable to accept offer. $DESCRIPTION$", + "message": "Kan nie aanbod aanvaar nie. $DESCRIPTION$", "placeholders": { "description": { "content": "$1", @@ -4621,19 +4690,19 @@ } }, "sponsoredFamiliesOffer": { - "message": "Accept Free Bitwarden Families" + "message": "Aanvaar gratis Bitwarden Gesinne" }, "sponsoredFamiliesOfferRedeemed": { - "message": "Free Bitwarden Families offer successfully redeemed" + "message": "Gratis Bitwarden Gesinne-aanbod suksesvol afgelos" }, "redeemed": { - "message": "Redeemed" + "message": "Afgelos" }, "redeemedAccount": { - "message": "Redeemed Account" + "message": "Afgeloste rekening" }, "revokeAccount": { - "message": "Revoke account $NAME$", + "message": "Trek rekening $NAME$ in", "placeholders": { "name": { "content": "$1", @@ -4651,10 +4720,10 @@ } }, "freeFamiliesPlan": { - "message": "Free Families Plan" + "message": "Gratis Gesinsplan" }, "redeemNow": { - "message": "Redeem Now" + "message": "Los nou af" }, "recipient": { "message": "Ontvanger" @@ -4666,7 +4735,7 @@ "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" }, "sponsorshipCreated": { - "message": "Sponsorship Created" + "message": "Borgskap is geskep" }, "revoke": { "message": "Herroep" @@ -4678,37 +4747,37 @@ "message": "After removing this account, the Families plan sponsorship will expire at the end of the billing period. You will not be able to redeem a new sponsorship offer until the existing one expires. Are you sure you want to continue?" }, "removeSponsorshipSuccess": { - "message": "Sponsorship Removed" + "message": "Borgskap is verwyder" }, "ssoKeyConnectorError": { - "message": "Key Connector error: make sure Key Connector is available and working correctly." + "message": "Key Connector-fout: maak seker dat Key Connector beskikbaar is en werk." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "Key Connector-bronadres" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "Stuur ’n bevestigingskode na u e-pos" }, "sendCode": { - "message": "Send Code" + "message": "Verstuur kode" }, "codeSent": { - "message": "Code Sent" + "message": "Kode verstuur" }, "verificationCode": { "message": "Bevestigingskode" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "Bevestig u identiteit om voort te gaan." }, "verificationCodeRequired": { - "message": "Verification code is required." + "message": "Bevestigingskode word vereis." }, "invalidVerificationCode": { - "message": "Invalid verification code" + "message": "Ongeldige bevestigingskode" }, "convertOrganizationEncryptionDesc": { - "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "message": "$ORGANIZATION$ gebruik SSO met ’n sleutelbediener op ’n eie gasheer. ’n Hoofwagwoord word nie meer vereis vir aantekening vir lede van hierdie organisasie nie.", "placeholders": { "organization": { "content": "$1", @@ -4726,25 +4795,25 @@ "message": "Hoofwagwoord is verwyder." }, "allowSso": { - "message": "Allow SSO authentication" + "message": "Staan SSO-waarmerking toe" }, "allowSsoDesc": { "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." }, "ssoPolicyHelpStart": { - "message": "Enable the", + "message": "Aktiveer die", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpLink": { - "message": "SSO Authentication policy", + "message": "SSO-waarmerkbeleid", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { - "message": "to require all members to log in with SSO.", + "message": "om aantekening met SSO vir alle lede te verplig.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpKeyConnector": { - "message": "SSO Authentication and Single Organization policies are required to set up Key Connector decryption." + "message": "SSO-waarmerking en Enkelorganisasiebeleide word vereis om Key Connector-dekripsie op te stel." }, "memberDecryptionOption": { "message": "Member Decryption Options" @@ -4759,28 +4828,28 @@ "message": "Connect Login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their Master Passwords to decrypt vault data. Contact Bitwarden Support for set up assistance." }, "keyConnectorPolicyRestriction": { - "message": "\"Login with SSO and Key Connector Decryption\" is enabled. This policy will only apply to Owners and Admins." + "message": "“Teken aan met SSO en Key Connector-dekripsie” is geaktiveer. Heirdie beleid sal slegs op eienaars en admins toegepas word." }, "enabledSso": { - "message": "Enabled SSO" + "message": "SSO geaktiveer" }, "disabledSso": { - "message": "Disabled SSO" + "message": "SSO gedeaktiveer" }, "enabledKeyConnector": { - "message": "Enabled Key Connector" + "message": "Geaktiveerde Key Connector" }, "disabledKeyConnector": { - "message": "Disabled Key Connector" + "message": "Gedeaktiveerde Key Connector" }, "keyConnectorWarning": { - "message": "Once members begin using Key Connector, your Organization cannot revert to Master Password decryption. Proceed only if you are comfortable deploying and managing a key server." + "message": "Sodra lede Key Connector begin gebruik kan u organisasie nie terugkeer na hoofwagwoorddekripsie nie. Gaan slegs voort indien u gemaklik daarmee is om ’n sleutelbediener ontplooi en te bestuur." }, "migratedKeyConnector": { - "message": "Migrated to Key Connector" + "message": "Na Key Connector gemigreer" }, "paymentSponsored": { - "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + "message": "Verskaf ’n betaalmetode om aan die organisasie te koppel. Vrees nie, ons sal niks aftrek tensy u bykomende funksies kies of tot u borgskap verval het nie. " }, "orgCreatedSponsorshipInvalid": { "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." @@ -4798,10 +4867,10 @@ "message": "Toets" }, "keyConnectorTestSuccess": { - "message": "Success! Key Connector reached." + "message": "Sukses! Key Connector is bereik." }, "keyConnectorTestFail": { - "message": "Cannot reach Key Connector. Check URL." + "message": "Kan nie Key Connector bereik nie. Gaan bronadres na." }, "sponsorshipTokenHasExpired": { "message": "Die borgskapaanbod het verstryk." @@ -4828,10 +4897,10 @@ "message": "Set Up Billing Sync" }, "generateToken": { - "message": "Generate Token" + "message": "Genereer teken" }, "rotateToken": { - "message": "Rotate Token" + "message": "Roteer teken" }, "rotateBillingSyncTokenWarning": { "message": "If you proceed, you will need to re-setup billing sync on your self-hosted server." @@ -4846,10 +4915,10 @@ "message": "To set-up your organization on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up billing sync." }, "billingSyncApiKeyRotated": { - "message": "Token rotated." + "message": "Teken is geroteer." }, "billingSync": { - "message": "Billing Sync" + "message": "Faktureringsinchronisering" }, "billingSyncDesc": { "message": "Billing Sync provides Free Families plans for members and advanced billing capabilities by linking your self-hosted Bitwarden to the Bitwarden cloud server." @@ -4867,19 +4936,19 @@ "message": "Onaktief" }, "sentAwaitingSync": { - "message": "Sent (Awaiting Sync)" + "message": "Verstuur (wag vir sinchronisering)" }, "sent": { - "message": "Sent" + "message": "Verstuur" }, "requestRemoved": { - "message": "Removed (Awaiting Sync)" + "message": "Verwyder (wag vir sinchronisering)" }, "requested": { "message": "Requested" }, "formErrorSummaryPlural": { - "message": "$COUNT$ fields above need your attention.", + "message": "$COUNT$ velde hierbo vereis u aanda.", "placeholders": { "count": { "content": "$1", @@ -4888,7 +4957,7 @@ } }, "formErrorSummarySingle": { - "message": "1 field above needs your attention." + "message": "1 veld hierbo vereis u aandag." }, "fieldRequiredError": { "message": "$FIELDNAME$ word vereis.", @@ -4903,28 +4972,28 @@ "message": "vereis" }, "idpSingleSignOnServiceUrlRequired": { - "message": "Required if Entity ID is not a URL." + "message": "Vereis indien Entiteit-ID nie ’n bronadres is nie." }, "openIdOptionalCustomizations": { - "message": "Optional Customizations" + "message": "Opsionele aanpassings" }, "openIdAuthorityRequired": { "message": "Required if Authority is not valid." }, "separateMultipleWithComma": { - "message": "Separate multiple with a comma." + "message": "Skei meerdere met ’n komma." }, "sessionTimeout": { - "message": "Your session has timed out. Please go back and try logging in again." + "message": "U sessie het uitgetel. Gaan terug en probeer weer inteken." }, "exportingPersonalVaultTitle": { - "message": "Exporting Personal Vault" + "message": "Stuur tans persoonlike kluis uit" }, "exportingOrganizationVaultTitle": { - "message": "Exporting Organization Vault" + "message": "Stuur tans organisasiekluis uit" }, "exportingPersonalVaultDescription": { - "message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.", + "message": "Slegs die persoonlike kluisitems wat met $EMAIL$ verbind word, word uitgestuur. Organisasiekluisitems word nie ingesluit nie.", "placeholders": { "email": { "content": "$1", @@ -4933,7 +5002,7 @@ } }, "exportingOrganizationVaultDescription": { - "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Personal vault items and items from other organizations will not be included.", + "message": "Slegs die organisasiekluisitems wat met $ORGANIZATION$ verbind word, word uitgestuur. Persoonlike kluisitems word nie ingesluit nie.", "placeholders": { "organization": { "content": "$1", @@ -4942,7 +5011,7 @@ } }, "accessDenied": { - "message": "Access Denied. You do not have permission to view this page." + "message": "Toegang geweiger. U het nie toestemming om hierdie blad te sien nie." }, "masterPassword": { "message": "Hoofwagwoord" @@ -4988,17 +5057,17 @@ "message": "Gebruikersnaamtipe" }, "plusAddressedEmail": { - "message": "Plus Addressed Email", + "message": "E-posadres met plus", "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" }, "plusAddressedEmailDesc": { - "message": "Use your email provider's sub-addressing capabilities." + "message": "Gebruik u e-posverskaffer se subadresvermoëns." }, "catchallEmail": { - "message": "Catch-all Email" + "message": "Allesomvattende e-pos" }, "catchallEmailDesc": { - "message": "Use your domain's configured catch-all inbox." + "message": "Gebruik u domein se opgestelde allesomvattende inmandjie." }, "random": { "message": "Lukraak", @@ -5044,7 +5113,7 @@ } }, "lastSync": { - "message": "Last Sync", + "message": "Laaste Sinchronisering", "Description": "Used as a prefix to indicate the last time a sync occured. Example \"Last sync 1968-11-16 00:00:00\"" }, "sponsorshipsSynced": { @@ -5064,10 +5133,10 @@ "description": "This text is displayed if an organization's billing is managed by a Provider. It tells the user to contact the Provider for assistance." }, "forwardedEmail": { - "message": "Forwarded Email Alias" + "message": "E-posalias vir aanstuur" }, "forwardedEmailDesc": { - "message": "Generate an email alias with an external forwarding service." + "message": "Genereer ’n e-posalias met ’n eksterne aanstuurdiens." }, "hostname": { "message": "Gasheernaam", @@ -5077,19 +5146,19 @@ "message": "API-toegangsteken" }, "deviceVerification": { - "message": "Device Verification" + "message": "Toestelbevestiging" }, "enableDeviceVerification": { - "message": "Enable Device Verification" + "message": "Aktiveer toestelbevestiging" }, "deviceVerificationDesc": { - "message": "When enabled, verification codes are sent to your email address when logging in from an unrecognized device" + "message": "Indien geaktiveer word bevestigingskodes na u e-posadres gestuur wanneer u van ’n onbekende toestel af aanteken" }, "updatedDeviceVerification": { - "message": "Updated Device Verification" + "message": "Bygewerkte toestelbevestiging" }, "areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX": { - "message": "Are you sure you want to enable Device Verification? The verification code emails will arrive at: $EMAIL$", + "message": "Is u seker u wil toestelbevestiging aktiveer? Die e-pos met bevestigingskode sal gaan na: $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index 32db752c50a..99729692b31 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "تغيير اللغة المستخدمة في خزنة الويب." }, - "disableIcons": { - "message": "تعطيل أيقونات الموقع" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "توفر أيقونات الموقع صورة يمكن التعرف عليها بجانب كل عنصر في الخزنة الخاصة بك." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "تمكين الجرافاتار", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "استخدام صور الأفاتار المحملة من gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "بريميوم", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3127,7 +3175,7 @@ "message": "مهلة الخزنة" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "المظهر" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "خطأ" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index e34091c3f08..6aa270aee3e 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Veb anbarda istifadə olunan dili dəyişdirin." }, - "disableIcons": { - "message": "Veb sayt nişanlarını sıradan çıxart" + "enableFavicon": { + "message": "Veb sayt nişanlarını göstər" }, - "disableIconsDesc": { - "message": "Veb sayt nişanları, anbarınızda hər bir giriş elementinin yanında tanımağınıza kömək edən bir təsvir təqdim edir." + "faviconDesc": { + "message": "Hər girişin yanında tanına bilən təsvir göstər." }, "enableGravatars": { "message": "\"Gravatar\"ı fəallaşdırın", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "gravatar.com saytından yüklənilən avatarları istifadə edin." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Fəallaşdırıldı" }, + "activate": { + "message": "Aktiv et" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Sıradan çıxart" }, + "deactivate": { + "message": "Deaktiv et" + }, "twoStepLoginProviderEnabled": { "message": "Bu iki mərhələli giriş təchizatçısı hesabınızda fəallaşdırılıb." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Bu istifadəçini çıxartmaq istədiyinizə əminsiniz?" }, + "deactivateUserConfirmation": { + "message": "Üzv, artıq təşkilata müraciət edə bilməyəcək, ancaq fərdi anbarına müraciət etməyə davam edəcək." + }, + "activateUserConfirmation": { + "message": "Bu istifadəçini aktivləşdirərək onun təşkilata müraciətinə icazə verirsiniz?" + }, "removeUserConfirmationKeyConnector": { "message": "Xəbərdarlıq! Bu istifadəçi, şifrələmələrini idarə etmək üçün Açar Bağlayıcı tələb edir. Bu istifadəçini təşkilatınızdan silsəniz, hesabı birdəfəlik sıradan çıxarılacaq. Bu əməliyyatın geri dönüşü yoxdur. Davam etmək istəyirsiniz?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "$ID$ istifadəçisi deaktiv edildi.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "$ID$ istifadəçisi aktiv edildi.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "$ID$ istifadəçisi deaktiv edilsin?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "$ID$ istifadəçisi aktiv edilsin?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "$ID$ elementi üçün qoşma yaradıldı.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Sıradan çıxarıldı" }, + "deactivated": { + "message": "Deaktiv edildi" + }, "sendLink": { "message": "\"Send\" bağlantısı", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Aşağıdakı istifadəçiləri çıxartmaq istədiyinizə əminsiniz? Bu prosesin tamamlanması bir neçə saniyə çəkir, ləğv edilə və ya dayandırıla bilməz." }, + "deactivateUsersWarning": { + "message": "Aşağıdakı üzvləri deaktiv etmək istədiyinizə əminsiniz? Təşkilata müraciət edə bilməyəcəklər, ancaq fərdi anbarlarına müraciət etməyə davam edəcəklər. Bu prosesin tamamlanması bir neçə saniyə çəkir, ləğv edilə və ya dayandırıla bilməz." + }, + "activateUsersWarning": { + "message": "Aşağıdakı istifadəçiləri aktiv etmək istədiyinizə əminsiniz? Bu prosesin tamamlanması bir neçə saniyə çəkir, ləğv edilə və ya dayandırıla bilməz." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Uğurla çıxarıldı" }, + "bulkDeactivatedMessage": { + "message": "Uğurla deaktiv edildi" + }, + "bulkActivatedMessage": { + "message": "Uğurla aktiv edildi" + }, "bulkFilteredMessage": { "message": "İstisna edildi, bu əməliyyat üçün etibarlı deyil." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "İstifadəçiləri çıxart" }, + "deactivateUsers": { + "message": "İstifadəçiləri deaktiv et" + }, + "activateUsers": { + "message": "İstifadəçiləri aktiv et" + }, "error": { "message": "Xəta" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 4bab4631a12..6bc3430721a 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Адключыць значкі вэб-сайтаў" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Значкі вэб-сайтаў паказваюцца з кожным элементам у вашым сховішчы." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Уключыць Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Уключана" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Прэміяльны статус", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Адключыць" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index aaa8217dd3d..644b130b3a7 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Смяна на езика на интерфейса. Ще трябва да пуснете програмата повторно." }, - "disableIcons": { - "message": "Изключване на иконите на сайтовете" + "enableFavicon": { + "message": "Показване на иконките на уеб сайтовете" }, - "disableIconsDesc": { - "message": "Иконите на сайтовете са разпознаваеми изображения към записите за вход в трезора." + "faviconDesc": { + "message": "Показване на разпознаваемо изображение до всеки запис." }, "enableGravatars": { "message": "Включване на граватари", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Използване на иконки за потребители от сайта „gravatar.com“." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Включено" }, + "activate": { + "message": "Активиране" + }, "premium": { "message": "Платен", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Изключване" }, + "deactivate": { + "message": "Деактивиране" + }, "twoStepLoginProviderEnabled": { "message": "Този доставчик на двустепенно удостоверяване е включен за абонамента ви." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Сигурни ли сте, че искате да изтриете този потребител?" }, + "deactivateUserConfirmation": { + "message": "Този член вече няма да има достъп до организацията, но ще продължи да има достъп до собствения си трезор." + }, + "activateUserConfirmation": { + "message": "Наистина ли искате да активирате този потребител, давайки му така достъп до организацията?" + }, "removeUserConfirmationKeyConnector": { "message": "Внимание! Този потребител има нужда от конектор за ключове, за да управлява шифроването си. Ако премахнете потребителя от организацията, ще заключите завинаги достъпа му до неговата регистрация. Това действие е необратимо. Наистина ли искате да продължите?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Деактивиран потребител: $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Активиран потребител: $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Деактивиране на потребител $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Активиране на потребител $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Към запис № $ID$ е прикачен файл.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Изключено" }, + "deactivated": { + "message": "Деактивиран" + }, "sendLink": { "message": "Изпращане на връзката", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Наистина ли искате да премахнете следните потребители? Процесът може да отнеме няколко секунди и не може да бъде прекъснат или отменен." }, + "deactivateUsersWarning": { + "message": "Наистина ли искате да деактивирате следните членове? Те вече няма да имат достъп до организацията, но ще продължат да имат достъп до собствените си трезори. Процедурата ще отнеме няколко секунди и не трябва да бъде прекъсвана или отменяна." + }, + "activateUsersWarning": { + "message": "Наистина ли искате да активирате следните потребители, давайки им така достъп до организацията? Процесът може да отнеме няколко секунди и не може да бъде прекъснат или отменен." + }, "theme": { "message": "Облик" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Успешно премахване" }, + "bulkDeactivatedMessage": { + "message": "Успешно деактивиране" + }, + "bulkActivatedMessage": { + "message": "Успешно активиране" + }, "bulkFilteredMessage": { "message": "Изключени като неподходящи за това действие." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Премахване на потребителите" }, + "deactivateUsers": { + "message": "Деактивиране на потребители" + }, + "activateUsers": { + "message": "Активиране на потребители" + }, "error": { "message": "Грешка" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index 849a382a7b3..c22d41a07db 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "ওয়েবসাইট আইকন অক্ষম করুন" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "ওয়েবসাইট আইকনগুলি আপনার ভল্টের প্রতিটি লগইন বস্তুর পাশে একটি পরিচয়যোগ্য চিত্র সরবরাহ করে।" + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "প্রিমিয়াম", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "ফিল্টার" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "১ মিনিট" @@ -3148,7 +3196,7 @@ "message": "৪ ঘন্টা" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "হালনাগাদকৃত", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "লিঙ্ক পাঠান", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index f3c262994b7..464625d877e 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index bf68e2c52a4..7525d51bfc0 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Canvia l'idioma utilitzat per la caixa forta web." }, - "disableIcons": { - "message": "Inhabilita les icones del lloc web" + "enableFavicon": { + "message": "Mostra les icones del lloc web" }, - "disableIconsDesc": { - "message": "Les icones del lloc web proporcionen una imatge que es pot reconèixer al costat de cada element d'inici de sessió a la vostra caixa forta." + "faviconDesc": { + "message": "Mostra una imatge reconeixible al costat de cada inici de sessió." }, "enableGravatars": { "message": "Habilita Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Utilitzeu imatges d'avatar carregades de gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Habilitat" }, + "activate": { + "message": "Activa" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Inhabilita" }, + "deactivate": { + "message": "Desactiva" + }, "twoStepLoginProviderEnabled": { "message": "Aquest proveïdor d'inici de sessió en dues passes està habilitat al vostre compte." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Esteu segur que voleu suprimir aquest usuari?" }, + "deactivateUserConfirmation": { + "message": "El membre ja no tindrà accés a l'organització, però encara tindrà accés a la caixa forta individual." + }, + "activateUserConfirmation": { + "message": "Confirmeu que voleu activar aquest usuari per concedir-li accés a l'organització?" + }, "removeUserConfirmationKeyConnector": { "message": "Advertència! Aquest usuari requereix un connector clau per gestionar el seu xifrat. La supressió d'aquest usuari des de la vostra organització desactivarà permanentment el seu compte. Aquesta acció no es pot desfer. Voleu continuar?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Desactivat usuari $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activat usuari $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Vols desactivar l'usuari $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Vols activar l'usuari $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "S'ha creat el fitxer adjunt per l'element $ID$.", "placeholders": { @@ -3358,7 +3406,7 @@ "message": "Acció del temps d'espera de la caixa forta" }, "vaultTimeoutActionLockDesc": { - "message": "Una caixa forta bloquejada requereix que torneu a introduir la contrasenya principal per accedir-ne de nou." + "message": "Una caixa forta bloquejada requereix que torne a introduir la contrasenya principal per accedir-ne de nou." }, "vaultTimeoutActionLogOutDesc": { "message": "Una caixa forta desconnectada requereix que torneu a autentificar-vos per accedir-hi de nou." @@ -3618,6 +3666,9 @@ "disabled": { "message": "Inhabilitat" }, + "deactivated": { + "message": "Desactivat" + }, "sendLink": { "message": "Enllaç Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Esteu segur que voleu eliminar els usuaris següents? El procés pot tardar uns segons a completar-se i no es pot interrompre ni cancel·lar." }, + "deactivateUsersWarning": { + "message": "Esteu segur que voleu desactivar els membres següents? Ja no tindran accés a l'organització, però encara tindran accés a les seues caixes fortes individuals. El procés pot tardar uns quants segons a completar-se i no es pot interrompre ni cancel·lar." + }, + "activateUsersWarning": { + "message": "Esteu segur que voleu activar els membres següents, donant-los accés a l'organització? El procés pot tardaruns quants segons a completar-se i no es pot interrompre ni cancel·lar." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Suprimit correctament" }, + "bulkDeactivatedMessage": { + "message": "Desactivat correctament" + }, + "bulkActivatedMessage": { + "message": "Activat correctament" + }, "bulkFilteredMessage": { "message": "Exclòs, no aplicable per a aquesta acció." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Suprimeix usuaris" }, + "deactivateUsers": { + "message": "Desactiva usuaris" + }, + "activateUsers": { + "message": "Activa usuaris" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index 396e393a06a..c7505f854c0 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Změňte jazyk používaný ve webovém trezoru." }, - "disableIcons": { - "message": "Zakázat ikonky webových stránek" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Ikonky webových stránek zobrazí snadno rozeznatelný obrázek vedle každé položky ve vašem trezoru." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Povolit službu Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Použije profilový obrázek načtený z gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Povoleno" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Prémium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Zakázat" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Tento poskytovatel dvoufázového přihlášení byl povolen." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Opravdu chcete tohoto uživatele smazat?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Příloha pro položku $ID$ byla přidána.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Zakázáno" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Odkaz tohoto Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Opravdu chcete odebrat následující uživatele? Proces může trvat několik sekund a nelze jej přerušit ani zrušit." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Motiv" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Úspěšně odstraněno" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Vyloučené, neplatí pro tuto akci." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Odebrat uživatele" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Chyba" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index ab19fa310d3..1fb0926e424 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Skift det sprog, der bruges af web-boksen." }, - "disableIcons": { - "message": "Slå webikoner fra" + "enableFavicon": { + "message": "Vis webstedsikoner" }, - "disableIconsDesc": { - "message": "Webikoner vises som et genkendeligt billede ved siden af hvert loginelement i din boks." + "faviconDesc": { + "message": "Vis genkendeligt billede ved hvert login." }, "enableGravatars": { "message": "Aktivér Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Brug avatar billeder hentet fra gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Aktiveret" }, + "activate": { + "message": "Aktivér" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Deaktivér" }, + "deactivate": { + "message": "Deaktivér" + }, "twoStepLoginProviderEnabled": { "message": "Denne to-trins-login udbyder er aktiveret på din konto." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Er du sikker på, at du vil fjerne denne bruger?" }, + "deactivateUserConfirmation": { + "message": "Medlemmet vil ikke længere have adgang til organisationen, men vil stadig have adgang til sin egen boks." + }, + "activateUserConfirmation": { + "message": "Er du sikker på, at du vil aktivere denne bruger og give vedkommende adgang til organisationen?" + }, "removeUserConfirmationKeyConnector": { "message": "Advarsel! Denne bruger behøver Key Connector til krypteringshåndtering. Fjernes brugeren fra din organisation, deaktiveres vedkommendes konto permanent. Denne handling kan ikke fortrydes. Vil du fortsætte?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deaktiveret bruger $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Aktiveret bruger $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deaktivér bruger $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Aktivér bruger $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Oprettede vedhæftning på element $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Deaktiveret" }, + "deactivated": { + "message": "Deaktiveret" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Er du sikker på, at du vil fjerne følgende brugere? Processen kan tage et par sekunder at fuldføre og kan ikke afbrydes eller annulleres." }, + "deactivateUsersWarning": { + "message": "Er du sikker på, at du vil deaktivere følgende medlemmer? De vil ikke længere have adgang til organisationen, men vil stadig have adgang til deres egne bokse. Processen kan tage nogle sekunder at gennemføre, og den kan ikke afbrydes eller annulleres." + }, + "activateUsersWarning": { + "message": "Er du sikker på, at du vil aktivere følgende medlemmer og give dem adgang til organisationen? Processen kan tage nogle sekunder at gennemføre og kan ikke afbrydes eller annulleres." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Fjernet med succes" }, + "bulkDeactivatedMessage": { + "message": "Deaktivering udført" + }, + "bulkActivatedMessage": { + "message": "Aktivering udført" + }, "bulkFilteredMessage": { "message": "Udelukket, ikke anvendeligt til denne handling." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Fjern brugere" }, + "deactivateUsers": { + "message": "Deaktivere brugere" + }, + "activateUsers": { + "message": "Aktivere brugere" + }, "error": { "message": "Fejl" }, @@ -5089,7 +5158,7 @@ "message": "Opdateret enhedsbekræftelse" }, "areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX": { - "message": "Sikker på, at du vil aktivere enhedsbekræftelse? Bekræftelseskoder e-mailes til: $EMAIL$", + "message": "Er du sikker på, at du vil aktivere enhedsbekræftelse? Bekræftelseskoder e-mailes til: $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index a5a377d085b..99498d6ea08 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Ändern Sie die Sprache für den Web-Tresor." }, - "disableIcons": { - "message": "Website-Icons deaktivieren" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website-Icons zeigen ein wiedererkennbares Bild neben jedem Eintrag in Ihrem Tresor." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Aktiviere Gravatare", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Gravatare aktivieren", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Nutze Profilbilder von gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Aktiviert" }, + "activate": { + "message": "Aktivieren" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Deaktivieren" }, + "deactivate": { + "message": "Deaktivieren" + }, "twoStepLoginProviderEnabled": { "message": "Dieser Zwei-Faktor-Authentifizierungsanbieter ist für Ihr Konto aktiviert." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Sind Sie sich sicher, dass Sie diesen Benutzer löschen wollen?" }, + "deactivateUserConfirmation": { + "message": "Das Mitglied wird keinen Zugriff mehr zur Organisation haben, aber weiterhin Zugriff auf seinen persönlichen Tresor." + }, + "activateUserConfirmation": { + "message": "Bist du sicher, dass du diesen Benutzer aktivieren und ihm Zugriff zur Organisation gewähren möchtest?" + }, "removeUserConfirmationKeyConnector": { "message": "Warnung! Dieser Benutzer benötigt Key Connector, um seine Verschlüsselung zu verwalten. Das Entfernen dieses Benutzers aus deiner Organisation wird sein Konto dauerhaft deaktivieren. Diese Aktion kann nicht rückgängig gemacht werden. Möchtest du fortfahren?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Benutzer $ID$ deaktiviert.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Benutzer $ID$ aktiviert.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Benutzer $ID$ deaktivieren?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Benutzer $ID$ aktivieren?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Anhang zum Eintrag $ID$ erstellt.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Deaktiviert" }, + "deactivated": { + "message": "Deaktiviert" + }, "sendLink": { "message": "Send Link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Bist du sicher, dass du die folgenden Benutzer entfernen möchtest? Der Prozess kann einige Sekunden dauern und kann nicht unterbrochen oder abgebrochen werden." }, + "deactivateUsersWarning": { + "message": "Bist du sicher, dass du die folgenden Mitglieder deaktivieren möchtest? Sie werden keinen Zugang mehr zur Organisation haben, aber weiterhin Zugang auf ihre persönlichen Tresore haben. Der Prozess kann einige Sekunden dauern und kann nicht unterbrochen oder abgebrochen werden." + }, + "activateUsersWarning": { + "message": "Bist du sicher, dass du die folgenden Mitglieder aktivieren möchtest, um ihnen den Zugriff auf die Organisation zu gewähren? Der Prozess kann einige Sekunden dauern und kann nicht unterbrochen oder abgebrochen werden." + }, "theme": { "message": "Design" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Erfolgreich entfernt" }, + "bulkDeactivatedMessage": { + "message": "Erfolgreich deaktiviert" + }, + "bulkActivatedMessage": { + "message": "Erfolgreich aktiviert" + }, "bulkFilteredMessage": { "message": "Ausgeschlossen, nicht anwendbar für diese Aktion." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Benutzer entfernen" }, + "deactivateUsers": { + "message": "Benutzer deaktivieren" + }, + "activateUsers": { + "message": "Benutzer aktivieren" + }, "error": { "message": "Fehler" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 2bcf9ddee6f..4552350680e 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -422,13 +422,13 @@ "description": "Copy URI to clipboard" }, "me": { - "message": "Me" + "message": "Εγώ" }, "myVault": { "message": "Το Vault μου" }, "allVaults": { - "message": "All Vaults" + "message": "Όλα τα Vaults" }, "vault": { "message": "Vault" @@ -437,7 +437,7 @@ "message": "Vaults" }, "vaultItems": { - "message": "Vault Items" + "message": "Αντικείμενα Vault" }, "moveSelectedToOrg": { "message": "Μετακίνηση Επιλεγμένων στον Οργανισμό" @@ -904,18 +904,18 @@ "message": "Μήκος" }, "uppercase": { - "message": "Uppercase (A-Z)", + "message": "Κεφαλαία (A-Z)", "description": "Include uppercase letters in the password generator." }, "lowercase": { - "message": "Lowercase (a-z)", + "message": "Πεζά (α-ω)", "description": "Include lowercase letters in the password generator." }, "numbers": { - "message": "Numbers (0-9)" + "message": "Αριθμοί (0-9)" }, "specialCharacters": { - "message": "Special Characters (!@#$%^&*)" + "message": "Ειδικοί Χαρακτήρες (!@#$%^&*)" }, "numWords": { "message": "Αριθμός Λέξεων" @@ -1137,13 +1137,13 @@ "message": "Επιλογές" }, "preferences": { - "message": "Preferences" + "message": "Προτιμήσεις" }, "preferencesDesc": { - "message": "Customize your web vault experience." + "message": "Προσαρμόστε την εμπειρία σας στο web vault." }, "preferencesUpdated": { - "message": "Preferences updated" + "message": "Οι προτιμήσεις ενημερώθηκαν" }, "language": { "message": "Γλώσσα" @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Αλλάξτε γλώσσα που χρησιμοποιείται από το web vault." }, - "disableIcons": { - "message": "Απενεργοποίηση Εικονιδίων Ιστοσελίδας" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Τα εικονίδια ιστοσελίδων παρέχουν μια αναγνωρίσιμη εικόνα δίπλα σε κάθε στοιχείο σύνδεσης του vault σας." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Ενεργοποίηση Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Χρήση εικόνων avatar από gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Ενεργοποιημένο" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Απενεργοποίηση" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Ο πάροχος σύνδεσης δύο βημάτων του λογαριασμού σας, είναι ενεργοποιημένος." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτό τον χρήστη;" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Προσοχή! Αυτός ο χρήστης απαιτεί σύνδεση κλειδιού για τη διαχείριση της κρυπτογράφησης του. Η αφαίρεση αυτού του χρήστη από τον οργανισμό σας θα απενεργοποιήσει οριστικά τον λογαριασμό του. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Θέλετε να συνεχίσετε;" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Συννημένο που δημιουργήθηκε για το στοιχείο $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Απενεργοποιημένο" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Αποστολή Συνδέσμου", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Είστε βέβαιοι ότι θέλετε να καταργήσετε τους ακόλουθους χρήστες? Η διαδικασία μπορεί να διαρκέσει μερικά δευτερόλεπτα για να ολοκληρωθεί και δεν μπορεί να διακοπεί ή να ακυρωθεί." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Θέμα" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Καταργήθηκε με επιτυχία" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Εξαιρείται, δεν ισχύει για αυτήν την ενέργεια." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Αφαίρεση Χρηστών" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Σφάλμα" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index c232bcf02ff..725a0a52ba1 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1196,21 +1196,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -3217,10 +3217,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3241,7 +3241,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3448,13 +3448,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index c5cf3c644e3..303589bd033 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable website icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website icons provide a recognisable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organisation, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organisation?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organisation will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or cancelled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organisation, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organisation? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index 10e78519ead..512fc02ca3e 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable website icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website icons provide a recognisable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send Link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 7ca92bdd205..a7c4f081971 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Ŝanĝi la lingvon uzatan de la retejo-volbo." }, - "disableIcons": { - "message": "Malebligi retejajn piktogramojn" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Retejaj piktogramoj donas rekoneblan bildon apud ĉiu ensaluta ero en via trezorejo." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Ebligi Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Uzu avatarajn bildojn ŝarĝitajn de gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enŝaltita" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Malebligi" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Ĉi tiu du-ŝtupa ensaluta provizanto estas ebligita en via konto." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Ĉu vi certe volas forigi ĉi tiun uzanton?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Kreita aldonaĵo por ero $ID $.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Malebligita" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Sendi ligon", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index b148be6c3df..c3a57c9f652 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Cambiar el idioma utilizado en la caja fuerte web." }, - "disableIcons": { - "message": "Deshabilitar iconos de sitios web" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Los iconos de sitios web añaden una imagen reconocible al lado de cada entrada de tu caja fuerte." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Habilitar Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Usa imágenes de avatares cargadas desde gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Activado" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Desactivar" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Este proveedor de autenticación en dos pasos está habilitado para tu cuenta." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "¿Estás seguro de que deseas eliminar a este usuario?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "¡Advertencia! Este usuario requiere Conector de Clave para administrar su cifrado. Eliminar a este usuario de tu organización deshabilitará permanentemente su cuenta. Esta acción no se puede deshacer. ¿Quieres continuar?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Adjunto del elemento $ID$ creado.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Deshabilitado" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Enlace Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "¿Está seguro que desea eliminar los siguientes usuarios? El proceso puede tardar unos segundos en completarse y no puede interrumpirse o cancelarse." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Eliminado con éxito" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluido, no aplicable a esta acción." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Eliminar usuarios" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 973e26bf671..9406f13a093 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Siin saab veebihoidla keelt muuta." }, - "disableIcons": { - "message": "Lülita veebisaidi ikoonid välja" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Veebisaidi ikoonid aitavad hoidlas olevaid kontosid paremini eristada." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Luba Gravatarid", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Luba avatari pildid, mida laaditakse lehelt gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Sisselülitatud" }, + "activate": { + "message": "Aktiveeri" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Keela" }, + "deactivate": { + "message": "Deaktiveeri" + }, "twoStepLoginProviderEnabled": { "message": "See kaheastmelise kinnitamise teenus on sinu kontol sisse lülitatud." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Tahad kindlasti selle kasutaja eemaldada?" }, + "deactivateUserConfirmation": { + "message": "Liige ei pääse enam organisatsiooni hoidlale ligi. Küll aga säilitab ta ligipääsu oma individuaalsele hoidlale." + }, + "activateUserConfirmation": { + "message": "Oled kindel, et soovid seda kasutajat aktiveerida ja anda talle ligipääs organisatsioonile?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Kasutaja $ID$ on deaktiveeritud.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Kasutaja $ID$ on aktiveeritud.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deaktiveerin kasutaja $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Aktiveerin kasutaja $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Lisas kirjele $ID$ manuse.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Keelatud" }, + "deactivated": { + "message": "Deaktiveeritud" + }, "sendLink": { "message": "Sendi link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Oled kindel, et soovid järgnevaid kasutajaid eemaldada? See tegevus võib võtta paar sekundit ning seda ei saa katkestada." }, + "deactivateUsersWarning": { + "message": "Oled kindel, et soovid järgnevad kasutajad deaktiveerida? Selle tulemusel ei pääse nad enam organisatsiooni ligi, aga säilitavad siiski ligipääsud oma isiklikele hoidlatele. See protsess võtab mõned sekundid ning seda ei saa tühistada." + }, + "activateUsersWarning": { + "message": "Oled kindel, et soovid järgnevatele kasutajatele anda ligipääsu organisatsioonile? See tegevus võib võtta paar sekundit ning seda ei saa katkestada." + }, "theme": { "message": "Teema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Edukalt eemaldatud" }, + "bulkDeactivatedMessage": { + "message": "Edukalt deaktiveeritud" + }, + "bulkActivatedMessage": { + "message": "Edukalt aktiveeritud" + }, "bulkFilteredMessage": { "message": "Välja jäetud, ei rakendu sellel tegevuse puhul." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Kasutajate eemaldamine" }, + "deactivateUsers": { + "message": "Kasutajate deaktiveerimine" + }, + "activateUsers": { + "message": "Kasutajate aktiveerimine" + }, "error": { "message": "Viga" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json new file mode 100644 index 00000000000..047e6c2fb38 --- /dev/null +++ b/apps/web/src/locales/eu/messages.json @@ -0,0 +1,5169 @@ +{ + "pageTitle": { + "message": "Kutxa gotorra", + "description": "The title of the website in the browser window.", + "placeholders": { + "app_name": { + "content": "$1", + "example": "Bitwarden" + } + } + }, + "whatTypeOfItem": { + "message": "Zein elementu mota da hau?" + }, + "name": { + "message": "Izena" + }, + "uri": { + "message": "URI" + }, + "uriPosition": { + "message": "URI $POSITION$", + "description": "A listing of URIs. Ex: URI 1, URI 2, URI 3, etc.", + "placeholders": { + "position": { + "content": "$1", + "example": "2" + } + } + }, + "newUri": { + "message": "IRI berria" + }, + "username": { + "message": "Erabiltzaile izena" + }, + "password": { + "message": "Pasahitza" + }, + "newPassword": { + "message": "Pasahitz berria" + }, + "passphrase": { + "message": "Pasaesaldia" + }, + "notes": { + "message": "Oharrak" + }, + "customFields": { + "message": "Eremu pertsonalizatuak" + }, + "cardholderName": { + "message": "Txartelaren titularraren izena" + }, + "number": { + "message": "Zenbakia" + }, + "brand": { + "message": "Marka" + }, + "expiration": { + "message": "Iraungitze data" + }, + "securityCode": { + "message": "Segurtasun kodea (CVV)" + }, + "identityName": { + "message": "Nortasun izena" + }, + "company": { + "message": "Enpresa" + }, + "ssn": { + "message": "Segurtasun sozialaren zenbakia" + }, + "passportNumber": { + "message": "Pasaporte zenbakia" + }, + "licenseNumber": { + "message": "Lizentzia zenbakia" + }, + "email": { + "message": "Eposta" + }, + "phone": { + "message": "Telefonoa" + }, + "january": { + "message": "Urtarrila" + }, + "february": { + "message": "Otsaila" + }, + "march": { + "message": "Martxoa" + }, + "april": { + "message": "Apirila" + }, + "may": { + "message": "Maiatza" + }, + "june": { + "message": "Ekaina" + }, + "july": { + "message": "Uztaila" + }, + "august": { + "message": "Abuztua" + }, + "september": { + "message": "Iraila" + }, + "october": { + "message": "Urria" + }, + "november": { + "message": "Azaroa" + }, + "december": { + "message": "Abendua" + }, + "title": { + "message": "Titulua" + }, + "mr": { + "message": "Mr" + }, + "mrs": { + "message": "Mrs" + }, + "ms": { + "message": "Ms" + }, + "dr": { + "message": "Dr" + }, + "expirationMonth": { + "message": "Iraungitze hilabetea" + }, + "expirationYear": { + "message": "Iraungitze urtea" + }, + "authenticatorKeyTotp": { + "message": "Autentifikazio giltza (TOTP)" + }, + "folder": { + "message": "Karpeta" + }, + "newCustomField": { + "message": "Eremu pertsonalizatu berria" + }, + "value": { + "message": "Balioa" + }, + "dragToSort": { + "message": "Arrastatu txukuntzeko" + }, + "cfTypeText": { + "message": "Testua" + }, + "cfTypeHidden": { + "message": "Ezkutatua" + }, + "cfTypeBoolean": { + "message": "Boolearra" + }, + "cfTypeLinked": { + "message": "Konektatuta", + "description": "This describes a field that is 'linked' (related) to another field." + }, + "remove": { + "message": "Ezabatu" + }, + "unassigned": { + "message": "Esleitu gabe" + }, + "noneFolder": { + "message": "Karpetarik ez", + "description": "This is the folder for uncategorized items" + }, + "addFolder": { + "message": "Gehitu karpeta" + }, + "editFolder": { + "message": "Editatu Karpeta" + }, + "baseDomain": { + "message": "Oinarrizko domeinua", + "description": "Domain name. Ex. website.com" + }, + "domainName": { + "message": "Domeinu izena", + "description": "Domain name. Ex. website.com" + }, + "host": { + "message": "Ostalaria", + "description": "A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'." + }, + "exact": { + "message": "Zehatza" + }, + "startsWith": { + "message": "Hasi honekin" + }, + "regEx": { + "message": "Expresio erregularra", + "description": "A programming term, also known as 'RegEx'." + }, + "matchDetection": { + "message": "Detekzio mota", + "description": "URI match detection for auto-fill." + }, + "defaultMatchDetection": { + "message": "Lehenetsitako detekzio mota", + "description": "Default URI match detection for auto-fill." + }, + "never": { + "message": "Inoiz ez" + }, + "toggleVisibility": { + "message": "Txandakatu ikusgarritasuna" + }, + "toggleCollapse": { + "message": "Hondoa jo", + "description": "Toggling an expand/collapse state." + }, + "generatePassword": { + "message": "Sortu pasahitza" + }, + "checkPassword": { + "message": "Egiaztatu pasahitza konprometituta dagoen." + }, + "passwordExposed": { + "message": "Pasahitz hau $VALUE$ aldiz datu-iragazketetan aurkitu da. Aldatu egin beharko zenuke.", + "placeholders": { + "value": { + "content": "$1", + "example": "2" + } + } + }, + "passwordSafe": { + "message": "Pasahitz hau ez da inongo datu-filtrazio ezagunetan aurkitu. Erabiltzea segurua izan beharko luke." + }, + "save": { + "message": "Gorde" + }, + "cancel": { + "message": "Ezeztatu" + }, + "canceled": { + "message": "Ezeztatuta" + }, + "close": { + "message": "Itxi" + }, + "delete": { + "message": "Ezabatu" + }, + "favorite": { + "message": "Gogokoa" + }, + "unfavorite": { + "message": "Gogokoetatik kendu" + }, + "edit": { + "message": "Editatu" + }, + "searchCollection": { + "message": "Bilatu bilduma" + }, + "searchFolder": { + "message": "Bilatu karpeta" + }, + "searchFavorites": { + "message": "Bilatu gogokoak" + }, + "searchType": { + "message": "Bilaketa mota", + "description": "Search item type" + }, + "searchVault": { + "message": "Kutxa Gotorrean bilatu" + }, + "allItems": { + "message": "Elementu guztiak" + }, + "favorites": { + "message": "Gogokoak" + }, + "types": { + "message": "Motak" + }, + "typeLogin": { + "message": "Hasi saioa" + }, + "typeCard": { + "message": "Txartela" + }, + "typeIdentity": { + "message": "Nortasuna" + }, + "typeSecureNote": { + "message": "Ohar segurua" + }, + "typeLoginPlural": { + "message": "Saio hasierak" + }, + "typeCardPlural": { + "message": "Txartelak" + }, + "typeIdentityPlural": { + "message": "Nortasunak" + }, + "typeSecureNotePlural": { + "message": "Ohar seguruak" + }, + "folders": { + "message": "Karpetak" + }, + "collections": { + "message": "Bildumak" + }, + "firstName": { + "message": "Izena" + }, + "middleName": { + "message": "Bigarren izena" + }, + "lastName": { + "message": "Abizena" + }, + "fullName": { + "message": "Izen osoa" + }, + "address1": { + "message": "1go helbidea" + }, + "address2": { + "message": "2. helbidea" + }, + "address3": { + "message": "3. helbidea" + }, + "cityTown": { + "message": "Hiria / Herria" + }, + "stateProvince": { + "message": "Estatua / Probintzia" + }, + "zipPostalCode": { + "message": "Posta kodea" + }, + "country": { + "message": "Herrialdea" + }, + "shared": { + "message": "Partekatua" + }, + "attachments": { + "message": "Eranskinak" + }, + "select": { + "message": "Hautatu" + }, + "addItem": { + "message": "Gehitu elementua" + }, + "editItem": { + "message": "Editatu elementua" + }, + "viewItem": { + "message": "Bistaratu elementua" + }, + "ex": { + "message": "adb.", + "description": "Short abbreviation for 'example'." + }, + "other": { + "message": "Bestelakoak" + }, + "share": { + "message": "Partekatu" + }, + "moveToOrganization": { + "message": "Mugitu erakundera" + }, + "valueCopied": { + "message": "$VALUE$ kopiatuta", + "description": "Value has been copied to the clipboard.", + "placeholders": { + "value": { + "content": "$1", + "example": "Password" + } + } + }, + "copyValue": { + "message": "Kopiatu balioa", + "description": "Copy value to clipboard" + }, + "copyPassword": { + "message": "Kopiatu pasahitza", + "description": "Copy password to clipboard" + }, + "copyUsername": { + "message": "Kopiatu erabiltzaile-izena", + "description": "Copy username to clipboard" + }, + "copyNumber": { + "message": "Kopiatu zenbakia", + "description": "Copy credit card number" + }, + "copySecurityCode": { + "message": "Kopiatu segurtasun kodea (CVV)", + "description": "Copy credit card security code (CVV)" + }, + "copyUri": { + "message": "Kopiatu URIa", + "description": "Copy URI to clipboard" + }, + "me": { + "message": "Ni" + }, + "myVault": { + "message": "Nire Kutxa Gotorra" + }, + "allVaults": { + "message": "Kutxa Gotor guztiak" + }, + "vault": { + "message": "Kutxa Gotorra" + }, + "vaults": { + "message": "Kutxa Gotorrak" + }, + "vaultItems": { + "message": "Kuxa gotorreko elementuak" + }, + "moveSelectedToOrg": { + "message": "Mugitu aukeratutako antolakundera" + }, + "deleteSelected": { + "message": "Ezabatu hautatutakoa" + }, + "moveSelected": { + "message": "Mugitu aukeratuak" + }, + "selectAll": { + "message": "Hautatu guztiak" + }, + "unselectAll": { + "message": "Deshautatu guztiak" + }, + "launch": { + "message": "Abiarazi" + }, + "newAttachment": { + "message": "Gehitu eranskin berria" + }, + "deletedAttachment": { + "message": "Ezabatu eranskina" + }, + "deleteAttachmentConfirmation": { + "message": "Ziur zaude eranskina ezabatu nahi duzula?" + }, + "attachmentSaved": { + "message": "Eranskina gorde da." + }, + "file": { + "message": "Fitxategia" + }, + "selectFile": { + "message": "Hautatu fitxategia." + }, + "maxFileSize": { + "message": "Eranskinaren gehienezko tamaina 500MB." + }, + "updateKey": { + "message": "Ezin duzu ezaugarri hau erabili enkriptazio giltza eguneratu arte." + }, + "addedItem": { + "message": "Gehitu elementua" + }, + "editedItem": { + "message": "Editatu elementua" + }, + "movedItemToOrg": { + "message": "$ITEMNAME$ $ORGNAME$-ra mugitu", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + }, + "orgname": { + "content": "$2", + "example": "Company Name" + } + } + }, + "movedItemsToOrg": { + "message": "Hautatutako elementuak $ORGNAME$-ra mugituak", + "placeholders": { + "orgname": { + "content": "$1", + "example": "Company Name" + } + } + }, + "deleteItem": { + "message": "Ezabatu elementua" + }, + "deleteFolder": { + "message": "Ezabatu karpeta" + }, + "deleteAttachment": { + "message": "Ezabatu eranskina" + }, + "deleteItemConfirmation": { + "message": "Ziur zaude osagai hau ezabatu nahi duzula?" + }, + "deletedItem": { + "message": "Elementua zakarrontzira bidalia" + }, + "deletedItems": { + "message": "Elementuak zakarrontzira bidaliak" + }, + "movedItems": { + "message": "Elementuak mugituak" + }, + "overwritePasswordConfirmation": { + "message": "Ziur zaude pasahitza berridatzi nahi duzula?" + }, + "editedFolder": { + "message": "Karpeta editatuta" + }, + "addedFolder": { + "message": "Karpeta gehituta" + }, + "deleteFolderConfirmation": { + "message": "Are you sure you want to delete this folder?" + }, + "deletedFolder": { + "message": "Deleted folder" + }, + "loggedOut": { + "message": "Logged out" + }, + "loginExpired": { + "message": "Your login session has expired." + }, + "logOutConfirmation": { + "message": "Are you sure you want to log out?" + }, + "logOut": { + "message": "Log out" + }, + "ok": { + "message": "Ok" + }, + "yes": { + "message": "Yes" + }, + "no": { + "message": "No" + }, + "loginOrCreateNewAccount": { + "message": "Log in or create a new account to access your secure vault." + }, + "createAccount": { + "message": "Create Account" + }, + "logIn": { + "message": "Log In" + }, + "submit": { + "message": "Submit" + }, + "emailAddressDesc": { + "message": "You'll use your email address to log in." + }, + "yourName": { + "message": "Your Name" + }, + "yourNameDesc": { + "message": "What should we call you?" + }, + "masterPass": { + "message": "Master Password" + }, + "masterPassDesc": { + "message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it." + }, + "masterPassHintDesc": { + "message": "A master password hint can help you remember your password if you forget it." + }, + "reTypeMasterPass": { + "message": "Re-type Master Password" + }, + "masterPassHint": { + "message": "Master Password Hint (optional)" + }, + "masterPassHintLabel": { + "message": "Master Password Hint" + }, + "settings": { + "message": "Settings" + }, + "passwordHint": { + "message": "Password Hint" + }, + "enterEmailToGetHint": { + "message": "Enter your account email address to receive your master password hint." + }, + "getMasterPasswordHint": { + "message": "Get master password hint" + }, + "emailRequired": { + "message": "Email address is required." + }, + "invalidEmail": { + "message": "Invalid email address." + }, + "masterPassRequired": { + "message": "Master password is required." + }, + "masterPassLength": { + "message": "Master password must be at least 8 characters long." + }, + "masterPassDoesntMatch": { + "message": "Master password confirmation does not match." + }, + "newAccountCreated": { + "message": "Your new account has been created! You may now log in." + }, + "masterPassSent": { + "message": "We've sent you an email with your master password hint." + }, + "unexpectedError": { + "message": "An unexpected error has occurred." + }, + "emailAddress": { + "message": "Email Address" + }, + "yourVaultIsLocked": { + "message": "Your vault is locked. Verify your master password to continue." + }, + "unlock": { + "message": "Desblokeatu" + }, + "loggedInAsEmailOn": { + "message": "$HOSTNAME$-en $EMAIL$ bezala saioa hasita.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "hostname": { + "content": "$2", + "example": "bitwarden.com" + } + } + }, + "invalidMasterPassword": { + "message": "Master pasahitz baliogabea" + }, + "lockNow": { + "message": "Blokeatu orain" + }, + "noItemsInList": { + "message": "Ez dago erakusteko elementurik." + }, + "noCollectionsInList": { + "message": "Ez dago erakusteko bildumarik." + }, + "noGroupsInList": { + "message": "Ez dago erakusteko talderik." + }, + "noUsersInList": { + "message": "Ez dago erakusteko erabiltzailerik." + }, + "noEventsInList": { + "message": "Ez dago erakusteko gertakaririk." + }, + "newOrganization": { + "message": "Erakunde berria" + }, + "noOrganizationsList": { + "message": "You do not belong to any organizations. Organizations allow you to securely share items with other users." + }, + "versionNumber": { + "message": "Version $VERSION_NUMBER$", + "placeholders": { + "version_number": { + "content": "$1", + "example": "1.2.3" + } + } + }, + "enterVerificationCodeApp": { + "message": "Enter the 6 digit verification code from your authenticator app." + }, + "enterVerificationCodeEmail": { + "message": "Enter the 6 digit verification code that was emailed to $EMAIL$.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "verificationCodeEmailSent": { + "message": "Verification email sent to $EMAIL$.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "rememberMe": { + "message": "Remember me" + }, + "sendVerificationCodeEmailAgain": { + "message": "Send verification code email again" + }, + "useAnotherTwoStepMethod": { + "message": "Use another two-step login method" + }, + "insertYubiKey": { + "message": "Insert your YubiKey into your computer's USB port, then touch its button." + }, + "insertU2f": { + "message": "Insert your security key into your computer's USB port. If it has a button, touch it." + }, + "loginUnavailable": { + "message": "Login Unavailable" + }, + "noTwoStepProviders": { + "message": "This account has two-step login enabled, however, none of the configured two-step providers are supported by this web browser." + }, + "noTwoStepProviders2": { + "message": "Please use a supported web browser (such as Chrome) and/or add additional providers that are better supported across web browsers (such as an authenticator app)." + }, + "twoStepOptions": { + "message": "Two-step Login Options" + }, + "recoveryCodeDesc": { + "message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account." + }, + "recoveryCodeTitle": { + "message": "Recovery Code" + }, + "authenticatorAppTitle": { + "message": "Authenticator App" + }, + "authenticatorAppDesc": { + "message": "Use an authenticator app (such as Authy or Google Authenticator) to generate time-based verification codes.", + "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." + }, + "yubiKeyTitle": { + "message": "YubiKey OTP Security Key" + }, + "yubiKeyDesc": { + "message": "Use a YubiKey to access your account. Works with YubiKey 4 series, 5 series, and NEO devices." + }, + "duoDesc": { + "message": "Verify with Duo Security using the Duo Mobile app, SMS, phone call, or U2F security key.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "duoOrganizationDesc": { + "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "u2fDesc": { + "message": "Use any FIDO U2F enabled security key to access your account." + }, + "u2fTitle": { + "message": "FIDO U2F Security Key" + }, + "webAuthnTitle": { + "message": "FIDO2 WebAuthn" + }, + "webAuthnDesc": { + "message": "Use any WebAuthn enabled security key to access your account." + }, + "webAuthnMigrated": { + "message": "(Migrated from FIDO)" + }, + "emailTitle": { + "message": "Email" + }, + "emailDesc": { + "message": "Verification codes will be emailed to you." + }, + "continue": { + "message": "Continue" + }, + "organization": { + "message": "Organization" + }, + "organizations": { + "message": "Organizations" + }, + "moveToOrgDesc": { + "message": "Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved." + }, + "moveManyToOrgDesc": { + "message": "Choose an organization that you wish to move these items to. Moving to an organization transfers ownership of the items to that organization. You will no longer be the direct owner of these items once they have been moved." + }, + "collectionsDesc": { + "message": "Edit the collections that this item is being shared with. Only organization users with access to these collections will be able to see this item." + }, + "deleteSelectedItemsDesc": { + "message": "You have selected $COUNT$ item(s) to delete. Are you sure you want to delete all of these items?", + "placeholders": { + "count": { + "content": "$1", + "example": "150" + } + } + }, + "moveSelectedItemsDesc": { + "message": "Choose a folder that you would like to move the $COUNT$ selected item(s) to.", + "placeholders": { + "count": { + "content": "$1", + "example": "150" + } + } + }, + "moveSelectedItemsCountDesc": { + "message": "You have selected $COUNT$ item(s). $MOVEABLE_COUNT$ item(s) can be moved to an organization, $NONMOVEABLE_COUNT$ cannot.", + "placeholders": { + "count": { + "content": "$1", + "example": "10" + }, + "moveable_count": { + "content": "$2", + "example": "8" + }, + "nonmoveable_count": { + "content": "$3", + "example": "2" + } + } + }, + "verificationCodeTotp": { + "message": "Verification Code (TOTP)" + }, + "copyVerificationCode": { + "message": "Copy Verification Code" + }, + "warning": { + "message": "Warning" + }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, + "exportWarningDesc": { + "message": "This export contains your vault data in an unencrypted format. You should not store or send the exported file over unsecure channels (such as email). Delete it immediately after you are done using it." + }, + "encExportKeyWarningDesc": { + "message": "This export encrypts your data using your account's encryption key. If you ever rotate your account's encryption key you should export again since you will not be able to decrypt this export file." + }, + "encExportAccountWarningDesc": { + "message": "Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account." + }, + "export": { + "message": "Export" + }, + "exportVault": { + "message": "Export Vault" + }, + "fileFormat": { + "message": "File Format" + }, + "exportSuccess": { + "message": "Your vault data has been exported." + }, + "passwordGenerator": { + "message": "Password Generator" + }, + "minComplexityScore": { + "message": "Minimum Complexity Score" + }, + "minNumbers": { + "message": "Minimum Numbers" + }, + "minSpecial": { + "message": "Minimum Special", + "description": "Minimum Special Characters" + }, + "ambiguous": { + "message": "Avoid Ambiguous Characters" + }, + "regeneratePassword": { + "message": "Regenerate Password" + }, + "length": { + "message": "Length" + }, + "uppercase": { + "message": "Uppercase (A-Z)", + "description": "Include uppercase letters in the password generator." + }, + "lowercase": { + "message": "Lowercase (a-z)", + "description": "Include lowercase letters in the password generator." + }, + "numbers": { + "message": "Numbers (0-9)" + }, + "specialCharacters": { + "message": "Special Characters (!@#$%^&*)" + }, + "numWords": { + "message": "Number of Words" + }, + "wordSeparator": { + "message": "Word Separator" + }, + "capitalize": { + "message": "Capitalize", + "description": "Make the first letter of a work uppercase." + }, + "includeNumber": { + "message": "Include Number" + }, + "passwordHistory": { + "message": "Password History" + }, + "noPasswordsInList": { + "message": "There are no passwords to list." + }, + "clear": { + "message": "Clear", + "description": "To clear something out. example: To clear browser history." + }, + "accountUpdated": { + "message": "Account Updated" + }, + "changeEmail": { + "message": "Change Email" + }, + "changeEmailTwoFactorWarning": { + "message": "Proceeding will change your account email address. It will not change the email address used for two-factor authentication. You can change this email address in the Two-Step Login settings." + }, + "newEmail": { + "message": "New Email" + }, + "code": { + "message": "Code" + }, + "changeEmailDesc": { + "message": "We have emailed a verification code to $EMAIL$. Please check your email for this code and enter it below to finalize the email address change.", + "placeholders": { + "email": { + "content": "$1", + "example": "john.smith@example.com" + } + } + }, + "loggedOutWarning": { + "message": "Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + }, + "emailChanged": { + "message": "Email Changed" + }, + "logBackIn": { + "message": "Please log back in." + }, + "logBackInOthersToo": { + "message": "Please log back in. If you are using other Bitwarden applications log out and back in to those as well." + }, + "changeMasterPassword": { + "message": "Change Master Password" + }, + "masterPasswordChanged": { + "message": "Master Password Changed" + }, + "currentMasterPass": { + "message": "Current Master Password" + }, + "newMasterPass": { + "message": "New Master Password" + }, + "confirmNewMasterPass": { + "message": "Confirm New Master Password" + }, + "encKeySettings": { + "message": "Encryption Key Settings" + }, + "kdfAlgorithm": { + "message": "KDF Algorithm" + }, + "kdfIterations": { + "message": "KDF Iterations" + }, + "kdfIterationsDesc": { + "message": "Higher KDF iterations can help protect your master password from being brute forced by an attacker. We recommend a value of $VALUE$ or more.", + "placeholders": { + "value": { + "content": "$1", + "example": "100,000" + } + } + }, + "kdfIterationsWarning": { + "message": "Setting your KDF iterations too high could result in poor performance when logging into (and unlocking) Bitwarden on devices with slower CPUs. We recommend that you increase the value in increments of $INCREMENT$ and then test all of your devices.", + "placeholders": { + "increment": { + "content": "$1", + "example": "50,000" + } + } + }, + "changeKdf": { + "message": "Change KDF" + }, + "encKeySettingsChanged": { + "message": "Encryption Key Settings Changed" + }, + "dangerZone": { + "message": "Danger Zone" + }, + "dangerZoneDesc": { + "message": "Careful, these actions are not reversible!" + }, + "deauthorizeSessions": { + "message": "Deauthorize Sessions" + }, + "deauthorizeSessionsDesc": { + "message": "Concerned your account is logged in on another device? Proceed below to deauthorize all computers or devices that you have previously used. This security step is recommended if you previously used a public computer or accidentally saved your password on a device that isn't yours. This step will also clear all previously remembered two-step login sessions." + }, + "deauthorizeSessionsWarning": { + "message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if enabled. Active sessions on other devices may continue to remain active for up to one hour." + }, + "sessionsDeauthorized": { + "message": "All Sessions Deauthorized" + }, + "purgeVault": { + "message": "Purge Vault" + }, + "purgedOrganizationVault": { + "message": "Purged organization vault." + }, + "vaultAccessedByProvider": { + "message": "Vault accessed by provider." + }, + "purgeVaultDesc": { + "message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted." + }, + "purgeOrgVaultDesc": { + "message": "Proceed below to delete all items in the organization's vault." + }, + "purgeVaultWarning": { + "message": "Purging your vault is permanent. It cannot be undone." + }, + "vaultPurged": { + "message": "Your vault has been purged." + }, + "deleteAccount": { + "message": "Delete Account" + }, + "deleteAccountDesc": { + "message": "Proceed below to delete your account and all associated data." + }, + "deleteAccountWarning": { + "message": "Deleting your account is permanent. It cannot be undone." + }, + "accountDeleted": { + "message": "Account Deleted" + }, + "accountDeletedDesc": { + "message": "Your account has been closed and all associated data has been deleted." + }, + "myAccount": { + "message": "My Account" + }, + "tools": { + "message": "Tools" + }, + "importData": { + "message": "Import Data" + }, + "importError": { + "message": "Import Error" + }, + "importErrorDesc": { + "message": "There was a problem with the data you tried to import. Please resolve the errors listed below in your source file and try again." + }, + "importSuccess": { + "message": "Data has been successfully imported into your vault." + }, + "importWarning": { + "message": "You are importing data to $ORGANIZATION$. Your data may be shared with members of this organization. Do you want to proceed?", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "importFormatError": { + "message": "Data is not formatted correctly. Please check your import file and try again." + }, + "importNothingError": { + "message": "Nothing was imported." + }, + "importEncKeyError": { + "message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data." + }, + "selectFormat": { + "message": "Select the format of the import file" + }, + "selectImportFile": { + "message": "Select the import file" + }, + "orCopyPasteFileContents": { + "message": "or copy/paste the import file contents" + }, + "instructionsFor": { + "message": "$NAME$ Instructions", + "description": "The title for the import tool instructions.", + "placeholders": { + "name": { + "content": "$1", + "example": "LastPass (csv)" + } + } + }, + "options": { + "message": "Options" + }, + "preferences": { + "message": "Preferences" + }, + "preferencesDesc": { + "message": "Customize your web vault experience." + }, + "preferencesUpdated": { + "message": "Preferences updated" + }, + "language": { + "message": "Language" + }, + "languageDesc": { + "message": "Change the language used by the web vault." + }, + "enableFavicon": { + "message": "Show website icons" + }, + "faviconDesc": { + "message": "Show a recognizable image next to each login." + }, + "enableGravatars": { + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." + }, + "enableGravatarsDesc": { + "message": "Use avatar images loaded from gravatar.com." + }, + "enableFullWidth": { + "message": "Display full width layout", + "description": "Allows scaling the web vault UI's width" + }, + "enableFullWidthDesc": { + "message": "Allow the web vault to expand the full width of the browser window." + }, + "default": { + "message": "Default" + }, + "domainRules": { + "message": "Domain Rules" + }, + "domainRulesDesc": { + "message": "If you have the same login across multiple different website domains, you can mark the website as \"equivalent\". \"Global\" domains are ones already created for you by Bitwarden." + }, + "globalEqDomains": { + "message": "Global Equivalent Domains" + }, + "customEqDomains": { + "message": "Custom Equivalent Domains" + }, + "exclude": { + "message": "Exclude" + }, + "include": { + "message": "Include" + }, + "customize": { + "message": "Customize" + }, + "newCustomDomain": { + "message": "New Custom Domain" + }, + "newCustomDomainDesc": { + "message": "Enter a list of domains separated by commas. Only \"base\" domains are allowed. Do not enter subdomains. For example, enter \"google.com\" instead of \"www.google.com\". You can also enter \"androidapp://package.name\" to associate an android app with other website domains." + }, + "customDomainX": { + "message": "Custom Domain $INDEX$", + "placeholders": { + "index": { + "content": "$1", + "example": "2" + } + } + }, + "domainsUpdated": { + "message": "Domains updated" + }, + "twoStepLogin": { + "message": "Two-step Login" + }, + "twoStepLoginDesc": { + "message": "Secure your account by requiring an additional step when logging in." + }, + "twoStepLoginOrganizationDesc": { + "message": "Require two-step login for your organization's users by configuring providers at the organization level." + }, + "twoStepLoginRecoveryWarning": { + "message": "Enabling two-step login can permanently lock you out of your Bitwarden account. A recovery code allows you to access your account in the event that you can no longer use your normal two-step login provider (ex. you lose your device). Bitwarden support will not be able to assist you if you lose access to your account. We recommend you write down or print the recovery code and keep it in a safe place." + }, + "viewRecoveryCode": { + "message": "View Recovery Code" + }, + "providers": { + "message": "Providers", + "description": "Two-step login providers such as YubiKey, Duo, Authenticator apps, Email, etc." + }, + "enable": { + "message": "Enable" + }, + "enabled": { + "message": "Enabled" + }, + "activate": { + "message": "Activate" + }, + "premium": { + "message": "Premium", + "description": "Premium Membership" + }, + "premiumMembership": { + "message": "Premium Membership" + }, + "premiumRequired": { + "message": "Premium Required" + }, + "premiumRequiredDesc": { + "message": "A premium membership is required to use this feature." + }, + "youHavePremiumAccess": { + "message": "You have premium access" + }, + "alreadyPremiumFromOrg": { + "message": "You already have access to premium features because of an organization you are a member of." + }, + "manage": { + "message": "Manage" + }, + "disable": { + "message": "Disable" + }, + "deactivate": { + "message": "Deactivate" + }, + "twoStepLoginProviderEnabled": { + "message": "This two-step login provider is enabled on your account." + }, + "twoStepLoginAuthDesc": { + "message": "Enter your master password to modify two-step login settings." + }, + "twoStepAuthenticatorDesc": { + "message": "Follow these steps to set up two-step login with an authenticator app:" + }, + "twoStepAuthenticatorDownloadApp": { + "message": "Download a two-step authenticator app" + }, + "twoStepAuthenticatorNeedApp": { + "message": "Need a two-step authenticator app? Download one of the following" + }, + "iosDevices": { + "message": "iOS devices" + }, + "androidDevices": { + "message": "Android devices" + }, + "windowsDevices": { + "message": "Windows devices" + }, + "twoStepAuthenticatorAppsRecommended": { + "message": "These apps are recommended, however, other authenticator apps will also work." + }, + "twoStepAuthenticatorScanCode": { + "message": "Scan this QR code with your authenticator app" + }, + "key": { + "message": "Key" + }, + "twoStepAuthenticatorEnterCode": { + "message": "Enter the resulting 6 digit verification code from the app" + }, + "twoStepAuthenticatorReaddDesc": { + "message": "In case you need to add it to another device, below is the QR code (or key) required by your authenticator app." + }, + "twoStepDisableDesc": { + "message": "Are you sure you want to disable this two-step login provider?" + }, + "twoStepDisabled": { + "message": "Two-step login provider disabled." + }, + "twoFactorYubikeyAdd": { + "message": "Add a new YubiKey to your account" + }, + "twoFactorYubikeyPlugIn": { + "message": "Plug the YubiKey into your computer's USB port." + }, + "twoFactorYubikeySelectKey": { + "message": "Select the first empty YubiKey input field below." + }, + "twoFactorYubikeyTouchButton": { + "message": "Touch the YubiKey's button." + }, + "twoFactorYubikeySaveForm": { + "message": "Save the form." + }, + "twoFactorYubikeyWarning": { + "message": "Due to platform limitations, YubiKeys cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when YubiKeys cannot be used. Supported platforms:" + }, + "twoFactorYubikeySupportUsb": { + "message": "Web vault, desktop application, CLI, and all browser extensions on a device with a USB port that can accept your YubiKey." + }, + "twoFactorYubikeySupportMobile": { + "message": "Mobile apps on a device with NFC capabilities or a data port that can accept your YubiKey." + }, + "yubikeyX": { + "message": "YubiKey $INDEX$", + "placeholders": { + "index": { + "content": "$1", + "example": "2" + } + } + }, + "u2fkeyX": { + "message": "U2F Key $INDEX$", + "placeholders": { + "index": { + "content": "$1", + "example": "2" + } + } + }, + "webAuthnkeyX": { + "message": "WebAuthn Key $INDEX$", + "placeholders": { + "index": { + "content": "$1", + "example": "2" + } + } + }, + "nfcSupport": { + "message": "NFC Support" + }, + "twoFactorYubikeySupportsNfc": { + "message": "One of my keys supports NFC." + }, + "twoFactorYubikeySupportsNfcDesc": { + "message": "If one of your YubiKeys supports NFC (such as a YubiKey NEO), you will be prompted on mobile devices whenever NFC availability is detected." + }, + "yubikeysUpdated": { + "message": "YubiKeys updated" + }, + "disableAllKeys": { + "message": "Disable All Keys" + }, + "twoFactorDuoDesc": { + "message": "Enter the Bitwarden application information from your Duo Admin panel." + }, + "twoFactorDuoIntegrationKey": { + "message": "Integration Key" + }, + "twoFactorDuoSecretKey": { + "message": "Secret Key" + }, + "twoFactorDuoApiHostname": { + "message": "API Hostname" + }, + "twoFactorEmailDesc": { + "message": "Follow these steps to set up two-step login with email:" + }, + "twoFactorEmailEnterEmail": { + "message": "Enter the email that you wish to receive verification codes" + }, + "twoFactorEmailEnterCode": { + "message": "Enter the resulting 6 digit verification code from the email" + }, + "sendEmail": { + "message": "Send Email" + }, + "twoFactorU2fAdd": { + "message": "Add a FIDO U2F security key to your account" + }, + "removeU2fConfirmation": { + "message": "Are you sure you want to remove this security key?" + }, + "twoFactorWebAuthnAdd": { + "message": "Add a WebAuthn security key to your account" + }, + "readKey": { + "message": "Read Key" + }, + "keyCompromised": { + "message": "Key is compromised." + }, + "twoFactorU2fGiveName": { + "message": "Give the security key a friendly name to identify it." + }, + "twoFactorU2fPlugInReadKey": { + "message": "Plug the security key into your computer's USB port and click the \"Read Key\" button." + }, + "twoFactorU2fTouchButton": { + "message": "If the security key has a button, touch it." + }, + "twoFactorU2fSaveForm": { + "message": "Save the form." + }, + "twoFactorU2fWarning": { + "message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:" + }, + "twoFactorU2fSupportWeb": { + "message": "Web vault and browser extensions on a desktop/laptop with a U2F enabled browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F enabled)." + }, + "twoFactorU2fWaiting": { + "message": "Waiting for you to touch the button on your security key" + }, + "twoFactorU2fClickSave": { + "message": "Click the \"Save\" button below to enable this security key for two-step login." + }, + "twoFactorU2fProblemReadingTryAgain": { + "message": "There was a problem reading the security key. Try again." + }, + "twoFactorWebAuthnWarning": { + "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:" + }, + "twoFactorWebAuthnSupportWeb": { + "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn enabled browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F enabled)." + }, + "twoFactorRecoveryYourCode": { + "message": "Your Bitwarden two-step login recovery code" + }, + "twoFactorRecoveryNoCode": { + "message": "You have not enabled any two-step login providers yet. After you have enabled a two-step login provider you can check back here for your recovery code." + }, + "printCode": { + "message": "Print Code", + "description": "Print 2FA recovery code" + }, + "reports": { + "message": "Reports" + }, + "reportsDesc": { + "message": "Identify and close security gaps in your online accounts by clicking the reports below.", + "description": "Vault Health Reports can be used to evaluate the security of your Bitwarden Personal or Organization Vault." + }, + "unsecuredWebsitesReport": { + "message": "Unsecure Websites" + }, + "unsecuredWebsitesReportDesc": { + "message": "URLs that start with http:// don’t use the best available encryption. Change the Login URIs for these accounts to https:// for safer browsing." + }, + "unsecuredWebsitesFound": { + "message": "Unsecured Websites Found" + }, + "unsecuredWebsitesFoundDesc": { + "message": "We found $COUNT$ items in your vault with unsecured URIs. You should change their URI scheme to https:// if the website allows it.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "noUnsecuredWebsites": { + "message": "No items in your vault have unsecured URIs." + }, + "inactive2faReport": { + "message": "Inactive Two-step Login" + }, + "inactive2faReportDesc": { + "message": "Two-step Login adds a layer of protection to your accounts. Turn on Two-Step Login using Bitwarden Authenticator for these accounts or use an alternative method." + }, + "inactive2faFound": { + "message": "Logins Without 2FA Found" + }, + "inactive2faFoundDesc": { + "message": "We found $COUNT$ website(s) in your vault that may not be configured with two-factor authentication (according to 2fa.directory). To further protect these accounts, you should enable two-factor authentication.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "noInactive2fa": { + "message": "No websites were found in your vault with a missing two-factor authentication configuration." + }, + "instructions": { + "message": "Instructions" + }, + "exposedPasswordsReport": { + "message": "Exposed Passwords" + }, + "exposedPasswordsReportDesc": { + "message": "Passwords exposed in a data breach are easy targets for attackers. Change these passwords to prevent potential break-ins." + }, + "exposedPasswordsFound": { + "message": "Exposed Passwords Found" + }, + "exposedPasswordsFoundDesc": { + "message": "We found $COUNT$ items in your vault that have passwords that were exposed in known data breaches. You should change them to use a new password.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "noExposedPasswords": { + "message": "No items in your vault have passwords that have been exposed in known data breaches." + }, + "checkExposedPasswords": { + "message": "Check Exposed Passwords" + }, + "exposedXTimes": { + "message": "Exposed $COUNT$ time(s)", + "placeholders": { + "count": { + "content": "$1", + "example": "52" + } + } + }, + "weakPasswordsReport": { + "message": "Weak Passwords" + }, + "weakPasswordsReportDesc": { + "message": "Weak passwords can be easily guessed by attackers. Change these passwords to strong ones using the Password Generator." + }, + "weakPasswordsFound": { + "message": "Weak Passwords Found" + }, + "weakPasswordsFoundDesc": { + "message": "We found $COUNT$ items in your vault with passwords that are not strong. You should update them to use stronger passwords.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "noWeakPasswords": { + "message": "No items in your vault have weak passwords." + }, + "reusedPasswordsReport": { + "message": "Reused Passwords" + }, + "reusedPasswordsReportDesc": { + "message": "Reusing passwords makes it easier for attackers to break into multiple accounts. Change these passwords so that each is unique." + }, + "reusedPasswordsFound": { + "message": "Reused Passwords Found" + }, + "reusedPasswordsFoundDesc": { + "message": "We found $COUNT$ passwords that are being reused in your vault. You should change them to a unique value.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "noReusedPasswords": { + "message": "No logins in your vault have passwords that are being reused." + }, + "reusedXTimes": { + "message": "Reused $COUNT$ times", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "dataBreachReport": { + "message": "Data Breach" + }, + "breachDesc": { + "message": "Breached accounts can expose your personal information. Secure breached accounts by enabling 2FA or creating a stronger password." + }, + "breachCheckUsernameEmail": { + "message": "Check any usernames or email addresses that you use." + }, + "checkBreaches": { + "message": "Check Breaches" + }, + "breachUsernameNotFound": { + "message": "$USERNAME$ was not found in any known data breaches.", + "placeholders": { + "username": { + "content": "$1", + "example": "user@example.com" + } + } + }, + "goodNews": { + "message": "Good News", + "description": "ex. Good News, No Breached Accounts Found!" + }, + "breachUsernameFound": { + "message": "$USERNAME$ was found in $COUNT$ different data breaches online.", + "placeholders": { + "username": { + "content": "$1", + "example": "user@example.com" + }, + "count": { + "content": "$2", + "example": "7" + } + } + }, + "breachFound": { + "message": "Breached Accounts Found" + }, + "compromisedData": { + "message": "Compromised data" + }, + "website": { + "message": "Website" + }, + "affectedUsers": { + "message": "Affected Users" + }, + "breachOccurred": { + "message": "Breach Occurred" + }, + "breachReported": { + "message": "Breach Reported" + }, + "reportError": { + "message": "An error occurred trying to load the report. Try again" + }, + "billing": { + "message": "Billing" + }, + "accountCredit": { + "message": "Account Credit", + "description": "Financial term. In the case of Bitwarden, a positive balance means that you owe money, while a negative balance means that you have a credit (Bitwarden owes you money)." + }, + "accountBalance": { + "message": "Account Balance", + "description": "Financial term. In the case of Bitwarden, a positive balance means that you owe money, while a negative balance means that you have a credit (Bitwarden owes you money)." + }, + "addCredit": { + "message": "Add Credit", + "description": "Add more credit to your account's balance." + }, + "amount": { + "message": "Amount", + "description": "Dollar amount, or quantity." + }, + "creditDelayed": { + "message": "Added credit will appear on your account after the payment has been fully processed. Some payment methods are delayed and can take longer to process than others." + }, + "makeSureEnoughCredit": { + "message": "Please make sure that your account has enough credit available for this purchase. If your account does not have enough credit available, your default payment method on file will be used for the difference. You can add credit to your account from the Billing page." + }, + "creditAppliedDesc": { + "message": "Your account's credit can be used to make purchases. Any available credit will be automatically applied towards invoices generated for this account." + }, + "goPremium": { + "message": "Go Premium", + "description": "Another way of saying \"Get a premium membership\"" + }, + "premiumUpdated": { + "message": "You've upgraded to premium." + }, + "premiumUpgradeUnlockFeatures": { + "message": "Upgrade your account to a premium membership and unlock some great additional features." + }, + "premiumSignUpStorage": { + "message": "1 GB encrypted storage for file attachments." + }, + "premiumSignUpTwoStep": { + "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + }, + "premiumSignUpEmergency": { + "message": "Emergency Access" + }, + "premiumSignUpReports": { + "message": "Password hygiene, account health, and data breach reports to keep your vault safe." + }, + "premiumSignUpTotp": { + "message": "TOTP verification code (2FA) generator for logins in your vault." + }, + "premiumSignUpSupport": { + "message": "Priority customer support." + }, + "premiumSignUpFuture": { + "message": "All future premium features. More coming soon!" + }, + "premiumPrice": { + "message": "All for just $PRICE$ /year!", + "placeholders": { + "price": { + "content": "$1", + "example": "$10" + } + } + }, + "addons": { + "message": "Addons" + }, + "premiumAccess": { + "message": "Premium Access" + }, + "premiumAccessDesc": { + "message": "You can add premium access to all members of your organization for $PRICE$ /$INTERVAL$.", + "placeholders": { + "price": { + "content": "$1", + "example": "$3.33" + }, + "interval": { + "content": "$2", + "example": "'month' or 'year'" + } + } + }, + "additionalStorageGb": { + "message": "Additional Storage (GB)" + }, + "additionalStorageGbDesc": { + "message": "# of additional GB" + }, + "additionalStorageIntervalDesc": { + "message": "Your plan comes with $SIZE$ of encrypted file storage. You can add additional storage for $PRICE$ per GB /$INTERVAL$.", + "placeholders": { + "size": { + "content": "$1", + "example": "1 GB" + }, + "price": { + "content": "$2", + "example": "$4.00" + }, + "interval": { + "content": "$3", + "example": "'month' or 'year'" + } + } + }, + "summary": { + "message": "Summary" + }, + "total": { + "message": "Total" + }, + "year": { + "message": "year" + }, + "month": { + "message": "month" + }, + "monthAbbr": { + "message": "mo.", + "description": "Short abbreviation for 'month'" + }, + "paymentChargedAnnually": { + "message": "Your payment method will be charged immediately and then on a recurring basis each year. You may cancel at any time." + }, + "paymentCharged": { + "message": "Your payment method will be charged immediately and then on a recurring basis each $INTERVAL$. You may cancel at any time.", + "placeholders": { + "interval": { + "content": "$1", + "example": "month or year" + } + } + }, + "paymentChargedWithTrial": { + "message": "Your plan comes with a free 7 day trial. Your payment method will not be charged until the trial has ended. You may cancel at any time." + }, + "paymentInformation": { + "message": "Payment Information" + }, + "billingInformation": { + "message": "Billing Information" + }, + "creditCard": { + "message": "Credit Card" + }, + "paypalClickSubmit": { + "message": "Click the PayPal button to log into your PayPal account, then click the Submit button below to continue." + }, + "cancelSubscription": { + "message": "Cancel Subscription" + }, + "subscriptionCanceled": { + "message": "The subscription has been canceled." + }, + "pendingCancellation": { + "message": "Pending Cancellation" + }, + "subscriptionPendingCanceled": { + "message": "The subscription has been marked for cancellation at the end of the current billing period." + }, + "reinstateSubscription": { + "message": "Reinstate Subscription" + }, + "reinstateConfirmation": { + "message": "Are you sure you want to remove the pending cancellation request and reinstate your subscription?" + }, + "reinstated": { + "message": "The subscription has been reinstated." + }, + "cancelConfirmation": { + "message": "Are you sure you want to cancel? You will lose access to all of this subscription's features at the end of this billing cycle." + }, + "canceledSubscription": { + "message": "The subscription has been canceled." + }, + "neverExpires": { + "message": "Never Expires" + }, + "status": { + "message": "Status" + }, + "nextCharge": { + "message": "Next Charge" + }, + "details": { + "message": "Details" + }, + "downloadLicense": { + "message": "Download License" + }, + "updateLicense": { + "message": "Update License" + }, + "updatedLicense": { + "message": "Updated license" + }, + "manageSubscription": { + "message": "Manage Subscription" + }, + "storage": { + "message": "Storage" + }, + "addStorage": { + "message": "Add Storage" + }, + "removeStorage": { + "message": "Remove Storage" + }, + "subscriptionStorage": { + "message": "Your subscription has a total of $MAX_STORAGE$ GB of encrypted file storage. You are currently using $USED_STORAGE$.", + "placeholders": { + "max_storage": { + "content": "$1", + "example": "4" + }, + "used_storage": { + "content": "$2", + "example": "65 MB" + } + } + }, + "paymentMethod": { + "message": "Payment Method" + }, + "noPaymentMethod": { + "message": "No payment method on file." + }, + "addPaymentMethod": { + "message": "Add Payment Method" + }, + "changePaymentMethod": { + "message": "Change Payment Method" + }, + "invoices": { + "message": "Invoices" + }, + "noInvoices": { + "message": "No invoices." + }, + "paid": { + "message": "Paid", + "description": "Past tense status of an invoice. ex. Paid or unpaid." + }, + "unpaid": { + "message": "Unpaid", + "description": "Past tense status of an invoice. ex. Paid or unpaid." + }, + "transactions": { + "message": "Transactions", + "description": "Payment/credit transactions." + }, + "noTransactions": { + "message": "No transactions." + }, + "chargeNoun": { + "message": "Charge", + "description": "Noun. A charge from a payment method." + }, + "refundNoun": { + "message": "Refund", + "description": "Noun. A refunded payment that was charged." + }, + "chargesStatement": { + "message": "Any charges will appear on your statement as $STATEMENT_NAME$.", + "placeholders": { + "statement_name": { + "content": "$1", + "example": "BITWARDEN" + } + } + }, + "gbStorageAdd": { + "message": "GB of Storage To Add" + }, + "gbStorageRemove": { + "message": "GB of Storage To Remove" + }, + "storageAddNote": { + "message": "Adding storage will result in adjustments to your billing totals and immediately charge your payment method on file. The first charge will be prorated for the remainder of the current billing cycle." + }, + "storageRemoveNote": { + "message": "Removing storage will result in adjustments to your billing totals that will be prorated as credits toward your next billing charge." + }, + "adjustedStorage": { + "message": "Adjusted $AMOUNT$ GB of storage.", + "placeholders": { + "amount": { + "content": "$1", + "example": "5" + } + } + }, + "contactSupport": { + "message": "Contact Customer Support" + }, + "updatedPaymentMethod": { + "message": "Updated payment method." + }, + "purchasePremium": { + "message": "Purchase Premium" + }, + "licenseFile": { + "message": "License File" + }, + "licenseFileDesc": { + "message": "Your license file will be named something like $FILE_NAME$", + "placeholders": { + "file_name": { + "content": "$1", + "example": "bitwarden_premium_license.json" + } + } + }, + "uploadLicenseFilePremium": { + "message": "To upgrade your account to a premium membership you need to upload a valid license file." + }, + "uploadLicenseFileOrg": { + "message": "To create an on-premises hosted organization you need to upload a valid license file." + }, + "accountEmailMustBeVerified": { + "message": "Your account's email address must be verified." + }, + "newOrganizationDesc": { + "message": "Organizations allow you to share parts of your vault with others as well as manage related users for a specific entity such as a family, small team, or large company." + }, + "generalInformation": { + "message": "General Information" + }, + "organizationName": { + "message": "Organization Name" + }, + "accountOwnedBusiness": { + "message": "This account is owned by a business." + }, + "billingEmail": { + "message": "Billing Email" + }, + "businessName": { + "message": "Business Name" + }, + "chooseYourPlan": { + "message": "Choose Your Plan" + }, + "users": { + "message": "Users" + }, + "userSeats": { + "message": "User Seats" + }, + "additionalUserSeats": { + "message": "Additional User Seats" + }, + "userSeatsDesc": { + "message": "# of user seats" + }, + "userSeatsAdditionalDesc": { + "message": "Your plan comes with $BASE_SEATS$ user seats. You can add additional users for $SEAT_PRICE$ per user /month.", + "placeholders": { + "base_seats": { + "content": "$1", + "example": "5" + }, + "seat_price": { + "content": "$2", + "example": "$2.00" + } + } + }, + "userSeatsHowManyDesc": { + "message": "How many user seats do you need? You can also add additional seats later if needed." + }, + "planNameFree": { + "message": "Free", + "description": "Free as in 'free beer'." + }, + "planDescFree": { + "message": "For testing or personal users to share with $COUNT$ other user.", + "placeholders": { + "count": { + "content": "$1", + "example": "1" + } + } + }, + "planNameFamilies": { + "message": "Families" + }, + "planDescFamilies": { + "message": "For personal use, to share with family & friends." + }, + "planNameTeams": { + "message": "Teams" + }, + "planDescTeams": { + "message": "For businesses and other team organizations." + }, + "planNameEnterprise": { + "message": "Enterprise" + }, + "planDescEnterprise": { + "message": "For businesses and other large organizations." + }, + "freeForever": { + "message": "Free Forever" + }, + "includesXUsers": { + "message": "includes $COUNT$ users", + "placeholders": { + "count": { + "content": "$1", + "example": "5" + } + } + }, + "additionalUsers": { + "message": "Additional Users" + }, + "costPerUser": { + "message": "$COST$ per user", + "placeholders": { + "cost": { + "content": "$1", + "example": "$3" + } + } + }, + "limitedUsers": { + "message": "Limited to $COUNT$ users (including you)", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "limitedCollections": { + "message": "Limited to $COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "addShareLimitedUsers": { + "message": "Add and share with up to $COUNT$ users", + "placeholders": { + "count": { + "content": "$1", + "example": "5" + } + } + }, + "addShareUnlimitedUsers": { + "message": "Add and share with unlimited users" + }, + "createUnlimitedCollections": { + "message": "Create unlimited Collections" + }, + "gbEncryptedFileStorage": { + "message": "$SIZE$ encrypted file storage", + "placeholders": { + "size": { + "content": "$1", + "example": "1 GB" + } + } + }, + "onPremHostingOptional": { + "message": "On-premise hosting (optional)" + }, + "usersGetPremium": { + "message": "Users get access to Premium Features" + }, + "controlAccessWithGroups": { + "message": "Control user access with Groups" + }, + "syncUsersFromDirectory": { + "message": "Sync your users and Groups from a directory" + }, + "trackAuditLogs": { + "message": "Track user actions with audit logs" + }, + "enforce2faDuo": { + "message": "Enforce 2FA with Duo" + }, + "priorityCustomerSupport": { + "message": "Priority customer support" + }, + "xDayFreeTrial": { + "message": "$COUNT$ day free trial, cancel anytime", + "placeholders": { + "count": { + "content": "$1", + "example": "7" + } + } + }, + "monthly": { + "message": "Monthly" + }, + "annually": { + "message": "Annually" + }, + "basePrice": { + "message": "Base Price" + }, + "organizationCreated": { + "message": "Organization Created" + }, + "organizationReadyToGo": { + "message": "Your new organization is ready to go!" + }, + "organizationUpgraded": { + "message": "Your organization has been upgraded." + }, + "leave": { + "message": "Leave" + }, + "leaveOrganizationConfirmation": { + "message": "Are you sure you want to leave this organization?" + }, + "leftOrganization": { + "message": "You have left the organization." + }, + "defaultCollection": { + "message": "Default Collection" + }, + "getHelp": { + "message": "Get Help" + }, + "getApps": { + "message": "Get the Apps" + }, + "loggedInAs": { + "message": "Logged in as" + }, + "eventLogs": { + "message": "Event Logs" + }, + "people": { + "message": "People" + }, + "policies": { + "message": "Policies" + }, + "singleSignOn": { + "message": "Single Sign-On" + }, + "editPolicy": { + "message": "Edit Policy" + }, + "groups": { + "message": "Groups" + }, + "newGroup": { + "message": "New Group" + }, + "addGroup": { + "message": "Add Group" + }, + "editGroup": { + "message": "Edit Group" + }, + "deleteGroupConfirmation": { + "message": "Are you sure you want to delete this group?" + }, + "removeUserConfirmation": { + "message": "Are you sure you want to remove this user?" + }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, + "removeUserConfirmationKeyConnector": { + "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + }, + "externalId": { + "message": "External Id" + }, + "externalIdDesc": { + "message": "The external id can be used as a reference or to link this resource to an external system such as a user directory." + }, + "accessControl": { + "message": "Access Control" + }, + "groupAccessAllItems": { + "message": "This group can access and modify all items." + }, + "groupAccessSelectedCollections": { + "message": "This group can access only the selected collections." + }, + "readOnly": { + "message": "Read Only" + }, + "newCollection": { + "message": "New Collection" + }, + "addCollection": { + "message": "Add Collection" + }, + "editCollection": { + "message": "Edit Collection" + }, + "deleteCollectionConfirmation": { + "message": "Are you sure you want to delete this collection?" + }, + "editUser": { + "message": "Edit User" + }, + "inviteUser": { + "message": "Invite User" + }, + "inviteUserDesc": { + "message": "Invite a new user to your organization by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." + }, + "inviteMultipleEmailDesc": { + "message": "You can invite up to $COUNT$ users at a time by comma separating a list of email addresses.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "userUsingTwoStep": { + "message": "This user is using two-step login to protect their account." + }, + "userAccessAllItems": { + "message": "This user can access and modify all items." + }, + "userAccessSelectedCollections": { + "message": "This user can access only the selected collections." + }, + "search": { + "message": "Search" + }, + "invited": { + "message": "Invited" + }, + "accepted": { + "message": "Accepted" + }, + "confirmed": { + "message": "Confirmed" + }, + "clientOwnerEmail": { + "message": "Client Owner Email" + }, + "owner": { + "message": "Owner" + }, + "ownerDesc": { + "message": "The highest access user that can manage all aspects of your organization." + }, + "clientOwnerDesc": { + "message": "This user should be independent of the Provider. If the Provider is disassociated with the organization, this user will maintain ownership of the organization." + }, + "admin": { + "message": "Admin" + }, + "adminDesc": { + "message": "Admins can access and manage all items, collections and users in your organization." + }, + "user": { + "message": "User" + }, + "userDesc": { + "message": "A regular user with access to assigned collections in your organization." + }, + "manager": { + "message": "Manager" + }, + "managerDesc": { + "message": "Managers can access and manage assigned collections in your organization." + }, + "all": { + "message": "All" + }, + "refresh": { + "message": "Refresh" + }, + "timestamp": { + "message": "Timestamp" + }, + "event": { + "message": "Event" + }, + "unknown": { + "message": "Unknown" + }, + "loadMore": { + "message": "Load More" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web Vault" + }, + "loggedIn": { + "message": "Logged in." + }, + "changedPassword": { + "message": "Changed account password." + }, + "enabledUpdated2fa": { + "message": "Enabled/updated two-step login." + }, + "disabled2fa": { + "message": "Disabled two-step login." + }, + "recovered2fa": { + "message": "Recovered account from two-step login." + }, + "failedLogin": { + "message": "Login attempt failed with incorrect password." + }, + "failedLogin2fa": { + "message": "Login attempt failed with incorrect two-step login." + }, + "exportedVault": { + "message": "Exported vault." + }, + "exportedOrganizationVault": { + "message": "Exported organization vault." + }, + "editedOrgSettings": { + "message": "Edited organization settings." + }, + "createdItemId": { + "message": "Created item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "editedItemId": { + "message": "Edited item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "deletedItemId": { + "message": "Sent item $ID$ to trash.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "movedItemIdToOrg": { + "message": "Moved item $ID$ to an organization.", + "placeholders": { + "id": { + "content": "$1", + "example": "'Google'" + } + } + }, + "viewedItemId": { + "message": "Viewed item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "viewedPasswordItemId": { + "message": "Viewed password for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "viewedHiddenFieldItemId": { + "message": "Viewed hidden field for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "viewedSecurityCodeItemId": { + "message": "Viewed security code for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "copiedPasswordItemId": { + "message": "Copied password for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "copiedHiddenFieldItemId": { + "message": "Copied hidden field for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "copiedSecurityCodeItemId": { + "message": "Copied security code for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "autofilledItemId": { + "message": "Auto-filled item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "createdCollectionId": { + "message": "Created collection $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Server Passwords" + } + } + }, + "editedCollectionId": { + "message": "Edited collection $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Server Passwords" + } + } + }, + "deletedCollectionId": { + "message": "Deleted collection $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Server Passwords" + } + } + }, + "editedPolicyId": { + "message": "Edited policy $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Master Password" + } + } + }, + "createdGroupId": { + "message": "Created group $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Developers" + } + } + }, + "editedGroupId": { + "message": "Edited group $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Developers" + } + } + }, + "deletedGroupId": { + "message": "Deleted group $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Developers" + } + } + }, + "removedUserId": { + "message": "Removed user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "createdAttachmentForItem": { + "message": "Created attachment for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "deletedAttachmentForItem": { + "message": "Deleted attachment for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "editedCollectionsForItem": { + "message": "Edited collections for item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "invitedUserId": { + "message": "Invited user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "confirmedUserId": { + "message": "Confirmed user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "editedUserId": { + "message": "Edited user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "editedGroupsForUser": { + "message": "Edited groups for user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "unlinkedSsoUser": { + "message": "Unlinked SSO for user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "createdOrganizationId": { + "message": "Created organization $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "addedOrganizationId": { + "message": "Added organization $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "removedOrganizationId": { + "message": "Removed organization $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "accessedClientVault": { + "message": "Accessed $ID$ organization vault.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "device": { + "message": "Device" + }, + "view": { + "message": "View" + }, + "invalidDateRange": { + "message": "Invalid date range." + }, + "errorOccurred": { + "message": "An error has occurred." + }, + "userAccess": { + "message": "User Access" + }, + "userType": { + "message": "User Type" + }, + "groupAccess": { + "message": "Group Access" + }, + "groupAccessUserDesc": { + "message": "Edit the groups that this user belongs to." + }, + "invitedUsers": { + "message": "Invited user(s)." + }, + "resendInvitation": { + "message": "Resend Invitation" + }, + "resendEmail": { + "message": "Resend Email" + }, + "hasBeenReinvited": { + "message": "$USER$ has been reinvited.", + "placeholders": { + "user": { + "content": "$1", + "example": "John Smith" + } + } + }, + "confirm": { + "message": "Confirm" + }, + "confirmUser": { + "message": "Confirm User" + }, + "hasBeenConfirmed": { + "message": "$USER$ has been confirmed.", + "placeholders": { + "user": { + "content": "$1", + "example": "John Smith" + } + } + }, + "confirmUsers": { + "message": "Confirm Users" + }, + "usersNeedConfirmed": { + "message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the organization until they are confirmed." + }, + "startDate": { + "message": "Start Date" + }, + "endDate": { + "message": "End Date" + }, + "verifyEmail": { + "message": "Verify Email" + }, + "verifyEmailDesc": { + "message": "Verify your account's email address to unlock access to all features." + }, + "verifyEmailFirst": { + "message": "Your account's email address first must be verified." + }, + "checkInboxForVerification": { + "message": "Check your email inbox for a verification link." + }, + "emailVerified": { + "message": "Your email has been verified." + }, + "emailVerifiedFailed": { + "message": "Unable to verify your email. Try sending a new verification email." + }, + "emailVerificationRequired": { + "message": "Email Verification Required" + }, + "emailVerificationRequiredDesc": { + "message": "You must verify your email to use this feature." + }, + "updateBrowser": { + "message": "Update Browser" + }, + "updateBrowserDesc": { + "message": "You are using an unsupported web browser. The web vault may not function properly." + }, + "joinOrganization": { + "message": "Join Organization" + }, + "joinOrganizationDesc": { + "message": "You've been invited to join the organization listed above. To accept the invitation, you need to log in or create a new Bitwarden account." + }, + "inviteAccepted": { + "message": "Invitation Accepted" + }, + "inviteAcceptedDesc": { + "message": "You can access this organization once an administrator confirms your membership. We'll send you an email when that happens." + }, + "inviteAcceptFailed": { + "message": "Unable to accept invitation. Ask an organization admin to send a new invitation." + }, + "inviteAcceptFailedShort": { + "message": "Unable to accept invitation. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must enable 2FA on your user account before you can join this organization." + } + } + }, + "rememberEmail": { + "message": "Remember email" + }, + "recoverAccountTwoStepDesc": { + "message": "If you cannot access your account through your normal two-step login methods, you can use your two-step login recovery code to disable all two-step providers on your account." + }, + "recoverAccountTwoStep": { + "message": "Recover Account Two-Step Login" + }, + "twoStepRecoverDisabled": { + "message": "Two-step login has been disabled on your account." + }, + "learnMore": { + "message": "Learn more" + }, + "deleteRecoverDesc": { + "message": "Enter your email address below to recover and delete your account." + }, + "deleteRecoverEmailSent": { + "message": "If your account exists, we've sent you an email with further instructions." + }, + "deleteRecoverConfirmDesc": { + "message": "You have requested to delete your Bitwarden account. Click the button below to confirm." + }, + "myOrganization": { + "message": "My Organization" + }, + "deleteOrganization": { + "message": "Delete Organization" + }, + "deletingOrganizationContentWarning": { + "message": "Enter the master password to confirm deletion of $ORGANIZATION$ and all associated data. Vault data in $ORGANIZATION$ includes:", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "deletingOrganizationActiveUserAccountsWarning": { + "message": "User accounts will remain active after deletion but will no longer be associated to this organization." + }, + "deletingOrganizationIsPermanentWarning": { + "message": "Deleting $ORGANIZATION$ is permanent and irreversible.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "organizationDeleted": { + "message": "Organization Deleted" + }, + "organizationDeletedDesc": { + "message": "The organization and all associated data has been deleted." + }, + "organizationUpdated": { + "message": "Organization updated" + }, + "taxInformation": { + "message": "Tax Information" + }, + "taxInformationDesc": { + "message": "For customers within the US, ZIP code is required to satisfy sales tax requirements, for other countries you may optionally provide a tax identification number (VAT/GST) and/or address to appear on your invoices." + }, + "billingPlan": { + "message": "Plan", + "description": "A billing plan/package. For example: families, teams, enterprise, etc." + }, + "changeBillingPlan": { + "message": "Upgrade Plan", + "description": "A billing plan/package. For example: families, teams, enterprise, etc." + }, + "changeBillingPlanUpgrade": { + "message": "Upgrade your account to another plan by providing the information below. Please ensure that you have an active payment method added to the account.", + "description": "A billing plan/package. For example: families, teams, enterprise, etc." + }, + "invoiceNumber": { + "message": "Invoice #$NUMBER$", + "description": "ex. Invoice #79C66F0-0001", + "placeholders": { + "number": { + "content": "$1", + "example": "79C66F0-0001" + } + } + }, + "viewInvoice": { + "message": "View Invoice" + }, + "downloadInvoice": { + "message": "Download Invoice" + }, + "verifyBankAccount": { + "message": "Verify Bank Account" + }, + "verifyBankAccountDesc": { + "message": "We have made two micro-deposits to your bank account (it may take 1-2 business days to show up). Enter these amounts to verify the bank account." + }, + "verifyBankAccountInitialDesc": { + "message": "Payment with a bank account is only available to customers in the United States. You will be required to verify your bank account. We will make two micro-deposits within the next 1-2 business days. Enter these amounts on the organization's billing page to verify the bank account." + }, + "verifyBankAccountFailureWarning": { + "message": "Failure to verify the bank account will result in a missed payment and your subscription being disabled." + }, + "verifiedBankAccount": { + "message": "Bank account has been verified." + }, + "bankAccount": { + "message": "Bank Account" + }, + "amountX": { + "message": "Amount $COUNT$", + "description": "Used in bank account verification of micro-deposits. Amount, as in a currency amount. Ex. Amount 1 is $2.00, Amount 2 is $1.50", + "placeholders": { + "count": { + "content": "$1", + "example": "1" + } + } + }, + "routingNumber": { + "message": "Routing Number", + "description": "Bank account routing number" + }, + "accountNumber": { + "message": "Account Number" + }, + "accountHolderName": { + "message": "Account Holder Name" + }, + "bankAccountType": { + "message": "Account Type" + }, + "bankAccountTypeCompany": { + "message": "Company (Business)" + }, + "bankAccountTypeIndividual": { + "message": "Individual (Personal)" + }, + "enterInstallationId": { + "message": "Enter your installation id" + }, + "limitSubscriptionDesc": { + "message": "Set a seat limit for your subscription. Once this limit is reached, you will not be able to invite new users." + }, + "maxSeatLimit": { + "message": "Maximum Seat Limit (optional)", + "description": "Upper limit of seats to allow through autoscaling" + }, + "maxSeatCost": { + "message": "Max potential seat cost" + }, + "addSeats": { + "message": "Add Seats", + "description": "Seat = User Seat" + }, + "removeSeats": { + "message": "Remove Seats", + "description": "Seat = User Seat" + }, + "subscriptionDesc": { + "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users." + }, + "subscriptionUserSeats": { + "message": "Your subscription allows for a total of $COUNT$ users.", + "placeholders": { + "count": { + "content": "$1", + "example": "50" + } + } + }, + "limitSubscription": { + "message": "Limit Subscription (Optional)" + }, + "subscriptionSeats": { + "message": "Subscription Seats" + }, + "subscriptionUpdated": { + "message": "Subscription updated" + }, + "additionalOptions": { + "message": "Additional Options" + }, + "additionalOptionsDesc": { + "message": "For additional help in managing your subscription, please contact Customer Support." + }, + "subscriptionUserSeatsUnlimitedAutoscale": { + "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users." + }, + "subscriptionUserSeatsLimitedAutoscale": { + "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users until your $MAX$ seat limit is reached.", + "placeholders": { + "max": { + "content": "$1", + "example": "50" + } + } + }, + "subscriptionFreePlan": { + "message": "You cannot invite more than $COUNT$ users without upgrading your plan.", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "subscriptionFamiliesPlan": { + "message": "You cannot invite more than $COUNT$ users without upgrading your plan. Please contact Customer Support to upgrade.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, + "subscriptionSponsoredFamiliesPlan": { + "message": "Your subscription allows for a total of $COUNT$ users. Your plan is sponsored and billed to an external organization.", + "placeholders": { + "count": { + "content": "$1", + "example": "6" + } + } + }, + "subscriptionMaxReached": { + "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ users without increasing your subscription seats.", + "placeholders": { + "count": { + "content": "$1", + "example": "50" + } + } + }, + "seatsToAdd": { + "message": "Seats To Add" + }, + "seatsToRemove": { + "message": "Seats To Remove" + }, + "seatsAddNote": { + "message": "Adding user seats will result in adjustments to your billing totals and immediately charge your payment method on file. The first charge will be prorated for the remainder of the current billing cycle." + }, + "seatsRemoveNote": { + "message": "Removing user seats will result in adjustments to your billing totals that will be prorated as credits toward your next billing charge." + }, + "adjustedSeats": { + "message": "Adjusted $AMOUNT$ user seats.", + "placeholders": { + "amount": { + "content": "$1", + "example": "15" + } + } + }, + "keyUpdated": { + "message": "Key Updated" + }, + "updateKeyTitle": { + "message": "Update Key" + }, + "updateEncryptionKey": { + "message": "Update Encryption Key" + }, + "updateEncryptionKeyShortDesc": { + "message": "You are currently using an outdated encryption scheme." + }, + "updateEncryptionKeyDesc": { + "message": "We've moved to larger encryption keys that provide better security and access to newer features. Updating your encryption key is quick and easy. Just type your master password below. This update will eventually become mandatory." + }, + "updateEncryptionKeyWarning": { + "message": "After updating your encryption key, you are required to log out and back in to all Bitwarden applications that you are currently using (such as the mobile app or browser extensions). Failure to log out and back in (which downloads your new encryption key) may result in data corruption. We will attempt to log you out automatically, however, it may be delayed." + }, + "updateEncryptionKeyExportWarning": { + "message": "Any encrypted exports that you have saved will also become invalid." + }, + "subscription": { + "message": "Subscription" + }, + "loading": { + "message": "Loading" + }, + "upgrade": { + "message": "Upgrade" + }, + "upgradeOrganization": { + "message": "Upgrade Organization" + }, + "upgradeOrganizationDesc": { + "message": "This feature is not available for free organizations. Switch to a paid plan to unlock more features." + }, + "createOrganizationStep1": { + "message": "Create Organization: Step 1" + }, + "createOrganizationCreatePersonalAccount": { + "message": "Before creating your organization, you first need to create a free personal account." + }, + "refunded": { + "message": "Refunded" + }, + "nothingSelected": { + "message": "You have not selected anything." + }, + "acceptPolicies": { + "message": "By checking this box you agree to the following:" + }, + "acceptPoliciesError": { + "message": "Terms of Service and Privacy Policy have not been acknowledged." + }, + "termsOfService": { + "message": "Terms of Service" + }, + "privacyPolicy": { + "message": "Privacy Policy" + }, + "filters": { + "message": "Filters" + }, + "vaultTimeout": { + "message": "Vault timeout" + }, + "vaultTimeoutDesc": { + "message": "Choose when your vault will take the vault timeout action." + }, + "oneMinute": { + "message": "1 minute" + }, + "fiveMinutes": { + "message": "5 minutes" + }, + "fifteenMinutes": { + "message": "15 minutes" + }, + "thirtyMinutes": { + "message": "30 minutes" + }, + "oneHour": { + "message": "1 hour" + }, + "fourHours": { + "message": "4 hours" + }, + "onRefresh": { + "message": "On browser refresh" + }, + "dateUpdated": { + "message": "Updated", + "description": "ex. Date this item was updated" + }, + "datePasswordUpdated": { + "message": "Password Updated", + "description": "ex. Date this password was updated" + }, + "organizationIsDisabled": { + "message": "Organization is disabled." + }, + "licenseIsExpired": { + "message": "License is expired." + }, + "updatedUsers": { + "message": "Updated users" + }, + "selected": { + "message": "Selected" + }, + "ownership": { + "message": "Ownership" + }, + "whoOwnsThisItem": { + "message": "Who owns this item?" + }, + "strong": { + "message": "Strong", + "description": "ex. A strong password. Scale: Very Weak -> Weak -> Good -> Strong" + }, + "good": { + "message": "Good", + "description": "ex. A good password. Scale: Very Weak -> Weak -> Good -> Strong" + }, + "weak": { + "message": "Weak", + "description": "ex. A weak password. Scale: Very Weak -> Weak -> Good -> Strong" + }, + "veryWeak": { + "message": "Very Weak", + "description": "ex. A very weak password. Scale: Very Weak -> Weak -> Good -> Strong" + }, + "weakMasterPassword": { + "message": "Weak Master Password" + }, + "weakMasterPasswordDesc": { + "message": "The master password you have chosen is weak. You should use a strong master password (or a passphrase) to properly protect your Bitwarden account. Are you sure you want to use this master password?" + }, + "rotateAccountEncKey": { + "message": "Also rotate my account's encryption key" + }, + "rotateEncKeyTitle": { + "message": "Rotate Encryption Key" + }, + "rotateEncKeyConfirmation": { + "message": "Are you sure you want to rotate your account's encryption key?" + }, + "attachmentsNeedFix": { + "message": "This item has old file attachments that need to be fixed." + }, + "attachmentFixDesc": { + "message": "This is an old file attachment the needs to be fixed. Click to learn more." + }, + "fix": { + "message": "Fix", + "description": "This is a verb. ex. 'Fix The Car'" + }, + "oldAttachmentsNeedFixDesc": { + "message": "There are old file attachments in your vault that need to be fixed before you can rotate your account's encryption key." + }, + "yourAccountsFingerprint": { + "message": "Your account's fingerprint phrase", + "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." + }, + "fingerprintEnsureIntegrityVerify": { + "message": "To ensure the integrity of your encryption keys, please verify the user's fingerprint phrase before continuing.", + "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." + }, + "dontAskFingerprintAgain": { + "message": "Never prompt to verify fingerprint phrases for invited users (Not recommended)", + "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." + }, + "free": { + "message": "Free", + "description": "Free, as in 'Free beer'" + }, + "apiKey": { + "message": "API Key" + }, + "apiKeyDesc": { + "message": "Your API key can be used to authenticate to the Bitwarden public API." + }, + "apiKeyRotateDesc": { + "message": "Rotating the API key will invalidate the previous key. You can rotate your API key if you believe that the current key is no longer safe to use." + }, + "apiKeyWarning": { + "message": "Your API key has full access to the organization. It should be kept secret." + }, + "userApiKeyDesc": { + "message": "Your API key can be used to authenticate in the Bitwarden CLI." + }, + "userApiKeyWarning": { + "message": "Your API key is an alternative authentication mechanism. It should be kept secret." + }, + "oauth2ClientCredentials": { + "message": "OAuth 2.0 Client Credentials", + "description": "'OAuth 2.0' is a programming protocol. It should probably not be translated." + }, + "viewApiKey": { + "message": "View API Key" + }, + "rotateApiKey": { + "message": "Rotate API Key" + }, + "selectOneCollection": { + "message": "You must select at least one collection." + }, + "couldNotChargeCardPayInvoice": { + "message": "We were not able to charge your card. Please view and pay the unpaid invoice listed below." + }, + "inAppPurchase": { + "message": "In-app Purchase" + }, + "cannotPerformInAppPurchase": { + "message": "You cannot perform this action while using an in-app purchase payment method." + }, + "manageSubscriptionFromStore": { + "message": "You must manage your subscription from the store where your in-app purchase was made." + }, + "minLength": { + "message": "Minimum Length" + }, + "clone": { + "message": "Clone" + }, + "masterPassPolicyDesc": { + "message": "Set minimum requirements for master password strength." + }, + "twoStepLoginPolicyDesc": { + "message": "Require users to set up two-step login on their personal accounts." + }, + "twoStepLoginPolicyWarning": { + "message": "Organization members who are not Owners or Administrators and do not have two-step login enabled for their personal account will be removed from the organization and will receive an email notifying them about the change." + }, + "twoStepLoginPolicyUserWarning": { + "message": "You are a member of an organization that requires two-step login to be enabled on your user account. If you disable all two-step login providers you will be automatically removed from these organizations." + }, + "passwordGeneratorPolicyDesc": { + "message": "Set minimum requirements for password generator configuration." + }, + "passwordGeneratorPolicyInEffect": { + "message": "One or more organization policies are affecting your generator settings." + }, + "masterPasswordPolicyInEffect": { + "message": "One or more organization policies require your master password to meet the following requirements:" + }, + "policyInEffectMinComplexity": { + "message": "Minimum complexity score of $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, + "policyInEffectMinLength": { + "message": "Minimum length of $LENGTH$", + "placeholders": { + "length": { + "content": "$1", + "example": "14" + } + } + }, + "policyInEffectUppercase": { + "message": "Contain one or more uppercase characters" + }, + "policyInEffectLowercase": { + "message": "Contain one or more lowercase characters" + }, + "policyInEffectNumbers": { + "message": "Contain one or more numbers" + }, + "policyInEffectSpecial": { + "message": "Contain one or more of the following special characters $CHARS$", + "placeholders": { + "chars": { + "content": "$1", + "example": "!@#$%^&*" + } + } + }, + "masterPasswordPolicyRequirementsNotMet": { + "message": "Your new master password does not meet the policy requirements." + }, + "minimumNumberOfWords": { + "message": "Minimum Number of Words" + }, + "defaultType": { + "message": "Default Type" + }, + "userPreference": { + "message": "User Preference" + }, + "vaultTimeoutAction": { + "message": "Vault timeout action" + }, + "vaultTimeoutActionLockDesc": { + "message": "Master password or other unlock method is required to access your vault again." + }, + "vaultTimeoutActionLogOutDesc": { + "message": "Re-authentication is required to access your vault again." + }, + "lock": { + "message": "Lock", + "description": "Verb form: to make secure or inaccesible by" + }, + "trash": { + "message": "Trash", + "description": "Noun: A special folder for holding deleted items that have not yet been permanently deleted" + }, + "searchTrash": { + "message": "Search Trash" + }, + "permanentlyDelete": { + "message": "Permanently Delete" + }, + "permanentlyDeleteSelected": { + "message": "Permanently Delete Selected" + }, + "permanentlyDeleteItem": { + "message": "Permanently Delete Item" + }, + "permanentlyDeleteItemConfirmation": { + "message": "Are you sure you want to permanently delete this item?" + }, + "permanentlyDeletedItem": { + "message": "Permanently Deleted item" + }, + "permanentlyDeletedItems": { + "message": "Permanently Deleted items" + }, + "permanentlyDeleteSelectedItemsDesc": { + "message": "You have selected $COUNT$ item(s) to permanently delete. Are you sure you want to permanently delete all of these items?", + "placeholders": { + "count": { + "content": "$1", + "example": "150" + } + } + }, + "permanentlyDeletedItemId": { + "message": "Permanently Deleted item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "restore": { + "message": "Restore" + }, + "restoreSelected": { + "message": "Restore Selected" + }, + "restoreItem": { + "message": "Restore Item" + }, + "restoredItem": { + "message": "Restored Item" + }, + "restoredItems": { + "message": "Restored Items" + }, + "restoreItemConfirmation": { + "message": "Are you sure you want to restore this item?" + }, + "restoreItems": { + "message": "Restore items" + }, + "restoreSelectedItemsDesc": { + "message": "You have selected $COUNT$ item(s) to restore. Are you sure you want to restore all of these items?", + "placeholders": { + "count": { + "content": "$1", + "example": "150" + } + } + }, + "restoredItemId": { + "message": "Restored item $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Google" + } + } + }, + "vaultTimeoutLogOutConfirmation": { + "message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?" + }, + "vaultTimeoutLogOutConfirmationTitle": { + "message": "Timeout Action Confirmation" + }, + "hidePasswords": { + "message": "Hide Passwords" + }, + "countryPostalCodeRequiredDesc": { + "message": "We require this information for calculating sales tax and financial reporting only." + }, + "includeVAT": { + "message": "Include VAT/GST Information (optional)" + }, + "taxIdNumber": { + "message": "VAT/GST Tax ID" + }, + "taxInfoUpdated": { + "message": "Tax information updated." + }, + "setMasterPassword": { + "message": "Set Master Password" + }, + "ssoCompleteRegistration": { + "message": "In order to complete logging in with SSO, please set a master password to access and protect your vault." + }, + "identifier": { + "message": "Identifier" + }, + "organizationIdentifier": { + "message": "Organization Identifier" + }, + "ssoLogInWithOrgIdentifier": { + "message": "Log in using your organization's single sign-on portal. Please enter your organization's identifier to begin." + }, + "enterpriseSingleSignOn": { + "message": "Enterprise Single Sign-On" + }, + "ssoHandOff": { + "message": "You may now close this tab and continue in the extension." + }, + "includeAllTeamsFeatures": { + "message": "All Teams features, plus:" + }, + "includeSsoAuthentication": { + "message": "SSO Authentication via SAML2.0 and OpenID Connect" + }, + "includeEnterprisePolicies": { + "message": "Enterprise Policies" + }, + "ssoValidationFailed": { + "message": "SSO Validation Failed" + }, + "ssoIdentifierRequired": { + "message": "Organization Identifier is required." + }, + "unlinkSso": { + "message": "Unlink SSO" + }, + "unlinkSsoConfirmation": { + "message": "Are you sure you want to unlink SSO for this organization?" + }, + "linkSso": { + "message": "Link SSO" + }, + "singleOrg": { + "message": "Single Organization" + }, + "singleOrgDesc": { + "message": "Restrict users from being able to join any other organizations." + }, + "singleOrgBlockCreateMessage": { + "message": "Your current organization has a policy that does not allow you to join more than one organization. Please contact your organization admins or sign up from a different Bitwarden account." + }, + "singleOrgPolicyWarning": { + "message": "Organization members who are not Owners or Administrators and are already a member of another organization will be removed from your organization." + }, + "requireSso": { + "message": "Single Sign-On Authentication" + }, + "requireSsoPolicyDesc": { + "message": "Require users to log in with the Enterprise Single Sign-On method." + }, + "prerequisite": { + "message": "Prerequisite" + }, + "requireSsoPolicyReq": { + "message": "The Single Organization enterprise policy must be enabled before activating this policy." + }, + "requireSsoPolicyReqError": { + "message": "Single Organization policy not enabled." + }, + "requireSsoExemption": { + "message": "Organization Owners and Administrators are exempt from this policy's enforcement." + }, + "sendTypeFile": { + "message": "File" + }, + "sendTypeText": { + "message": "Text" + }, + "createSend": { + "message": "Create New Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editSend": { + "message": "Edit Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createdSend": { + "message": "Created Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editedSend": { + "message": "Edited Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deletedSend": { + "message": "Deleted Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deleteSend": { + "message": "Delete Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deleteSendConfirmation": { + "message": "Are you sure you want to delete this Send?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "whatTypeOfSend": { + "message": "What type of Send is this?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deletionDate": { + "message": "Deletion Date" + }, + "deletionDateDesc": { + "message": "The Send will be permanently deleted on the specified date and time.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "expirationDate": { + "message": "Expiration Date" + }, + "expirationDateDesc": { + "message": "If set, access to this Send will expire on the specified date and time.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "maxAccessCount": { + "message": "Maximum Access Count" + }, + "maxAccessCountDesc": { + "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "currentAccessCount": { + "message": "Current Access Count" + }, + "sendPasswordDesc": { + "message": "Optionally require a password for users to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendNotesDesc": { + "message": "Private notes about this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "disabled": { + "message": "Disabled" + }, + "deactivated": { + "message": "Deactivated" + }, + "sendLink": { + "message": "Send link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "copySendLink": { + "message": "Copy Send Link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "removePassword": { + "message": "Remove Password" + }, + "removedPassword": { + "message": "Removed Password" + }, + "removePasswordConfirmation": { + "message": "Are you sure you want to remove the password?" + }, + "hideEmail": { + "message": "Hide my email address from recipients." + }, + "disableThisSend": { + "message": "Disable this Send so that no one can access it.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "allSends": { + "message": "All Sends" + }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, + "pendingDeletion": { + "message": "Pending deletion" + }, + "expired": { + "message": "Expired" + }, + "searchSends": { + "message": "Search Sends", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendProtectedPassword": { + "message": "This Send is protected with a password. Please type the password below to continue.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendProtectedPasswordDontKnow": { + "message": "Don't know the password? Ask the Sender for the password needed to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendHiddenByDefault": { + "message": "This send is hidden by default. You can toggle its visibility using the button below.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "downloadFile": { + "message": "Download File" + }, + "sendAccessUnavailable": { + "message": "The Send you are trying to access does not exist or is no longer available.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "missingSendFile": { + "message": "The file associated with this Send could not be found.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "noSendsInList": { + "message": "There are no Sends to list.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "emergencyAccess": { + "message": "Emergency Access" + }, + "emergencyAccessDesc": { + "message": "Grant and manage emergency access for trusted contacts. Trusted contacts may request access to either View or Takeover your account in case of an emergency. Visit our help page for more information and details into how zero knowledge sharing works." + }, + "emergencyAccessOwnerWarning": { + "message": "You are an Owner of one or more organizations. If you give takeover access to an emergency contact, they will be able to use all your permissions as Owner after a takeover." + }, + "trustedEmergencyContacts": { + "message": "Trusted emergency contacts" + }, + "noTrustedContacts": { + "message": "You have not added any emergency contacts yet, invite a trusted contact to get started." + }, + "addEmergencyContact": { + "message": "Add emergency contact" + }, + "designatedEmergencyContacts": { + "message": "Designated as emergency contact" + }, + "noGrantedAccess": { + "message": "You have not been designated as an emergency contact for anyone yet." + }, + "inviteEmergencyContact": { + "message": "Invite emergency contact" + }, + "editEmergencyContact": { + "message": "Edit emergency contact" + }, + "inviteEmergencyContactDesc": { + "message": "Invite a new emergency contact by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." + }, + "emergencyAccessRecoveryInitiated": { + "message": "Emergency Access Initiated" + }, + "emergencyAccessRecoveryApproved": { + "message": "Emergency Access Approved" + }, + "viewDesc": { + "message": "Can view all items in your own vault." + }, + "takeover": { + "message": "Takeover" + }, + "takeoverDesc": { + "message": "Can reset your account with a new master password." + }, + "waitTime": { + "message": "Wait Time" + }, + "waitTimeDesc": { + "message": "Time required before automatically granting access." + }, + "oneDay": { + "message": "1 day" + }, + "days": { + "message": "$DAYS$ days", + "placeholders": { + "days": { + "content": "$1", + "example": "1" + } + } + }, + "invitedUser": { + "message": "Invited user." + }, + "acceptEmergencyAccess": { + "message": "You've been invited to become an emergency contact for the user listed above. To accept the invitation, you need to log in or create a new Bitwarden account." + }, + "emergencyInviteAcceptFailed": { + "message": "Unable to accept invitation. Ask the user to send a new invitation." + }, + "emergencyInviteAcceptFailedShort": { + "message": "Unable to accept invitation. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must enable 2FA on your user account before you can join this organization." + } + } + }, + "emergencyInviteAcceptedDesc": { + "message": "You can access the emergency options for this user after your identity has been confirmed. We'll send you an email when that happens." + }, + "requestAccess": { + "message": "Request Access" + }, + "requestAccessConfirmation": { + "message": "Are you sure you want to request emergency access? You will be provided access after $WAITTIME$ day(s) or whenever the user manually approves the request.", + "placeholders": { + "waittime": { + "content": "$1", + "example": "1" + } + } + }, + "requestSent": { + "message": "Emergency access requested for $USER$. We'll notify you by email when it's possible to continue.", + "placeholders": { + "user": { + "content": "$1", + "example": "John Smith" + } + } + }, + "approve": { + "message": "Approve" + }, + "reject": { + "message": "Reject" + }, + "approveAccessConfirmation": { + "message": "Are you sure you want to approve emergency access? This will allow $USER$ to $ACTION$ your account.", + "placeholders": { + "user": { + "content": "$1", + "example": "John Smith" + }, + "action": { + "content": "$2", + "example": "View" + } + } + }, + "emergencyApproved": { + "message": "Emergency access approved." + }, + "emergencyRejected": { + "message": "Emergency access rejected" + }, + "passwordResetFor": { + "message": "Password reset for $USER$. You can now login using the new password.", + "placeholders": { + "user": { + "content": "$1", + "example": "John Smith" + } + } + }, + "personalOwnership": { + "message": "Personal Ownership" + }, + "personalOwnershipPolicyDesc": { + "message": "Require users to save vault items to an organization by removing the personal ownership option." + }, + "personalOwnershipExemption": { + "message": "Organization Owners and Administrators are exempt from this policy's enforcement." + }, + "personalOwnershipSubmitError": { + "message": "Due to an enterprise policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organization and choose from available Collections." + }, + "disableSend": { + "message": "Disable Send" + }, + "disableSendPolicyDesc": { + "message": "Do not allow users to create or edit a Bitwarden Send. Deleting an existing Send is still allowed.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "disableSendExemption": { + "message": "Organization users that can manage the organization's policies are exempt from this policy's enforcement." + }, + "sendDisabled": { + "message": "Send disabled", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendDisabledWarning": { + "message": "Due to an enterprise policy, you are only able to delete an existing Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendOptions": { + "message": "Send Options", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendOptionsPolicyDesc": { + "message": "Set options for creating and editing Sends.", + "description": "'Sends' is a plural noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendOptionsExemption": { + "message": "Organization users that can manage the organization's policies are exempt from this policy's enforcement." + }, + "disableHideEmail": { + "message": "Do not allow users to hide their email address from recipients when creating or editing a Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendOptionsPolicyInEffect": { + "message": "The following organization policies are currently in effect:" + }, + "sendDisableHideEmailInEffect": { + "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "modifiedPolicyId": { + "message": "Modified policy $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "Master Password" + } + } + }, + "planPrice": { + "message": "Plan price" + }, + "estimatedTax": { + "message": "Estimated tax" + }, + "custom": { + "message": "Custom" + }, + "customDesc": { + "message": "Allows more granular control of user permissions for advanced configurations." + }, + "permissions": { + "message": "Permissions" + }, + "accessEventLogs": { + "message": "Access Event Logs" + }, + "accessImportExport": { + "message": "Access Import/Export" + }, + "accessReports": { + "message": "Access Reports" + }, + "missingPermissions": { + "message": "You lack the necessary permissions to perform this action." + }, + "manageAllCollections": { + "message": "Manage All Collections" + }, + "createNewCollections": { + "message": "Create New Collections" + }, + "editAnyCollection": { + "message": "Edit Any Collection" + }, + "deleteAnyCollection": { + "message": "Delete Any Collection" + }, + "manageAssignedCollections": { + "message": "Manage Assigned Collections" + }, + "editAssignedCollections": { + "message": "Edit Assigned Collections" + }, + "deleteAssignedCollections": { + "message": "Delete Assigned Collections" + }, + "manageGroups": { + "message": "Manage Groups" + }, + "managePolicies": { + "message": "Manage Policies" + }, + "manageSso": { + "message": "Manage SSO" + }, + "manageUsers": { + "message": "Manage Users" + }, + "manageResetPassword": { + "message": "Manage Password Reset" + }, + "disableRequiredError": { + "message": "You must manually disable the $POLICYNAME$ policy before this policy can be disabled.", + "placeholders": { + "policyName": { + "content": "$1", + "example": "Single Sign-On Authentication" + } + } + }, + "personalOwnershipPolicyInEffect": { + "message": "An organization policy is affecting your ownership options." + }, + "personalOwnershipPolicyInEffectImports": { + "message": "An organization policy has disabled importing items into your personal vault." + }, + "personalOwnershipCheckboxDesc": { + "message": "Disable personal ownership for organization users" + }, + "textHiddenByDefault": { + "message": "When accessing the Send, hide the text by default", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendNameDesc": { + "message": "A friendly name to describe this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTextDesc": { + "message": "The text you want to send." + }, + "sendFileDesc": { + "message": "The file you want to send." + }, + "copySendLinkOnSave": { + "message": "Copy the link to share this Send to my clipboard upon save." + }, + "sendLinkLabel": { + "message": "Send link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "send": { + "message": "Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendAccessTaglineProductDesc": { + "message": "Bitwarden Send transmits sensitive, temporary information to others easily and securely.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendAccessTaglineLearnMore": { + "message": "Learn more about", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read '**Learn more about** Bitwarden Send or sign up to try it today.'" + }, + "sendVaultCardProductDesc": { + "message": "Share text or files directly with anyone." + }, + "sendVaultCardLearnMore": { + "message": "Learn more", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read '**Learn more**, see how it works, or try it now. '" + }, + "sendVaultCardSee": { + "message": "see", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, **see** how it works, or try it now.'" + }, + "sendVaultCardHowItWorks": { + "message": "how it works", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see **how it works**, or try it now.'" + }, + "sendVaultCardOr": { + "message": "or", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, **or** try it now.'" + }, + "sendVaultCardTryItNow": { + "message": "try it now", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, or **try it now**.'" + }, + "sendAccessTaglineOr": { + "message": "or", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send **or** sign up to try it today.'" + }, + "sendAccessTaglineSignUp": { + "message": "sign up", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send or **sign up** to try it today.'" + }, + "sendAccessTaglineTryToday": { + "message": "to try it today.", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send or sign up to **try it today.**'" + }, + "sendCreatorIdentifier": { + "message": "Bitwarden user $USER_IDENTIFIER$ shared the following with you", + "placeholders": { + "user_identifier": { + "content": "$1", + "example": "An email address" + } + } + }, + "viewSendHiddenEmailWarning": { + "message": "The Bitwarden user who created this Send has chosen to hide their email address. You should ensure you trust the source of this link before using or downloading its content.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "expirationDateIsInvalid": { + "message": "The expiration date provided is not valid." + }, + "deletionDateIsInvalid": { + "message": "The deletion date provided is not valid." + }, + "expirationDateAndTimeRequired": { + "message": "An expiration date and time are required." + }, + "deletionDateAndTimeRequired": { + "message": "A deletion date and time are required." + }, + "dateParsingError": { + "message": "There was an error saving your deletion and expiration dates." + }, + "webAuthnFallbackMsg": { + "message": "To verify your 2FA please click the button below." + }, + "webAuthnAuthenticate": { + "message": "Authenticate WebAuthn" + }, + "webAuthnNotSupported": { + "message": "WebAuthn is not supported in this browser." + }, + "webAuthnSuccess": { + "message": "WebAuthn verified successfully! You may close this tab." + }, + "hintEqualsPassword": { + "message": "Your password hint cannot be the same as your password." + }, + "enrollPasswordReset": { + "message": "Enroll in Password Reset" + }, + "enrolledPasswordReset": { + "message": "Enrolled in Password Reset" + }, + "withdrawPasswordReset": { + "message": "Withdraw from Password Reset" + }, + "enrollPasswordResetSuccess": { + "message": "Enrollment success!" + }, + "withdrawPasswordResetSuccess": { + "message": "Withdrawal success!" + }, + "eventEnrollPasswordReset": { + "message": "User $ID$ enrolled in password reset assistance.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "eventWithdrawPasswordReset": { + "message": "User $ID$ withdrew from password reset assistance.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "eventAdminPasswordReset": { + "message": "Master password reset for user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "eventResetSsoLink": { + "message": "Reset Sso link for user $ID$", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "firstSsoLogin": { + "message": "$ID$ logged in using Sso for the first time", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "resetPassword": { + "message": "Reset Password" + }, + "resetPasswordLoggedOutWarning": { + "message": "Proceeding will log $NAME$ out of their current session, requiring them to log back in. Active sessions on other devices may continue to remain active for up to one hour.", + "placeholders": { + "name": { + "content": "$1", + "example": "John Smith" + } + } + }, + "thisUser": { + "message": "this user" + }, + "resetPasswordMasterPasswordPolicyInEffect": { + "message": "One or more organization policies require the master password to meet the following requirements:" + }, + "resetPasswordSuccess": { + "message": "Password reset success!" + }, + "resetPasswordEnrollmentWarning": { + "message": "Enrollment will allow organization administrators to change your master password" + }, + "resetPasswordPolicy": { + "message": "Master Password Reset" + }, + "resetPasswordPolicyDescription": { + "message": "Allow administrators in the organization to reset organization users' master password." + }, + "resetPasswordPolicyWarning": { + "message": "Users in the organization will need to self-enroll or be auto-enrolled before administrators can reset their master password." + }, + "resetPasswordPolicyAutoEnroll": { + "message": "Automatic Enrollment" + }, + "resetPasswordPolicyAutoEnrollDescription": { + "message": "All users will be automatically enrolled in password reset once their invite is accepted and will not be allowed to withdraw." + }, + "resetPasswordPolicyAutoEnrollWarning": { + "message": "Users already in the organization will not be retroactively enrolled in password reset. They will need to self-enroll before administrators can reset their master password." + }, + "resetPasswordPolicyAutoEnrollCheckbox": { + "message": "Require new users to be enrolled automatically" + }, + "resetPasswordAutoEnrollInviteWarning": { + "message": "This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password." + }, + "resetPasswordOrgKeysError": { + "message": "Organization Keys response is null" + }, + "resetPasswordDetailsError": { + "message": "Reset Password Details response is null" + }, + "trashCleanupWarning": { + "message": "Items that have been in Trash more than 30 days will be automatically deleted." + }, + "trashCleanupWarningSelfHosted": { + "message": "Items that have been in Trash for a while will be automatically deleted." + }, + "passwordPrompt": { + "message": "Master password re-prompt" + }, + "passwordConfirmation": { + "message": "Master password confirmation" + }, + "passwordConfirmationDesc": { + "message": "This action is protected. To continue, please re-enter your master password to verify your identity." + }, + "reinviteSelected": { + "message": "Resend Invitations" + }, + "noSelectedUsersApplicable": { + "message": "This action is not applicable to any of the selected users." + }, + "removeUsersWarning": { + "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "theme": { + "message": "Theme" + }, + "themeDesc": { + "message": "Choose a theme for your web vault." + }, + "themeSystem": { + "message": "Use System Theme" + }, + "themeDark": { + "message": "Dark" + }, + "themeLight": { + "message": "Light" + }, + "confirmSelected": { + "message": "Confirm Selected" + }, + "bulkConfirmStatus": { + "message": "Bulk action status" + }, + "bulkConfirmMessage": { + "message": "Confirmed successfully." + }, + "bulkReinviteMessage": { + "message": "Reinvited successfully." + }, + "bulkRemovedMessage": { + "message": "Removed successfully" + }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, + "bulkFilteredMessage": { + "message": "Excluded, not applicable for this action." + }, + "fingerprint": { + "message": "Fingerprint" + }, + "removeUsers": { + "message": "Remove Users" + }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, + "error": { + "message": "Error" + }, + "resetPasswordManageUsers": { + "message": "Manage Users must also be enabled with the Manage Password Reset permission" + }, + "setupProvider": { + "message": "Provider Setup" + }, + "setupProviderLoginDesc": { + "message": "You've been invited to setup a new provider. To continue, you need to log in or create a new Bitwarden account." + }, + "setupProviderDesc": { + "message": "Please enter the details below to complete the provider setup. Contact Customer Support if you have any questions." + }, + "providerName": { + "message": "Provider Name" + }, + "providerSetup": { + "message": "The provider has been set up." + }, + "clients": { + "message": "Clients" + }, + "providerAdmin": { + "message": "Provider Admin" + }, + "providerAdminDesc": { + "message": "The highest access user that can manage all aspects of your provider as well as access and manage client organizations." + }, + "serviceUser": { + "message": "Service User" + }, + "serviceUserDesc": { + "message": "Service users can access and manage all client organizations." + }, + "providerInviteUserDesc": { + "message": "Invite a new user to your provider by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." + }, + "joinProvider": { + "message": "Join Provider" + }, + "joinProviderDesc": { + "message": "You've been invited to join the provider listed above. To accept the invitation, you need to log in or create a new Bitwarden account." + }, + "providerInviteAcceptFailed": { + "message": "Unable to accept invitation. Ask a provider admin to send a new invitation." + }, + "providerInviteAcceptedDesc": { + "message": "You can access this provider once an administrator confirms your membership. We'll send you an email when that happens." + }, + "providerUsersNeedConfirmed": { + "message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the provider until they are confirmed." + }, + "provider": { + "message": "Provider" + }, + "newClientOrganization": { + "message": "New Client Organization" + }, + "newClientOrganizationDesc": { + "message": "Create a new client organization that will be associated with you as the provider. You will be able to access and manage this organization." + }, + "addExistingOrganization": { + "message": "Add Existing Organization" + }, + "myProvider": { + "message": "My Provider" + }, + "addOrganizationConfirmation": { + "message": "Are you sure you want to add $ORGANIZATION$ as a client to $PROVIDER$?", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + }, + "provider": { + "content": "$2", + "example": "My Provider Name" + } + } + }, + "organizationJoinedProvider": { + "message": "Organization was successfully added to the provider" + }, + "accessingUsingProvider": { + "message": "Accessing organization using provider $PROVIDER$", + "placeholders": { + "provider": { + "content": "$1", + "example": "My Provider Name" + } + } + }, + "providerIsDisabled": { + "message": "Provider is disabled." + }, + "providerUpdated": { + "message": "Provider updated" + }, + "yourProviderIs": { + "message": "Your provider is $PROVIDER$. They have administrative and billing privileges for your organization.", + "placeholders": { + "provider": { + "content": "$1", + "example": "My Provider Name" + } + } + }, + "detachedOrganization": { + "message": "The organization $ORGANIZATION$ has been detached from your provider.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "detachOrganizationConfirmation": { + "message": "Are you sure you want to detach this organization? The organization will continue to exist but will no longer be managed by the provider." + }, + "add": { + "message": "Add" + }, + "updatedMasterPassword": { + "message": "Updated Master Password" + }, + "updateMasterPassword": { + "message": "Update Master Password" + }, + "updateMasterPasswordWarning": { + "message": "Your Master Password was recently changed by an administrator in your organization. In order to access the vault, you must update your Master Password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + }, + "masterPasswordInvalidWarning": { + "message": "Your Master Password does not meet the policy requirements of this organization. In order to join the organization, you must update your Master Password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + }, + "maximumVaultTimeout": { + "message": "Vault Timeout" + }, + "maximumVaultTimeoutDesc": { + "message": "Configure a maximum vault timeout for all users." + }, + "maximumVaultTimeoutLabel": { + "message": "Maximum Vault Timeout" + }, + "invalidMaximumVaultTimeout": { + "message": "Invalid Maximum Vault Timeout." + }, + "hours": { + "message": "Hours" + }, + "minutes": { + "message": "Minutes" + }, + "vaultTimeoutPolicyInEffect": { + "message": "Your organization policies are affecting your vault timeout. Maximum allowed Vault Timeout is $HOURS$ hour(s) and $MINUTES$ minute(s)", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "customVaultTimeout": { + "message": "Custom Vault Timeout" + }, + "vaultTimeoutToLarge": { + "message": "Your vault timeout exceeds the restriction set by your organization." + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "vaultTimeoutRangeError": { + "message": "Vault Timeout is not within allowed range." + }, + "disablePersonalVaultExport": { + "message": "Disable Personal Vault Export" + }, + "disablePersonalVaultExportDesc": { + "message": "Prohibits users from exporting their private vault data." + }, + "vaultExportDisabled": { + "message": "Vault Export Disabled" + }, + "personalVaultExportPolicyInEffect": { + "message": "One or more organization policies prevents you from exporting your personal vault." + }, + "selectType": { + "message": "Select SSO Type" + }, + "type": { + "message": "Type" + }, + "openIdConnectConfig": { + "message": "OpenID Connect Configuration" + }, + "samlSpConfig": { + "message": "SAML Service Provider Configuration" + }, + "samlIdpConfig": { + "message": "SAML Identity Provider Configuration" + }, + "callbackPath": { + "message": "Callback Path" + }, + "signedOutCallbackPath": { + "message": "Signed Out Callback Path" + }, + "authority": { + "message": "Authority" + }, + "clientId": { + "message": "Client ID" + }, + "clientSecret": { + "message": "Client Secret" + }, + "metadataAddress": { + "message": "Metadata Address" + }, + "oidcRedirectBehavior": { + "message": "OIDC Redirect Behavior" + }, + "getClaimsFromUserInfoEndpoint": { + "message": "Get claims from user info endpoint" + }, + "additionalScopes": { + "message": "Custom Scopes" + }, + "additionalUserIdClaimTypes": { + "message": "Custom User ID Claim Types" + }, + "additionalEmailClaimTypes": { + "message": "Email Claim Types" + }, + "additionalNameClaimTypes": { + "message": "Custom Name Claim Types" + }, + "acrValues": { + "message": "Requested Authentication Context Class Reference values" + }, + "expectedReturnAcrValue": { + "message": "Expected \"acr\" Claim Value In Response" + }, + "spEntityId": { + "message": "SP Entity ID" + }, + "spMetadataUrl": { + "message": "SAML 2.0 Metadata URL" + }, + "spAcsUrl": { + "message": "Assertion Consumer Service (ACS) URL" + }, + "spNameIdFormat": { + "message": "Name ID Format" + }, + "spOutboundSigningAlgorithm": { + "message": "Outbound Signing Algorithm" + }, + "spSigningBehavior": { + "message": "Signing Behavior" + }, + "spMinIncomingSigningAlgorithm": { + "message": "Minimum Incoming Signing Algorithm" + }, + "spWantAssertionsSigned": { + "message": "Expect signed assertions" + }, + "spValidateCertificates": { + "message": "Validate certificates" + }, + "idpEntityId": { + "message": "Entity ID" + }, + "idpBindingType": { + "message": "Binding Type" + }, + "idpSingleSignOnServiceUrl": { + "message": "Single Sign On Service URL" + }, + "idpSingleLogoutServiceUrl": { + "message": "Single Log Out Service URL" + }, + "idpX509PublicCert": { + "message": "X509 Public Certificate" + }, + "idpOutboundSigningAlgorithm": { + "message": "Outbound Signing Algorithm" + }, + "idpAllowUnsolicitedAuthnResponse": { + "message": "Allow unsolicited authentication response" + }, + "idpAllowOutboundLogoutRequests": { + "message": "Allow outbound logout requests" + }, + "idpSignAuthenticationRequests": { + "message": "Sign authentication requests" + }, + "ssoSettingsSaved": { + "message": "Single Sign-On configuration was saved." + }, + "sponsoredFamilies": { + "message": "Free Bitwarden Families" + }, + "sponsoredFamiliesEligible": { + "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesEligibleCard": { + "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + }, + "sponsoredFamiliesInclude": { + "message": "The Bitwarden for Families plan include" + }, + "sponsoredFamiliesPremiumAccess": { + "message": "Premium access for up to 6 users" + }, + "sponsoredFamiliesSharedCollections": { + "message": "Shared collections for Family secrets" + }, + "badToken": { + "message": "The link is no longer valid. Please have the sponsor resend the offer." + }, + "reclaimedFreePlan": { + "message": "Reclaimed free plan" + }, + "redeem": { + "message": "Redeem" + }, + "sponsoredFamiliesSelectOffer": { + "message": "Select the organization you would like sponsored" + }, + "familiesSponsoringOrgSelect": { + "message": "Which Free Families offer would you like to redeem?" + }, + "sponsoredFamiliesEmail": { + "message": "Enter your personal email to redeem Bitwarden Families" + }, + "sponsoredFamiliesLeaveCopy": { + "message": "If you remove an offer or are removed from the sponsoring organization, your Families sponsorship will expire at the next renewal date." + }, + "acceptBitwardenFamiliesHelp": { + "message": "Accept offer for an existing organization or create a new Families organization." + }, + "setupSponsoredFamiliesLoginDesc": { + "message": "You've been offered a free Bitwarden Families Plan Organization. To continue, you need to log in to the account that received the offer." + }, + "sponsoredFamiliesAcceptFailed": { + "message": "Unable to accept offer. Please resend the offer email from your enterprise account and try again." + }, + "sponsoredFamiliesAcceptFailedShort": { + "message": "Unable to accept offer. $DESCRIPTION$", + "placeholders": { + "description": { + "content": "$1", + "example": "You must have at least one existing Families Organization." + } + } + }, + "sponsoredFamiliesOffer": { + "message": "Accept Free Bitwarden Families" + }, + "sponsoredFamiliesOfferRedeemed": { + "message": "Free Bitwarden Families offer successfully redeemed" + }, + "redeemed": { + "message": "Redeemed" + }, + "redeemedAccount": { + "message": "Redeemed Account" + }, + "revokeAccount": { + "message": "Revoke account $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "resendEmailLabel": { + "message": "Resend Sponsorship email to $NAME$ sponsorship", + "placeholders": { + "name": { + "content": "$1", + "example": "My Sponsorship Name" + } + } + }, + "freeFamiliesPlan": { + "message": "Free Families Plan" + }, + "redeemNow": { + "message": "Redeem Now" + }, + "recipient": { + "message": "Recipient" + }, + "removeSponsorship": { + "message": "Remove Sponsorship" + }, + "removeSponsorshipConfirmation": { + "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + }, + "sponsorshipCreated": { + "message": "Sponsorship Created" + }, + "revoke": { + "message": "Revoke" + }, + "emailSent": { + "message": "Email Sent" + }, + "revokeSponsorshipConfirmation": { + "message": "After removing this account, the Families plan sponsorship will expire at the end of the billing period. You will not be able to redeem a new sponsorship offer until the existing one expires. Are you sure you want to continue?" + }, + "removeSponsorshipSuccess": { + "message": "Sponsorship Removed" + }, + "ssoKeyConnectorError": { + "message": "Key Connector error: make sure Key Connector is available and working correctly." + }, + "keyConnectorUrl": { + "message": "Key Connector URL" + }, + "sendVerificationCode": { + "message": "Send a verification code to your email" + }, + "sendCode": { + "message": "Send Code" + }, + "codeSent": { + "message": "Code Sent" + }, + "verificationCode": { + "message": "Verification Code" + }, + "confirmIdentity": { + "message": "Confirm your identity to continue." + }, + "verificationCodeRequired": { + "message": "Verification code is required." + }, + "invalidVerificationCode": { + "message": "Invalid verification code" + }, + "convertOrganizationEncryptionDesc": { + "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "leaveOrganization": { + "message": "Leave Organization" + }, + "removeMasterPassword": { + "message": "Remove Master Password" + }, + "removedMasterPassword": { + "message": "Master password removed." + }, + "allowSso": { + "message": "Allow SSO authentication" + }, + "allowSsoDesc": { + "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." + }, + "ssoPolicyHelpStart": { + "message": "Enable the", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" + }, + "ssoPolicyHelpLink": { + "message": "SSO Authentication policy", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" + }, + "ssoPolicyHelpEnd": { + "message": "to require all members to log in with SSO.", + "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enable the SSO Authentication policy to require all members to log in with SSO.'" + }, + "ssoPolicyHelpKeyConnector": { + "message": "SSO Authentication and Single Organization policies are required to set up Key Connector decryption." + }, + "memberDecryptionOption": { + "message": "Member Decryption Options" + }, + "memberDecryptionPassDesc": { + "message": "Once authenticated, members will decrypt vault data using their Master Passwords." + }, + "keyConnector": { + "message": "Key Connector" + }, + "memberDecryptionKeyConnectorDesc": { + "message": "Connect Login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their Master Passwords to decrypt vault data. Contact Bitwarden Support for set up assistance." + }, + "keyConnectorPolicyRestriction": { + "message": "\"Login with SSO and Key Connector Decryption\" is enabled. This policy will only apply to Owners and Admins." + }, + "enabledSso": { + "message": "Enabled SSO" + }, + "disabledSso": { + "message": "Disabled SSO" + }, + "enabledKeyConnector": { + "message": "Enabled Key Connector" + }, + "disabledKeyConnector": { + "message": "Disabled Key Connector" + }, + "keyConnectorWarning": { + "message": "Once members begin using Key Connector, your Organization cannot revert to Master Password decryption. Proceed only if you are comfortable deploying and managing a key server." + }, + "migratedKeyConnector": { + "message": "Migrated to Key Connector" + }, + "paymentSponsored": { + "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + }, + "orgCreatedSponsorshipInvalid": { + "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + }, + "newFamiliesOrganization": { + "message": "New Families Organization" + }, + "acceptOffer": { + "message": "Accept Offer" + }, + "sponsoringOrg": { + "message": "Sponsoring Organization" + }, + "keyConnectorTest": { + "message": "Test" + }, + "keyConnectorTestSuccess": { + "message": "Success! Key Connector reached." + }, + "keyConnectorTestFail": { + "message": "Cannot reach Key Connector. Check URL." + }, + "sponsorshipTokenHasExpired": { + "message": "The sponsorship offer has expired." + }, + "freeWithSponsorship": { + "message": "FREE with sponsorship" + }, + "viewBillingSyncToken": { + "message": "View Billing Sync Token" + }, + "generateBillingSyncToken": { + "message": "Generate Billing Sync Token" + }, + "copyPasteBillingSync": { + "message": "Copy and paste this token into the Billing Sync settings of your self-hosted organization." + }, + "billingSyncCanAccess": { + "message": "Your Billing Sync token can access and edit this organization's subscription settings." + }, + "manageBillingSync": { + "message": "Manage Billing Sync" + }, + "setUpBillingSync": { + "message": "Set Up Billing Sync" + }, + "generateToken": { + "message": "Generate Token" + }, + "rotateToken": { + "message": "Rotate Token" + }, + "rotateBillingSyncTokenWarning": { + "message": "If you proceed, you will need to re-setup billing sync on your self-hosted server." + }, + "rotateBillingSyncTokenTitle": { + "message": "Rotating the Billing Sync Token will invalidate the previous token." + }, + "selfHostingTitle": { + "message": "Self-Hosting" + }, + "selfHostingEnterpriseOrganizationSectionCopy": { + "message": "To set-up your organization on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up billing sync." + }, + "billingSyncApiKeyRotated": { + "message": "Token rotated." + }, + "billingSync": { + "message": "Billing Sync" + }, + "billingSyncDesc": { + "message": "Billing Sync provides Free Families plans for members and advanced billing capabilities by linking your self-hosted Bitwarden to the Bitwarden cloud server." + }, + "billingSyncKeyDesc": { + "message": "A Billing Sync Token from your cloud organization's subscription settings is required to complete this form." + }, + "billingSyncKey": { + "message": "Billing Sync Token" + }, + "active": { + "message": "Active" + }, + "inactive": { + "message": "Inactive" + }, + "sentAwaitingSync": { + "message": "Sent (Awaiting Sync)" + }, + "sent": { + "message": "Sent" + }, + "requestRemoved": { + "message": "Removed (Awaiting Sync)" + }, + "requested": { + "message": "Requested" + }, + "formErrorSummaryPlural": { + "message": "$COUNT$ fields above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "5" + } + } + }, + "formErrorSummarySingle": { + "message": "1 field above needs your attention." + }, + "fieldRequiredError": { + "message": "$FIELDNAME$ is required.", + "placeholders": { + "fieldname": { + "content": "$1", + "example": "Full name" + } + } + }, + "required": { + "message": "required" + }, + "idpSingleSignOnServiceUrlRequired": { + "message": "Required if Entity ID is not a URL." + }, + "openIdOptionalCustomizations": { + "message": "Optional Customizations" + }, + "openIdAuthorityRequired": { + "message": "Required if Authority is not valid." + }, + "separateMultipleWithComma": { + "message": "Separate multiple with a comma." + }, + "sessionTimeout": { + "message": "Your session has timed out. Please go back and try logging in again." + }, + "exportingPersonalVaultTitle": { + "message": "Exporting Personal Vault" + }, + "exportingOrganizationVaultTitle": { + "message": "Exporting Organization Vault" + }, + "exportingPersonalVaultDescription": { + "message": "Only the personal vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "exportingOrganizationVaultDescription": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Personal vault items and items from other organizations will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "accessDenied": { + "message": "Access Denied. You do not have permission to view this page." + }, + "masterPassword": { + "message": "Master Password" + }, + "security": { + "message": "Security" + }, + "keys": { + "message": "Keys" + }, + "billingHistory": { + "message": "Billing History" + }, + "backToReports": { + "message": "Back to Reports" + }, + "organizationPicker": { + "message": "Organization picker" + }, + "currentOrganization": { + "message": "Current organization", + "description": "This is used by screen readers to indicate the organization that is currently being shown to the user." + }, + "accountSettings": { + "message": "Account Settings" + }, + "generator": { + "message": "Generator" + }, + "whatWouldYouLikeToGenerate": { + "message": "What would you like to generate?" + }, + "passwordType": { + "message": "Password Type" + }, + "regenerateUsername": { + "message": "Regenerate Username" + }, + "generateUsername": { + "message": "Generate Username" + }, + "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" + }, + "plusAddressedEmailDesc": { + "message": "Use your email provider's sub-addressing capabilities." + }, + "catchallEmail": { + "message": "Catch-all Email" + }, + "catchallEmailDesc": { + "message": "Use your domain's configured catch-all inbox." + }, + "random": { + "message": "Random", + "description": "Generates domain-based username using random letters" + }, + "randomWord": { + "message": "Random Word" + }, + "service": { + "message": "Service" + }, + "unknownCipher": { + "message": "Unknown Item, you may need to request permission to access this item." + }, + "cannotSponsorSelf": { + "message": "You cannot redeem for the active account. Enter a different email." + }, + "revokeWhenExpired": { + "message": "Expires $DATE$", + "placeholders": { + "date": { + "content": "$1", + "example": "12/31/2020" + } + } + }, + "awaitingSyncSingular": { + "message": "Token rotated $DAYS$ day ago. Update the billing sync token in your self-hosted organization settings.", + "placeholders": { + "days": { + "content": "$1", + "example": "1" + } + } + }, + "awaitingSyncPlural": { + "message": "Token rotated $DAYS$ days ago. Update the billing sync token in your self-hosted organization settings.", + "placeholders": { + "days": { + "content": "$1", + "example": "1" + } + } + }, + "lastSync": { + "message": "Last Sync", + "Description": "Used as a prefix to indicate the last time a sync occured. Example \"Last sync 1968-11-16 00:00:00\"" + }, + "sponsorshipsSynced": { + "message": "Self-hosted sponsorships synced." + }, + "billingManagedByProvider": { + "message": "Managed by $PROVIDER$", + "placeholders": { + "provider": { + "content": "$1", + "example": "Managed Services Company" + } + } + }, + "billingContactProviderForAssistance": { + "message": "Please reach out to them for further assistance", + "description": "This text is displayed if an organization's billing is managed by a Provider. It tells the user to contact the Provider for assistance." + }, + "forwardedEmail": { + "message": "Forwarded Email Alias" + }, + "forwardedEmailDesc": { + "message": "Generate an email alias with an external forwarding service." + }, + "hostname": { + "message": "Hostname", + "description": "Part of a URL." + }, + "apiAccessToken": { + "message": "API Access Token" + }, + "deviceVerification": { + "message": "Device Verification" + }, + "enableDeviceVerification": { + "message": "Enable Device Verification" + }, + "deviceVerificationDesc": { + "message": "When enabled, verification codes are sent to your email address when logging in from an unrecognized device" + }, + "updatedDeviceVerification": { + "message": "Updated Device Verification" + }, + "areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX": { + "message": "Are you sure you want to enable Device Verification? The verification code emails will arrive at: $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "My Email" + } + } + } +} diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 9d1ffd63802..58323192e3f 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Vaihda verkkoholvissa käytettävää kieltä." }, - "disableIcons": { - "message": "Älä näytä sivustokuvakkeita" + "enableFavicon": { + "message": "Näytä verkkosivustojen kuvakkeet" }, - "disableIconsDesc": { - "message": "Kirjautumistietojen vieressä näytettävät sivustojen kuvakkeet helpottavat kohteiden tunnistusta." + "faviconDesc": { + "message": "Näytä tunnistettava kuva jokaiselle kirjautumistiedolle." }, "enableGravatars": { - "message": "Käytä Gravatareja", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Näytä Gravatarit", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Käytä avatar-profiilikuvia Gravatar.com-palvelusta." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Käytössä" }, + "activate": { + "message": "Aktivoi" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Poista käytöstä" }, + "deactivate": { + "message": "Poista aktivointi" + }, "twoStepLoginProviderEnabled": { "message": "Tämä kaksivaiheisen kirjautumisen todentaja on käytössä tililläsi." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Haluatko varmasti poistaa käyttäjän?" }, + "deactivateUserConfirmation": { + "message": "Jäsenellä ei ole enää organisaation käyttöoikeutta, mutta hän voi edelleen käyttää henkilökohtaista hoviaan." + }, + "activateUserConfirmation": { + "message": "Haluatko varmasti aktivoida käyttäjän ja myöntää heille organisaation käyttöoikeuden?" + }, "removeUserConfirmationKeyConnector": { "message": "Varoitus! Tämä käyttäjä tarvitsee salauksensa hallintaan Key Connectoria. Käyttäjän poistaminen organisaatiostasi poistaa heidän tilinsä käytöstä pysvästi. Toimenpide on pysyvä, eikä sen peruminen ole mahdollista. Haluatko jatkaa?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Käyttäjän $ID$ aktivointi poistettiin.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Käyttäjä $ID$ aktivointiin.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Poistetaanko käyttäjän $ID$ aktivointi?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Aktivoidaanko käyttäjä $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Tiedostoliite luotu kohteelle $ID$.", "placeholders": { @@ -3127,7 +3175,7 @@ "message": "Holvin aikakatkaisu" }, "vaultTimeoutDesc": { - "message": "Valitse milloin holvin aikakatkaisu tapahtuu ja suorita valittu toiminto." + "message": "Määritä milloin holvin aikakatkaisutoiminto suoritetaan." }, "oneMinute": { "message": "1 minuutti" @@ -3148,7 +3196,7 @@ "message": "4 tuntia" }, "onRefresh": { - "message": "Selaimen sivun päivityksen yhteydessä" + "message": "Selaimen sivupäivityksen yhteydessä" }, "dateUpdated": { "message": "Päivitetty", @@ -3358,10 +3406,10 @@ "message": "Holvin aikakatkaisun toiminto" }, "vaultTimeoutActionLockDesc": { - "message": "Lukittu holvi vaatii pääsalasanan syötön sen käyttämiseksi." + "message": "Holvin käyttö edellyttää pääsalasanaa tai muuta avaustapaa." }, "vaultTimeoutActionLogOutDesc": { - "message": "Uloskirjattu holvi vaatii uuden todennuksen sen käyttämiseksi." + "message": "Holvin käyttö edellyttää uuttaa todennusta." }, "lock": { "message": "Lukitse", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Poistettu käytöstä" }, + "deactivated": { + "message": "Aktivointi poistettiin" + }, "sendLink": { "message": "Send-linkki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4217,7 +4268,13 @@ "message": "Toiminto ei koske valittuja käyttäjiä." }, "removeUsersWarning": { - "message": "Haluatko varmasti poistaa poistaa seuraavat käyttäjät? Toiminto saattaa kestää muutamia sekunteja, eikä sen keskeytys tai peruminen ole mahdollista." + "message": "Haluatko varmasti poistaa seuraavat käyttäjät? Toiminto saattaa kestää muutamia sekunteja, eikä sen keskeytys tai peruminen ole mahdollista." + }, + "deactivateUsersWarning": { + "message": "Haluatko varmasti poistaa seuraavien käyttäjien aktivoinnin? Heillä ei enää ole organisaation käyttöoikeutta, mutta he voivat edelleen käyttää henkilökohtaisia holvejaan. Toiminto saattaa kestää muutamia sekunteja, eikä sen keskeytys tai peruminen ole mahdollista." + }, + "activateUsersWarning": { + "message": "Haluatko varmasti aktivoida seuraavat käyttäjät ja myöntää heille organisaation käyttöoikeuden? Toiminto saattaa kestää muutamia sekunteja, eikä sen keskeytys tai peruminen ole mahdollista." }, "theme": { "message": "Teema" @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Poistettu onnistuneesti." }, + "bulkDeactivatedMessage": { + "message": "Aktivoinnin poisto onnistui" + }, + "bulkActivatedMessage": { + "message": "Aktivointi onnistui" + }, "bulkFilteredMessage": { "message": "Ohitettu, ei koske tätä toimintoa." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Poista käyttäjiä" }, + "deactivateUsers": { + "message": "Poista käyttäjien aktivointi" + }, + "activateUsers": { + "message": "Aktivoi käyttäjät" + }, "error": { "message": "Virhe" }, @@ -5083,7 +5152,7 @@ "message": "Käytä laitetodennusta" }, "deviceVerificationDesc": { - "message": "Kun käytössä, todennuskoodit lähetetään sähköpostitse, kun yritetään kirjautua tuntemattomasta laitteesta" + "message": "Kun käytössä, lähetetään todennuskoodit sähköpostitse, kun kirjaudutaan tuntemattomasta laitteesta" }, "updatedDeviceVerification": { "message": "Laitetodennus päivitettiin" @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index 1e5447d6fde..ecd7d00efa9 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index 3a133792383..27274b0150f 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Changer la langue utilisée par le coffre web." }, - "disableIcons": { - "message": "Désactiver les icônes de sites web" + "enableFavicon": { + "message": "Afficher les icônes du site web" }, - "disableIconsDesc": { - "message": "Les icônes de sites web permettent d'avoir une icône reconnaissable à côté de chaque identifiant dans votre coffre." + "faviconDesc": { + "message": "Afficher une image reconnaissable à côté de chaque identifiant." }, "enableGravatars": { "message": "Activer Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Charger votre image de profil depuis gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Activé" }, + "activate": { + "message": "Activer" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Désactiver" }, + "deactivate": { + "message": "Désactiver" + }, "twoStepLoginProviderEnabled": { "message": "Ce fournisseur de connexion en deux étapes est activé sur votre compte." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Êtes-vous sûr de vouloir retirer cet utilisateur ?" }, + "deactivateUserConfirmation": { + "message": "Le membre n'aura plus accès à l'organisation, mais aura toujours accès à son coffre individuel." + }, + "activateUserConfirmation": { + "message": "Êtes-vous sûr de vouloir activer cet utilisateur ; cela lui donne accès à l'organisation?" + }, "removeUserConfirmationKeyConnector": { "message": "Attention ! Cet utilisateur a besoin de Key Connector pour gérer son chiffrement. Supprimer cet utilisateur de votre organisation désactivera définitivement son compte. Cette action ne peut pas être annulée. Voulez-vous continuer?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Utilisateur désactivé $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Utilisateur activé $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Désactiver l'utilisateur $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activer l'utilisateur $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "La pièce jointe pour l'élément $ID$ a été créée.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Désactivé" }, + "deactivated": { + "message": "Désactivé" + }, "sendLink": { "message": "Lien du Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Êtes-vous sûr de vouloir supprimer les utilisateurs suivants ? Le processus peut prendre quelques secondes et ne peut être interrompu ou annulé." }, + "deactivateUsersWarning": { + "message": "Êtes-vous sûr de vouloir désactiver les membres suivants? Ils n'auront plus accès à l'organisation, mais auront toujours accès à leurs coffres individuels. Le processus peut prendre quelques secondes et ne peut pas être interrompu ou annulé." + }, + "activateUsersWarning": { + "message": "Êtes-vous sûr de vouloir activer les membres suivants, leur donnant accès à l'organisation? Le processus peut prendre quelques secondes et ne peut pas être interrompu ou annulé." + }, "theme": { "message": "Thème" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Supprimé avec succès" }, + "bulkDeactivatedMessage": { + "message": "Désactivé avec succès" + }, + "bulkActivatedMessage": { + "message": "Activé avec succès" + }, "bulkFilteredMessage": { "message": "Exclu, non applicable pour cette action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Supprimer les utilisateurs" }, + "deactivateUsers": { + "message": "Désactiver les Utilisateurs" + }, + "activateUsers": { + "message": "Activer les Utilisateurs" + }, "error": { "message": "Erreur" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 9d48f9ed49a..d8f1706d92d 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "שנה את השפה של כספת הרשת." }, - "disableIcons": { - "message": "בטל אייקונים של האתר" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "יכולת הצג אייקונים-של-האתר מאפשרת הצגה של תמונה או אייקון מוכר ליד פרטי הכניסה שבכספת שלך." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "אפשר שימוש ב-Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "שימוש בתמונות אווטאר שנטענו מהאתר gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "מופעל" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "פרימיום", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "בטל" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "ספק כניסה דו-שלבית זה נתמך בחשבון שלך." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "האם אתה בטוח שברצונך להסיר משתמש זה?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "נוצר קובץ מצורף עבור פריט $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "מבוטל" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "לינק לSend", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index d0654e5c63a..324d06f0bc9 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index 9a4f5d94264..9ec828fb945 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Promijeni jezik web trezora." }, - "disableIcons": { - "message": "Onemogući ikone web mjesta" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Ikone web mjesta nude prepoznatljivu ikonu pokraj svake stavke za prijavu u vašem trezoru." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Omogući Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Koristi slike učitane s gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Omogućeno" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Onemogući" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Ovaj pružatelj prijave u dva koraka je omogućen na tvojem računu." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Sigurno želiš ukoniti ovog korisnika?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Upozorenje! Ovaj korisnik koristi konektor za ključ kako bi upravljao svojim šifriranjem. Uklanjanjem korisnika iz tvoje organizacije korisnički će račun biti trajno onemogućen. Ovu opciju nije moguće opozvati. Sigurno želiš nastaviti?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Stvoren privitak za stavku $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Onemogućeno" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Veza na Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Sigurno želiš ukloniti sljedeće korisnike? Ova radnja može potrajati i nije ga moguće prekinuti ili poništiti." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Uspješno uklonjeno" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Isključeno, nije primijenjivo na ovu radnju." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Ukloni korisnike" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Greška" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 3e1b284095a..3b6010deaec 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "A webes széf nyelvének megváltoztatása." }, - "disableIcons": { - "message": "Webhely ikonok letiltása" + "enableFavicon": { + "message": "Webhely ikonok megjelenítése" }, - "disableIconsDesc": { - "message": "A webhelyek ikonjai felismerhető ikonként jelennek meg a széf összes eleme mellett." + "faviconDesc": { + "message": "Felismerhető kép megjelenítése minden bejelentkezés mellett." }, "enableGravatars": { "message": "Gravatarok engedélyezése", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Avatar képek használata a gravatar.com webhelyről." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Engedélyezve" }, + "activate": { + "message": "Bekapcsolás" + }, "premium": { "message": "Prémium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Letiltás" }, + "deactivate": { + "message": "Kikapcsolás" + }, "twoStepLoginProviderEnabled": { "message": "Ez a kétlépéses bejelentkezés szolgáltató már engedélyezett a fiókon." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Biztosan eltávolításra kerüljön ez a felhasználó?" }, + "deactivateUserConfirmation": { + "message": "A tag a továbikban nem érheti el a szervezetet, de elérheti az egyedi széfjüket." + }, + "activateUserConfirmation": { + "message": "Biztosan szeretnénk bekapcsolni ezt a felhasználót hozzáférési joggal a szervezethez?" + }, "removeUserConfirmationKeyConnector": { "message": "Figyelem! Ennek a felhasználónak kulcskapcsolóra van szüksége a titkosítás kezeléséhez. Ha eltávolítjuk ezt a felhasználót a szervezetből, azzal véglegesen letiltjuk a fiókját. Ez a művelet nem visszavonható. Folytatás?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "$ID$ felhasználó kikapcsolásra került.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "$ID$ felhasználó bekapcsolásra került.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Kikapcsolásra kerüljön $ID$ felhasználó?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Bekapcsolásra kerüljön $ID$ felhasználó?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "$ID$ azonosítójú elem melléklete létrehozásra került.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Letiltva" }, + "deactivated": { + "message": "A kikapcsolás megtörtént." + }, "sendLink": { "message": "Send hivatkozás", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Biztosan eltávolításra kerüljenek a következő felhasználók? A folyamat néhány másodpercet vehet igénybe és nem szakítható meg vagy törölhető." }, + "deactivateUsersWarning": { + "message": "Biztosan kikapcsolásra kerüljenek a következő tagok? Többé nem férnek hozzá a szervezethez de továbbra is hozzáférhetnek az egyedi széfjükhöz. A folyamat befejezése néhány másodpercet vehet igénybe és nem szakítható meg vagy nem vonható vissza." + }, + "activateUsersWarning": { + "message": "Biztosan bekapcsolásra kerüljenek a következő tagok, lehetővé téve számukra a szervezet elérését? A folyamat befejezése néhány másodpercet vehet igénybe, és nem szakítható meg vagy nem vonható vissza." + }, "theme": { "message": "Téma" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Az eltávolítás sikeres volt." }, + "bulkDeactivatedMessage": { + "message": "A kikapcsolás sikeresen megtörtént." + }, + "bulkActivatedMessage": { + "message": "A bekapcsolás sikeresen megtörtént." + }, "bulkFilteredMessage": { "message": "Kizárva, nem alkalmazható erre a műveletre." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Felhasználók eltávolítása" }, + "deactivateUsers": { + "message": "Felhasználók kikapcsolása" + }, + "activateUsers": { + "message": "Felhasználók bekapcsolása" + }, "error": { "message": "Hiba" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index bcd391d9eba..d663b112759 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Ubah bahasa yang digunakan oleh brankas web." }, - "disableIcons": { - "message": "Nonaktifkan Ikon Situs Web" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Ikon Situs Web memberikan gambar yang dapat dikenali di samping setiap item login di lemari besi Anda." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Aktifkan Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Gunakan gambar avatar yang dimuat dari gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Diaktifkan" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Nonaktifkan" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Penyedia proses masuk dua langkah ini diaktifkan di akun Anda." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Apakah Anda yakin ingin menghapus pengguna ini?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Lampiran dibuat untuk item $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Dinonaktifkan" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Kirim Tautan", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Penghapusan sukses" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Hapus pengguna" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Galat" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index 280d7075028..29fe2728769 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Cambia la lingua utilizzata dalla cassaforte web." }, - "disableIcons": { - "message": "Disabilita icone dei siti web" + "enableFavicon": { + "message": "Mostra icone del sito" }, - "disableIconsDesc": { - "message": "Le icone dei siti web forniscono un'immagine riconoscibile accanto a ogni elemento di accesso." + "faviconDesc": { + "message": "Mostra un'immagine riconoscibile accanto a ogni login." }, "enableGravatars": { "message": "Abilita Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Usa immagine profilo caricata da gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Abilitato" }, + "activate": { + "message": "Attiva" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disabilita" }, + "deactivate": { + "message": "Disattiva" + }, "twoStepLoginProviderEnabled": { "message": "Questo metodo di verifica in due passaggi è abilitato sul tuo account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Confermi di voler rimuovere questo utente?" }, + "deactivateUserConfirmation": { + "message": "Il membro non avrà più accesso all'organizzazione, ma continuerà ad avere accesso alla propria cassaforte." + }, + "activateUserConfirmation": { + "message": "Sei sicuro di voler attivare questo utente e concedere l'accesso all'organizzazione?" + }, "removeUserConfirmationKeyConnector": { "message": "Attenzione! Questo utente richiede Key Connector per gestire la crittografia. Rimuovere questo utente dalla propria organizzazione disabiliterà definitivamente l'account. Questa azione non può essere annullata. Vuoi procedere?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Utente $ID$ disattivato.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Utente $ID$ attivato.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Disattivare l'utente $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Attivare l'utente $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Allegato creato per elemento $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabilitato" }, + "deactivated": { + "message": "Disattivato" + }, "sendLink": { "message": "Collegamento del Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Sei sicuro di voler rimuovere i seguenti utenti? Il processo potrebbe richiedere alcuni secondi per essere completato e non può essere interrotto o annullato." }, + "deactivateUsersWarning": { + "message": "Sei sicuro di voler disattivare i seguenti membri? Non avranno più accesso all'organizzazione, ma continueranno comunque ad avere accesso alle loro casseforti personali. Il processo può richiedere alcuni secondi e non può essere interrotto o annullato." + }, + "activateUsersWarning": { + "message": "Sei sicuro di voler attivare i seguenti membri, concedendogli l'accesso all'organizzazione? Il processo potrebbe richiedere alcuni secondi e non può essere interrotto o annullato." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Rimosso correttamente" }, + "bulkDeactivatedMessage": { + "message": "Disattivato con successo" + }, + "bulkActivatedMessage": { + "message": "Attivato con successo" + }, "bulkFilteredMessage": { "message": "Escluso, non applicabile per questa azione." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Rimuovi utenti" }, + "deactivateUsers": { + "message": "Disattiva utenti" + }, + "activateUsers": { + "message": "Attiva utenti" + }, "error": { "message": "Errore" }, @@ -4432,10 +4501,10 @@ "message": "Il timeout della tua cassaforte supera le restrizioni impostate dalla tua organizzazione." }, "vaultCustomTimeoutMinimum": { - "message": "Minimum custom timeout is 1 minute." + "message": "Il timeout minimo personalizzabile è di 1 minuto." }, "vaultTimeoutRangeError": { - "message": "Vault Timeout is not within allowed range." + "message": "Il timeout della cassaforte non è all'interno dell'intervallo consentito." }, "disablePersonalVaultExport": { "message": "Disabilita esportazione cassaforte personale" @@ -5077,19 +5146,19 @@ "message": "Token di accesso API" }, "deviceVerification": { - "message": "Device Verification" + "message": "Verifica del dispositivo" }, "enableDeviceVerification": { - "message": "Enable Device Verification" + "message": "Abilita la verifica del dispositivo" }, "deviceVerificationDesc": { - "message": "When enabled, verification codes are sent to your email address when logging in from an unrecognized device" + "message": "Se abilitato, i codici di verifica vengono inviati al tuo indirizzo email quando accedi da un dispositivo non riconosciuto" }, "updatedDeviceVerification": { - "message": "Updated Device Verification" + "message": "Verifica del dispositivo aggiornata" }, "areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX": { - "message": "Are you sure you want to enable Device Verification? The verification code emails will arrive at: $EMAIL$", + "message": "Sei sicuro di voler abilitare la verifica del dispositivo? Le email con il codice di verifica saranno inviate a: $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 69a3b50cfab..30d640265f8 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "ウェブ保管庫で使用する言語を変更します。" }, - "disableIcons": { - "message": "ウェブサイトアイコンの無効化" + "enableFavicon": { + "message": "ウェブサイトのアイコンを表示" }, - "disableIconsDesc": { - "message": "保管庫のアイテム毎にウェブサイトのアイコンを表示します。" + "faviconDesc": { + "message": "ログイン情報の隣にアイコン画像を表示します" }, "enableGravatars": { "message": "Gravatar を有効化", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "gravatar.com から読み込んだアバター画像を使います。" @@ -1238,6 +1238,9 @@ "enabled": { "message": "有効化されました" }, + "activate": { + "message": "有効にする" + }, "premium": { "message": "プレミアム版", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "無効化" }, + "deactivate": { + "message": "無効にする" + }, "twoStepLoginProviderEnabled": { "message": "この二段階認証プロバイダは、あなたのアカウントで有効になっています。" }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "本当にこのユーザーを削除してもよろしいですか?" }, + "deactivateUserConfirmation": { + "message": "メンバーはもう組織へのアクセス権を持っていませんが、個々の保管庫にアクセスすることはできます。" + }, + "activateUserConfirmation": { + "message": "このユーザーを有効にして、組織へのアクセスを許可してもよろしいですか?" + }, "removeUserConfirmationKeyConnector": { "message": "警告! このユーザーは暗号化を管理するためにキー コネクタが必要です。 このユーザーを組織から削除すると、アカウントが完全に無効になります。この操作は元に戻せません。続行しますか?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "ユーザー $ID$ を無効化しました。", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "ユーザー $ID$ を有効化しました。", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "ユーザー $ID$ を無効にしますか?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "ユーザー $ID$ を有効にしますか?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "アイテム「$ID$」の添付ファイルの作成", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "無効" }, + "deactivated": { + "message": "無効化済み" + }, "sendLink": { "message": "Send リンク", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "次のユーザーを削除してもよろしいですか?プロセスは完了まで数秒かかることがあり、中断またはキャンセルすることはできません。" }, + "deactivateUsersWarning": { + "message": "次のメンバーを無効にしてもよろしいですか? 彼らはもう組織にアクセスすることはできませんが、個々の保管庫にアクセスすることはできます。 プロセスは完了するまで数秒かかることがあり、中断またはキャンセルすることはできません。" + }, + "activateUsersWarning": { + "message": "次のメンバーを有効にして組織へのアクセスを許可しますか? プロセスは完了するまで数秒かかることがあり、中断またはキャンセルすることはできません。" + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "削除しました " }, + "bulkDeactivatedMessage": { + "message": "無効化しました" + }, + "bulkActivatedMessage": { + "message": "有効化しました" + }, "bulkFilteredMessage": { "message": "除外します。このアクションには適用されません。" }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "ユーザーを削除" }, + "deactivateUsers": { + "message": "ユーザーを無効化" + }, + "activateUsers": { + "message": "ユーザーを有効化" + }, "error": { "message": "エラー" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index a930e76fbf2..0e32e2dd533 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index a930e76fbf2..0e32e2dd533 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index a954c8bd642..820c37519af 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "ವೆಬ್ ವಾಲ್ಟ್ ಬಳಸುವ ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಿ." }, - "disableIcons": { - "message": "ವೆಬ್‌ಸೈಟ್ ಚಿಹ್ನೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "ವೆಬ್‌ಸೈಟ್ ಐಕಾನ್‌ಗಳು ನಿಮ್ಮ ವಾಲ್ಟ್‌ನಲ್ಲಿರುವ ಪ್ರತಿ ಲಾಗಿನ್ ಐಟಂನ ಪಕ್ಕದಲ್ಲಿ ಗುರುತಿಸಬಹುದಾದ ಚಿತ್ರವನ್ನು ಒದಗಿಸುತ್ತದೆ." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Gravatars ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Gravatar.com ನಿಂದ ಲೋಡ್ ಮಾಡಲಾದ ಅವತಾರ್ ಚಿತ್ರಗಳನ್ನು ಬಳಸಿ." @@ -1238,6 +1238,9 @@ "enabled": { "message": "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "ಪ್ರೀಮಿಯಮ್", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "ನಿಷ್‌ಕ್ರಿಯೆಗೊಳಿಸಿ" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "ಈ ಎರಡು ಹಂತದ ಲಾಗಿನ್ ಒದಗಿಸುವವರನ್ನು ನಿಮ್ಮ ಖಾತೆಯಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "ಈ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "ಐಟಂ $ID$ ಗಾಗಿ ಲಗತ್ತನ್ನು ರಚಿಸಲಾಗಿದೆ.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "ಲಿಂಕ್ ಕಳುಹಿಸಿ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "ಕೆಳಗಿನ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಪ್ರಕ್ರಿಯೆಯು ಪೂರ್ಣಗೊಳ್ಳಲು ಕೆಲವು ಸೆಕೆಂಡುಗಳು ತೆಗೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಅದನ್ನು ಅಡ್ಡಿಪಡಿಸಲು ಅಥವಾ ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "ಹೊರಗಿಡಲಾಗಿದೆ, ಈ ಕ್ರಿಯೆಗೆ ಅನ್ವಯಿಸುವುದಿಲ್ಲ." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "ದೋಷ" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index b148ec0c848..b9f07f19414 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "웹 보관함에서 사용할 언어를 변경합니다." }, - "disableIcons": { - "message": "웹 사이트 아이콘 사용 안 함" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "웹 사이트 아이콘을 사용하면 보관함 각 항목 옆에 이미지를 보여줍니다." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Gravatar 사용", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "gravatar.com의 아바타 이미지를 사용." @@ -1238,6 +1238,9 @@ "enabled": { "message": "활성화됨" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "프리미엄", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "비활성화" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "이 2단계 로그인 제공자는 귀하의 계정에 사용 가능합니다." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "정말 이 사용자를 제거하시겠습니까?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "$ID$ 항목에 첨부 파일을 만들었습니다.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "비활성화됨" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send 링크", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "정말로 다음 사용자를 삭제하시겠어요? 프로세스를 완료하는 데에는 몇 초 정도가 걸릴 수 있으며 도중에 중단하거나 취소할 수 없습니다." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "테마" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "성공적으로 제거됨" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "제외되었습니다. 이 작업에는 적용되지 않습니다." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "사용자 삭제" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "오류" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index f7c204df969..8faa6ed01bc 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Nomainīt tīmekļa glabātavā izmantoto valodu." }, - "disableIcons": { - "message": "Atspējot tīmekļa vietņu ikonas" + "enableFavicon": { + "message": "Rādīt vietņu ikonas" }, - "disableIconsDesc": { - "message": "Tīmekļa vietņu ikonas nodrošina atpazīstamu attēlu pie katra glabātavas pieteikšanās vienuma." + "faviconDesc": { + "message": "Attēlot atpazīstamu attēlu pie katra pierakstīšanās vienuma." }, "enableGravatars": { "message": "Iespējot Gravatārus", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Izmantot no gravatar.com ielādētus avatāra attēlus." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Iespējots" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Atspējot" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Šis divpakāpju pierakstīšanās nodrošinātājs ir iespējots kontā." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Vai tiešām noņemt šo lietotāju?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Uzmanību! Šim lietotājam ir nepieciešams Key Connector, lai pārvaldītu šifrēšanu. Lietotāja noņemšana no apvienības neatgriezeniski atspējos viņa kontu. Šī darbība nevar tikt atdarīta. Vai turpināt?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Izveidots pielikumu vienumam $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Atspējots" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "\"Send\" saite", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Vai tiešām noņemt šos lietotājus? Tas var aizņemt dažas sekundes un nevar tikt pārtraukts vai atcelts." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Izskats" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Veiksmīgi noņemts" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Nav iekļauts, tādēļ nav piemērojams šai darbībai." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Noņemt lietotājus" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Kļūda" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index 0779ee8531c..af3cb86c116 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "അപ്ലിക്കേഷൻ ഉപയോഗിക്കുന്ന ഭാഷ മാറ്റുക. പുനരാരംഭിക്കൽ ആവശ്യമാണ്." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "പ്രവർത്തനക്ഷമമാക്കി" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "പ്രീമിയം", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "പ്രവര്‍ത്തന രഹിതമാക്കുക" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "ഈ ഉപയോക്താവിനെ നീക്കംചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "അപ്രാപ്‌തമാക്കി" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "ലിങ്ക് അയയ്‌ക്കുക", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 511987c2dbe..71b96b032c4 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Endre språket som brukes av netthvelvet." }, - "disableIcons": { - "message": "Skru av nettstedsikoner" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Nettstedsikoner sørger for et gjenkjennelig bilde ved hvert innloggingselement i hvelvet ditt." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Skru på Gravatarer", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Bruk avatarbilder som har blitt lastet inn fra gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Aktivert" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Deaktiver" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Denne 2-trinnsleverandøren er aktivert på din konto." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Er du sikker på at du vil slette denne brukeren?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Advarsel! Denne brukeren krever nøkkelkobling for å administrere krypteringen. Fjerner du denne brukeren fra organisasjonen din vil deaktivere kontoen sin. Denne handlingen kan ikke angres. Vil du fortsette?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Lagde et vedlegg for $ID$-gjenstanden.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Deaktivert" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send lenke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Er du sikker på at du vil fjerne følgende brukere? Prosessen kan ta noen sekunder å fullføre og ikke kan avbrytes eller avbrytes." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Fjernet" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Unntatt dette, gjelder ikke for dette tiltaket." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Fjern brukere" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Feil" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index 074168fc011..345b112909c 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "De taal van de webkluis aanpassen." }, - "disableIcons": { - "message": "Websitepictogrammen uitschakelen" + "enableFavicon": { + "message": "Websitepictogrammen weergeven" }, - "disableIconsDesc": { - "message": "Websitepictogrammen geven een herkenbare afbeelding naast elk item in je kluis." + "faviconDesc": { + "message": "Een herkenbare afbeelding naast iedere login weergeven." }, "enableGravatars": { "message": "Gravatars activeren", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Gebruik avatar-afbeeldingen van gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Ingeschakeld" }, + "activate": { + "message": "Activeren" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Uitschakelen" }, + "deactivate": { + "message": "Deactiveren" + }, "twoStepLoginProviderEnabled": { "message": "Deze tweestapsaanmeldingsaanbieder is geactiveerd voor je account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Weet je zeker dat je deze gebruiker wilt verwijderen?" }, + "deactivateUserConfirmation": { + "message": "Dit lid heeft geen toegang meer tot de organisatie, maar heeft nog wel toegang tot de individuele kluis." + }, + "activateUserConfirmation": { + "message": "Weet je zeker dat je deze gebruiker wilt activeren en toegang tot de organisatie geven?" + }, "removeUserConfirmationKeyConnector": { "message": "Waarschuwing! Deze gebruiker vereist de Key Connector om de versleuteling te beheren. Als je deze gebruiker uit je organisatie verwijdert, wordt zijn account permanent uitgeschakeld. Deze actie kan niet ongedaan worden gemaakt. Wil je doorgaan?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Gebruiker $ID$ gedeactiveerd.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Gebruiker $ID$ geactiveerd.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Gebruiker $ID$ deactiveren?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Gebruiker $ID$ activeren?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Bijlage aangemaakt voor item $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Uitgeschakeld" }, + "deactivated": { + "message": "Gedeactiveerd" + }, "sendLink": { "message": "Send-koppeling", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Weet je zeker dat je de volgende gebruikers wilt verwijderen? Dit proces duurt enkele seconden en kan niet worden onderbroken of geannuleerd." }, + "deactivateUsersWarning": { + "message": "Weet je zeker dat je de volgende leden wilt deactiveren? Ze hebben dan geen toegang meer tot de organisatie. Dit process neemt een paar seconden in beslag en je kunt het niet onderbreken of annuleren." + }, + "activateUsersWarning": { + "message": "Weet je zeker dat je de volgende leden wilt activeren en ze toegang geven tot de organisatie? Dit process neemt een paar seconden in beslag en je kunt het niet onderbreken of annuleren." + }, "theme": { "message": "Thema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Succesvol verwijderd" }, + "bulkDeactivatedMessage": { + "message": "Succesvol gedeactiveerd" + }, + "bulkActivatedMessage": { + "message": "Succesvol geactiveerd" + }, "bulkFilteredMessage": { "message": "Uitgezonderd, niet van toepassing voor deze actie." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Gebruikers verwijderen" }, + "deactivateUsers": { + "message": "Gebruikers deactiveren" + }, + "activateUsers": { + "message": "Gebruikers activeren" + }, "error": { "message": "Fout" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index 802321f1c83..cee5cd365a6 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -555,7 +555,7 @@ "message": "Are you sure you want to log out?" }, "logOut": { - "message": "Log Out" + "message": "Log out" }, "ok": { "message": "Ok" @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Slå av" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index 2066c7e832b..d73a957910c 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Zmień język używany przez sejf." }, - "disableIcons": { - "message": "Wyłącz ikony stron" + "enableFavicon": { + "message": "Pokaż ikonkę strony" }, - "disableIconsDesc": { - "message": "Wyświetlaj rozpoznawalną ikonę serwisu obok danych logowania w sejfie." + "faviconDesc": { + "message": "Pokaż rozpoznawalny obrazek obok każdego elementu." }, "enableGravatars": { "message": "Włącz Gravatary", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Korzystaj ze zdjęć profilowych załadowanych z serwisu gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Włączone" }, + "activate": { + "message": "Aktywuj" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Wyłącz" }, + "deactivate": { + "message": "Dezaktywuj" + }, "twoStepLoginProviderEnabled": { "message": "Ten dostawca logowania dwustopniowego jest już włączony na koncie." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Czy na pewno chcesz usunąć tego użytkownika?" }, + "deactivateUserConfirmation": { + "message": "Użytkownik nie będzie już miał dostępu do organizacji, ale nadal będzie miał dostęp do swojego sejfu." + }, + "activateUserConfirmation": { + "message": "Czy na pewno chcesz aktywować tego użytkownika, przyznając mu dostęp do organizacji?" + }, "removeUserConfirmationKeyConnector": { "message": "Ostrzeżenie! Ten użytkownik wymaga serwera Key Connector do zarządzania szyfrowaniem. Usunięcie tego użytkownika z organizacji spowoduje trwałe wyłączenie jego konta. Nie możesz cofnąć tej akcji. Czy chcesz kontynuować?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Użytkownika $ID$ dezaktywowany.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Użytkownika $ID$ aktywowany.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Dezaktywować użytkownika $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Aktywować użytkownika $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Załącznik elementu $ID$ został utworzony.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Wyłączone" }, + "deactivated": { + "message": "Dezaktywowany" + }, "sendLink": { "message": "Link wysyłki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Czy na pewno chcesz usunąć następujących użytkowników? Proces może potrwać kilka sekund i nie może zostać przerwany lub anulowany." }, + "deactivateUsersWarning": { + "message": "Czy na pewno chcesz dezaktywować następujących użytkowników? Nie będą już mieli dostępu do organizacji, ale nadal będą mieli dostęp do swoich indywidualnych sejfów. Proces może potrwać kilka sekund i nie można go przerwać ani anulować." + }, + "activateUsersWarning": { + "message": "Czy na pewno chcesz aktywować następujących użytkowników, przyznając im dostęp do organizacji? Proces może potrwać kilka sekund i nie można go przerwać ani anulować." + }, "theme": { "message": "Motyw" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Usunięto" }, + "bulkDeactivatedMessage": { + "message": "Dezaktywowany pomyślnie" + }, + "bulkActivatedMessage": { + "message": "Aktywowany pomyślnie" + }, "bulkFilteredMessage": { "message": "Wykluczono, nie dotyczy tej akcji." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Usuń użytkowników" }, + "deactivateUsers": { + "message": "Dezaktywuj użytkowników" + }, + "activateUsers": { + "message": "Aktywuj użytkowników" + }, "error": { "message": "Błąd" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index 02777b17d6e..6b5155ff9fd 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -555,7 +555,7 @@ "message": "Você tem certeza que deseja sair?" }, "logOut": { - "message": "Encerrar Sessão" + "message": "Encerrar sessão" }, "ok": { "message": "Ok" @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Altere o idioma usado pelo cofre web." }, - "disableIcons": { - "message": "Desabilitar ícones dos sites" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "O ícone do site fornece um ícone reconhecível ao lado de cada credencial no seu cofre." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Habilitar Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use imagens de avatar carregadas do gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Habilitado" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Desabilitar" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Este provedor de login em duas etapas está ativado em sua conta." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Você tem certeza que deseja remover este(a) usuário(a)?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Aviso! Este usuário precisa do Conector de Chave para gerenciar sua criptografia. Remover este usuário de sua organização desativará permanentemente sua conta. Essa ação não pode ser desfeita. Você quer prosseguir?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Anexo criado para o item $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Desativado" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Link do Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Tem certeza de que deseja remover os seguintes usuários? O processo pode levar alguns segundos para ser concluído e não pode ser interrompido ou cancelado." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removido com sucesso" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluído, não aplicável para esta ação." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remover Usuários" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Erro" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index 9c261f3bfd9..b7069e5327c 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Alterar o idioma utilizado pelo cofre web." }, - "disableIcons": { - "message": "Desativar ícones de websites" + "enableFavicon": { + "message": "Mostrar ícones do site" }, - "disableIconsDesc": { - "message": "Os ícones de websites providenciam uma imagem reconhecível ao lado de cada item de credencial no seu cofre." + "faviconDesc": { + "message": "Mostre uma imagem reconhecível ao lado de cada login." }, "enableGravatars": { "message": "Ativar Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Utilizar imagens de avatar carregadas a partir de gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Ativado" }, + "activate": { + "message": "Ativar" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Desativar" }, + "deactivate": { + "message": "Desativar" + }, "twoStepLoginProviderEnabled": { "message": "Este provedor de início de sessão de dois passos está ativado na sua conta." }, @@ -1441,10 +1447,10 @@ "message": "Ocorreu um problema ao ler a chave de segurança. Tente novamente." }, "twoFactorWebAuthnWarning": { - "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when WebAuthn cannot be used. Supported platforms:" + "message": "Devido as limitações da plataforma, o WebAuthn não pode ser usado em todos os aplicativos do Bitwarden. Deve habilitar outro provedor de login de duas etapas para aceder à sua conta quando a WebAuthn não puder ser usada. Plataformas suportadas:" }, "twoFactorWebAuthnSupportWeb": { - "message": "Web vault and browser extensions on a desktop/laptop with a WebAuthn enabled browser (Chrome, Opera, Vivaldi, or Firefox with FIDO U2F enabled)." + "message": "Cofre web e extensões de navegador em um desktop/laptop com um navegador habilitado para WebAuthn (Chrome, Opera, Vivaldi ou Firefox com o FIDO U2F ativado)." }, "twoFactorRecoveryYourCode": { "message": "O seu código Bitwarden de recuperação de início de sessão de dois passos" @@ -1460,7 +1466,7 @@ "message": "Relatórios" }, "reportsDesc": { - "message": "Identify and close security gaps in your online accounts by clicking the reports below.", + "message": "Identifique e feche lacunas de segurança nas suas contas online clicando nos relatórios abaixo.", "description": "Vault Health Reports can be used to evaluate the security of your Bitwarden Personal or Organization Vault." }, "unsecuredWebsitesReport": { @@ -2226,8 +2232,14 @@ "removeUserConfirmation": { "message": "Tem a certeza de que pretende remover este utilizador?" }, + "deactivateUserConfirmation": { + "message": "O membro não terá mais acesso à organização, mas continuará a ter acesso ao seu cofre individual." + }, + "activateUserConfirmation": { + "message": "Tem a certeza de que deseja ativar este utilizador, concedendo-lhes o acesso à organização?" + }, "removeUserConfirmationKeyConnector": { - "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" + "message": "Atenção! Este utilizador requer o Key Connector para gerir a sua encriptação. Remover esse utilizador da sua organização desativará permanentemente a sua conta. Esta ação não pode ser desfeita. Você deseja continuar?" }, "externalId": { "message": "Id externo" @@ -2308,7 +2320,7 @@ "message": "O utilizador com acesso mais elevado que pode gerir todos os aspetos da sua organização." }, "clientOwnerDesc": { - "message": "This user should be independent of the Provider. If the Provider is disassociated with the organization, this user will maintain ownership of the organization." + "message": "Este utilizador deve ser independente do Provedor. Se o Provedor for desassociado da organização, este utilizador manterá a propriedade da organização." }, "admin": { "message": "Administrador" @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Utilizador $ID$ desativado.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Utilizador $ID$ editado.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Desativar o utilizador $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Ativar o utilizador $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Anexo para o item $ID$ criado.", "placeholders": { @@ -2842,10 +2890,10 @@ } }, "deletingOrganizationActiveUserAccountsWarning": { - "message": "User accounts will remain active after deletion but will no longer be associated to this organization." + "message": "As contas de utilizadores permanecerão ativas após a exclusão, mas não estarão mais associadas a essa organização." }, "deletingOrganizationIsPermanentWarning": { - "message": "Deleting $ORGANIZATION$ is permanent and irreversible.", + "message": "A exclusão de $ORGANIZATION$ é permanente e irreversível.", "placeholders": { "organization": { "content": "$1", @@ -2947,14 +2995,14 @@ "message": "Introduza o id da sua instalação" }, "limitSubscriptionDesc": { - "message": "Set a seat limit for your subscription. Once this limit is reached, you will not be able to invite new users." + "message": "Defina um limite de utilizadores para sua assinatura. Depois que este limite for atingido, não poderá convidar novos utilizadores." }, "maxSeatLimit": { "message": "Limite Máximo de Assentos (opcional)", "description": "Upper limit of seats to allow through autoscaling" }, "maxSeatCost": { - "message": "Max potential seat cost" + "message": "Custo máximo potencial de utilizadores" }, "addSeats": { "message": "Adicionar lugares", @@ -2965,7 +3013,7 @@ "description": "Seat = User Seat" }, "subscriptionDesc": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users." + "message": "Os ajustes à sua assinatura resultarão em alterações repartidas nos totais de faturamento. Se os utilizadores recém-convidados excederem o número de utilizadores na sua assinatura, receberá imediatamente uma cobrança proporcional pelos utilizadores adicionais." }, "subscriptionUserSeats": { "message": "A sua subscrição permite um total de $COUNT$ utilizadores.", @@ -2977,7 +3025,7 @@ } }, "limitSubscription": { - "message": "Limit Subscription (Optional)" + "message": "Assinatura Limite (Opcional)" }, "subscriptionSeats": { "message": "Assentos de Assinatura" @@ -3618,6 +3666,9 @@ "disabled": { "message": "Desabilitado" }, + "deactivated": { + "message": "Desativado" + }, "sendLink": { "message": "Enviar ligação", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Tem a certeza de que deseja desativar os seguintes membros? Deixarão de ter acesso à organização, e continuarão a ter acesso aos seus cofres individuais. O processo pode demorar alguns segundos para ser concluído e não pode ser interrompido ou cancelado." + }, + "activateUsersWarning": { + "message": "Tem a certeza de que deseja ativar os seguintes membros, concedendo-lhes acesso à organização? O processo pode demorar alguns segundos para ser concluído e não pode ser interrompido ou cancelado." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removido com sucesso" }, + "bulkDeactivatedMessage": { + "message": "Desativado com sucesso" + }, + "bulkActivatedMessage": { + "message": "Ativado com sucesso" + }, "bulkFilteredMessage": { "message": "Excluído, não aplicável para esta ação." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remover utilizadores" }, + "deactivateUsers": { + "message": "Desativar Utilizadores" + }, + "activateUsers": { + "message": "Ativar Utilizadores" + }, "error": { "message": "Erro" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 763b27d20f9..41603080ef2 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Alegeți limba în care folosiți seiful web." }, - "disableIcons": { - "message": "Dezactivare iconuri sait" + "enableFavicon": { + "message": "Afișare pictograme site web" }, - "disableIconsDesc": { - "message": "Iconurile saiturilor oferă o imagine identificabilă lângă fiecare element de conectare din seiful dvs." + "faviconDesc": { + "message": "Afișează o imagine ușor de recunoscut lângă fiecare autentificare." }, "enableGravatars": { - "message": "Activare Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Afișare Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Folosește imagini avatar încărcate de pe gravatar.com." }, "enableFullWidth": { - "message": "Activare aspect seif cu lățimea completă", + "message": "Afișare aspect pe toată lățimea", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Activat" }, + "activate": { + "message": "Activare" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Dezactivare" }, + "deactivate": { + "message": "Dezactivare" + }, "twoStepLoginProviderEnabled": { "message": "Acest furnizor de autentificare în două etape este activat în contul dvs." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Sigur doriți să eliminați acest utilizator?" }, + "deactivateUserConfirmation": { + "message": "Membrul nu va mai avea acces la organizație, dar va avea în continuare acces la seiful său individual." + }, + "activateUserConfirmation": { + "message": "Sunteți sigur că doriți să activați acest utilizator, acordându-i acces la organizație?" + }, "removeUserConfirmationKeyConnector": { "message": "Avertisment! Acest utilizator are nevoie de Conector Cheie pentru a-și gestiona criptarea. Eliminarea acestui utilizator din organizația dvs., îi va dezactiva permanent contul. Această acțiune nu poate fi anulată. Doriți să continuați?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "S-a dezactivat utilizatorul $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "S-a activat utilizatorul $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Dezactivați utilizatorul $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activați utilizatorul $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Atașamentul elementului $ID$ a fost creat.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filtre" }, "vaultTimeout": { - "message": "Expirare seif" + "message": "Timp de expirare seif" }, "vaultTimeoutDesc": { - "message": "Determină când seiful dvs. va expira și va efectua acțiunea selectată." + "message": "Alegeți când se va efectua acțiunea selectată la expirarea seifului." }, "oneMinute": { "message": "1 minut" @@ -3148,7 +3196,7 @@ "message": "4 ore" }, "onRefresh": { - "message": "La reîmprospătarea browserului" + "message": "La împrospătarea browserului" }, "dateUpdated": { "message": "S-a actualizat", @@ -3358,10 +3406,10 @@ "message": "Acțiune la expirarea seifului" }, "vaultTimeoutActionLockDesc": { - "message": "Un seif blocat necesită reintroducerea parolei principale pentru a-l accesa din nou." + "message": "Este necesară parola principală sau o altă metodă de deblocare pentru a vă accesa din nou seiful." }, "vaultTimeoutActionLogOutDesc": { - "message": "Un seif deconectat necesită reautentificarea pentru a-l accesa din nou." + "message": "Este necesară o nouă autentificare pentru a vă accesa din nou seiful." }, "lock": { "message": "Blocare", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Dezactivat" }, + "deactivated": { + "message": "Dezactivat" + }, "sendLink": { "message": "Link Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Sunteți sigur că doriți să eliminați următorii utilizatori? Finalizarea procesului poate dura câteva secunde și nu poate fi întrerupt sau anulat." }, + "deactivateUsersWarning": { + "message": "Sunteți sigur că doriți să dezactivați următorii membri? Aceștia nu vor mai avea acces la organizație, dar vor avea în continuare acces la seifurile lor individuale. Procesul poate dura câteva secunde pentru a se finaliza și nu poate fi întrerupt sau anulat." + }, + "activateUsersWarning": { + "message": "Sunteți sigur că doriți să activați următorii membri, acordându-le acces la organizație? Finalizarea procesului poate dura câteva secunde și nu poate fi întreruptă sau anulată." + }, "theme": { "message": "Temă" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Eliminat cu succes" }, + "bulkDeactivatedMessage": { + "message": "S-a dezactivat cu succes" + }, + "bulkActivatedMessage": { + "message": "S-a activat cu succes" + }, "bulkFilteredMessage": { "message": "Exclus, nu se aplică pentru această acțiune." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Eliminați utilizatorii" }, + "deactivateUsers": { + "message": "Dezactivare utilizatori" + }, + "activateUsers": { + "message": "Activare utilizatori" + }, "error": { "message": "Eroare" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index 9f7e32f0500..6dba7fdde01 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -555,7 +555,7 @@ "message": "Вы действительно хотите выйти?" }, "logOut": { - "message": "Выйти" + "message": "Выход" }, "ok": { "message": "Ok" @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Изменение языка, используемого веб-хранилищем." }, - "disableIcons": { - "message": "Отключить значки веб-сайтов" + "enableFavicon": { + "message": "Показать значки сайтов" }, - "disableIconsDesc": { - "message": "Значки веб-сайтов отображаются рядом с каждым элементом в вашем хранилище." + "faviconDesc": { + "message": "Отображать узнаваемое изображение рядом с каждым логином." }, "enableGravatars": { "message": "Включить Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Использовать аватары с сайта gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Включено" }, + "activate": { + "message": "Активировать" + }, "premium": { "message": "Премиум", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Выключить" }, + "deactivate": { + "message": "Деактивировать" + }, "twoStepLoginProviderEnabled": { "message": "Этот провайдер двухфакторной аутентификации включен для вашего аккаунта." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Вы действительно хотите удалить этого пользователя?" }, + "deactivateUserConfirmation": { + "message": "У участника больше не будет доступа к организации, но у него останется доступ к своему личному хранилищу." + }, + "activateUserConfirmation": { + "message": "Вы уверены, что хотите активировать этого пользователя, предоставив ему доступ к организации?" + }, "removeUserConfirmationKeyConnector": { "message": "Внимание! Этому пользователю необходим соединитель ключей для управления шифрованием. Удаление этого пользователя из вашей организации приведет к окончательному отключению его учетной записи. Это действие нельзя отменить. Вы хотите продолжить?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Пользователь деактивирован $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Пользователь активирован $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Деактивировать пользователя $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Активировать пользователя $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Создано вложение в элементе $ID$.", "placeholders": { @@ -3358,10 +3406,10 @@ "message": "Действие по тайм-ауту хранилища" }, "vaultTimeoutActionLockDesc": { - "message": "Заблокированное хранилище потребует повторного ввода мастер-пароля для получения доступа к нему." + "message": "Чтобы снова получить доступ к заблокированному хранилищу, нужно повторно ввести мастер-пароль." }, "vaultTimeoutActionLogOutDesc": { - "message": "Выход из хранилища потребует повторную аутентификацию для получения доступа к нему." + "message": "Чтобы получить доступ к хранилищу после выхода из него требуется повторная авторизация." }, "lock": { "message": "Заблокировать", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Отключено" }, + "deactivated": { + "message": "Деактивирован" + }, "sendLink": { "message": "Ссылка на Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Вы уверены, что хотите удалить следующих пользователей? Процесс может занять несколько секунд и не может быть прерван или отменен." }, + "deactivateUsersWarning": { + "message": "Вы действительно хотите деактивировать следующих участников? У них больше не будет доступа к организации, но останется доступ к их личным хранилищам. Процесс может занять несколько секунд, и его нельзя прервать или отменить." + }, + "activateUsersWarning": { + "message": "Вы действительно хотите активировать следующих участников, предоставив им доступ к организации? Процесс может занять несколько секунд и не может быть прерван или отменен." + }, "theme": { "message": "Тема" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Удален(-о) успешно" }, + "bulkDeactivatedMessage": { + "message": "Деактивирован успешно" + }, + "bulkActivatedMessage": { + "message": "Активирован успешно" + }, "bulkFilteredMessage": { "message": "Исключено, не применимо для данного действия." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Удалить пользователей" }, + "deactivateUsers": { + "message": "Деактивировать пользователей" + }, + "activateUsers": { + "message": "Активировать пользователей" + }, "error": { "message": "Ошибка" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index a2876f7aa9c..c92172b87ef 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Disable Website Icons" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Enabled" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index cbf49c4fcc6..7eb9dab56f5 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Zmeňte východzí jazyk pre webový trezor." }, - "disableIcons": { - "message": "Nezobrazovať ikony stránok" + "enableFavicon": { + "message": "Zobraziť favikony" }, - "disableIconsDesc": { - "message": "Ikony stránok poskytujú rozoznateľný obrázok vedľa každého prihlasovacieho údaju vo webovom trezore." + "faviconDesc": { + "message": "Pri každom prihlásení zobraziť rozpoznateľný obrázok." }, "enableGravatars": { - "message": "Povoliť Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Zobraziť Gravatary", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Použiť avatar obrázky načítané z gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Povolené" }, + "activate": { + "message": "Aktivovať" + }, "premium": { "message": "Prémium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Vypnúť" }, + "deactivate": { + "message": "Deaktivovať" + }, "twoStepLoginProviderEnabled": { "message": "Tento poskytovateľ overenia je povolený pre váš účet." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Skutočne chcete odobrať tohto užívateľa?" }, + "deactivateUserConfirmation": { + "message": "Člen už nebude mať prístup do organizácie, ale stále bude mať prístup do svojho individuálneho trezoru." + }, + "activateUserConfirmation": { + "message": "Naozaj chcete aktivovať tohto používateľa a udeliť mu prístup do organizácie?" + }, "removeUserConfirmationKeyConnector": { "message": "Upozornenie! Tento používateľ potrebuje na správu svojho šifrovania aplikáciu Key Connector. Odstránením tohto používateľa z vašej organizácie sa jeho účet natrvalo deaktivuje. Túto akciu nie je možné vrátiť späť. Chcete pokračovať?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deaktivovaný používateľ $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Aktivovaný používateľ $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deaktivovať používateľa $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Aktivovať používateľa $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Vytvorená príloha k položke $ID$.", "placeholders": { @@ -3148,7 +3196,7 @@ "message": "4 hodiny" }, "onRefresh": { - "message": "Pri obnovení stránky" + "message": "Pri obnovení prehliadača" }, "dateUpdated": { "message": "Aktualizované", @@ -3358,7 +3406,7 @@ "message": "Akcia pri vypršaní času pre trezor" }, "vaultTimeoutActionLockDesc": { - "message": "Uzamknutý trezor sa dá odomknúť opätovným zadaním hlavného hesla." + "message": "Uzamknutý trezor sa dá odomknúť opätovným zadaním hlavného hesla alebo iným spôsobom odomknutia." }, "vaultTimeoutActionLogOutDesc": { "message": "Odlhásený trezor bude vyžadovať opätovné prihlásenie aby ste k nemu mohli pristupovať." @@ -3618,6 +3666,9 @@ "disabled": { "message": "Vypnuté" }, + "deactivated": { + "message": "Deaktivovaný" + }, "sendLink": { "message": "Odkaz na Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Naozaj chcete odstrániť týchto používateľov? Dokončenie procesu môže trvať niekoľko sekúnd a nie je možné ho prerušiť ani zrušiť." }, + "deactivateUsersWarning": { + "message": "Naozaj chcete deaktivovať týchto členov? Už nebudú mať prístup do organizácie, ale stále budú mať prístup do svojich individuálnych trezorov. Dokončenie procesu môže trvať niekoľko sekúnd a nie je možné ho prerušiť ani zrušiť." + }, + "activateUsersWarning": { + "message": "Naozaj chcete aktivovať týchto členov a udeliť im prístup do organizácie? Dokončenie procesu môže trvať niekoľko sekúnd a nie je možné ho prerušiť ani zrušiť." + }, "theme": { "message": "Motív" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Odstránenie úspešné" }, + "bulkDeactivatedMessage": { + "message": "Úspešne deaktivovaný" + }, + "bulkActivatedMessage": { + "message": "Úspešne aktivovaný" + }, "bulkFilteredMessage": { "message": "Vylúčené, neplatí pre túto akciu." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Odstrániť používateľov" }, + "deactivateUsers": { + "message": "Deaktivovať používateľov" + }, + "activateUsers": { + "message": "Aktivovať používateľov" + }, "error": { "message": "Chyba" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index 9995e2196d6..d69a433ac01 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Change the language used by the web vault." }, - "disableIcons": { - "message": "Onemogoči ikone spletnih mest" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Omogočeno" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Onemogočeno" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index 4533420629d..ce5d110eb00 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Променити језик за Сеф." }, - "disableIcons": { - "message": "Угаси иконице сајта" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Иконе веб сајта пружају препознатљиву слику поред сваке пријаву у сефу." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Омогући Gravatar", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Користите слике аватара учитане са gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Омогућено" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Премијум", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Онемогући" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Овај добављач услуге пријављивања у два корака је омогућен на вашем налогу." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Да ли сте сигурни да желите да уклоните овог корисника?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Упозорење! Овај корисник захтева Key Connector да управља њиховом шифровањем. Уклањање овог корисника из ваше организације трајно ће онемогућити њихов рачун. Ова радња се не може поништити. Да ли желите да наставите?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Креиран прилог за $ID$.", "placeholders": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Онемогућено" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "УРЛ „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Јесте ли сигурни да желите да уклоните следеће кориснике? Процес може потрајати неколико секунди да се заврши, и не може се прекинути или отказати." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Тема" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Успешно уклоњено" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Искључено, није применљиво за ову акцију." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Уклони кориснике" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Грешка" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index ad44d2e4449..390bc5acf7c 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Promenite jezik veb trezora." }, - "disableIcons": { - "message": "Onemogućite Ikonice Vebsajta" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Vebsajt ikonice predstavljaju prepoznatljivu sliku koja stoji pored svake stavke za prijavljivanje u Vašem trezoru." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Omogućite Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Omogućeno" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premijum", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Disable" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filteri" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 minute" @@ -3148,7 +3196,7 @@ "message": "4 hours" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Updated", @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Lock", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Disabled" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send link", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index 01435b65de7..c2b1f6a1719 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -437,7 +437,7 @@ "message": "Valv" }, "vaultItems": { - "message": "Vault Items" + "message": "Valvobjekt" }, "moveSelectedToOrg": { "message": "Flytta valda till organisation" @@ -1137,13 +1137,13 @@ "message": "Alternativ" }, "preferences": { - "message": "Preferences" + "message": "Inställningar" }, "preferencesDesc": { - "message": "Customize your web vault experience." + "message": "Anpassa din upplevelse för webbvalvet." }, "preferencesUpdated": { - "message": "Preferences updated" + "message": "Inställningar uppdaterade" }, "language": { "message": "Språk" @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Ändra språket som används i webbvalvet." }, - "disableIcons": { - "message": "Inaktivera webbplatsikoner" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Webbplatsikoner ger en igenkännbar ikon bredvid varje inloggningsobjekt i ditt valv." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { "message": "Aktivera gravatarer", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Använd avatarbilder hämtade från gravatar.com." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Aktiverad" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Inaktivera" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Denna metod för tvåstegsverifiering är aktiverad på ditt konto." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Är du säker på att du vill ta bort denna användare?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Skapade bilaga för objektet $ID$.", "placeholders": { @@ -3564,11 +3612,11 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { - "message": "Edited Send", + "message": "Redigerad Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletedSend": { - "message": "Deleted Send", + "message": "Raderad Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSend": { @@ -3587,7 +3635,7 @@ "message": "Raderingsdatum" }, "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "message": "Denna Send kommer att raderas permanent på angivet datum och klockslag.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -3618,6 +3666,9 @@ "disabled": { "message": "Inaktiverad" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Länk till Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Är du säker på att du vill ta bort följande användare? Processen kan ta några sekunder att slutföra och kan inte pausas eller avbrytas." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Tog bort" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Exkluderad, inte tillämplig för denna åtgärd." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Ta bort användare" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Fel" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index a8e8366a58e..c299e7216ab 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -1151,15 +1151,15 @@ "languageDesc": { "message": "Web kasasında kullanılan dili değiştirin." }, - "disableIcons": { - "message": "Site simgelerini devre dışı bırak" + "enableFavicon": { + "message": "Web sitesi simgelerini göster" }, - "disableIconsDesc": { - "message": "Web sitesi simgeleri, kasanızdaki her kaydın yanında o siteyi tanımanıza yardımcı olan bir resim sunar." + "faviconDesc": { + "message": "Hesapların yanında tanıdık görseller göster." }, "enableGravatars": { - "message": "Gravatar'ı etkinleştir", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Gravatar'ı Etkinleştir", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "gravatar.com adresinden yüklenen avatarları kullan." @@ -1238,6 +1238,9 @@ "enabled": { "message": "Etkin" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Premium", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Devre dışı bırak" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "Bu iki aşamalı giriş sağlayıcısı hesabınızda etkin durumda." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Bu kullanıcıyı silmek istediğinizden emin misiniz?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Uyarı! Bu kullanıcı, şifrelemelerini yönetmek için Key Connector'a ihtiyaç duyuyor. Bu kullanıcıyı kuruluşunuzdan çıkarırsanız hesabı kalıcı olarak devre dışı kalacaktır. Bu işlem geri alınamaz. Devam etmek istiyor musunuz?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "$ID$ için bir ek oluşturuldu.", "placeholders": { @@ -3148,7 +3196,7 @@ "message": "4 saat" }, "onRefresh": { - "message": "On Browser Refresh" + "message": "On browser refresh" }, "dateUpdated": { "message": "Güncelleme", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Devre dışı" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Send bağlantısı", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Aşağıdaki kullanıcıları kaldırmak istediğinize emin misiniz? İşlemin tamamlanması birkaç saniye sürer ve durdurulamaz veya iptal edilemez." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Tema" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Başarıyla kaldırıldı" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "İstisna. Bu eylem için geçerli değildir." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Kullanıcıları kaldır" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Hata" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index 2d50d3a0b19..2ca96f92132 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Змінити мову інтерфейсу веб сховища." }, - "disableIcons": { - "message": "Вимкнути піктограми вебсайтів" + "enableFavicon": { + "message": "Показувати піктограми вебсайтів" }, - "disableIconsDesc": { - "message": "Впізнавані піктограми вебсайтів додаються біля кожного запису вашого сховища." + "faviconDesc": { + "message": "Показувати впізнаване зображення біля кожного запису." }, "enableGravatars": { - "message": "Увімкнути Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Показувати Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Використовувати зображення профілю завантажені з gravatar.com." }, "enableFullWidth": { - "message": "Увімкнути макет повної ширини", + "message": "Показувати на всю ширину сторінки", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Увімкнено" }, + "activate": { + "message": "Активувати" + }, "premium": { "message": "Преміум", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Вимкнути" }, + "deactivate": { + "message": "Деактивувати" + }, "twoStepLoginProviderEnabled": { "message": "Для вашого облікового запису увімкнено цей спосіб двоетапної перевірки." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Ви справді хочете вилучити цього користувача?" }, + "deactivateUserConfirmation": { + "message": "Учасник більше не матиме доступу до організації, але й надалі може користуватися особистим сховищем." + }, + "activateUserConfirmation": { + "message": "Ви дійсно хочете активувати цього користувача, надаючи йому доступ до організації?" + }, "removeUserConfirmationKeyConnector": { "message": "Попередження! Цей користувач потребує Key Connector для керування шифруванням. Вилучення цього користувача з вашої організації остаточно вимкне його обліковий запис. Цю дію неможливо скасувати. Ви хочете продовжити?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Деактивований користувач $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Активований користувач $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Деактивувати користувача $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Активувати користувача $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Створено вкладення для елемента $ID$.", "placeholders": { @@ -3127,7 +3175,7 @@ "message": "Час очікування сховища" }, "vaultTimeoutDesc": { - "message": "Оберіть дію, яка виконається після завершення часу очікування вашого сховища." + "message": "Оберіть дію, яка виконається після завершення часу очікування сховища." }, "oneMinute": { "message": "1 хвилина" @@ -3148,7 +3196,7 @@ "message": "4 години" }, "onRefresh": { - "message": "Перезавантаження сторінки" + "message": "Оновлення сторінки" }, "dateUpdated": { "message": "Оновлено", @@ -3358,10 +3406,10 @@ "message": "Дія після часу очікування сховища" }, "vaultTimeoutActionLockDesc": { - "message": "Щоб відновити доступ до заблокованого сховища, необхідно повторно ввести головний пароль." + "message": "Щоб відновити доступ до сховища, необхідно ввести головний пароль або скористатись іншим способом розблокування." }, "vaultTimeoutActionLogOutDesc": { - "message": "Щоб відновити доступ до сховища після виходу, необхідно повторно авторизуватись." + "message": "Щоб відновити доступ до сховища, необхідно повторно авторизуватись." }, "lock": { "message": "Блокувати", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Вимкнено" }, + "deactivated": { + "message": "Деактивовано" + }, "sendLink": { "message": "Посилання на відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Ви дійсно хочете вилучити зазначених користувачів? Цей процес може тривати кілька секунд і його неможливо перервати чи скасувати." }, + "deactivateUsersWarning": { + "message": "Ви дійсно хочете деактивувати зазначених учасників? Вони більше не матимуть доступу до організації, але й надалі можуть користуватися особистим сховищем. Процес може тривати кілька секунд і його не можна перервати чи скасувати." + }, + "activateUsersWarning": { + "message": "Ви дійсно хочете активувати зазначених учасників, надаючи їм доступ до організації? Процес може тривати кілька секунд і його не можна перервати чи скасувати." + }, "theme": { "message": "Тема" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Успішно вилучено" }, + "bulkDeactivatedMessage": { + "message": "Успішно деактивовано" + }, + "bulkActivatedMessage": { + "message": "Успішно активовано" + }, "bulkFilteredMessage": { "message": "Виключено, не застосовується для цієї дії." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Вилучити користувачів" }, + "deactivateUsers": { + "message": "Деактивувати користувачів" + }, + "activateUsers": { + "message": "Активувати користувачів" + }, "error": { "message": "Помилка" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index 02ca9d39ec2..be946bbb524 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "Thay đổi ngôn ngữ của kho mạng." }, - "disableIcons": { - "message": "Vô hiệu hóa icon website" + "enableFavicon": { + "message": "Show website icons" }, - "disableIconsDesc": { - "message": "Website Icons provide a recognizable image next to each login item in your vault." + "faviconDesc": { + "message": "Show a recognizable image next to each login." }, "enableGravatars": { - "message": "Enable Gravatars", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "Show Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "Use avatar images loaded from gravatar.com." }, "enableFullWidth": { - "message": "Enable Full Width Layout", + "message": "Display full width layout", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "Kích hoạt" }, + "activate": { + "message": "Activate" + }, "premium": { "message": "Cao cấp", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "Vô hiệu hoá" }, + "deactivate": { + "message": "Deactivate" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "Are you sure you want to remove this user?" }, + "deactivateUserConfirmation": { + "message": "The member will no longer have access to the organization, but will still have access to their individual vault." + }, + "activateUserConfirmation": { + "message": "Are you sure you want to activate this user, granting them access to the organization?" + }, "removeUserConfirmationKeyConnector": { "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently disable their account. This action cannot be undone. Do you want to proceed?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "Deactivated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "Activated user $ID$.", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "Deactivate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "Activate user $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "Created attachment for item $ID$.", "placeholders": { @@ -3124,10 +3172,10 @@ "message": "Filters" }, "vaultTimeout": { - "message": "Vault Timeout" + "message": "Vault timeout" }, "vaultTimeoutDesc": { - "message": "Choose when your vault will timeout and perform the selected action." + "message": "Choose when your vault will take the vault timeout action." }, "oneMinute": { "message": "1 phút" @@ -3355,13 +3403,13 @@ "message": "User Preference" }, "vaultTimeoutAction": { - "message": "Vault Timeout Action" + "message": "Vault timeout action" }, "vaultTimeoutActionLockDesc": { - "message": "A locked vault requires that you re-enter your master password to access it again." + "message": "Master password or other unlock method is required to access your vault again." }, "vaultTimeoutActionLogOutDesc": { - "message": "A logged out vault requires that you re-authenticate to access it again." + "message": "Re-authentication is required to access your vault again." }, "lock": { "message": "Khóa", @@ -3618,6 +3666,9 @@ "disabled": { "message": "Đã tắt" }, + "deactivated": { + "message": "Deactivated" + }, "sendLink": { "message": "Gửi liên kết", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." }, + "deactivateUsersWarning": { + "message": "Are you sure you want to deactivate the following members? They will no longer have access to the organization, but will still have access to their individual vaults. The process may take a few seconds to complete and cannot be interrupted or canceled." + }, + "activateUsersWarning": { + "message": "Are you sure you want to activate the following members, granting them access to the organization? The process may take a few seconds to complete and cannot be interrupted or canceled." + }, "theme": { "message": "Theme" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "Removed successfully" }, + "bulkDeactivatedMessage": { + "message": "Deactivated successfully" + }, + "bulkActivatedMessage": { + "message": "Activated successfully" + }, "bulkFilteredMessage": { "message": "Excluded, not applicable for this action." }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "Remove Users" }, + "deactivateUsers": { + "message": "Deactivate Users" + }, + "activateUsers": { + "message": "Activate Users" + }, "error": { "message": "Error" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index cdc0ceb3867..5ef2219034c 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "更改网页密码库的语言。" }, - "disableIcons": { - "message": "禁用网站图标" + "enableFavicon": { + "message": "显示网站图标" }, - "disableIconsDesc": { - "message": "网站图标用于在您密码库的每个登录项目旁显示一个易识别的图标。" + "faviconDesc": { + "message": "在每个登录旁显示一个可识别的图像。" }, "enableGravatars": { - "message": "启用 Gravatar 头像", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "显示 Gravatar 头像", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "使用从 gravatar.com 加载的头像图像。" }, "enableFullWidth": { - "message": "启用全宽布局", + "message": "显示全宽布局", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "启用" }, + "activate": { + "message": "激活" + }, "premium": { "message": "高级会员", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "停用" }, + "deactivate": { + "message": "停用" + }, "twoStepLoginProviderEnabled": { "message": "您的账户已启用此两步登录提供程序。" }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "您确实要移除此用户吗?" }, + "deactivateUserConfirmation": { + "message": "该用户将无法再访问本组织,但仍可以访问其个人密码库。" + }, + "activateUserConfirmation": { + "message": "您确定要激活此用户,授予他们访问本组织的权限吗?" + }, "removeUserConfirmationKeyConnector": { "message": "警告!此用户需要 Key Connector 来管理他们的加密。从您的组织中移除此用户将永久禁用他们的账户。此操作无法撤消。您要继续吗?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "已停用的用户 $ID$。", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "已激活的用户 $ID$。", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "停用用户 $ID$ 吗?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "激活用户 $ID$ 吗?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "已为项目 $ID$ 创建附件。", "placeholders": { @@ -3127,7 +3175,7 @@ "message": "密码库超时时间" }, "vaultTimeoutDesc": { - "message": "选择您的密码库何时超时并执行所选的动作。" + "message": "选择您的密码库何时执行密码库超时动作。" }, "oneMinute": { "message": "1 分钟" @@ -3148,7 +3196,7 @@ "message": "4 小时" }, "onRefresh": { - "message": "在浏览器刷新时" + "message": "浏览器刷新时" }, "dateUpdated": { "message": "更新于", @@ -3358,10 +3406,10 @@ "message": "密码库超时动作" }, "vaultTimeoutActionLockDesc": { - "message": "已锁定的密码库需要重新输入主密码才能再次访问。" + "message": "需要主密码或其他解锁方式才能再次访问您的密码库。" }, "vaultTimeoutActionLogOutDesc": { - "message": "已注销的密码库需要重新验证才能再次访问。" + "message": "需要重新验证才能再次访问您的密码库。" }, "lock": { "message": "锁定", @@ -3618,6 +3666,9 @@ "disabled": { "message": "已禁用" }, + "deactivated": { + "message": "已停用" + }, "sendLink": { "message": "Send 链接", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "您确定要移除以下用户吗?该过程可能需要几秒钟才能完成,并且不能中断或取消。" }, + "deactivateUsersWarning": { + "message": "您确定要停用以下成员吗?他们将无法再访问该组织,但仍可以访问其个人密码库。该过程可能需要几秒钟才能完成,并且不能被中断或取消。" + }, + "activateUsersWarning": { + "message": "您确定要激活以下成员,授予他们对组织的访问权限吗?该过程可能需要几秒钟才能完成,并且不能被中断或取消。" + }, "theme": { "message": "主题" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "移除成功" }, + "bulkDeactivatedMessage": { + "message": "停用成功" + }, + "bulkActivatedMessage": { + "message": "激活成功" + }, "bulkFilteredMessage": { "message": "排除,不适用于此操作。" }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "移除用户" }, + "deactivateUsers": { + "message": "停用用户" + }, + "activateUsers": { + "message": "激活用户" + }, "error": { "message": "错误" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 2f74b6090e9..02b8c47d376 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -1151,21 +1151,21 @@ "languageDesc": { "message": "變更網頁版密碼庫使用的語言。" }, - "disableIcons": { - "message": "停用網站圖示顯示功能" + "enableFavicon": { + "message": "顯示網站圖示" }, - "disableIconsDesc": { - "message": "在您密碼庫的每個登入資料旁顯示一個可辨識的圖示。" + "faviconDesc": { + "message": "在每個登入資料旁顯示一個可辨識的圖片。" }, "enableGravatars": { - "message": "啟用 Gravatars 頭像", - "description": "'Gravatar' is the name of a service. See www.gravatar.com" + "message": "顯示 Gravatars", + "description": "Use avatar images loaded from gravatar.com." }, "enableGravatarsDesc": { "message": "載入 gravatar.com 上的頭像圖片。" }, "enableFullWidth": { - "message": "啟用全寬度版面配置", + "message": "顯示全寬度版面配置", "description": "Allows scaling the web vault UI's width" }, "enableFullWidthDesc": { @@ -1238,6 +1238,9 @@ "enabled": { "message": "已啟用" }, + "activate": { + "message": "啟用" + }, "premium": { "message": "進階版", "description": "Premium Membership" @@ -1263,6 +1266,9 @@ "disable": { "message": "停用" }, + "deactivate": { + "message": "停用" + }, "twoStepLoginProviderEnabled": { "message": "您的帳戶已啟用兩步驟登入。" }, @@ -2226,6 +2232,12 @@ "removeUserConfirmation": { "message": "您確定要移除此使用者?" }, + "deactivateUserConfirmation": { + "message": "該成員將無法再存取該組織,但仍可以存取其個人密碼庫。" + }, + "activateUserConfirmation": { + "message": "您確定要啟用以下使用者,授予他們對組織的存取權限嗎?" + }, "removeUserConfirmationKeyConnector": { "message": "警告!這位使用者需要 Key Connector 管理他們的加密方式。從您的組織中移除這位使用者,會永久停用他們的帳戶。此操作無法復原,是否繼續?" }, @@ -2571,6 +2583,42 @@ } } }, + "deactivatedUserId": { + "message": "使用者 $ID$ 已停用。", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activatedUserId": { + "message": "使用者 $ID$ 已啟用。", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "deactivateUserId": { + "message": "停用使用者 $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, + "activateUserId": { + "message": "啟用使用者 $ID$?", + "placeholders": { + "id": { + "content": "$1", + "example": "John Smith" + } + } + }, "createdAttachmentForItem": { "message": "已為項目 $ID$ 建立附件。", "placeholders": { @@ -3127,7 +3175,7 @@ "message": "密碼庫逾時時間" }, "vaultTimeoutDesc": { - "message": "選擇密碼庫多久之後才會逾時並執行選取動作。" + "message": "選擇密碼庫何時執行密碼庫逾時動作。" }, "oneMinute": { "message": "1 分鐘" @@ -3148,7 +3196,7 @@ "message": "4 小時" }, "onRefresh": { - "message": "瀏覽器重新重新整理時" + "message": "於瀏覽器重新整理時" }, "dateUpdated": { "message": "已更新", @@ -3358,10 +3406,10 @@ "message": "密碼庫逾時動作" }, "vaultTimeoutActionLockDesc": { - "message": "鎖定密碼庫後需要重新輸入主密碼才能再次存取。" + "message": "需要主密碼或其他解鎖方式才能再次存取密碼庫。" }, "vaultTimeoutActionLogOutDesc": { - "message": "登出密碼庫後需要重新驗證才能再次存取。" + "message": "需要重新驗證才能再次存取密碼庫。" }, "lock": { "message": "鎖定", @@ -3618,6 +3666,9 @@ "disabled": { "message": "已停用" }, + "deactivated": { + "message": "已停用" + }, "sendLink": { "message": "Send 連結", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4219,6 +4270,12 @@ "removeUsersWarning": { "message": "您確定要移除以下使用者嗎?這可能需要幾秒鐘的時間,並且不能中斷或取消。" }, + "deactivateUsersWarning": { + "message": "您確定要停用以下成員嗎? 他們將無法再存取該組織,但仍可以存取其個人密碼庫。該過程可能需要幾秒鐘的時間,並且不能中斷或取消。" + }, + "activateUsersWarning": { + "message": "您確定要啟用以下成員,授予他們對組織的存取權限嗎? 該過程可能需要幾秒鐘的時間,並且不能中斷或取消。" + }, "theme": { "message": "主題" }, @@ -4249,6 +4306,12 @@ "bulkRemovedMessage": { "message": "已成功移除。" }, + "bulkDeactivatedMessage": { + "message": "停用成功" + }, + "bulkActivatedMessage": { + "message": "啟用成功" + }, "bulkFilteredMessage": { "message": "已排除,不適用於此動作。" }, @@ -4258,6 +4321,12 @@ "removeUsers": { "message": "移除使用者" }, + "deactivateUsers": { + "message": "停用使用者" + }, + "activateUsers": { + "message": "啟用使用者" + }, "error": { "message": "錯誤" }, @@ -5097,4 +5166,4 @@ } } } -} \ No newline at end of file +} diff --git a/apps/web/src/services/htmlStorage.service.ts b/apps/web/src/services/htmlStorage.service.ts index 2b3614d2109..680051aa858 100644 --- a/apps/web/src/services/htmlStorage.service.ts +++ b/apps/web/src/services/htmlStorage.service.ts @@ -1,11 +1,11 @@ import { Injectable } from "@angular/core"; -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { HtmlStorageLocation } from "@bitwarden/common/enums/htmlStorageLocation"; import { StorageOptions } from "@bitwarden/common/models/domain/storageOptions"; @Injectable() -export class HtmlStorageService implements StorageService { +export class HtmlStorageService implements AbstractStorageService { get defaultOptions(): StorageOptions { return { htmlStorageLocation: HtmlStorageLocation.Session }; } diff --git a/apps/web/src/services/state.service.ts b/apps/web/src/services/state.service.ts index ef2a29a46a8..a2e6679b834 100644 --- a/apps/web/src/services/state.service.ts +++ b/apps/web/src/services/state.service.ts @@ -37,7 +37,7 @@ export class StateService } async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.getEncryptedCiphers(options); } @@ -45,14 +45,14 @@ export class StateService value: { [id: string]: CipherData }, options?: StorageOptions ): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.setEncryptedCiphers(value, options); } async getEncryptedCollections( options?: StorageOptions ): Promise<{ [id: string]: CollectionData }> { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.getEncryptedCollections(options); } @@ -60,12 +60,12 @@ export class StateService value: { [id: string]: CollectionData }, options?: StorageOptions ): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.setEncryptedCollections(value, options); } async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.getEncryptedFolders(options); } @@ -73,12 +73,12 @@ export class StateService value: { [id: string]: FolderData }, options?: StorageOptions ): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.setEncryptedFolders(value, options); } async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.getEncryptedSends(options); } @@ -86,17 +86,17 @@ export class StateService value: { [id: string]: SendData }, options?: StorageOptions ): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.setEncryptedSends(value, options); } override async getLastSync(options?: StorageOptions): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.getLastSync(options); } override async setLastSync(value: string, options?: StorageOptions): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); return await super.setLastSync(value, options); } } diff --git a/apps/web/src/services/webPlatformUtils.service.ts b/apps/web/src/services/webPlatformUtils.service.ts index 07f424b676d..115d53401a9 100644 --- a/apps/web/src/services/webPlatformUtils.service.ts +++ b/apps/web/src/services/webPlatformUtils.service.ts @@ -5,21 +5,17 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; -import { StateService } from "@bitwarden/common/abstractions/state.service"; import { ClientType } from "@bitwarden/common/enums/clientType"; import { DeviceType } from "@bitwarden/common/enums/deviceType"; -import { ThemeType } from "@bitwarden/common/enums/themeType"; @Injectable() export class WebPlatformUtilsService implements PlatformUtilsService { private browserCache: DeviceType = null; - private prefersColorSchemeDark = window.matchMedia("(prefers-color-scheme: dark)"); constructor( private i18nService: I18nService, private messagingService: MessagingService, - private logService: LogService, - private stateService: StateService + private logService: LogService ) {} getDevice(): DeviceType { @@ -108,54 +104,6 @@ export class WebPlatformUtilsService implements PlatformUtilsService { document.body.removeChild(a); } - saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void { - let blob: Blob = null; - let type: string = null; - const fileNameLower = fileName.toLowerCase(); - let doDownload = true; - if (fileNameLower.endsWith(".pdf")) { - type = "application/pdf"; - doDownload = false; - } else if (fileNameLower.endsWith(".xlsx")) { - type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - } else if (fileNameLower.endsWith(".docx")) { - type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; - } else if (fileNameLower.endsWith(".pptx")) { - type = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; - } else if (fileNameLower.endsWith(".csv")) { - type = "text/csv"; - } else if (fileNameLower.endsWith(".png")) { - type = "image/png"; - } else if (fileNameLower.endsWith(".jpg") || fileNameLower.endsWith(".jpeg")) { - type = "image/jpeg"; - } else if (fileNameLower.endsWith(".gif")) { - type = "image/gif"; - } - if (type != null) { - blobOptions = blobOptions || {}; - if (blobOptions.type == null) { - blobOptions.type = type; - } - } - if (blobOptions != null) { - blob = new Blob([blobData], blobOptions); - } else { - blob = new Blob([blobData]); - } - - const a = win.document.createElement("a"); - if (doDownload) { - a.download = fileName; - } else if (!this.isSafari()) { - a.target = "_blank"; - } - a.href = URL.createObjectURL(blob); - a.style.position = "fixed"; - win.document.body.appendChild(a); - a.click(); - win.document.body.removeChild(a); - } - getApplicationVersion(): Promise { return Promise.resolve(process.env.APPLICATION_VERSION || "-"); } @@ -303,32 +251,4 @@ export class WebPlatformUtilsService implements PlatformUtilsService { supportsSecureStorage() { return false; } - - getDefaultSystemTheme(): Promise { - return Promise.resolve(this.prefersColorSchemeDark.matches ? ThemeType.Dark : ThemeType.Light); - } - - async getEffectiveTheme(): Promise { - const theme = await this.stateService.getTheme(); - if (theme === ThemeType.Dark) { - return ThemeType.Dark; - } else if (theme === ThemeType.System) { - return this.getDefaultSystemTheme(); - } else { - return ThemeType.Light; - } - } - - onDefaultSystemThemeChange(callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown) { - try { - this.prefersColorSchemeDark.addEventListener("change", ({ matches }) => { - callback(matches ? ThemeType.Dark : ThemeType.Light); - }); - } catch (e) { - // Safari older than v14 - this.prefersColorSchemeDark.addListener((ev) => { - callback(ev.matches ? ThemeType.Dark : ThemeType.Light); - }); - } - } } diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 116be36c24c..2741b1c71e9 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../../libs/shared/tsconfig", "compilerOptions": { "baseUrl": ".", + "module": "ES2020", "paths": { "tldjs": ["../../libs/common/src/misc/tldjs.noop"], "src/*": ["src/*"], diff --git a/apps/web/webpack.config.js b/apps/web/webpack.config.js index c79a1fc29ad..4aae92a2ebd 100644 --- a/apps/web/webpack.config.js +++ b/apps/web/webpack.config.js @@ -15,9 +15,12 @@ const pjson = require("./package.json"); const ENV = process.env.ENV == null ? "development" : process.env.ENV; const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV; +const LOGGING = process.env.LOGGING != "false"; const envConfig = config.load(ENV); -config.log(envConfig); +if (LOGGING) { + config.log(envConfig); +} const moduleRules = [ { @@ -205,8 +208,8 @@ const devServer = { key: "Content-Security-Policy", value: ` - default-src 'self'; - script-src + default-src 'self'; + script-src 'self' 'sha256-ryoU+5+IUZTuUyTElqkrQGBJXr1brEv6r2CA62WUw8w=' https://js.stripe.com @@ -255,7 +258,7 @@ const devServer = https://*.blob.core.windows.net https://app.simplelogin.io/api/alias/random/new https://app.anonaddy.com/api/v1/aliases; - object-src + object-src 'self' blob:;`, }, diff --git a/bitwarden_license/bit-web/src/app/app-routing.module.ts b/bitwarden_license/bit-web/src/app/app-routing.module.ts index f9d434ed68a..1ae195d6dd7 100644 --- a/bitwarden_license/bit-web/src/app/app-routing.module.ts +++ b/bitwarden_license/bit-web/src/app/app-routing.module.ts @@ -1,10 +1,12 @@ import { NgModule } from "@angular/core"; import { RouterModule, Routes } from "@angular/router"; +import { ProvidersModule } from "./providers/providers.module"; + const routes: Routes = [ { path: "providers", - loadChildren: async () => (await import("./providers/providers.module")).ProvidersModule, + loadChildren: () => ProvidersModule, }, ]; diff --git a/bitwarden_license/bit-web/src/app/providers/manage/events.component.ts b/bitwarden_license/bit-web/src/app/providers/manage/events.component.ts index b2a281f228e..422b7fae7b5 100644 --- a/bitwarden_license/bit-web/src/app/providers/manage/events.component.ts +++ b/bitwarden_license/bit-web/src/app/providers/manage/events.component.ts @@ -4,6 +4,7 @@ import { ActivatedRoute, Router } from "@angular/router"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -34,9 +35,17 @@ export class EventsComponent extends BaseEventsComponent implements OnInit { platformUtilsService: PlatformUtilsService, private router: Router, logService: LogService, - private userNamePipe: UserNamePipe + private userNamePipe: UserNamePipe, + fileDownloadService: FileDownloadService ) { - super(eventService, i18nService, exportService, platformUtilsService, logService); + super( + eventService, + i18nService, + exportService, + platformUtilsService, + logService, + fileDownloadService + ); } async ngOnInit() { diff --git a/clients.code-workspace b/clients.code-workspace index 76445da06ae..419f72fe125 100644 --- a/clients.code-workspace +++ b/clients.code-workspace @@ -32,25 +32,29 @@ "settings": { "debug.javascript.terminalOptions": { "sourceMapPathOverrides": { - "meteor://💻app/*": "${workspaceFolder}/*", - "webpack:///./~/*": "${workspaceFolder}/node_modules/*", + "webpack:///./~/*": "${workspaceFolder:root}/node_modules/*", "webpack://?:*/*": "${workspaceFolder}/*", - "webpack://@bitwarden/cli/*": "${workspaceFolder}/apps/cli/*" + "webpack://@bitwarden/cli/*": "${workspaceFolder}/*" } + }, + "jest.disabledWorkspaceFolders": [ + "browser", + "cli", + "desktop", + "libs", + "web vault", + "web vault (bit)", + "desktop" + ], + "jest.jestCommandLine": "npx jest", + "angular.enable-strict-mode-prompt": false }, - "jest.disabledWorkspaceFolders": [ - "root", - "web vault", - "web vault (bit)", - "desktop" - ], - "jest.jestCommandLine": "npx jest" -}, -"extensions": { - "recommendations": [ - "orta.vscode-jest", + "extensions": { + "recommendations": [ + "orta.vscode-jest", "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "Angular.ng-template" ], } } diff --git a/libs/angular/jest.config.js b/libs/angular/jest.config.js index 8972604212e..b17fc826913 100644 --- a/libs/angular/jest.config.js +++ b/libs/angular/jest.config.js @@ -7,7 +7,7 @@ module.exports = { displayName: "libs/angular tests", preset: "jest-preset-angular", testMatch: ["**/+(*.)+(spec).+(ts)"], - setupFilesAfterEnv: ["/spec/test.ts"], + setupFilesAfterEnv: ["/spec/test.setup.ts"], collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", diff --git a/libs/angular/spec/test.ts b/libs/angular/spec/test.setup.ts similarity index 100% rename from libs/angular/spec/test.ts rename to libs/angular/spec/test.setup.ts diff --git a/libs/angular/src/components/attachments.component.ts b/libs/angular/src/components/attachments.component.ts index 9f684b66ac7..2419e013457 100644 --- a/libs/angular/src/components/attachments.component.ts +++ b/libs/angular/src/components/attachments.component.ts @@ -3,6 +3,7 @@ import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -36,7 +37,8 @@ export class AttachmentsComponent implements OnInit { protected apiService: ApiService, protected win: Window, protected logService: LogService, - protected stateService: StateService + protected stateService: StateService, + protected fileDownloadService: FileDownloadService ) {} async ngOnInit() { @@ -171,7 +173,10 @@ export class AttachmentsComponent implements OnInit { ? attachment.key : await this.cryptoService.getOrgKey(this.cipher.organizationId); const decBuf = await this.cryptoService.decryptFromBytes(buf, key); - this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName); + this.fileDownloadService.download({ + fileName: attachment.fileName, + blobData: decBuf, + }); } catch (e) { this.platformUtilsService.showToast("error", null, this.i18nService.t("errorOccurred")); } diff --git a/libs/angular/src/components/export.component.ts b/libs/angular/src/components/export.component.ts index d28ee26848b..be865360beb 100644 --- a/libs/angular/src/components/export.component.ts +++ b/libs/angular/src/components/export.component.ts @@ -13,6 +13,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -58,11 +59,12 @@ export class ExportComponent implements OnInit { protected win: Window, private logService: LogService, private userVerificationService: UserVerificationService, - protected formBuilder: FormBuilder, protected modalService: ModalService, protected apiService: ApiService, protected stateService: StateService, - protected modalConfig: ModalConfig + protected modalConfig: ModalConfig, + private formBuilder: FormBuilder, + protected fileDownloadService: FileDownloadService ) {} async ngOnInit() { @@ -217,6 +219,10 @@ export class ExportComponent implements OnInit { private downloadFile(csv: string): void { const fileName = this.getFileName(); - this.platformUtilsService.saveFile(this.win, csv, { type: "text/plain" }, fileName); + this.fileDownloadService.download({ + fileName: fileName, + blobData: csv, + blobOptions: { type: "text/plain" }, + }); } } diff --git a/libs/angular/src/components/view.component.ts b/libs/angular/src/components/view.component.ts index 8fe50f23d19..f3ee7c0fee4 100644 --- a/libs/angular/src/components/view.component.ts +++ b/libs/angular/src/components/view.component.ts @@ -15,6 +15,7 @@ import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.s import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PasswordRepromptService } from "@bitwarden/common/abstractions/passwordReprompt.service"; @@ -76,7 +77,8 @@ export class ViewComponent implements OnDestroy, OnInit { protected apiService: ApiService, protected passwordRepromptService: PasswordRepromptService, private logService: LogService, - protected stateService: StateService + protected stateService: StateService, + protected fileDownloadService: FileDownloadService ) {} ngOnInit() { @@ -373,7 +375,10 @@ export class ViewComponent implements OnDestroy, OnInit { ? attachment.key : await this.cryptoService.getOrgKey(this.cipher.organizationId); const decBuf = await this.cryptoService.decryptFromBytes(buf, key); - this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName); + this.fileDownloadService.download({ + fileName: attachment.fileName, + blobData: decBuf, + }); } catch (e) { this.platformUtilsService.showToast("error", null, this.i18nService.t("errorOccurred")); } diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 9062d86c043..1314abf4dac 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -1,5 +1,8 @@ import { InjectionToken, Injector, LOCALE_ID, NgModule } from "@angular/core"; +import { ThemingService } from "@bitwarden/angular/services/theming/theming.service"; +import { AbstractThemingService } from "@bitwarden/angular/services/theming/theming.service.abstraction"; +import { AbstractEncryptService } from "@bitwarden/common/abstractions/abstractEncrypt.service"; import { ApiService as ApiServiceAbstraction } from "@bitwarden/common/abstractions/api.service"; import { AppIdService as AppIdServiceAbstraction } from "@bitwarden/common/abstractions/appId.service"; import { AuditService as AuditServiceAbstraction } from "@bitwarden/common/abstractions/audit.service"; @@ -30,7 +33,7 @@ import { SendService as SendServiceAbstraction } from "@bitwarden/common/abstrac import { SettingsService as SettingsServiceAbstraction } from "@bitwarden/common/abstractions/settings.service"; import { StateService as StateServiceAbstraction } from "@bitwarden/common/abstractions/state.service"; import { StateMigrationService as StateMigrationServiceAbstraction } from "@bitwarden/common/abstractions/stateMigration.service"; -import { StorageService as StorageServiceAbstraction } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { SyncService as SyncServiceAbstraction } from "@bitwarden/common/abstractions/sync.service"; import { TokenService as TokenServiceAbstraction } from "@bitwarden/common/abstractions/token.service"; import { TotpService as TotpServiceAbstraction } from "@bitwarden/common/abstractions/totp.service"; @@ -49,6 +52,7 @@ import { CipherService } from "@bitwarden/common/services/cipher.service"; import { CollectionService } from "@bitwarden/common/services/collection.service"; import { ConsoleLogService } from "@bitwarden/common/services/consoleLog.service"; import { CryptoService } from "@bitwarden/common/services/crypto.service"; +import { EncryptService } from "@bitwarden/common/services/encrypt.service"; import { EnvironmentService } from "@bitwarden/common/services/environment.service"; import { EventService } from "@bitwarden/common/services/event.service"; import { ExportService } from "@bitwarden/common/services/export.service"; @@ -84,7 +88,8 @@ import { PasswordRepromptService } from "./passwordReprompt.service"; import { ValidationService } from "./validation.service"; export const WINDOW = new InjectionToken("WINDOW"); -export const SECURE_STORAGE = new InjectionToken("SECURE_STORAGE"); +export const MEMORY_STORAGE = new InjectionToken("MEMORY_STORAGE"); +export const SECURE_STORAGE = new InjectionToken("SECURE_STORAGE"); export const STATE_FACTORY = new InjectionToken("STATE_FACTORY"); export const STATE_SERVICE_USE_CACHE = new InjectionToken("STATE_SERVICE_USE_CACHE"); export const LOGOUT_CALLBACK = new InjectionToken<(expired: boolean, userId?: string) => void>( @@ -94,6 +99,7 @@ export const LOCKED_CALLBACK = new InjectionToken<() => void>("LOCKED_CALLBACK") export const CLIENT_TYPE = new InjectionToken("CLIENT_TYPE"); export const LOCALES_DIRECTORY = new InjectionToken("LOCALES_DIRECTORY"); export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); +export const LOG_MAC_FAILURES = new InjectionToken("LOG_MAC_FAILURES"); @NgModule({ declarations: [], @@ -137,10 +143,14 @@ export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); provide: LOCKED_CALLBACK, useValue: null, }, + { + provide: LOG_MAC_FAILURES, + useValue: true, + }, { provide: AppIdServiceAbstraction, useClass: AppIdService, - deps: [StorageServiceAbstraction], + deps: [AbstractStorageService], }, { provide: AuditServiceAbstraction, @@ -231,6 +241,7 @@ export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); useClass: CryptoService, deps: [ CryptoFunctionServiceAbstraction, + AbstractEncryptService, PlatformUtilsServiceAbstraction, LogService, StateServiceAbstraction, @@ -313,8 +324,9 @@ export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); provide: StateServiceAbstraction, useClass: StateService, deps: [ - StorageServiceAbstraction, + AbstractStorageService, SECURE_STORAGE, + MEMORY_STORAGE, LogService, StateMigrationServiceAbstraction, STATE_FACTORY, @@ -324,7 +336,7 @@ export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); { provide: StateMigrationServiceAbstraction, useClass: StateMigrationService, - deps: [StorageServiceAbstraction, SECURE_STORAGE, STATE_FACTORY], + deps: [AbstractStorageService, SECURE_STORAGE, STATE_FACTORY], }, { provide: ExportServiceAbstraction, @@ -360,6 +372,11 @@ export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); useClass: WebCryptoFunctionService, deps: [WINDOW], }, + { + provide: AbstractEncryptService, + useClass: EncryptService, + deps: [CryptoFunctionServiceAbstraction, LogService, LOG_MAC_FAILURES], + }, { provide: EventServiceAbstraction, useClass: EventService, @@ -423,6 +440,10 @@ export const SYSTEM_LANGUAGE = new InjectionToken("SYSTEM_LANGUAGE"); useClass: TwoFactorService, deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction], }, + { + provide: AbstractThemingService, + useClass: ThemingService, + }, ], }) export class JslibServicesModule {} diff --git a/libs/angular/src/services/theming/theme.ts b/libs/angular/src/services/theming/theme.ts new file mode 100644 index 00000000000..91311ac3b30 --- /dev/null +++ b/libs/angular/src/services/theming/theme.ts @@ -0,0 +1,6 @@ +import { ThemeType } from "@bitwarden/common/enums/themeType"; + +export interface Theme { + configuredTheme: ThemeType; + effectiveTheme: ThemeType; +} diff --git a/libs/angular/src/services/theming/themeBuilder.ts b/libs/angular/src/services/theming/themeBuilder.ts new file mode 100644 index 00000000000..87b294032db --- /dev/null +++ b/libs/angular/src/services/theming/themeBuilder.ts @@ -0,0 +1,19 @@ +import { ThemeType } from "@bitwarden/common/enums/themeType"; + +import { Theme } from "./theme"; + +export class ThemeBuilder implements Theme { + get effectiveTheme(): ThemeType { + return this.configuredTheme != ThemeType.System ? this.configuredTheme : this.systemTheme; + } + + constructor(readonly configuredTheme: ThemeType, readonly systemTheme: ThemeType) {} + + updateSystemTheme(systemTheme: ThemeType): ThemeBuilder { + return new ThemeBuilder(this.configuredTheme, systemTheme); + } + + updateConfiguredTheme(configuredTheme: ThemeType): ThemeBuilder { + return new ThemeBuilder(configuredTheme, this.systemTheme); + } +} diff --git a/libs/angular/src/services/theming/theming.service.abstraction.ts b/libs/angular/src/services/theming/theming.service.abstraction.ts new file mode 100644 index 00000000000..cacb3a10f22 --- /dev/null +++ b/libs/angular/src/services/theming/theming.service.abstraction.ts @@ -0,0 +1,12 @@ +import { Observable } from "rxjs"; + +import { ThemeType } from "@bitwarden/common/enums/themeType"; + +import { Theme } from "./theme"; + +export abstract class AbstractThemingService { + theme$: Observable; + monitorThemeChanges: () => Promise; + updateSystemTheme: (systemTheme: ThemeType) => void; + updateConfiguredTheme: (theme: ThemeType) => Promise; +} diff --git a/libs/angular/src/services/theming/theming.service.ts b/libs/angular/src/services/theming/theming.service.ts new file mode 100644 index 00000000000..7d67503694c --- /dev/null +++ b/libs/angular/src/services/theming/theming.service.ts @@ -0,0 +1,71 @@ +import { MediaMatcher } from "@angular/cdk/layout"; +import { DOCUMENT } from "@angular/common"; +import { Inject, Injectable } from "@angular/core"; +import { BehaviorSubject, filter, fromEvent, Observable } from "rxjs"; + +import { StateService } from "@bitwarden/common/abstractions/state.service"; +import { ThemeType } from "@bitwarden/common/enums/themeType"; + +import { Theme } from "./theme"; +import { ThemeBuilder } from "./themeBuilder"; +import { AbstractThemingService } from "./theming.service.abstraction"; + +@Injectable() +export class ThemingService implements AbstractThemingService { + private _theme = new BehaviorSubject(null); + theme$: Observable = this._theme.pipe(filter((x) => x !== null)); + + constructor( + private stateService: StateService, + private mediaMatcher: MediaMatcher, + @Inject(DOCUMENT) private document: Document + ) { + this.monitorThemeChanges(); + } + + async monitorThemeChanges(): Promise { + this._theme.next( + new ThemeBuilder(await this.stateService.getTheme(), await this.getSystemTheme()) + ); + this.monitorConfiguredThemeChanges(); + this.monitorSystemThemeChanges(); + } + + updateSystemTheme(systemTheme: ThemeType): void { + this._theme.next(this._theme.getValue().updateSystemTheme(systemTheme)); + } + + async updateConfiguredTheme(theme: ThemeType): Promise { + await this.stateService.setTheme(theme); + this._theme.next(this._theme.getValue().updateConfiguredTheme(theme)); + } + + protected monitorConfiguredThemeChanges(): void { + this.theme$.subscribe((theme: Theme) => { + this.document.documentElement.classList.remove( + "theme_" + ThemeType.Light, + "theme_" + ThemeType.Dark, + "theme_" + ThemeType.Nord, + "theme_" + ThemeType.SolarizedDark + ); + this.document.documentElement.classList.add("theme_" + theme.effectiveTheme); + }); + } + + // We use a media match query for monitoring the system theme on web and browser, but this doesn't work for electron apps on Linux. + // In desktop we override these methods to track systemTheme with the electron renderer instead, which works for all OSs. + protected async getSystemTheme(): Promise { + return this.mediaMatcher.matchMedia("(prefers-color-scheme: dark)").matches + ? ThemeType.Dark + : ThemeType.Light; + } + + protected monitorSystemThemeChanges(): void { + fromEvent( + this.mediaMatcher.matchMedia("(prefers-color-scheme: dark)"), + "change" + ).subscribe((event) => { + this.updateSystemTheme(event.matches ? ThemeType.Dark : ThemeType.Light); + }); + } +} diff --git a/libs/common/jest.config.js b/libs/common/jest.config.js index 734598be3eb..31cf5007acf 100644 --- a/libs/common/jest.config.js +++ b/libs/common/jest.config.js @@ -8,7 +8,7 @@ module.exports = { preset: "ts-jest", testEnvironment: "jsdom", testMatch: ["**/+(*.)+(spec).+(ts)"], - setupFilesAfterEnv: ["/spec/test.ts"], + setupFilesAfterEnv: ["/spec/test.setup.ts"], collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", diff --git a/libs/common/spec/services/state.service.spec.ts b/libs/common/spec/services/state.service.spec.ts new file mode 100644 index 00000000000..a6f76ab4fc0 --- /dev/null +++ b/libs/common/spec/services/state.service.spec.ts @@ -0,0 +1,82 @@ +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { LogService } from "@bitwarden/common/abstractions/log.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; +import { StateFactory } from "@bitwarden/common/factories/stateFactory"; +import { Account } from "@bitwarden/common/models/domain/account"; +import { GlobalState } from "@bitwarden/common/models/domain/globalState"; +import { State } from "@bitwarden/common/models/domain/state"; +import { StorageOptions } from "@bitwarden/common/models/domain/storageOptions"; +import { SymmetricCryptoKey } from "@bitwarden/common/models/domain/symmetricCryptoKey"; +import { StateService } from "@bitwarden/common/services/state.service"; +import { StateMigrationService } from "@bitwarden/common/services/stateMigration.service"; + +describe("Browser State Service backed by chrome.storage api", () => { + let secureStorageService: SubstituteOf; + let diskStorageService: SubstituteOf; + let memoryStorageService: SubstituteOf; + let logService: SubstituteOf; + let stateMigrationService: SubstituteOf; + let stateFactory: SubstituteOf>; + let useAccountCache: boolean; + + let state: State; + const userId = "userId"; + + let sut: StateService; + + beforeEach(() => { + secureStorageService = Substitute.for(); + diskStorageService = Substitute.for(); + memoryStorageService = Substitute.for(); + logService = Substitute.for(); + stateMigrationService = Substitute.for(); + stateFactory = Substitute.for(); + useAccountCache = true; + + state = new State(new GlobalState()); + const stateGetter = (key: string) => Promise.resolve(JSON.parse(JSON.stringify(state))); + memoryStorageService.get("state").mimicks(stateGetter); + memoryStorageService + .save("state", Arg.any(), Arg.any()) + .mimicks((key: string, obj: any, options: StorageOptions) => { + return new Promise(() => { + state = obj; + }); + }); + + sut = new StateService( + diskStorageService, + secureStorageService, + memoryStorageService, + logService, + stateMigrationService, + stateFactory, + useAccountCache + ); + }); + + describe("account state getters", () => { + beforeEach(() => { + state.accounts[userId] = createAccount(userId); + state.activeUserId = userId; + }); + + describe("getCryptoMasterKey", () => { + it("should return the stored SymmetricCryptoKey", async () => { + const key = new SymmetricCryptoKey(new Uint8Array(32).buffer); + state.accounts[userId].keys.cryptoMasterKey = key; + + const actual = await sut.getCryptoMasterKey(); + expect(actual).toBeInstanceOf(SymmetricCryptoKey); + expect(actual).toMatchObject(key); + }); + }); + }); + + function createAccount(userId: string): Account { + return new Account({ + profile: { userId: userId }, + }); + } +}); diff --git a/libs/common/spec/services/stateMigration.service.ts b/libs/common/spec/services/stateMigration.service.spec.ts similarity index 85% rename from libs/common/spec/services/stateMigration.service.ts rename to libs/common/spec/services/stateMigration.service.spec.ts index 400c3aaa24d..46fb13d70a1 100644 --- a/libs/common/spec/services/stateMigration.service.ts +++ b/libs/common/spec/services/stateMigration.service.spec.ts @@ -1,6 +1,6 @@ import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { StateVersion } from "@bitwarden/common/enums/stateVersion"; import { StateFactory } from "@bitwarden/common/factories/stateFactory"; import { Account } from "@bitwarden/common/models/domain/account"; @@ -10,15 +10,15 @@ import { StateMigrationService } from "@bitwarden/common/services/stateMigration const userId = "USER_ID"; describe("State Migration Service", () => { - let storageService: SubstituteOf; - let secureStorageService: SubstituteOf; + let storageService: SubstituteOf; + let secureStorageService: SubstituteOf; let stateFactory: SubstituteOf; let stateMigrationService: StateMigrationService; beforeEach(() => { - storageService = Substitute.for(); - secureStorageService = Substitute.for(); + storageService = Substitute.for(); + secureStorageService = Substitute.for(); stateFactory = Substitute.for(); stateMigrationService = new StateMigrationService( @@ -28,7 +28,7 @@ describe("State Migration Service", () => { ); }); - describe("StateVersion 3 to 4 migration", async () => { + describe("StateVersion 3 to 4 migration", () => { beforeEach(() => { const globalVersion3: Partial = { stateVersion: StateVersion.Three, diff --git a/libs/common/spec/test.ts b/libs/common/spec/test.setup.ts similarity index 100% rename from libs/common/spec/test.ts rename to libs/common/spec/test.setup.ts diff --git a/libs/common/src/abstractions/abstractEncrypt.service.ts b/libs/common/src/abstractions/abstractEncrypt.service.ts new file mode 100644 index 00000000000..8e1871074b7 --- /dev/null +++ b/libs/common/src/abstractions/abstractEncrypt.service.ts @@ -0,0 +1,7 @@ +import { EncString } from "@bitwarden/common/models/domain/encString"; +import { SymmetricCryptoKey } from "@bitwarden/common/models/domain/symmetricCryptoKey"; + +export abstract class AbstractEncryptService { + abstract encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise; + abstract decryptToUtf8(encString: EncString, key: SymmetricCryptoKey): Promise; +} diff --git a/libs/common/src/abstractions/fileDownload/fileDownload.service.ts b/libs/common/src/abstractions/fileDownload/fileDownload.service.ts new file mode 100644 index 00000000000..c3829225897 --- /dev/null +++ b/libs/common/src/abstractions/fileDownload/fileDownload.service.ts @@ -0,0 +1,5 @@ +import { FileDownloadRequest } from "./fileDownloadRequest"; + +export abstract class FileDownloadService { + download: (request: FileDownloadRequest) => void; +} diff --git a/libs/common/src/abstractions/fileDownload/fileDownloadBuilder.ts b/libs/common/src/abstractions/fileDownload/fileDownloadBuilder.ts new file mode 100644 index 00000000000..29e54a6e28a --- /dev/null +++ b/libs/common/src/abstractions/fileDownload/fileDownloadBuilder.ts @@ -0,0 +1,50 @@ +import { FileDownloadRequest } from "./fileDownloadRequest"; + +export class FileDownloadBuilder { + get blobOptions(): any { + const options = this._request.blobOptions ?? {}; + if (options.type == null) { + options.type = this.fileType; + } + return options; + } + + get blob(): Blob { + if (this.blobOptions != null) { + return new Blob([this._request.blobData], this.blobOptions); + } else { + return new Blob([this._request.blobData]); + } + } + + get downloadMethod(): "save" | "open" { + if (this._request.downloadMethod != null) { + return this._request.downloadMethod; + } + return this.fileType != "application/pdf" ? "save" : "open"; + } + + private get fileType() { + const fileNameLower = this._request.fileName.toLowerCase(); + if (fileNameLower.endsWith(".pdf")) { + return "application/pdf"; + } else if (fileNameLower.endsWith(".xlsx")) { + return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + } else if (fileNameLower.endsWith(".docx")) { + return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + } else if (fileNameLower.endsWith(".pptx")) { + return "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + } else if (fileNameLower.endsWith(".csv")) { + return "text/csv"; + } else if (fileNameLower.endsWith(".png")) { + return "image/png"; + } else if (fileNameLower.endsWith(".jpg") || fileNameLower.endsWith(".jpeg")) { + return "image/jpeg"; + } else if (fileNameLower.endsWith(".gif")) { + return "image/gif"; + } + return null; + } + + constructor(private readonly _request: FileDownloadRequest) {} +} diff --git a/libs/common/src/abstractions/fileDownload/fileDownloadRequest.ts b/libs/common/src/abstractions/fileDownload/fileDownloadRequest.ts new file mode 100644 index 00000000000..a1accb93471 --- /dev/null +++ b/libs/common/src/abstractions/fileDownload/fileDownloadRequest.ts @@ -0,0 +1,6 @@ +export type FileDownloadRequest = { + fileName: string; + blobData: BlobPart; + blobOptions?: BlobPropertyBag; + downloadMethod?: "save" | "open"; +}; diff --git a/libs/common/src/abstractions/platformUtils.service.ts b/libs/common/src/abstractions/platformUtils.service.ts index 4a014868d5a..c4300d13227 100644 --- a/libs/common/src/abstractions/platformUtils.service.ts +++ b/libs/common/src/abstractions/platformUtils.service.ts @@ -1,6 +1,5 @@ import { ClientType } from "../enums/clientType"; import { DeviceType } from "../enums/deviceType"; -import { ThemeType } from "../enums/themeType"; interface ToastOptions { timeout?: number; @@ -19,7 +18,6 @@ export abstract class PlatformUtilsService { isMacAppStore: () => boolean; isViewOpen: () => Promise; launchUri: (uri: string, options?: any) => void; - saveFile: (win: Window, blobData: any, blobOptions: any, fileName: string) => void; getApplicationVersion: () => Promise; supportsWebAuthn: (win: Window) => boolean; supportsDuo: () => boolean; @@ -43,10 +41,5 @@ export abstract class PlatformUtilsService { readFromClipboard: (options?: any) => Promise; supportsBiometric: () => Promise; authenticateBiometric: () => Promise; - getDefaultSystemTheme: () => Promise; - onDefaultSystemThemeChange: ( - callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown - ) => unknown; - getEffectiveTheme: () => Promise; supportsSecureStorage: () => boolean; } diff --git a/libs/common/src/abstractions/storage.service.ts b/libs/common/src/abstractions/storage.service.ts index f522d3cf81c..31fe14ddcfe 100644 --- a/libs/common/src/abstractions/storage.service.ts +++ b/libs/common/src/abstractions/storage.service.ts @@ -1,8 +1,8 @@ import { StorageOptions } from "../models/domain/storageOptions"; -export abstract class StorageService { - get: (key: string, options?: StorageOptions) => Promise; - has: (key: string, options?: StorageOptions) => Promise; - save: (key: string, obj: any, options?: StorageOptions) => Promise; - remove: (key: string, options?: StorageOptions) => Promise; +export abstract class AbstractStorageService { + abstract get(key: string, options?: StorageOptions): Promise; + abstract has(key: string, options?: StorageOptions): Promise; + abstract save(key: string, obj: T, options?: StorageOptions): Promise; + abstract remove(key: string, options?: StorageOptions): Promise; } diff --git a/libs/common/src/abstractions/totp.service.ts b/libs/common/src/abstractions/totp.service.ts index bf143e269c0..729588aba44 100644 --- a/libs/common/src/abstractions/totp.service.ts +++ b/libs/common/src/abstractions/totp.service.ts @@ -1,5 +1,4 @@ export abstract class TotpService { getCode: (key: string) => Promise; getTimeInterval: (key: string) => number; - isAutoCopyEnabled: () => Promise; } diff --git a/libs/common/src/models/domain/account.ts b/libs/common/src/models/domain/account.ts index 97c854e94ff..7d2077960fd 100644 --- a/libs/common/src/models/domain/account.ts +++ b/libs/common/src/models/domain/account.ts @@ -23,6 +23,7 @@ import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class EncryptionPair { encrypted?: TEncrypted; decrypted?: TDecrypted; + decryptedSerialized?: string; } export class DataEncryptionPair { @@ -76,6 +77,7 @@ export class AccountKeys { privateKey?: EncryptionPair = new EncryptionPair(); legacyEtmKey?: SymmetricCryptoKey; publicKey?: ArrayBuffer; + publicKeySerialized?: string; apiKeyClientSecret?: string; } diff --git a/libs/common/src/models/domain/symmetricCryptoKey.ts b/libs/common/src/models/domain/symmetricCryptoKey.ts index a58dc6fde4a..5e0c437ba3b 100644 --- a/libs/common/src/models/domain/symmetricCryptoKey.ts +++ b/libs/common/src/models/domain/symmetricCryptoKey.ts @@ -54,4 +54,22 @@ export class SymmetricCryptoKey { this.macKeyB64 = Utils.fromBufferToB64(this.macKey); } } + + static initFromJson(jsonResult: SymmetricCryptoKey): SymmetricCryptoKey { + if (jsonResult == null) { + return jsonResult; + } + + if (jsonResult.keyB64 != null) { + jsonResult.key = Utils.fromB64ToArray(jsonResult.keyB64).buffer; + } + if (jsonResult.encKeyB64 != null) { + jsonResult.encKey = Utils.fromB64ToArray(jsonResult.encKeyB64).buffer; + } + if (jsonResult.macKeyB64 != null) { + jsonResult.macKey = Utils.fromB64ToArray(jsonResult.macKeyB64).buffer; + } + + return jsonResult; + } } diff --git a/libs/common/src/services/appId.service.ts b/libs/common/src/services/appId.service.ts index a6406fdc835..1c108da0806 100644 --- a/libs/common/src/services/appId.service.ts +++ b/libs/common/src/services/appId.service.ts @@ -1,10 +1,10 @@ import { AppIdService as AppIdServiceAbstraction } from "../abstractions/appId.service"; -import { StorageService } from "../abstractions/storage.service"; +import { AbstractStorageService } from "../abstractions/storage.service"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { Utils } from "../misc/utils"; export class AppIdService implements AppIdServiceAbstraction { - constructor(private storageService: StorageService) {} + constructor(private storageService: AbstractStorageService) {} getAppId(): Promise { return this.makeAndGetAppId("appId"); diff --git a/libs/common/src/services/crypto.service.ts b/libs/common/src/services/crypto.service.ts index c49d7763e35..d4f9bd1de17 100644 --- a/libs/common/src/services/crypto.service.ts +++ b/libs/common/src/services/crypto.service.ts @@ -1,5 +1,6 @@ import * as bigInt from "big-integer"; +import { AbstractEncryptService } from "../abstractions/abstractEncrypt.service"; import { CryptoService as CryptoServiceAbstraction } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { LogService } from "../abstractions/log.service"; @@ -23,6 +24,7 @@ import { ProfileProviderResponse } from "../models/response/profileProviderRespo export class CryptoService implements CryptoServiceAbstraction { constructor( private cryptoFunctionService: CryptoFunctionService, + private encryptService: AbstractEncryptService, protected platformUtilService: PlatformUtilsService, protected logService: LogService, protected stateService: StateService @@ -503,23 +505,15 @@ export class CryptoService implements CryptoServiceAbstraction { return this.buildEncKey(key, encKey.key); } + /** + * @deprecated June 22 2022: This method has been moved to encryptService. + * All callers should use this service to grab the relevant key and use encryptService for encryption instead. + * This method will be removed once all existing code has been refactored to use encryptService. + */ async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise { - if (plainValue == null) { - return Promise.resolve(null); - } + key = await this.getKeyForEncryption(key); - let plainBuf: ArrayBuffer; - if (typeof plainValue === "string") { - plainBuf = Utils.fromUtf8ToArray(plainValue).buffer; - } else { - plainBuf = plainValue; - } - - const encObj = await this.aesEncrypt(plainBuf, key); - const iv = Utils.fromBufferToB64(encObj.iv); - const data = Utils.fromBufferToB64(encObj.data); - const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null; - return new EncString(encObj.key.encType, data, iv, mac); + return await this.encryptService.encrypt(plainValue, key); } async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise { @@ -618,13 +612,9 @@ export class CryptoService implements CryptoServiceAbstraction { } async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise { - return await this.aesDecryptToUtf8( - encString.encryptionType, - encString.data, - encString.iv, - encString.mac, - key - ); + key = await this.getKeyForEncryption(key); + key = await this.resolveLegacyKey(encString.encryptionType, key); + return await this.encryptService.decryptToUtf8(encString, key); } async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise { @@ -754,6 +744,10 @@ export class CryptoService implements CryptoServiceAbstraction { : await this.stateService.getCryptoMasterKeyBiometric({ userId: userId }); } + /** + * @deprecated June 22 2022: This method has been moved to encryptService. + * All callers should use encryptService instead. This method will be removed once all existing code has been refactored to use encryptService. + */ private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise { const obj = new EncryptedObject(); obj.key = await this.getKeyForEncryption(key); @@ -770,43 +764,6 @@ export class CryptoService implements CryptoServiceAbstraction { return obj; } - private async aesDecryptToUtf8( - encType: EncryptionType, - data: string, - iv: string, - mac: string, - key: SymmetricCryptoKey - ): Promise { - const keyForEnc = await this.getKeyForEncryption(key); - const theKey = await this.resolveLegacyKey(encType, keyForEnc); - - if (theKey.macKey != null && mac == null) { - this.logService.error("mac required."); - return null; - } - - if (theKey.encType !== encType) { - this.logService.error("encType unavailable."); - return null; - } - - const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey); - if (fastParams.macKey != null && fastParams.mac != null) { - const computedMac = await this.cryptoFunctionService.hmacFast( - fastParams.macData, - fastParams.macKey, - "sha256" - ); - const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac); - if (!macsEqual) { - this.logService.error("mac failed."); - return null; - } - } - - return this.cryptoFunctionService.aesDecryptFast(fastParams); - } - private async aesDecryptToBytes( encType: EncryptionType, data: ArrayBuffer, diff --git a/libs/common/src/services/encrypt.service.ts b/libs/common/src/services/encrypt.service.ts new file mode 100644 index 00000000000..e0187edfd44 --- /dev/null +++ b/libs/common/src/services/encrypt.service.ts @@ -0,0 +1,94 @@ +import { CryptoFunctionService } from "@bitwarden/common/abstractions/cryptoFunction.service"; +import { LogService } from "@bitwarden/common/abstractions/log.service"; +import { Utils } from "@bitwarden/common/misc/utils"; +import { EncString } from "@bitwarden/common/models/domain/encString"; +import { EncryptedObject } from "@bitwarden/common/models/domain/encryptedObject"; +import { SymmetricCryptoKey } from "@bitwarden/common/models/domain/symmetricCryptoKey"; + +import { AbstractEncryptService } from "../abstractions/abstractEncrypt.service"; + +export class EncryptService implements AbstractEncryptService { + constructor( + private cryptoFunctionService: CryptoFunctionService, + private logService: LogService, + private logMacFailures: boolean + ) {} + + async encrypt(plainValue: string | ArrayBuffer, key: SymmetricCryptoKey): Promise { + if (key == null) { + throw new Error("no encryption key provided."); + } + + if (plainValue == null) { + return Promise.resolve(null); + } + + let plainBuf: ArrayBuffer; + if (typeof plainValue === "string") { + plainBuf = Utils.fromUtf8ToArray(plainValue).buffer; + } else { + plainBuf = plainValue; + } + + const encObj = await this.aesEncrypt(plainBuf, key); + const iv = Utils.fromBufferToB64(encObj.iv); + const data = Utils.fromBufferToB64(encObj.data); + const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null; + return new EncString(encObj.key.encType, data, iv, mac); + } + + async decryptToUtf8(encString: EncString, key: SymmetricCryptoKey): Promise { + if (key?.macKey != null && encString?.mac == null) { + this.logService.error("mac required."); + return null; + } + + if (key.encType !== encString.encryptionType) { + this.logService.error("encType unavailable."); + return null; + } + + const fastParams = this.cryptoFunctionService.aesDecryptFastParameters( + encString.data, + encString.iv, + encString.mac, + key + ); + if (fastParams.macKey != null && fastParams.mac != null) { + const computedMac = await this.cryptoFunctionService.hmacFast( + fastParams.macData, + fastParams.macKey, + "sha256" + ); + const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac); + if (!macsEqual) { + this.logMacFailed("mac failed."); + return null; + } + } + + return this.cryptoFunctionService.aesDecryptFast(fastParams); + } + + private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise { + const obj = new EncryptedObject(); + obj.key = key; + obj.iv = await this.cryptoFunctionService.randomBytes(16); + obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey); + + if (obj.key.macKey != null) { + const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength); + macData.set(new Uint8Array(obj.iv), 0); + macData.set(new Uint8Array(obj.data), obj.iv.byteLength); + obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, "sha256"); + } + + return obj; + } + + private logMacFailed(msg: string) { + if (this.logMacFailures) { + this.logService.error(msg); + } + } +} diff --git a/apps/web/src/services/memoryStorage.service.ts b/libs/common/src/services/memoryStorage.service.ts similarity index 78% rename from apps/web/src/services/memoryStorage.service.ts rename to libs/common/src/services/memoryStorage.service.ts index 764d40a6133..d1616c6029f 100644 --- a/apps/web/src/services/memoryStorage.service.ts +++ b/libs/common/src/services/memoryStorage.service.ts @@ -1,6 +1,6 @@ -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; -export class MemoryStorageService implements StorageService { +export class MemoryStorageService implements AbstractStorageService { private store = new Map(); get(key: string): Promise { diff --git a/libs/common/src/services/search.service.ts b/libs/common/src/services/search.service.ts index 1db39e2524c..c020dd299f9 100644 --- a/libs/common/src/services/search.service.ts +++ b/libs/common/src/services/search.service.ts @@ -180,7 +180,11 @@ export class SearchService implements SearchServiceAbstraction { if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) { return true; } - if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) { + if ( + c.login && + c.login.hasUris && + c.login.uris.some((loginUri) => loginUri.uri.toLowerCase().indexOf(query) > -1) + ) { return true; } return false; diff --git a/libs/common/src/services/state.service.ts b/libs/common/src/services/state.service.ts index e0e6b1451cd..c2ae787482a 100644 --- a/libs/common/src/services/state.service.ts +++ b/libs/common/src/services/state.service.ts @@ -3,13 +3,14 @@ import { BehaviorSubject } from "rxjs"; import { LogService } from "../abstractions/log.service"; import { StateService as StateServiceAbstraction } from "../abstractions/state.service"; import { StateMigrationService } from "../abstractions/stateMigration.service"; -import { StorageService } from "../abstractions/storage.service"; +import { AbstractStorageService } from "../abstractions/storage.service"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StorageLocation } from "../enums/storageLocation"; import { ThemeType } from "../enums/themeType"; import { UriMatchType } from "../enums/uriMatchType"; import { StateFactory } from "../factories/stateFactory"; +import { Utils } from "../misc/utils"; import { CipherData } from "../models/data/cipherData"; import { CollectionData } from "../models/data/collectionData"; import { EventData } from "../models/data/eventData"; @@ -18,7 +19,7 @@ import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; import { SendData } from "../models/data/sendData"; -import { Account, AccountData } from "../models/domain/account"; +import { Account, AccountData, AccountSettings } from "../models/domain/account"; import { EncString } from "../models/domain/encString"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; @@ -34,6 +35,7 @@ import { FolderView } from "../models/view/folderView"; import { SendView } from "../models/view/sendView"; const keys = { + state: "state", global: "global", authenticatedAccounts: "authenticatedAccounts", activeUserId: "activeUserId", @@ -55,24 +57,20 @@ export class StateService< accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({}); activeAccount = new BehaviorSubject(null); - protected state: State = new State( - this.createGlobals() - ); - private hasBeenInited = false; + private isRecoveredSession = false; - private accountDiskCache: Map; + private accountDiskCache = new Map(); constructor( - protected storageService: StorageService, - protected secureStorageService: StorageService, + protected storageService: AbstractStorageService, + protected secureStorageService: AbstractStorageService, + protected memoryStorageService: AbstractStorageService, protected logService: LogService, protected stateMigrationService: StateMigrationService, protected stateFactory: StateFactory, protected useAccountCache: boolean = true - ) { - this.accountDiskCache = new Map(); - } + ) {} async init(): Promise { if (this.hasBeenInited) { @@ -83,40 +81,61 @@ export class StateService< await this.stateMigrationService.migrate(); } + await this.state().then(async (state) => { + if (state == null) { + await this.setState(new State(this.createGlobals())); + } else { + this.isRecoveredSession = true; + } + }); await this.initAccountState(); this.hasBeenInited = true; } async initAccountState() { - this.state.authenticatedAccounts = - (await this.storageService.get(keys.authenticatedAccounts)) ?? []; - for (const i in this.state.authenticatedAccounts) { - if (i != null) { - await this.syncAccountFromDisk(this.state.authenticatedAccounts[i]); + if (this.isRecoveredSession) { + return; + } + + await this.updateState(async (state) => { + state.authenticatedAccounts = + (await this.storageService.get(keys.authenticatedAccounts)) ?? []; + for (const i in state.authenticatedAccounts) { + if (i != null) { + await this.syncAccountFromDisk(state.authenticatedAccounts[i]); + } } - } - const storedActiveUser = await this.storageService.get(keys.activeUserId); - if (storedActiveUser != null) { - this.state.activeUserId = storedActiveUser; - } - await this.pushAccounts(); - this.activeAccount.next(this.state.activeUserId); + const storedActiveUser = await this.storageService.get(keys.activeUserId); + if (storedActiveUser != null) { + state.activeUserId = storedActiveUser; + } + await this.pushAccounts(); + this.activeAccount.next(state.activeUserId); + + return state; + }); } async syncAccountFromDisk(userId: string) { if (userId == null) { return; } - this.state.accounts[userId] = this.createAccount(); - const diskAccount = await this.getAccountFromDisk({ userId: userId }); - this.state.accounts[userId].profile = diskAccount.profile; + await this.updateState(async (state) => { + state.accounts[userId] = this.createAccount(); + const diskAccount = await this.getAccountFromDisk({ userId: userId }); + state.accounts[userId].profile = diskAccount.profile; + return state; + }); } async addAccount(account: TAccount) { account = await this.setAccountEnvironmentUrls(account); - this.state.authenticatedAccounts.push(account.profile.userId); - await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); - this.state.accounts[account.profile.userId] = account; + await this.updateState(async (state) => { + state.authenticatedAccounts.push(account.profile.userId); + await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts); + state.accounts[account.profile.userId] = account; + return state; + }); await this.scaffoldNewAccountStorage(account); await this.setLastActive(new Date().getTime(), { userId: account.profile.userId }); await this.setActiveUser(account.profile.userId); @@ -125,16 +144,20 @@ export class StateService< async setActiveUser(userId: string): Promise { this.clearDecryptedDataForActiveUser(); - this.state.activeUserId = userId; - await this.storageService.save(keys.activeUserId, userId); - this.activeAccount.next(this.state.activeUserId); + await this.updateState(async (state) => { + state.activeUserId = userId; + await this.storageService.save(keys.activeUserId, userId); + this.activeAccount.next(state.activeUserId); + return state; + }); + await this.pushAccounts(); } async clean(options?: StorageOptions): Promise { - options = this.reconcileOptions(options, this.defaultInMemoryOptions); + options = this.reconcileOptions(options, await this.defaultInMemoryOptions()); await this.deAuthenticateAccount(options.userId); - if (options.userId === this.state.activeUserId) { + if (options.userId === (await this.state())?.activeUserId) { await this.dynamicallySetActiveUser(); } @@ -156,16 +179,20 @@ export class StateService< } async getAddEditCipherInfo(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.addEditCipherInfo; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.addEditCipherInfo; } async setAddEditCipherInfo(value: any, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.addEditCipherInfo = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getAlwaysShowDock(options?: StorageOptions): Promise { @@ -284,17 +311,20 @@ export class StateService< async getBiometricLocked(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.settings - ?.biometricLocked ?? false + (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))) + ?.settings?.biometricLocked ?? false ); } async setBiometricLocked(value: boolean, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.settings.biometricLocked = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getBiometricText(options?: StorageOptions): Promise { @@ -453,17 +483,22 @@ export class StateService< ); } + @withPrototype(SymmetricCryptoKey, SymmetricCryptoKey.initFromJson) async getCryptoMasterKey(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.keys?.cryptoMasterKey; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.keys?.cryptoMasterKey; } async setCryptoMasterKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.keys.cryptoMasterKey = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getCryptoMasterKeyAuto(options?: StorageOptions): Promise { @@ -474,7 +509,10 @@ export class StateService< if (options?.userId == null) { return null; } - return await this.secureStorageService.get(`${options.userId}${partialKeys.autoKey}`, options); + return await this.secureStorageService.get( + `${options.userId}${partialKeys.autoKey}`, + options + ); } async setCryptoMasterKeyAuto(value: string, options?: StorageOptions): Promise { @@ -493,7 +531,7 @@ export class StateService< if (options?.userId == null) { return null; } - return await this.secureStorageService.get( + return await this.secureStorageService.get( `${options?.userId}${partialKeys.masterKey}`, options ); @@ -515,7 +553,7 @@ export class StateService< if (options?.userId == null) { return null; } - return await this.secureStorageService.get( + return await this.secureStorageService.get( `${options.userId}${partialKeys.biometricKey}`, options ); @@ -547,47 +585,63 @@ export class StateService< } async getDecodedToken(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.tokens?.decodedToken; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.tokens?.decodedToken; } async setDecodedToken(value: any, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.tokens.decodedToken = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForArrayMembers(CipherView) async getDecryptedCiphers(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.ciphers?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.ciphers?.decrypted; } async setDecryptedCiphers(value: CipherView[], options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.ciphers.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForArrayMembers(CollectionView) async getDecryptedCollections(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.collections?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.collections?.decrypted; } async setDecryptedCollections(value: CollectionView[], options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.collections.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototype(SymmetricCryptoKey, SymmetricCryptoKey.initFromJson) async getDecryptedCryptoSymmetricKey(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.keys?.cryptoSymmetricKey?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.keys?.cryptoSymmetricKey?.decrypted; } async setDecryptedCryptoSymmetricKey( @@ -595,30 +649,41 @@ export class StateService< options?: StorageOptions ): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.keys.cryptoSymmetricKey.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForArrayMembers(FolderView) async getDecryptedFolders(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.folders?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.folders?.decrypted; } async setDecryptedFolders(value: FolderView[], options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.folders.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForMap(SymmetricCryptoKey, SymmetricCryptoKey.initFromJson) async getDecryptedOrganizationKeys( options?: StorageOptions ): Promise> { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.keys?.organizationKeys?.decrypted; + const account = await this.getAccount( + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); + return account?.keys?.organizationKeys?.decrypted; } async setDecryptedOrganizationKeys( @@ -626,17 +691,22 @@ export class StateService< options?: StorageOptions ): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.keys.organizationKeys.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForArrayMembers(GeneratedPasswordHistory) async getDecryptedPasswordGenerationHistory( options?: StorageOptions ): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.passwordGenerationHistory?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.passwordGenerationHistory?.decrypted; } async setDecryptedPasswordGenerationHistory( @@ -644,56 +714,82 @@ export class StateService< options?: StorageOptions ): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.passwordGenerationHistory.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototype(EncString) async getDecryptedPinProtected(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.settings?.pinProtected?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.settings?.pinProtected?.decrypted; } async setDecryptedPinProtected(value: EncString, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.settings.pinProtected.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForArrayMembers(Policy) async getDecryptedPolicies(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.policies?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.policies?.decrypted; } async setDecryptedPolicies(value: Policy[], options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.policies.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getDecryptedPrivateKey(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.keys?.privateKey?.decrypted; + const privateKey = ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.keys?.privateKey; + let result = privateKey?.decrypted; + if (result == null && privateKey?.decryptedSerialized != null) { + result = Utils.fromByteStringToArray(privateKey.decryptedSerialized); + } + return result; } async setDecryptedPrivateKey(value: ArrayBuffer, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.keys.privateKey.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + account.keys.privateKey.decryptedSerialized = + value == null ? null : Utils.fromBufferToByteString(value); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForMap(SymmetricCryptoKey, SymmetricCryptoKey.initFromJson) async getDecryptedProviderKeys( options?: StorageOptions ): Promise> { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.keys?.providerKeys?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.keys?.providerKeys?.decrypted; } async setDecryptedProviderKeys( @@ -701,23 +797,31 @@ export class StateService< options?: StorageOptions ): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.keys.providerKeys.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } + @withPrototypeForArrayMembers(SendView) async getDecryptedSends(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.sends?.decrypted; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.data?.sends?.decrypted; } async setDecryptedSends(value: SendView[], options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.data.sends.decrypted = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getDefaultUriMatch(options?: StorageOptions): Promise { @@ -924,16 +1028,20 @@ export class StateService< } async getEmail(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.profile?.email; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.profile?.email; } async setEmail(value: string, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.profile.email = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getEmailVerified(options?: StorageOptions): Promise { @@ -1173,6 +1281,7 @@ export class StateService< ); } + @withPrototypeForObjectValues(CipherData) async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())) @@ -1193,6 +1302,7 @@ export class StateService< ); } + @withPrototypeForObjectValues(CollectionData) async getEncryptedCollections( options?: StorageOptions ): Promise<{ [id: string]: CollectionData }> { @@ -1232,6 +1342,7 @@ export class StateService< ); } + @withPrototypeForObjectValues(FolderData) async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())) @@ -1272,6 +1383,7 @@ export class StateService< ); } + @withPrototypeForArrayMembers(GeneratedPasswordHistory) async getEncryptedPasswordGenerationHistory( options?: StorageOptions ): Promise { @@ -1311,6 +1423,7 @@ export class StateService< ); } + @withPrototypeForObjectValues(PolicyData) async getEncryptedPolicies(options?: StorageOptions): Promise<{ [id: string]: PolicyData }> { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) @@ -1332,9 +1445,10 @@ export class StateService< } async getEncryptedPrivateKey(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.keys?.privateKey?.encrypted; + const account = await this.getAccount( + this.reconcileOptions(options, await this.defaultOnDiskOptions()) + ); + return account?.keys?.privateKey?.encrypted; } async setEncryptedPrivateKey(value: string, options?: StorageOptions): Promise { @@ -1365,6 +1479,7 @@ export class StateService< ); } + @withPrototypeForObjectValues(SendData) async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())) @@ -1419,8 +1534,9 @@ export class StateService< ); } + @withPrototype(EnvironmentUrls) async getEnvironmentUrls(options?: StorageOptions): Promise { - if (this.state.activeUserId == null) { + if ((await this.state())?.activeUserId == null) { return await this.getGlobalEnvironmentUrls(options); } options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); @@ -1457,6 +1573,7 @@ export class StateService< ); } + @withPrototypeForArrayMembers(EventData) async getEventCollection(options?: StorageOptions): Promise { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) @@ -1476,32 +1593,38 @@ export class StateService< async getEverBeenUnlocked(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile - ?.everBeenUnlocked ?? false + (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))) + ?.profile?.everBeenUnlocked ?? false ); } async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.profile.everBeenUnlocked = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getForcePasswordReset(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile - ?.forcePasswordReset ?? false + (await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions()))) + ?.profile?.forcePasswordReset ?? false ); } async setForcePasswordReset(value: boolean, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.profile.forcePasswordReset = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getInstalledVersion(options?: StorageOptions): Promise { @@ -1622,6 +1745,7 @@ export class StateService< ); } + @withPrototype(SymmetricCryptoKey, SymmetricCryptoKey.initFromJson) async getLegacyEtmKey(options?: StorageOptions): Promise { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) @@ -1673,16 +1797,20 @@ export class StateService< } async getMainWindowSize(options?: StorageOptions): Promise { - return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.mainWindowSize; + return ( + await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.mainWindowSize; } async setMainWindowSize(value: number, options?: StorageOptions): Promise { const globals = await this.getGlobals( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); globals.mainWindowSize = value; - await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveGlobals( + globals, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getMinimizeOnCopyToClipboard(options?: StorageOptions): Promise { @@ -1774,16 +1902,20 @@ export class StateService< } async getOrganizationInvitation(options?: StorageOptions): Promise { - return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.organizationInvitation; + return ( + await this.getGlobals(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.organizationInvitation; } async setOrganizationInvitation(value: any, options?: StorageOptions): Promise { const globals = await this.getGlobals( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); globals.organizationInvitation = value; - await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveGlobals( + globals, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getOrganizations(options?: StorageOptions): Promise<{ [id: string]: OrganizationData }> { @@ -1874,6 +2006,7 @@ export class StateService< ); } + @withPrototypeForObjectValues(ProviderData) async getProviders(options?: StorageOptions): Promise<{ [id: string]: ProviderData }> { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) @@ -1895,16 +2028,26 @@ export class StateService< } async getPublicKey(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.keys?.publicKey; + const keys = ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.keys; + let result = keys?.publicKey; + if (result == null && keys?.publicKeySerialized != null) { + result = Utils.fromByteStringToArray(keys.publicKeySerialized); + } + return result; } async setPublicKey(value: ArrayBuffer, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.keys.publicKey = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + account.keys.publicKeySerialized = value == null ? null : Utils.fromBufferToByteString(value); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getRefreshToken(options?: StorageOptions): Promise { @@ -1937,16 +2080,20 @@ export class StateService< } async getSecurityStamp(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.tokens?.securityStamp; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultInMemoryOptions())) + )?.tokens?.securityStamp; } async setSecurityStamp(value: string, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); account.tokens.securityStamp = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultInMemoryOptions()) + ); } async getSettings(options?: StorageOptions): Promise { @@ -2144,7 +2291,7 @@ export class StateService< protected async getGlobals(options: StorageOptions): Promise { let globals: TGlobalState; if (this.useMemory(options.storageLocation)) { - globals = this.getGlobalsFromMemory(); + globals = await this.getGlobalsFromMemory(); } if (this.useDisk && globals == null) { @@ -2160,16 +2307,19 @@ export class StateService< : await this.saveGlobalsToDisk(globals, options); } - protected getGlobalsFromMemory(): TGlobalState { - return this.state.globals; + protected async getGlobalsFromMemory(): Promise { + return (await this.state()).globals; } protected async getGlobalsFromDisk(options: StorageOptions): Promise { return await this.storageService.get(keys.global, options); } - protected saveGlobalsToMemory(globals: TGlobalState): void { - this.state.globals = globals; + protected async saveGlobalsToMemory(globals: TGlobalState): Promise { + await this.updateState(async (state) => { + state.globals = globals; + return state; + }); } protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise { @@ -2184,7 +2334,7 @@ export class StateService< try { let account: TAccount; if (this.useMemory(options.storageLocation)) { - account = this.getAccountFromMemory(options); + account = await this.getAccountFromMemory(options); } if (this.useDisk(options.storageLocation) && account == null) { @@ -2197,21 +2347,25 @@ export class StateService< } } - protected getAccountFromMemory(options: StorageOptions): TAccount { - if (this.state.accounts == null) { - return null; - } - return this.state.accounts[this.getUserIdFromMemory(options)]; + protected async getAccountFromMemory(options: StorageOptions): Promise { + return await this.state().then(async (state) => { + if (state.accounts == null) { + return null; + } + return state.accounts[await this.getUserIdFromMemory(options)]; + }); } - protected getUserIdFromMemory(options: StorageOptions): string { - return options?.userId != null - ? this.state.accounts[options.userId]?.profile?.userId - : this.state.activeUserId; + protected async getUserIdFromMemory(options: StorageOptions): Promise { + return await this.state().then((state) => { + return options?.userId != null + ? state.accounts[options.userId]?.profile?.userId + : state.activeUserId; + }); } protected async getAccountFromDisk(options: StorageOptions): Promise { - if (options?.userId == null && this.state.activeUserId == null) { + if (options?.userId == null && (await this.state())?.activeUserId == null) { return null; } @@ -2270,7 +2424,12 @@ export class StateService< protected async saveAccountToMemory(account: TAccount): Promise { if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) { - this.state.accounts[account.profile.userId] = account; + await this.updateState((state) => { + return new Promise((resolve) => { + state.accounts[account.profile.userId] = account; + resolve(state); + }); + }); } await this.pushAccounts(); } @@ -2297,7 +2456,7 @@ export class StateService< if (storedAccount?.settings != null) { account.settings = storedAccount.settings; } else if (await this.storageService.has(keys.tempAccountSettings)) { - account.settings = await this.storageService.get(keys.tempAccountSettings); + account.settings = await this.storageService.get(keys.tempAccountSettings); await this.storageService.remove(keys.tempAccountSettings); } account.settings.environmentUrls = environmentUrls; @@ -2363,12 +2522,14 @@ export class StateService< protected async pushAccounts(): Promise { await this.pruneInMemoryAccounts(); - if (this.state?.accounts == null || Object.keys(this.state.accounts).length < 1) { - this.accounts.next(null); - return; - } + await this.state().then((state) => { + if (state.accounts == null || Object.keys(state.accounts).length < 1) { + this.accounts.next(null); + return; + } - this.accounts.next(this.state.accounts); + this.accounts.next(state.accounts); + }); } protected reconcileOptions( @@ -2389,15 +2550,18 @@ export class StateService< return requestedOptions; } - protected get defaultInMemoryOptions(): StorageOptions { - return { storageLocation: StorageLocation.Memory, userId: this.state.activeUserId }; + protected async defaultInMemoryOptions(): Promise { + return { + storageLocation: StorageLocation.Memory, + userId: (await this.state()).activeUserId, + }; } protected async defaultOnDiskOptions(): Promise { return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Session, - userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()), + userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()), useSecureStorage: false, }; } @@ -2406,7 +2570,7 @@ export class StateService< return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Local, - userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()), + userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()), useSecureStorage: false, }; } @@ -2415,7 +2579,7 @@ export class StateService< return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Memory, - userId: this.state.activeUserId ?? (await this.getUserId()), + userId: (await this.state())?.activeUserId ?? (await this.getUserId()), useSecureStorage: false, }; } @@ -2424,7 +2588,7 @@ export class StateService< return { storageLocation: StorageLocation.Disk, useSecureStorage: true, - userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()), + userId: (await this.state())?.activeUserId ?? (await this.getActiveUserIdFromStorage()), }; } @@ -2432,9 +2596,8 @@ export class StateService< return await this.storageService.get(keys.activeUserId); } - protected async removeAccountFromLocalStorage( - userId: string = this.state.activeUserId - ): Promise { + protected async removeAccountFromLocalStorage(userId: string = null): Promise { + userId = userId ?? (await this.state())?.activeUserId; const storedAccount = await this.getAccount( this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions()) ); @@ -2444,9 +2607,8 @@ export class StateService< ); } - protected async removeAccountFromSessionStorage( - userId: string = this.state.activeUserId - ): Promise { + protected async removeAccountFromSessionStorage(userId: string = null): Promise { + userId = userId ?? (await this.state())?.activeUserId; const storedAccount = await this.getAccount( this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions()) ); @@ -2456,26 +2618,31 @@ export class StateService< ); } - protected async removeAccountFromSecureStorage( - userId: string = this.state.activeUserId - ): Promise { + protected async removeAccountFromSecureStorage(userId: string = null): Promise { + userId = userId ?? (await this.state())?.activeUserId; await this.setCryptoMasterKeyAuto(null, { userId: userId }); await this.setCryptoMasterKeyBiometric(null, { userId: userId }); await this.setCryptoMasterKeyB64(null, { userId: userId }); } - protected removeAccountFromMemory(userId: string = this.state.activeUserId): void { - delete this.state.accounts[userId]; - if (this.useAccountCache) { - this.accountDiskCache.delete(userId); - } + protected async removeAccountFromMemory(userId: string = null): Promise { + await this.updateState(async (state) => { + userId = userId ?? state.activeUserId; + delete state.accounts[userId]; + + if (this.useAccountCache) { + this.accountDiskCache.delete(userId); + } + + return state; + }); } protected async pruneInMemoryAccounts() { // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state - for (const userId in this.state.accounts) { + for (const userId in (await this.state())?.accounts) { if (!(await this.getIsAuthenticated({ userId: userId }))) { - this.removeAccountFromMemory(userId); + await this.removeAccountFromMemory(userId); } } } @@ -2496,12 +2663,16 @@ export class StateService< return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls(); } - protected clearDecryptedDataForActiveUser() { - const userId = this.state.activeUserId; - if (userId == null || this.state?.accounts[userId]?.data == null) { - return; - } - this.state.accounts[userId].data = new AccountData(); + protected async clearDecryptedDataForActiveUser(): Promise { + await this.updateState(async (state) => { + const userId = state?.activeUserId; + if (userId == null || state?.accounts[userId]?.data == null) { + return; + } + state.accounts[userId].data = new AccountData(); + + return state; + }); } protected createAccount(init: Partial = null): TAccount { @@ -2512,13 +2683,16 @@ export class StateService< return this.stateFactory.createGlobal(init); } - protected async deAuthenticateAccount(userId: string) { + protected async deAuthenticateAccount(userId: string): Promise { await this.setAccessToken(null, { userId: userId }); await this.setLastActive(null, { userId: userId }); - this.state.authenticatedAccounts = this.state.authenticatedAccounts.filter( - (activeUserId) => activeUserId !== userId - ); - await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); + await this.updateState(async (state) => { + state.authenticatedAccounts = state.authenticatedAccounts.filter((id) => id !== userId); + + await this.storageService.save(keys.authenticatedAccounts, state.authenticatedAccounts); + + return state; + }); } protected async removeAccountFromDisk(userId: string) { @@ -2528,11 +2702,12 @@ export class StateService< } protected async dynamicallySetActiveUser() { - if (this.state.accounts == null || Object.keys(this.state.accounts).length < 1) { + const accounts = (await this.state())?.accounts; + if (accounts == null || Object.keys(accounts).length < 1) { await this.setActiveUser(null); return; } - for (const userId in this.state.accounts) { + for (const userId in accounts) { if (userId == null) { continue; } @@ -2549,7 +2724,7 @@ export class StateService< const timeout = await this.getVaultTimeout({ userId: options?.userId }); const defaultOptions = timeoutAction === "logOut" && timeout != null - ? this.defaultInMemoryOptions + ? await this.defaultInMemoryOptions() : await this.defaultOnDiskOptions(); return this.reconcileOptions(options, defaultOptions); } @@ -2559,4 +2734,202 @@ export class StateService< ? await this.secureStorageService.remove(`${options.userId}${key}`, options) : await this.secureStorageService.save(`${options.userId}${key}`, value, options); } + + protected state(): Promise> { + return this.memoryStorageService.get>(keys.state); + } + + private async setState(state: State): Promise { + await this.memoryStorageService.save(keys.state, state); + } + + protected async updateState( + stateUpdater: (state: State) => Promise> + ) { + await this.state().then(async (state) => { + const updatedState = await stateUpdater(state); + + await this.setState(updatedState); + }); + } +} + +export function withPrototype( + constructor: new (...args: any[]) => T, + converter: (input: T) => T = (i) => i +): ( + target: any, + propertyKey: string | symbol, + descriptor: PropertyDescriptor +) => { value: (...args: any[]) => Promise } { + return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value; + + return { + value: function (...args: any[]) { + const originalResult: Promise = originalMethod.apply(this, args); + + if (!(originalResult instanceof Promise)) { + throw new Error( + `Error applying prototype to stored value -- result is not a promise for method ${String( + propertyKey + )}` + ); + } + + return originalResult.then((result) => { + return result == null || + result.constructor.name === constructor.prototype.constructor.name + ? converter(result as T) + : converter( + Object.create(constructor.prototype, Object.getOwnPropertyDescriptors(result)) as T + ); + }); + }, + }; + }; +} + +function withPrototypeForArrayMembers( + memberConstructor: new (...args: any[]) => T, + memberConverter: (input: T) => T = (i) => i +): ( + target: any, + propertyKey: string | symbol, + descriptor: PropertyDescriptor +) => { value: (...args: any[]) => Promise } { + return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value; + + return { + value: function (...args: any[]) { + const originalResult: Promise = originalMethod.apply(this, args); + + if (!(originalResult instanceof Promise)) { + throw new Error( + `Error applying prototype to stored value -- result is not a promise for method ${String( + propertyKey + )}` + ); + } + + return originalResult.then((result) => { + if (result == null) { + return null; + } else if (!(result instanceof Array)) { + throw new Error( + `Attempted to retrieve non array type from state as an array for method ${String( + propertyKey + )}` + ); + } else { + return result.map((r) => { + return r == null || + r.constructor.name === memberConstructor.prototype.constructor.name + ? memberConverter(r) + : memberConverter( + Object.create(memberConstructor.prototype, Object.getOwnPropertyDescriptors(r)) + ); + }); + } + }); + }, + }; + }; +} + +function withPrototypeForObjectValues( + valuesConstructor: new (...args: any[]) => T, + valuesConverter: (input: T) => T = (i) => i +): ( + target: any, + propertyKey: string | symbol, + descriptor: PropertyDescriptor +) => { value: (...args: any[]) => Promise<{ [key: string]: T }> } { + return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value; + + return { + value: function (...args: any[]) { + const originalResult: Promise<{ [key: string]: T }> = originalMethod.apply(this, args); + + if (!(originalResult instanceof Promise)) { + throw new Error( + `Error applying prototype to stored value -- result is not a promise for method ${String( + propertyKey + )}` + ); + } + + return originalResult.then((result) => { + if (result == null) { + return null; + } else { + for (const [key, val] of Object.entries(result)) { + result[key] = + val == null || val.constructor.name === valuesConstructor.prototype.constructor.name + ? valuesConverter(val) + : valuesConverter( + Object.create( + valuesConstructor.prototype, + Object.getOwnPropertyDescriptors(val) + ) + ); + } + + return result as { [key: string]: T }; + } + }); + }, + }; + }; +} + +function withPrototypeForMap( + valuesConstructor: new (...args: any[]) => T, + valuesConverter: (input: T) => T = (i) => i +): ( + target: any, + propertyKey: string | symbol, + descriptor: PropertyDescriptor +) => { value: (...args: any[]) => Promise> } { + return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value; + + return { + value: function (...args: any[]) { + const originalResult: Promise = originalMethod.apply(this, args); + + if (!(originalResult instanceof Promise)) { + throw new Error( + `Error applying prototype to stored value -- result is not a promise for method ${String( + propertyKey + )}` + ); + } + + return originalResult.then((result) => { + if (result == null) { + return null; + } else if (result instanceof Map) { + return result; + } else { + for (const key in Object.keys(result)) { + result[key] = + result[key] == null || + result[key].constructor.name === valuesConstructor.prototype.constructor.name + ? valuesConverter(result[key]) + : valuesConverter( + Object.create( + valuesConstructor.prototype, + Object.getOwnPropertyDescriptors(result[key]) + ) + ); + } + return new Map(Object.entries(result)); + } + }); + }, + }; + }; } diff --git a/libs/common/src/services/stateMigration.service.ts b/libs/common/src/services/stateMigration.service.ts index 2b299898a35..0fc38aa2976 100644 --- a/libs/common/src/services/stateMigration.service.ts +++ b/libs/common/src/services/stateMigration.service.ts @@ -1,4 +1,4 @@ -import { StorageService } from "../abstractions/storage.service"; +import { AbstractStorageService } from "../abstractions/storage.service"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StateVersion } from "../enums/stateVersion"; @@ -132,8 +132,8 @@ export class StateMigrationService< TAccount extends Account = Account > { constructor( - protected storageService: StorageService, - protected secureStorageService: StorageService, + protected storageService: AbstractStorageService, + protected secureStorageService: AbstractStorageService, protected stateFactory: StateFactory ) {} diff --git a/libs/common/src/services/totp.service.ts b/libs/common/src/services/totp.service.ts index 730587c77f0..3264c598df1 100644 --- a/libs/common/src/services/totp.service.ts +++ b/libs/common/src/services/totp.service.ts @@ -1,6 +1,5 @@ import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { LogService } from "../abstractions/log.service"; -import { StateService } from "../abstractions/state.service"; import { TotpService as TotpServiceAbstraction } from "../abstractions/totp.service"; import { Utils } from "../misc/utils"; @@ -10,8 +9,7 @@ const SteamChars = "23456789BCDFGHJKMNPQRTVWXY"; export class TotpService implements TotpServiceAbstraction { constructor( private cryptoFunctionService: CryptoFunctionService, - private logService: LogService, - private stateService: StateService + private logService: LogService ) {} async getCode(key: string): Promise { @@ -113,10 +111,6 @@ export class TotpService implements TotpServiceAbstraction { return period; } - async isAutoCopyEnabled(): Promise { - return !(await this.stateService.getDisableAutoTotpCopy()); - } - // Helpers private leftPad(s: string, l: number, p: string): string { diff --git a/libs/components/README.md b/libs/components/README.md deleted file mode 100644 index ce39c48faf5..00000000000 --- a/libs/components/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Components - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.3. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/libs/components/angular.json b/libs/components/angular.json deleted file mode 100644 index 90015d56a30..00000000000 --- a/libs/components/angular.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "components": { - "projectType": "application", - "schematics": { - "@schematics/angular:application": { - "strict": true - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/components", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "assets": ["src/favicon.ico", "src/assets"], - "styles": ["src/styles.scss", "src/styles.css"], - "stylePreprocessorOptions": { - "includePaths": ["src/styles"] - }, - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "browserTarget": "components:build:production" - }, - "development": { - "browserTarget": "components:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "components:build" - } - } - } - } - }, - "defaultProject": "components" -} diff --git a/libs/components/jest.config.js b/libs/components/jest.config.js index 8aa314bd35b..7cd0efb73ab 100644 --- a/libs/components/jest.config.js +++ b/libs/components/jest.config.js @@ -7,7 +7,7 @@ module.exports = { displayName: "libs/components tests", preset: "jest-preset-angular", testMatch: ["**/+(*.)+(spec).+(ts)"], - setupFilesAfterEnv: ["/spec/test.ts"], + setupFilesAfterEnv: ["/spec/test.setup.ts"], collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", diff --git a/libs/components/spec/test.ts b/libs/components/spec/test.setup.ts similarity index 100% rename from libs/components/spec/test.ts rename to libs/components/spec/test.setup.ts diff --git a/libs/components/src/form-field/form-field.component.html b/libs/components/src/form-field/form-field.component.html index 00c844c336b..10ec4550414 100644 --- a/libs/components/src/form-field/form-field.component.html +++ b/libs/components/src/form-field/form-field.component.html @@ -7,7 +7,7 @@ -
+
diff --git a/libs/components/src/form-field/form-field.component.ts b/libs/components/src/form-field/form-field.component.ts index 29c4ba369fe..53a641fa91f 100644 --- a/libs/components/src/form-field/form-field.component.ts +++ b/libs/components/src/form-field/form-field.component.ts @@ -31,17 +31,6 @@ export class BitFormFieldComponent implements AfterContentChecked { @ContentChildren(BitSuffixDirective) suffixChildren: QueryList; ngAfterContentChecked(): void { - this.input.hasPrefix = this.prefixChildren.length > 0; - this.input.hasSuffix = this.suffixChildren.length > 0; - - this.prefixChildren.forEach((prefix) => { - prefix.first = prefix == this.prefixChildren.first; - }); - - this.suffixChildren.forEach((suffix) => { - suffix.last = suffix == this.suffixChildren.last; - }); - if (this.error) { this.input.ariaDescribedBy = this.error.id; } else if (this.hint) { diff --git a/libs/components/src/form-field/form-field.stories.ts b/libs/components/src/form-field/form-field.stories.ts index fb9a8488664..96cacb97645 100644 --- a/libs/components/src/form-field/form-field.stories.ts +++ b/libs/components/src/form-field/form-field.stories.ts @@ -167,8 +167,6 @@ const ButtonGroupTemplate: Story = (args: BitFormFieldCom Label - - diff --git a/libs/components/src/form-field/prefix.directive.ts b/libs/components/src/form-field/prefix.directive.ts index 28ae6bd9705..010dbc056e5 100644 --- a/libs/components/src/form-field/prefix.directive.ts +++ b/libs/components/src/form-field/prefix.directive.ts @@ -9,7 +9,7 @@ export const PrefixClasses = [ "tw-border-solid", "tw-border-secondary-500", "tw-text-muted", - "tw-rounded", + "tw-rounded-none", ]; @Directive({ @@ -17,12 +17,6 @@ export const PrefixClasses = [ }) export class BitPrefixDirective { @HostBinding("class") @Input() get classList() { - return PrefixClasses.concat([ - "tw-border-r-0", - "tw-rounded-r-none", - !this.first ? "tw-rounded-l-none" : "", - ]).filter((c) => c != ""); + return PrefixClasses.concat(["tw-border-r-0", "first:tw-rounded-l"]); } - - @Input() first = false; } diff --git a/libs/components/src/form-field/suffix.directive.ts b/libs/components/src/form-field/suffix.directive.ts index c644e80cb28..6b0a8e978ad 100644 --- a/libs/components/src/form-field/suffix.directive.ts +++ b/libs/components/src/form-field/suffix.directive.ts @@ -7,12 +7,6 @@ import { PrefixClasses } from "./prefix.directive"; }) export class BitSuffixDirective { @HostBinding("class") @Input() get classList() { - return PrefixClasses.concat([ - "tw-rounded-l-none", - "tw-border-l-0", - !this.last ? "tw-rounded-r-none" : "", - ]).filter((c) => c != ""); + return PrefixClasses.concat(["tw-border-l-0", "last:tw-rounded-r"]); } - - @Input() last = false; } diff --git a/libs/components/src/index.ts b/libs/components/src/index.ts index a83b5613553..cb45e12228e 100644 --- a/libs/components/src/index.ts +++ b/libs/components/src/index.ts @@ -5,3 +5,4 @@ export * from "./callout"; export * from "./form-field"; export * from "./menu"; export * from "./utils/i18n-mock.service"; +export * from "./submit-button"; diff --git a/libs/components/src/input/input.directive.ts b/libs/components/src/input/input.directive.ts index f75e3da61c8..571d54adcc5 100644 --- a/libs/components/src/input/input.directive.ts +++ b/libs/components/src/input/input.directive.ts @@ -17,18 +17,20 @@ export class BitInputDirective { "tw-bg-background-alt", "tw-border", "tw-border-solid", - "tw-rounded", + this.hasError ? "tw-border-danger-500" : "tw-border-secondary-500", "tw-text-main", "tw-placeholder-text-muted", + // Rounded + "tw-rounded-none", + "first:tw-rounded-l", + "last:tw-rounded-r", + // Focus "focus:tw-outline-none", "focus:tw-border-primary-700", "focus:tw-ring-1", "focus:tw-ring-primary-700", "focus:tw-z-10", "disabled:tw-bg-secondary-100", - this.hasPrefix ? "tw-rounded-l-none" : "", - this.hasSuffix ? "tw-rounded-r-none" : "", - this.hasError ? "tw-border-danger-500" : "tw-border-secondary-500", ].filter((s) => s != ""); } diff --git a/libs/components/src/submit-button/index.ts b/libs/components/src/submit-button/index.ts new file mode 100644 index 00000000000..ae7d96d2c1a --- /dev/null +++ b/libs/components/src/submit-button/index.ts @@ -0,0 +1 @@ +export * from "./submit-button.module"; diff --git a/libs/components/src/submit-button/submit-button.component.html b/libs/components/src/submit-button/submit-button.component.html new file mode 100644 index 00000000000..f3c097b2f34 --- /dev/null +++ b/libs/components/src/submit-button/submit-button.component.html @@ -0,0 +1,10 @@ + diff --git a/libs/components/src/submit-button/submit-button.component.ts b/libs/components/src/submit-button/submit-button.component.ts new file mode 100644 index 00000000000..b005974a1ce --- /dev/null +++ b/libs/components/src/submit-button/submit-button.component.ts @@ -0,0 +1,13 @@ +import { Component, Input } from "@angular/core"; + +import { ButtonTypes } from "../button"; + +@Component({ + selector: "bit-submit-button", + templateUrl: "./submit-button.component.html", +}) +export class SubmitButtonComponent { + @Input() buttonType: ButtonTypes = "primary"; + @Input() disabled = false; + @Input() loading: boolean; +} diff --git a/libs/components/src/submit-button/submit-button.module.ts b/libs/components/src/submit-button/submit-button.module.ts new file mode 100644 index 00000000000..c7ab7567e64 --- /dev/null +++ b/libs/components/src/submit-button/submit-button.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; + +import { ButtonModule } from "../button"; + +import { SubmitButtonComponent } from "./submit-button.component"; + +@NgModule({ + imports: [CommonModule, ButtonModule], + exports: [SubmitButtonComponent], + declarations: [SubmitButtonComponent], +}) +export class SubmitButtonModule {} diff --git a/libs/components/src/submit-button/submit-button.stories.ts b/libs/components/src/submit-button/submit-button.stories.ts new file mode 100644 index 00000000000..fddf6a043c1 --- /dev/null +++ b/libs/components/src/submit-button/submit-button.stories.ts @@ -0,0 +1,44 @@ +import { Meta, moduleMetadata, Story } from "@storybook/angular"; + +import { SubmitButtonComponent } from "./submit-button.component"; +import { SubmitButtonModule } from "./submit-button.module"; + +export default { + title: "Component Library/Submit Button", + component: SubmitButtonComponent, + decorators: [ + moduleMetadata({ + imports: [SubmitButtonModule], + }), + ], + args: { + buttonType: "primary", + loading: false, + }, + parameters: { + design: { + type: "figma", + url: "https://www.figma.com/file/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?node-id=1881%3A16733", + }, + }, +} as Meta; + +const Template: Story = (args: SubmitButtonComponent) => ({ + props: args, + template: ` + Submit + `, +}); + +export const Primary = Template.bind({}); +Primary.args = {}; + +export const Loading = Template.bind({}); +Loading.args = { + loading: true, +}; + +export const Disabled = Template.bind({}); +Disabled.args = { + disabled: true, +}; diff --git a/libs/components/src/test.ts b/libs/components/src/test.setup.ts similarity index 100% rename from libs/components/src/test.ts rename to libs/components/src/test.setup.ts diff --git a/libs/electron/jest.config.js b/libs/electron/jest.config.js index ff97e478b7b..06f2234ec6f 100644 --- a/libs/electron/jest.config.js +++ b/libs/electron/jest.config.js @@ -6,7 +6,7 @@ module.exports = { preset: "ts-jest", testEnvironment: "jsdom", testMatch: ["**/+(*.)+(spec).+(ts)"], - setupFilesAfterEnv: ["/spec/test.ts"], + setupFilesAfterEnv: ["/spec/test.setup.ts"], collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", diff --git a/libs/electron/spec/test.ts b/libs/electron/spec/test.setup.ts similarity index 100% rename from libs/electron/spec/test.ts rename to libs/electron/spec/test.setup.ts diff --git a/libs/electron/src/services/electronCrypto.service.ts b/libs/electron/src/services/electronCrypto.service.ts index 161de70342b..461d809d790 100644 --- a/libs/electron/src/services/electronCrypto.service.ts +++ b/libs/electron/src/services/electronCrypto.service.ts @@ -1,3 +1,4 @@ +import { AbstractEncryptService } from "@bitwarden/common/abstractions/abstractEncrypt.service"; import { CryptoFunctionService } from "@bitwarden/common/abstractions/cryptoFunction.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -9,11 +10,12 @@ import { CryptoService } from "@bitwarden/common/services/crypto.service"; export class ElectronCryptoService extends CryptoService { constructor( cryptoFunctionService: CryptoFunctionService, + encryptService: AbstractEncryptService, platformUtilService: PlatformUtilsService, logService: LogService, stateService: StateService ) { - super(cryptoFunctionService, platformUtilService, logService, stateService); + super(cryptoFunctionService, encryptService, platformUtilService, logService, stateService); } async hasKeyStored(keySuffix: KeySuffixOptions): Promise { diff --git a/libs/electron/src/services/electronPlatformUtils.service.ts b/libs/electron/src/services/electronPlatformUtils.service.ts index a07e354aedd..9eade37b774 100644 --- a/libs/electron/src/services/electronPlatformUtils.service.ts +++ b/libs/electron/src/services/electronPlatformUtils.service.ts @@ -6,7 +6,6 @@ import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUti import { StateService } from "@bitwarden/common/abstractions/state.service"; import { ClientType } from "@bitwarden/common/enums/clientType"; import { DeviceType } from "@bitwarden/common/enums/deviceType"; -import { ThemeType } from "@bitwarden/common/enums/themeType"; import { isDev, isMacAppStore } from "../utils"; @@ -84,16 +83,6 @@ export class ElectronPlatformUtilsService implements PlatformUtilsService { shell.openExternal(uri); } - saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void { - const blob = new Blob([blobData], blobOptions); - const a = win.document.createElement("a"); - a.href = URL.createObjectURL(blob); - a.download = fileName; - win.document.body.appendChild(a); - a.click(); - win.document.body.removeChild(a); - } - getApplicationVersion(): Promise { return ipcRenderer.invoke("appVersion"); } @@ -189,25 +178,6 @@ export class ElectronPlatformUtilsService implements PlatformUtilsService { }); } - getDefaultSystemTheme() { - return ipcRenderer.invoke("systemTheme"); - } - - onDefaultSystemThemeChange(callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown) { - ipcRenderer.on("systemThemeUpdated", (event, theme: ThemeType.Light | ThemeType.Dark) => - callback(theme) - ); - } - - async getEffectiveTheme() { - const theme = await this.stateService.getTheme(); - if (theme == null || theme === ThemeType.System) { - return this.getDefaultSystemTheme(); - } else { - return theme; - } - } - supportsSecureStorage(): boolean { return true; } diff --git a/libs/electron/src/services/electronRendererSecureStorage.service.ts b/libs/electron/src/services/electronRendererSecureStorage.service.ts index ac329532b8d..f80a22e7810 100644 --- a/libs/electron/src/services/electronRendererSecureStorage.service.ts +++ b/libs/electron/src/services/electronRendererSecureStorage.service.ts @@ -1,9 +1,9 @@ import { ipcRenderer } from "electron"; -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { StorageOptions } from "@bitwarden/common/models/domain/storageOptions"; -export class ElectronRendererSecureStorageService implements StorageService { +export class ElectronRendererSecureStorageService implements AbstractStorageService { async get(key: string, options?: StorageOptions): Promise { const val = ipcRenderer.sendSync("keytar", { action: "getPassword", diff --git a/libs/electron/src/services/electronRendererStorage.service.ts b/libs/electron/src/services/electronRendererStorage.service.ts index 574eadee12d..601dcbb22f1 100644 --- a/libs/electron/src/services/electronRendererStorage.service.ts +++ b/libs/electron/src/services/electronRendererStorage.service.ts @@ -1,8 +1,8 @@ import { ipcRenderer } from "electron"; -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; -export class ElectronRendererStorageService implements StorageService { +export class ElectronRendererStorageService implements AbstractStorageService { get(key: string): Promise { return ipcRenderer.invoke("storageService", { action: "get", diff --git a/libs/electron/src/services/electronStorage.service.ts b/libs/electron/src/services/electronStorage.service.ts index 0b19bb07553..e2ff9a92d0b 100644 --- a/libs/electron/src/services/electronStorage.service.ts +++ b/libs/electron/src/services/electronStorage.service.ts @@ -2,13 +2,13 @@ import * as fs from "fs"; import { ipcMain } from "electron"; -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { NodeUtils } from "@bitwarden/common/misc/nodeUtils"; // eslint-disable-next-line const Store = require("electron-store"); -export class ElectronStorageService implements StorageService { +export class ElectronStorageService implements AbstractStorageService { private store: any; constructor(dir: string, defaults = {}) { diff --git a/libs/node/jest.config.js b/libs/node/jest.config.js index 8fe21f8af5a..056444b8307 100644 --- a/libs/node/jest.config.js +++ b/libs/node/jest.config.js @@ -5,7 +5,7 @@ const { compilerOptions } = require("../shared/tsconfig.libs"); module.exports = { preset: "ts-jest", testMatch: ["**/+(*.)+(spec).+(ts)"], - setupFilesAfterEnv: ["/spec/test.ts"], + setupFilesAfterEnv: ["/spec/test.setup.ts"], collectCoverage: true, coverageReporters: ["html", "lcov"], coverageDirectory: "coverage", diff --git a/libs/node/spec/test.ts b/libs/node/spec/test.setup.ts similarity index 100% rename from libs/node/spec/test.ts rename to libs/node/spec/test.setup.ts diff --git a/libs/node/src/cli/services/cliPlatformUtils.service.ts b/libs/node/src/cli/services/cliPlatformUtils.service.ts index 936e62d87e0..de7349c1a8b 100644 --- a/libs/node/src/cli/services/cliPlatformUtils.service.ts +++ b/libs/node/src/cli/services/cliPlatformUtils.service.ts @@ -3,7 +3,6 @@ import * as child_process from "child_process"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { ClientType } from "@bitwarden/common/enums/clientType"; import { DeviceType } from "@bitwarden/common/enums/deviceType"; -import { ThemeType } from "@bitwarden/common/enums/themeType"; // eslint-disable-next-line const open = require("open"); @@ -85,10 +84,6 @@ export class CliPlatformUtilsService implements PlatformUtilsService { } } - saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void { - throw new Error("Not implemented."); - } - getApplicationVersion(): Promise { return Promise.resolve(this.packageJson.version); } @@ -148,18 +143,6 @@ export class CliPlatformUtilsService implements PlatformUtilsService { return Promise.resolve(false); } - getDefaultSystemTheme() { - return Promise.resolve(ThemeType.Light as ThemeType.Light | ThemeType.Dark); - } - - onDefaultSystemThemeChange() { - /* noop */ - } - - getEffectiveTheme() { - return Promise.resolve(ThemeType.Light); - } - supportsSecureStorage(): boolean { return false; } diff --git a/libs/node/src/services/lowdbStorage.service.ts b/libs/node/src/services/lowdbStorage.service.ts index e7db9ec692d..102168f909b 100644 --- a/libs/node/src/services/lowdbStorage.service.ts +++ b/libs/node/src/services/lowdbStorage.service.ts @@ -5,12 +5,12 @@ import * as lowdb from "lowdb"; import * as FileSync from "lowdb/adapters/FileSync"; import { LogService } from "@bitwarden/common/abstractions/log.service"; -import { StorageService } from "@bitwarden/common/abstractions/storage.service"; +import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service"; import { NodeUtils } from "@bitwarden/common/misc/nodeUtils"; import { sequentialize } from "@bitwarden/common/misc/sequentialize"; import { Utils } from "@bitwarden/common/misc/utils"; -export class LowdbStorageService implements StorageService { +export class LowdbStorageService implements AbstractStorageService { protected dataFilePath: string; private db: lowdb.LowdbSync; private defaults: any; diff --git a/package-lock.json b/package-lock.json index 9a3739783fd..da511d2ed33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -227,7 +227,7 @@ }, "apps/web": { "name": "@bitwarden/web-vault", - "version": "2022.05.0" + "version": "2022.6.0" }, "libs/angular": { "name": "@bitwarden/angular",