diff --git a/gulpfile.js b/gulpfile.js index c90d6361ef..98422896d8 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -30,13 +30,6 @@ const filters = { safari: [ '!build/safari/**/*' ], - webExt: [ - '!build/manifest.json' - ], - nonSafariApp: [ - '!build/background.html', - '!build/popup/index.html' - ], }; function buildString() { @@ -65,6 +58,7 @@ function dist(browserName, manifest) { function distFirefox() { return dist('firefox', (manifest) => { delete manifest.content_security_policy; + delete manifest.optional_permissions; removeShortcuts(manifest); return manifest; }); @@ -186,6 +180,7 @@ function safariCopyAssets(source, dest) { .on('error', reject) .pipe(gulpif('safari/Info.plist', replace('0.0.1', manifest.version))) .pipe(gulpif('safari/Info.plist', replace('0.0.2', process.env.BUILD_NUMBER || manifest.version))) + .pipe(gulpif('desktop.xcodeproj/project.pbxproj', replace('../../../build', '../safari/app'))) .pipe(gulp.dest(dest)) .on('end', resolve); }); @@ -195,8 +190,8 @@ function safariCopyBuild(source, dest) { return new Promise((resolve, reject) => { gulp.src(source) .on('error', reject) - .pipe(filter(['**'].concat(filters.fonts) - .concat(filters.webExt).concat(filters.nonSafariApp))) + .pipe(filter(['**'].concat(filters.fonts))) + .pipe(gulpif('popup/index.html', replace('__BROWSER__', 'browser_safari'))) .pipe(gulp.dest(dest)) .on('end', resolve); }); diff --git a/jslib b/jslib index 6ac6df75d7..11249e3444 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 6ac6df75d7a9bd5ea58f5d8310f1b3e34abd2bde +Subproject commit 11249e34441ea747f53fcb0b6e38f690366b46b5 diff --git a/package-lock.json b/package-lock.json index d907f23b21..2884680e63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1894,10 +1894,10 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "browser-hrtime": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/browser-hrtime/-/browser-hrtime-1.1.8.tgz", + "integrity": "sha512-kzXheikaJsBtzUBlyVtPIY5r0soQePzjwVwT4IlDpU2RvfB5Py52gpU98M77rgqMCheoSSZvrcrdj3t6cZ3suA==" }, "browser-resolve": { "version": "1.11.3", diff --git a/package.json b/package.json index 764d5e0c48..47827bd1fd 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "build:watch": "gulp build && webpack --watch", "build:prod": "gulp build && cross-env NODE_ENV=production webpack", "build:prod:watch": "gulp build && cross-env NODE_ENV=production webpack --watch", + "build:xcode": "npm run build && rsync -av build/./ src/safari/safari/app --exclude popup/index.html", "clean:l10n": "git push origin --delete l10n_master", "dist": "npm run build:prod && gulp dist", "dist:firefox": "npm run build:prod && gulp dist:firefox", @@ -94,7 +95,7 @@ "angular2-toaster": "8.0.0", "angulartics2": "9.1.0", "big-integer": "1.6.36", - "browser-process-hrtime": "1.0.0", + "browser-hrtime": "^1.1.8", "core-js": "2.6.2", "duo_web_sdk": "git+https://github.com/duosecurity/duo_web_sdk.git", "font-awesome": "4.7.0", diff --git a/src/_locales/be/messages.json b/src/_locales/be/messages.json index d658e75b5a..956de57b91 100644 --- a/src/_locales/be/messages.json +++ b/src/_locales/be/messages.json @@ -20,7 +20,7 @@ "message": "Увайсці" }, "enterpriseSingleSignOn": { - "message": "Enterprise Single Sign-On" + "message": "Адзіны ўваход у карпаратыўную сістэму (SSO)." }, "cancel": { "message": "Скасаваць" @@ -89,7 +89,7 @@ "message": "Стварыць пароль (з капіяваннем)" }, "noMatchingLogins": { - "message": "Няма падыходных імён карыстальнікаў." + "message": "Няма падыходных уліковых даных." }, "vaultLocked": { "message": "Сховішча заблакіравана." @@ -98,10 +98,10 @@ "message": "Вы выйшлі са сховішча." }, "autoFillInfo": { - "message": "Няма імён карыстальніка, даступных для аўтазапаўнення ў бягучую ўкладку браўзера." + "message": "Няма ўліковых даных, даступных для аўтазапаўнення ў бягучую ўкладку браўзера." }, "addLogin": { - "message": "Дадаць імя карыстальніка" + "message": "Дадаць ўліковыя даныя" }, "addItem": { "message": "Дадаць элемент" @@ -188,7 +188,7 @@ "description": "Short for 'Password Generator'." }, "passGenInfo": { - "message": "Аўтаматычна ствараць моцныя, унікальныя паролі для вашых імён карыстальніка." + "message": "Аўтаматычна ствараць моцныя, унікальныя паролі для вашых уліковых даных." }, "bitWebVault": { "message": "Вэб-сховішча Bitwarden" @@ -328,7 +328,7 @@ "message": "Памылковы асноўны пароль" }, "vaultTimeout": { - "message": "Таймаўт сховішча" + "message": "Тайм-аўт сховішча" }, "lockNow": { "message": "Заблакіраваць зараз" @@ -523,10 +523,10 @@ "description": "This is the folder for uncategorized items" }, "disableAddLoginNotification": { - "message": "Адключыць апавяшчэнне аб даданні імя карыстальніка" + "message": "Адключыць апавяшчэнне аб даданні ўліковых даных" }, "addLoginNotificationDesc": { - "message": "Апавяшчэнне аб даданні імя карыстальніка аўтаматычна прапануе вам захаваць новыя імёны карыстальніка ў сховішчы." + "message": "Апавяшчэнне аб даданні ўліковых даных аўтаматычна прапануе вам захаваць новыя ўліковыя даныя ў сховішчы." }, "dontShowCardsCurrentTab": { "message": "Не паказваць карткі на панэлі ўкладак" @@ -573,14 +573,14 @@ "message": "Адключыць параметры кантэкстнага меню" }, "disableContextMenuItemDesc": { - "message": "Параметры кантэкстнага меню забяспечваюць хуткі доступ да генератара пароляў і імёнам карыстальніка для сайта на бягучай укладцы." + "message": "Параметры кантэкстнага меню забяспечваюць хуткі доступ да генератара пароляў і ўліковых даных для сайта на бягучай укладцы." }, "defaultUriMatchDetection": { "message": "Выяўленне супадзення URI па змаўчанні", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { - "message": "Абярыце спосаб па змаўчанні, які выкарыстоўваецца пры вызначэнні адпаведнасці URI для імён карыстальніка пры выкананні такіх дзеянняў, як аўтаматычнае запаўненне." + "message": "Выберыце спосаб па змаўчанні, які выкарыстоўваецца пры вызначэнні адпаведнасці URI для ўліковых даных пры выкананні такіх дзеянняў, як аўтаматычнае запаўненне." }, "theme": { "message": "Тэма" @@ -606,9 +606,15 @@ "message": "УВАГА", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Экспартуемы файл утрымлівае даныя вашага сховішча ў незашыфраваным фармаце. Яго не варта захоўваць ці адпраўляць па небяспечным каналам (напрыклад, па электроннай пошце). Выдаліце яго адразу пасля выкарыстання." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Увядзіце ваш асноўны пароль для экспарту даных са сховішча." }, @@ -709,7 +715,7 @@ "message": "Гігіена пароляў, здароўе ўліковага запісу і справаздачы аб уцечках даных для забеспячэння бяспекі вашага сховішча." }, "ppremiumSignUpTotp": { - "message": "TOTP-генератар кодаў (2ФА) для імён карыстальнікаў вашага сховішча." + "message": "TOTP-генератар кодаў (2ФА) для ўліковых даных вашага сховішча." }, "ppremiumSignUpSupport": { "message": "Прыярытэтная падтрымка." @@ -745,7 +751,7 @@ "message": "Адключыць аўтаматычнае капіяванне TOTP" }, "disableAutoTotpCopyDesc": { - "message": "Калі да вашага імя карыстальніка прымацаваны ключ праверкі сапраўднасці, то код пацвярджэння TOTP будзе скапіяваны пры аўтазапаўненні імені карыстальніка." + "message": "Калі да вашых уліковых даных прымацаваны ключ праверкі сапраўднасці, то код пацвярджэння TOTP будзе скапіяваны пры аўтазапаўненні ўліковых даных." }, "premiumRequired": { "message": "Патрабуецца прэміяльны статус" @@ -796,7 +802,7 @@ "message": "У гэтага ўліковага запісу ўключаны двухэтапны ўваход, аднак ні адзін з наладжаных варыянтаў не падтрымліваецца гэтым вэб-браўзерам." }, "noTwoStepProviders2": { - "message": "Выкарыстоўвайце актуальын вэб-браўзар (напрыклад, Chrome) і/або дадайце дадатковыя варыянты праверкі сапраўднасці, якія падтрымліваюцца ў вэб-браўзерах (напрыклад, праграма для праверкі сапраўднасці)." + "message": "Выкарыстоўвайце актуальны вэб-браўзер (напрыклад, Chrome) і/або дадайце дадатковыя варыянты праверкі сапраўднасці, якія падтрымліваюцца ў вэб-браўзерах (напрыклад, праграма для праверкі сапраўднасці)." }, "twoStepOptions": { "message": "Параметры двухэтапнага ўваходу" @@ -883,19 +889,19 @@ "message": "Гэта эксперыментальная функцыя. Выкарыстоўвайце на свой страх і рызыку." }, "commandOpenPopup": { - "message": "Адчыніць сховішча ва ўсплываючым акне" + "message": "Адкрыць сховішча ва ўсплывальным акне" }, "commandOpenSidebar": { - "message": "Адчыніць сховішча ў бакавой панэлі" + "message": "Адкрыць сховішча ў бакавой панэлі" }, "commandAutofillDesc": { - "message": "Аўтазапаўненне апошняга скарыстанага імя карыстальніка для бягучага вэб-сайта." + "message": "Аўтазапаўненне апошніх скарыстаных уліковых даных для бягучага вэб-сайта." }, "commandGeneratePasswordDesc": { "message": "Стварыць і капіяваць новы выпадковы парольу буфер абмену." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Заблакіраваць сховішча" }, "privateModeMessage": { "message": "На жаль, гэта акно недаступна ў прыватным акне гэтага браўзара." @@ -1069,10 +1075,10 @@ "message": "Тып" }, "typeLogin": { - "message": "Імя карыстальніка" + "message": "Уліковыя даныя" }, "typeLogins": { - "message": "Імёны карыстальніка" + "message": "Уліковыя даныя" }, "typeSecureNote": { "message": "Бяспечныя нататкі" @@ -1108,7 +1114,7 @@ "message": "Пасведчанні" }, "logins": { - "message": "Імёны карыстальніка" + "message": "Уліковыя даныя" }, "secureNotes": { "message": "Бяспечныя нататкі" @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Ваша сховішча заблакіравана. Каб працягнуць, увядзіце PIN-код." }, + "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": "Блакіраваць асноўным паролем пры перазапуску браўзера" }, @@ -1266,7 +1281,7 @@ "message": "На налады генератара ўплываюць адна або некалькі палітык арганізацый." }, "vaultTimeoutAction": { - "message": "Дзеянне пры таймаўце" + "message": "Дзеянне пры тайм-аўце" }, "lock": { "message": "Заблакіраваць", @@ -1292,25 +1307,25 @@ "message": "Аднавіць элемент" }, "restoreItemConfirmation": { - "message": "Вы сапраўды жадаеце аднавіць гэты запіс?" + "message": "Вы сапраўды жадаеце аднавіць гэты элемент?" }, "restoredItem": { "message": "Элемент адноўлены" }, "vaultTimeoutLogOutConfirmation": { - "message": "Выхад з сістэмы выдаліць доступ да сховішча і патрабуе анлайн-аутэнтыфікацію па заканчэнні перыяду чакання. Вы сапраўды жадаеце ўключыць гэтую наладу?" + "message": "Выхад з сістэмы выдаліць доступ да сховішча і спатрабуе праверку сапраўднасці анлайн па заканчэнні перыяду чакання. Вы сапраўды жадаеце ўключыць гэтую наладу?" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Пацвярджэнне дзеяння для таймаута" + "message": "Пацвярджэнне дзеяння для тайм-аута" }, "autoFillAndSave": { "message": "Запоўніць і захаваць" }, "autoFillSuccessAndSavedUri": { - "message": "Auto-filled Item and Saved URI" + "message": "Аўтазапоўнены элемент і захаваны URI" }, "autoFillSuccess": { - "message": "Auto-filled Item" + "message": "Аўтазапоўнены элемент" }, "setMasterPassword": { "message": "Задаць асноўны пароль" @@ -1319,7 +1334,7 @@ "message": "Згодна з адной або некалькімі палітыкамі арганізацыі неабходна, каб ваш асноўны пароль адказваў наступным патрабаванням:" }, "policyInEffectMinComplexity": { - "message": "Minimum complexity score of $SCORE$", + "message": "Мінімальны ўзровень складанасці $SCORE$", "placeholders": { "score": { "content": "$1", @@ -1328,7 +1343,7 @@ } }, "policyInEffectMinLength": { - "message": "Minimum length of $LENGTH$", + "message": "Мінімальная даўжыня $LENGTH$", "placeholders": { "length": { "content": "$1", @@ -1337,16 +1352,16 @@ } }, "policyInEffectUppercase": { - "message": "Contain one or more uppercase characters" + "message": "Уключыць адну ці больш прапісных літар" }, "policyInEffectLowercase": { - "message": "Contain one or more lowercase characters" + "message": "Уключыць адну ці больш малых літар" }, "policyInEffectNumbers": { - "message": "Contain one or more numbers" + "message": "Уключыць адну ці больш лічбаў" }, "policyInEffectSpecial": { - "message": "Contain one or more of the following special characters $CHARS$", + "message": "Уключаць хаця б адзін з наступных спецыяльных сімвалаў $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -1358,15 +1373,81 @@ "message": "Ваш новы асноўны пароль не адпавядае патрабаванням палітыкі арганізацыі." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Ставіўшы гэты сцяжок вы пагаджаецеся з наступным:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Умовы выкарыстання і Палітыка прыватнасці не былі пацверджаны." }, "termsOfService": { - "message": "Terms of Service" + "message": "Умовы выкарыстання" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Палітыка прыватнасці" + }, + "hintEqualsPassword": { + "message": "Your password hint cannot be the same as your password." + }, + "ok": { + "message": "ОК" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/bg/messages.json b/src/_locales/bg/messages.json index 542c5818de..2eb262834b 100644 --- a/src/_locales/bg/messages.json +++ b/src/_locales/bg/messages.json @@ -606,9 +606,15 @@ "message": "ВНИМАНИЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Данните от трезора ви ще се изнесат в незащитен формат. Не го пращайте по незащитени канали като е-поща. Изтрийте файла незабавно след като свършите работата си с него." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Въведете главната парола, за да изнесете данните." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Трезорът е заключен. Въведете своя ПИН, за да продължите." }, + "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": "Заключване с главната парола при повторно пускане на браузъра" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/ca/messages.json b/src/_locales/ca/messages.json index bc9c2c87cc..7276453ab9 100644 --- a/src/_locales/ca/messages.json +++ b/src/_locales/ca/messages.json @@ -606,9 +606,15 @@ "message": "ADVERTIMENT", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirma l'exportació de la Caixa forta" + }, "exportWarningDesc": { "message": "Aquesta exportació conté les dades de la vostra caixa forta en un format no xifrat. No hauríeu d'emmagatzemar o enviar el fitxer exportat a través de canals no segurs (com ara el correu electrònic). Elimineu-lo immediatament després d'haver acabat d'usar-lo." }, + "encExportWarningDesc": { + "message": "Aquesta exportació xifra les vostres dades mitjançant la vostra clau de xifratge. Si alguna vegada gireu eixa clau, hauríeu d'exportar de nou, ja que no podreu desxifrar aquest fitxer d'exportació." + }, "exportMasterPassword": { "message": "Introduïu la contrasenya mestra per exportar les dades de la caixa forta." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "La caixa forta està bloquejada. Verifiqueu El codi PIN per continuar." }, + "unlockWithBiometrics": { + "message": "Desbloqueja amb biomètrica" + }, + "awaitDesktop": { + "message": "S’espera confirmació des de l’escriptori" + }, + "awaitDesktopDesc": { + "message": "Confirmeu que utilitzeu la biomètrica a l'aplicació Bitwarden Desktop per habilitar la biomètrica per al navegador." + }, "lockWithMasterPassOnRestart": { "message": "Bloqueja amb la contrasenya mestra en reiniciar el navegador" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Declaració de privadesa" + }, + "hintEqualsPassword": { + "message": "El vostre suggeriment de contrasenya no pot ser el mateix que la vostra contrasenya." + }, + "ok": { + "message": "D’acord" + }, + "desktopSyncVerificationTitle": { + "message": "Verificació de sincronització d'escriptori" + }, + "desktopIntegrationVerificationText": { + "message": "Verifiqueu que l'aplicació d'escriptori mostre aquesta empremta digital:" + }, + "desktopIntegrationDisabledTitle": { + "message": "La integració en el navegador no està habilitada" + }, + "desktopIntegrationDisabledDesc": { + "message": "La integració del navegador no està habilitada a l'aplicació Bitwarden Desktop. Activeu-la a la configuració de l'aplicació d'escriptori." + }, + "startDesktopTitle": { + "message": "Inicia l'aplicació Bitwarden Desktop" + }, + "startDesktopDesc": { + "message": "Per poder utilitzar aquesta funció, cal iniciar l'aplicació Bitwarden Desktop." + }, + "errorEnableBiometricTitle": { + "message": "No es pot habilitar la biomètrica" + }, + "errorEnableBiometricDesc": { + "message": "L'aplicació d'escriptori ha cancel·lat l'acció" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "L'aplicació d'escriptori ha invalidat el canal de comunicació segur. Torneu a provar aquesta operació" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "S'ha interromput la comunicació d'escriptori" + }, + "nativeMessagingWrongUserDesc": { + "message": "L'aplicació d'escriptori està iniciada en un compte diferent. Assegureu-vos que totes dues aplicacions estiguen connectades al mateix compte." + }, + "nativeMessagingWrongUserTitle": { + "message": "El compte no coincideix" + }, + "biometricsNotEnabledTitle": { + "message": "La biomètrica no està habilitada" + }, + "biometricsNotEnabledDesc": { + "message": "La biometria del navegador primer necessita habilitar la biomètrica d’escriptori a la configuració." + }, + "biometricsNotSupportedTitle": { + "message": "La biomètrica no és compatible" + }, + "biometricsNotSupportedDesc": { + "message": "La biometria del navegador no és compatible amb aquest dispositiu." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "A causa d'una política empresarial, no podeu guardar elements a la vostra caixa forta personal. Canvieu l'opció Propietat en organització i trieu entre les col·leccions disponibles." + }, + "personalOwnershipPolicyInEffect": { + "message": "Una política d’organització afecta les vostres opcions de propietat." } } diff --git a/src/_locales/cs/messages.json b/src/_locales/cs/messages.json index 393f90f506..405077097c 100644 --- a/src/_locales/cs/messages.json +++ b/src/_locales/cs/messages.json @@ -606,9 +606,15 @@ "message": "VAROVÁNÍ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Tento export obsahuje data vašeho trezoru v nezašifrovaném formátu. Soubor exportu byste neměli ukládat ani odesílat přes nezabezpečené kanály (např. e-mailem). Odstraňte jej okamžitě po jeho použití." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Zadejte své hlavní heslo pro export dat." }, @@ -895,7 +901,7 @@ "message": "Vygenerovat a zkopírovat nové náhodné heslo do schránky." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Zamknout trezor" }, "privateModeMessage": { "message": "Bohužel toto okno není v tomto prohlížeči k dispozici v soukromém režimu." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Váš trezor je uzamčen. Pro pokračování musíte zadat PIN." }, + "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": "Zamknout trezor při restartu prohlížeče pomocí hlavního hesla" }, @@ -1358,15 +1373,81 @@ "message": "Vaše nové hlavní heslo nesplňuje požadavky zásad." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Zaškrtnutím tohoto políčka souhlasím s následujícím:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Podmínky služby a zásady ochrany osobních údajů nebyly uznány." }, "termsOfService": { - "message": "Terms of Service" + "message": "Podmínky použití" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Zásady ochrany osobních údajů" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/da/messages.json b/src/_locales/da/messages.json index 5300d409bf..2c0727473a 100644 --- a/src/_locales/da/messages.json +++ b/src/_locales/da/messages.json @@ -498,7 +498,7 @@ "message": "Redigerede element" }, "deleteItemConfirmation": { - "message": "Er du sikker på, at du vil slette dette element?" + "message": "Er du sikker på, at du sende til papirkurven?" }, "deletedItem": { "message": "Element sendt til papirkurven" @@ -606,9 +606,15 @@ "message": "ADVARSEL", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Bekræft eksport af boks" + }, "exportWarningDesc": { "message": "Denne eksport indeholder dine boksdata i ukrypteret form. Du bør ikke gemme eller sende den eksporterede fil over usikre kanaler (f.eks. e-mail). Slet den straks efter at du er færdig med at bruge den." }, + "encExportWarningDesc": { + "message": "Denne eksport krypterer dine data vha. din kontos krypteringsnøgle. Roterer du på et tidspunkt denne krypteringsnøgle, skal du eksportere igen, da du ellers ikke vil kunne dekryptere denne eksportfil." + }, "exportMasterPassword": { "message": "Indtast din hovedadgangskode for at eksportere dine data fra boksen." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Din boks er låst. Bekræft din pinkode for at fortsætte." }, + "unlockWithBiometrics": { + "message": "Lås op med biometri" + }, + "awaitDesktop": { + "message": "Awaiting confirmation from desktop" + }, + "awaitDesktopDesc": { + "message": "Please confirm using biometrics in the Bitwarden Desktop application to enable biometrics for browser." + }, "lockWithMasterPassOnRestart": { "message": "Lås med hovedadgangskode ved genstart af browseren" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Fortrolighedspolitik" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json index eb0b4b155d..c8bb5a923b 100644 --- a/src/_locales/de/messages.json +++ b/src/_locales/de/messages.json @@ -498,7 +498,7 @@ "message": "Eintrag bearbeitet" }, "deleteItemConfirmation": { - "message": "Soll dieser Eintrag wirklich gelöscht werden?" + "message": "Soll dieser Eintrag wirklich in den Papierkorb verschoben werden?" }, "deletedItem": { "message": "Eintrag in Papierkorb legen" @@ -606,9 +606,15 @@ "message": "ACHTUNG", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Tresor-Export bestätigen" + }, "exportWarningDesc": { "message": "Dieser Export enthält deine unverschlüsselten Daten im Csv-Format. Du solltest sie nicht speichern oder über unsichere Kanäle (z. B. E-Mail) senden. Lösche sie sofort nach ihrer Verwendung." }, + "encExportWarningDesc": { + "message": "Dieser Export verschlüsselt Ihre Daten mit dem Verschlüsselungscode Ihres Kontos. Falls Sie Ihren Verschlüsselungscode erneuern, sollten Sie den Export erneut durchführen, da Sie die zuvor erstellte Datei ansonsten nicht mehr entschlüsseln können." + }, "exportMasterPassword": { "message": "Gib das Masterpasswort ein, um deine Tresordaten zu exportieren." }, @@ -1099,7 +1105,7 @@ "message": "In einem neuen Fenster öffnen" }, "refresh": { - "message": "Aktuaklisieren" + "message": "Aktualisieren" }, "cards": { "message": "Karten" @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Dein Tresor ist gesperrt. Gebe deinen PIN-Code ein um fortzufahren." }, + "unlockWithBiometrics": { + "message": "Mit Biometrie entsperren" + }, + "awaitDesktop": { + "message": "Warte auf Bestätigung vom Desktop" + }, + "awaitDesktopDesc": { + "message": "Bitte bestätigen Sie die Verwendung von Biometrie in der Bitwarden Desktop-Anwendung, um Biometrie für den Browser zu aktivieren." + }, "lockWithMasterPassOnRestart": { "message": "Bei Neustart des Browsers mit Master-Passwort sperren" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Datenschutzbestimmungen" + }, + "hintEqualsPassword": { + "message": "Ihr Passwort-Hinweis darf nicht identisch mit Ihrem Passwort sein." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Desktop-Sync-Überprüfung" + }, + "desktopIntegrationVerificationText": { + "message": "Bitte bestätigen Sie, dass die Desktop-Anwendung diesen Prüfschlüssel anzeigt: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Browser-Einbindung ist nicht aktiviert" + }, + "desktopIntegrationDisabledDesc": { + "message": "Die Browser-Einbindung ist in der Bitwarden Desktop-Anwendung nicht aktiviert. Bitte aktivieren Sie diese in den Einstellungen innerhalb der Desktop-Anwendung." + }, + "startDesktopTitle": { + "message": "Bitwarden Desktop-Anwendung starten" + }, + "startDesktopDesc": { + "message": "Die Bitwarden Desktop-Anwendung muss gestartet werden, bevor diese Funktion verwendet werden kann." + }, + "errorEnableBiometricTitle": { + "message": "Biometrie kann nicht aktiviert werden" + }, + "errorEnableBiometricDesc": { + "message": "Die Aktion wurde von der Desktop-Anwendung abgebrochen" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Die Desktop-Anwendung hat den sicheren Kommunikationskanal für ungültig erklärt. Bitte starten Sie den Vorgang erneut" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Desktop-Kommunikation unterbrochen" + }, + "nativeMessagingWrongUserDesc": { + "message": "Die Desktop-Anwendung ist in ein anderes Konto eingeloggt. Bitte stellen Sie sicher, dass beide Anwendungen mit demselben Konto angemeldet sind." + }, + "nativeMessagingWrongUserTitle": { + "message": "Konten stimmen nicht überein" + }, + "biometricsNotEnabledTitle": { + "message": "Biometrie ist nicht aktiviert" + }, + "biometricsNotEnabledDesc": { + "message": "Biometrie im Browser setzt voraus, dass Biometrie zuerst in den Einstellungen der Desktop-Anwendung aktiviert ist." + }, + "biometricsNotSupportedTitle": { + "message": "Biometrie wird nicht unterstützt" + }, + "biometricsNotSupportedDesc": { + "message": "Biometrie im Browser wird auf diesem Gerät nicht unterstützt." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Berechtigung nicht erteilt" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Ohne die Berechtigung zur Kommunikation mit der Bitwarden Desktop-Anwendung können wir keine Biometrie in der Browser-Erweiterung anbieten. Bitte versuchen Sie es erneut." + }, + "personalOwnershipSubmitError": { + "message": "Aufgrund einer Unternehmensrichtlinie dürfen Sie keine Einträge in Ihrem persönlichen Tresor speichern. Ändern Sie die Eigentümer-Option in eine Organisation und wählen Sie aus den verfügbaren Sammlungen." + }, + "personalOwnershipPolicyInEffect": { + "message": "Eine Organisationsrichtlinie beeinflusst Ihre Eigentümer-Optionen." } } diff --git a/src/_locales/el/messages.json b/src/_locales/el/messages.json index d0532867c8..3a644b5bbb 100644 --- a/src/_locales/el/messages.json +++ b/src/_locales/el/messages.json @@ -20,7 +20,7 @@ "message": "Σύνδεση" }, "enterpriseSingleSignOn": { - "message": "Enterprise Single Sign-On" + "message": "Ενιαία είσοδος για επιχειρήσεις" }, "cancel": { "message": "Ακύρωση" @@ -606,9 +606,15 @@ "message": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Επιβεβαίωση εξαγωγής Vault" + }, "exportWarningDesc": { "message": "Αυτή η εξαγωγή περιέχει τα δεδομένα σε μη κρυπτογραφημένη μορφή. Δεν πρέπει να αποθηκεύετε ή να στείλετε το εξαγόμενο αρχείο μέσω μη ασφαλών τρόπων (όπως μέσω email). Διαγράψτε το αμέσως μόλις τελειώσετε με τη χρήση του." }, + "encExportWarningDesc": { + "message": "Αυτή η εξαγωγή κρυπτογραφεί τα δεδομένα σας χρησιμοποιώντας το κλειδί κρυπτογράφησης του λογαριασμού σας. Εάν ποτέ περιστρέψετε το κλειδί κρυπτογράφησης του λογαριασμού σας, θα πρέπει να κάνετε εξαγωγή ξανά, καθώς δεν θα μπορείτε να αποκρυπτογραφήσετε αυτό το αρχείο εξαγωγής." + }, "exportMasterPassword": { "message": "Πληκτρολογήστε τον κύριο κωδικό για εξαγωγή δεδομένων vault." }, @@ -895,7 +901,7 @@ "message": "Δημιουργήστε και αντιγράψτε έναν νέο τυχαίο κωδικό πρόσβασης στο πρόχειρο" }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Κλειδώστε το vault" }, "privateModeMessage": { "message": "Δυστυχώς, αυτό το παράθυρο δεν είναι διαθέσιμο σε ιδιωτική λειτουργία για αυτό το πρόγραμμα περιήγησης." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Το vault σας είναι κλειδωμένο. Επαληθεύστε τον κωδικό PIN για να συνεχίσετε." }, + "unlockWithBiometrics": { + "message": "Ξεκλείδωμα με βιομετρικά στοιχεία" + }, + "awaitDesktop": { + "message": "Αναμονή επιβεβαίωσης από την επιφάνεια εργασίας" + }, + "awaitDesktopDesc": { + "message": "Παρακαλώ επιβεβαιώστε τη χρήση βιομετρικών στοιχείων στην εφαρμογή Bitwarden Desktop για να ενεργοποιήσετε τα βιομετρικά στοιχεία για το πρόγραμμα περιήγησης." + }, "lockWithMasterPassOnRestart": { "message": "Κλείδωμα με κύριο κωδικό πρόσβασης στην επανεκκίνηση του προγράμματος περιήγησης" }, @@ -1304,22 +1319,22 @@ "message": "Επιβεβαίωση Ενέργειας Χρονικού Ορίου" }, "autoFillAndSave": { - "message": "Auto-fill and Save" + "message": "Αυτόματη συμπλήρωση και αποθήκευση" }, "autoFillSuccessAndSavedUri": { - "message": "Auto-filled Item and Saved URI" + "message": "Αυτόματη συμπλήρωση στοιχείου και αποθηκευμένο URI" }, "autoFillSuccess": { - "message": "Auto-filled Item" + "message": "Αυτόματη συμπλήρωση αντικειμένου" }, "setMasterPassword": { - "message": "Set Master Password" + "message": "Ορισμός Κύριου Κωδικού" }, "masterPasswordPolicyInEffect": { - "message": "One or more organization policies require your master password to meet the following requirements:" + "message": "Σε μία ή περισσότερες πολιτικές του οργανισμού απαιτείται ο κύριος κωδικός να πληρεί τις ακόλουθες απαιτήσεις:" }, "policyInEffectMinComplexity": { - "message": "Minimum complexity score of $SCORE$", + "message": "Ελάχιστος βαθμός πολυπλοκότητας: $SCORE$", "placeholders": { "score": { "content": "$1", @@ -1328,7 +1343,7 @@ } }, "policyInEffectMinLength": { - "message": "Minimum length of $LENGTH$", + "message": "Ελάχιστο μήκος: $LENGTH$", "placeholders": { "length": { "content": "$1", @@ -1337,16 +1352,16 @@ } }, "policyInEffectUppercase": { - "message": "Contain one or more uppercase characters" + "message": "Να περιέχει έναν ή περισσότερους κεφαλαίους χαρακτήρες" }, "policyInEffectLowercase": { - "message": "Contain one or more lowercase characters" + "message": "Να περιέχει έναν ή περισσότερους πεζούς χαρακτήρες" }, "policyInEffectNumbers": { - "message": "Contain one or more numbers" + "message": "Να περιέχει έναν ή περισσότερους αριθμούς" }, "policyInEffectSpecial": { - "message": "Contain one or more of the following special characters $CHARS$", + "message": "Να περιέχει έναν ή περισσότερους από τους ακόλουθους ειδικούς χαρακτήρες $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -1355,18 +1370,84 @@ } }, "masterPasswordPolicyRequirementsNotMet": { - "message": "Your new master password does not meet the policy requirements." + "message": "Ο νέος κύριος κωδικός δεν πληροί τις απαιτήσεις πολιτικής." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Επιλέγοντας αυτό το πλαίσιο, συμφωνείτε με τα εξής:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Οι Όροι Παροχής Υπηρεσιών και η Πολιτική Απορρήτου δεν έχουν αναγνωριστεί." }, "termsOfService": { - "message": "Terms of Service" + "message": "Όροι Χρήσης" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Πολιτική Απορρήτου" + }, + "hintEqualsPassword": { + "message": "Η υπόδειξη κωδικού πρόσβασης, δεν μπορεί να είναι η ίδια με τον κωδικό πρόσβασης σας." + }, + "ok": { + "message": "Οκ" + }, + "desktopSyncVerificationTitle": { + "message": "Επιβεβαίωση συγχρονισμού επιφάνειας εργασίας" + }, + "desktopIntegrationVerificationText": { + "message": "Παρακαλώ επιβεβαιώστε ότι η εφαρμογή επιφάνειας εργασίας εμφανίζει αυτό το αποτύπωμα: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Η ενσωμάτωση του περιηγητή δεν είναι ενεργοποιημένη" + }, + "desktopIntegrationDisabledDesc": { + "message": "Η ενσωμάτωση του προγράμματος περιήγησης δεν είναι ενεργοποιημένη στην εφαρμογή Bitwarden Desktop. Παρακαλώ ενεργοποιήστε την στις ρυθμίσεις της εφαρμογής desktop." + }, + "startDesktopTitle": { + "message": "Ξεκινήστε την εφαρμογή Bitwarden Επιφάνεια εργασίας" + }, + "startDesktopDesc": { + "message": "Η εφαρμογή Bitwarden Desktop πρέπει να ξεκινήσει για να μπορεί να χρησιμοποιηθεί αυτή η λειτουργία." + }, + "errorEnableBiometricTitle": { + "message": "Αδυναμία ενεργοποίησης βιομετρικών στοιχείων" + }, + "errorEnableBiometricDesc": { + "message": "Η ενέργεια ακυρώθηκε από την εφαρμογή επιφάνειας εργασίας" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Η εφαρμογή επιφάνειας εργασίας ακυρώνει το ασφαλές κανάλι επικοινωνίας. Παρακαλώ δοκιμάστε ξανά αυτή τη λειτουργία" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Η επικοινωνία επιφάνειας εργασίας διακόπηκε" + }, + "nativeMessagingWrongUserDesc": { + "message": "Η εφαρμογή επιφάνειας εργασίας είναι συνδεδεμένη σε διαφορετικό λογαριασμό. Παρακαλώ βεβαιωθείτε ότι και οι δύο εφαρμογές είναι συνδεδεμένες στον ίδιο λογαριασμό." + }, + "nativeMessagingWrongUserTitle": { + "message": "Απόρριψη λογαριασμού" + }, + "biometricsNotEnabledTitle": { + "message": "Η βιομετρική δεν είναι ενεργοποιημένη" + }, + "biometricsNotEnabledDesc": { + "message": "Τα βιομετρικά στοιχεία του προγράμματος περιήγησης απαιτούν την ενεργοποίηση της βιομετρικής επιφάνειας εργασίας στις ρυθμίσεις πρώτα." + }, + "biometricsNotSupportedTitle": { + "message": "Δεν υποστηρίζεται η βιομετρική" + }, + "biometricsNotSupportedDesc": { + "message": "Τα βιομετρικά στοιχεία του προγράμματος περιήγησης δεν υποστηρίζονται σε αυτήν τη συσκευή." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Λόγω μιας Πολιτικής Επιχειρήσεων, δεν επιτρέπεται η αποθήκευση στοιχείων στο προσωπικό σας vault. Αλλάξτε την επιλογή Ιδιοκτησίας σε έναν οργανισμό και επιλέξτε από τις διαθέσιμες Συλλογές." + }, + "personalOwnershipPolicyInEffect": { + "message": "Μια πολιτική του οργανισμού, επηρεάζει τις επιλογές ιδιοκτησίας σας." } } diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index cdcbd64736..0f700a0eae 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -1420,6 +1420,12 @@ "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" }, @@ -1432,10 +1438,41 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "nativeMessagingPermissionPromptTitle": { + "message": "Additional Permission required" + }, + "nativeMessagingPermissionPromptDesc": { + "message": "To enable browser biometrics we need to request an additional permission. Once allowed, the browser extension will reload and you may need to unlock your vault again." + }, + "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." + }, "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." } } diff --git a/src/_locales/en_GB/messages.json b/src/_locales/en_GB/messages.json index 25502bece0..d7cf71a4f2 100644 --- a/src/_locales/en_GB/messages.json +++ b/src/_locales/en_GB/messages.json @@ -606,9 +606,15 @@ "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 insecure channels (such as email). Delete it immediately after you are done using it." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Enter your master password to export your vault data." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Your vault is locked. Verify your PIN code to continue." }, + "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" }, @@ -1368,5 +1383,71 @@ }, "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 this function can be used." + }, + "errorEnableBiometricTitle": { + "message": "Unable to enable biometrics" + }, + "errorEnableBiometricDesc": { + "message": "Action was cancelled 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 mismatch" + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Due to an Enterprise Policy, you are restricted from saving items to your personal vault. Change the Ownership option to an organisation and choose from available Collections." + }, + "personalOwnershipPolicyInEffect": { + "message": "An organisation policy is affecting your ownership options." } } diff --git a/src/_locales/en_IN/messages.json b/src/_locales/en_IN/messages.json index 02148b474f..1c1c318cdd 100644 --- a/src/_locales/en_IN/messages.json +++ b/src/_locales/en_IN/messages.json @@ -101,7 +101,7 @@ "message": "There are no logins available to auto-fill for the current browser tab." }, "addLogin": { - "message": "ഒരു പ്രവേശനം ചേർക്കുക" + "message": "Add a login" }, "addItem": { "message": "Add item" @@ -136,10 +136,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": "രണ്ട്-ഘട്ട പ്രവേശനം" + "message": "Two-step login" }, "logOut": { - "message": "ലോഗ് ഔട്ട്" + "message": "Log out" }, "about": { "message": "About" @@ -606,9 +606,15 @@ "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 insecure channels (such as email). Delete it immediately after you are done using it." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Enter your master password to export your vault data." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Your vault is locked. Verify your PIN code to continue." }, + "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" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json index 3bbeb1b26c..6da2f45368 100644 --- a/src/_locales/es/messages.json +++ b/src/_locales/es/messages.json @@ -606,9 +606,15 @@ "message": "ADVERTENCIA", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Esta exportación contiene los datos de tu caja fuerte en un formato no cifrado. No deberías almacenar o enviar el archivo exportado por canales no seguros (como el correo electrónico). Elimínalo inmediatamente cuando termines de utilizarlo." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Introduce tu contraseña maestra para exportar la información de tu caja fuerte." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Tu caja fuerte está bloqueada. Verifica tu código PIN para continuar." }, + "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": "Bloquear con contraseña maestra al reiniciar el navegador" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Política de privacidad" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/et/messages.json b/src/_locales/et/messages.json index d8651bdfb3..3681c1ed4a 100644 --- a/src/_locales/et/messages.json +++ b/src/_locales/et/messages.json @@ -246,7 +246,7 @@ "message": "Puuduvad kirjed, mida kuvada." }, "itemInformation": { - "message": "Kirje informatsioon" + "message": "Kirje andmed" }, "username": { "message": "Kasutajanimi" @@ -331,7 +331,7 @@ "message": "Hoidla ajalõpp" }, "lockNow": { - "message": "Kliki paroolihoidla lukustamiseks" + "message": "Lukusta paroolihoidla" }, "immediately": { "message": "Koheselt" @@ -403,7 +403,7 @@ "message": "Ülemparooli vihje saadeti sinu e-postile." }, "verificationCodeRequired": { - "message": "Nõuatav on kinnituskood." + "message": "Nõutav on kinnituskood." }, "valueCopied": { "message": "$VALUE$ on kopeeritud", @@ -535,7 +535,7 @@ "message": "Krediit- ja teiste kaartide andmed kuvatakse vaikeseadena \"Kaart\" vaates, et neid oleks lihtsam sisestada." }, "dontShowIdentitiesCurrentTab": { - "message": "Ära kuva \"Kaart\" vaates Identiteete" + "message": "Ära kuva \"Kaart\" vaates identiteete" }, "dontShowIdentitiesCurrentTabDesc": { "message": "Identiteediandmeid kuvatakse vaikeseadena \"Kaart\" vaates, et neid oleks lihtsam sisestada." @@ -576,11 +576,11 @@ "message": "Parema kliki menüü abil saad kiiresti parooli genereerida ja konkreetse veebilehe kasutajakonto andmeid sisestada." }, "defaultUriMatchDetection": { - "message": "Vaikse URL-i sobivuse tuvastamine", + "message": "Vaikse URI sobivuse tuvastamine", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { - "message": "Vali vaikeviis, kuidas kirje ja URL-i sobivus tuvastatakse. Seda kasutatakse näiteks siis, kui lehele üritatakse automaatselt andmeid sisestada." + "message": "Vali vaikeviis, kuidas kirje ja URI sobivus tuvastatakse. Seda kasutatakse näiteks siis, kui lehele üritatakse automaatselt andmeid sisestada." }, "theme": { "message": "Teema" @@ -606,9 +606,15 @@ "message": "HOIATUS", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Hoidla eksportimise kinnitamine" + }, "exportWarningDesc": { "message": "Eksporditav fail sisaldab hoidla sisu, mis on krüpteeringuta. Seda faili ei tohiks kaua käidelda ning mitte mingil juhul ebaturvaliselt saata (näiteks e-postiga). Kustuta see koheselt pärast kasutamist." }, + "encExportWarningDesc": { + "message": "Eksporditavate andmete krüpteerimiseks kasutatakse kontol olevat krüpteerimisvõtit. Kui sa peaksid seda krüpteerimise võtit roteerima, ei saa sa järgnevalt eksporditavaid andmeid enam dekrüpteerida." + }, "exportMasterPassword": { "message": "Hoidlas olevate andmete eksportimiseks on vajalik ülemparooli sisestamine." }, @@ -709,7 +715,7 @@ "message": "Parooli hügieen, konto seisukord ja andmelekete raportid aitavad hoidlat turvalisena hoida." }, "ppremiumSignUpTotp": { - "message": "TOTP kinnituskoodide (2FA) genereeria hoidlas olevatele kasutajakontodele." + "message": "TOTP kinnituskoodide (2FA) genereerija hoidlas olevatele kasutajakontodele." }, "ppremiumSignUpSupport": { "message": "Kiirema kasutajatoe." @@ -895,7 +901,7 @@ "message": "Loo ja kopeeri uus juhuslikult koostatud parool lõikepuhvrisse." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Lukusta hoidla" }, "privateModeMessage": { "message": "Kahjuks ei toeta kasutatav brauser seda akent privaatses režiimis." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Hoidla on lukus. Jätkamiseks sisesta PIN kood." }, + "unlockWithBiometrics": { + "message": "Ava biomeetriaga" + }, + "awaitDesktop": { + "message": "Kinnituse ootamine töölaua rakenduselt" + }, + "awaitDesktopDesc": { + "message": "Kinnitamiseks kasuta biomeetrilist lahtilukustamist Bitwardeni töölaua rakenduses." + }, "lockWithMasterPassOnRestart": { "message": "Nõua ülemparooli, kui brauser taaskäivitatakse" }, @@ -1358,15 +1373,81 @@ "message": "Uus ülemparool ei vasta eeskirjades väljatoodud tingimustele." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Märkeruudu markeerimisel nõustud järgnevaga:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Kasutustingimuste ja Privaatsuspoliitikaga pole nõustutud." }, "termsOfService": { - "message": "Terms of Service" + "message": "Kasutustingimused" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Privaatsuspoliitika" + }, + "hintEqualsPassword": { + "message": "Parooli vihje ei saa olla sama mis parool ise." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Töölaua sünkroonimise kinnitamine" + }, + "desktopIntegrationVerificationText": { + "message": "Veendu, et töölaua rakendus kuvab järgnevat sõrmejälge: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Brauseri integratsioon ei ole sisse lülitatud" + }, + "desktopIntegrationDisabledDesc": { + "message": "Brauseri integratsioon ei ole Bitwardeni töölaua rakenduses sisse lülitatud. Palun lülita see töölaua rakenduse seadetes sisse." + }, + "startDesktopTitle": { + "message": "Käivita Bitwardeni töölaua rakendus" + }, + "startDesktopDesc": { + "message": "Enne selle funktsiooni sisselülitamist peab käivitama Bitwardeni töölaua rakenduse." + }, + "errorEnableBiometricTitle": { + "message": "Biomeetria sisselülitamine nurjus" + }, + "errorEnableBiometricDesc": { + "message": "Töölaua rakendus tühistas tegevuse" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Töölaua rakendusel ei õnnestunud turvalist ühenduskanalit luua. Palun proovi uuesti" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Suhtlus töölaua rakendusega katkes" + }, + "nativeMessagingWrongUserDesc": { + "message": "Töölaua rakenduses on sisse logitud teise kasutajaga. Veendu, et oled mõlemas rakenduses sisse loginud ühe ja sama kontoga." + }, + "nativeMessagingWrongUserTitle": { + "message": "Kontod ei ühti" + }, + "biometricsNotEnabledTitle": { + "message": "Biomeetria ei ole sisse lülitatud" + }, + "biometricsNotEnabledDesc": { + "message": "Biomeetria kasutamiseks brauseris peab esmalt Bitwardeni töölaua rakenduse seadetes biomeetria lubama." + }, + "biometricsNotSupportedTitle": { + "message": "Biomeetriat ei toetata" + }, + "biometricsNotSupportedDesc": { + "message": "Brauseri biomeetria ei ole selles seadmes toetatud" + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Ettevõtte poliitika tõttu ei saa sa andmeid oma personaalsesse Hoidlasse salvestada. Vali Omanikuks organisatsioon ja vali mõni saadavaolevatest Kogumikest." + }, + "personalOwnershipPolicyInEffect": { + "message": "Organisatsiooni poliitika on seadnud omaniku valikutele piirangu." } } diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json index e09eacaeea..0fad3213e4 100644 --- a/src/_locales/fa/messages.json +++ b/src/_locales/fa/messages.json @@ -606,9 +606,15 @@ "message": "اخطار", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "صادرات گاوصندوق را تأیید کنید" + }, "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." }, + "encExportWarningDesc": { + "message": "این صادرات با استفاده از کلید رمزگذاری حساب شما ، اطلاعات شما را رمزگذاری می کند. اگر حتی کلید رمزگذاری حساب خود را بچرخانید ، باید دوباره صادر کنید چون قادر به رمزگشایی این پرونده صادراتی نخواهید بود." + }, "exportMasterPassword": { "message": "کلمه عبور اصلی خود را برای صادرات داده ها از گاوصندوقتان وارد کنید." }, @@ -895,7 +901,7 @@ "message": "یک کلمه عبور تصادفی جدید ایجاد کنید و آن را در کلیپ بورد کپی کنید." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "قفل گاوصندوق" }, "privateModeMessage": { "message": "متأسفانه این پنجره در حالت خصوصی برای این مرورگر در دسترس نیست." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "گاوصندوق شما قفل شده است. برای ادامه کد پین خود را تایید کنید." }, + "unlockWithBiometrics": { + "message": "با استفاده از بیومتریک باز کنید" + }, + "awaitDesktop": { + "message": "در انتظار تأیید از دسکتاپ" + }, + "awaitDesktopDesc": { + "message": "لطفاً استفاده از بیومتریک را در برنامه دسکتاپ Bitwarden تأیید کنید تا بیومتریک را برای مرورگر فعال کنید." + }, "lockWithMasterPassOnRestart": { "message": "در زمان شروع مجدد مرورگر، با رمز اصلی قفل کن" }, @@ -1358,15 +1373,81 @@ "message": "کلمه عبور اصلی جدید شما از شرایط سیاست پپیروی نمی کند." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "با علامت زدن این کادر با موارد زیر موافقت می کنید:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "شرایط خدمات و سیاست حفظ حریم خصوصی تأیید نشده است." }, "termsOfService": { - "message": "Terms of Service" + "message": "شرایط استفاده از خدمات" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "سیاست حفظ حریم خصوصی" + }, + "hintEqualsPassword": { + "message": "نکته رمز عبور شما نمی تواند همان رمز عبور شما باشد." + }, + "ok": { + "message": "تایید" + }, + "desktopSyncVerificationTitle": { + "message": "تأیید همگام سازی دسکتاپ" + }, + "desktopIntegrationVerificationText": { + "message": "لطفاً تأیید کنید که برنامه دسکتاپ این اثر انگشت را نشان می دهد:" + }, + "desktopIntegrationDisabledTitle": { + "message": "ادغام مرورگر فعال نیست" + }, + "desktopIntegrationDisabledDesc": { + "message": "ادغام مرورگر در برنامه دسکتاپ Bitwarden فعال نیست. لطفاً آن را در تنظیمات موجود در برنامه دسکتاپ فعال کنید." + }, + "startDesktopTitle": { + "message": "برنامه دسکتاپ Bitwarden را شروع کنید" + }, + "startDesktopDesc": { + "message": "قبل از استفاده از این عملکرد، برنامه دسکتاپ Bitwarden باید شروع شود." + }, + "errorEnableBiometricTitle": { + "message": "بیومتریک فعال نیست" + }, + "errorEnableBiometricDesc": { + "message": "فعالیت توسط برنامه دسکتاپ لغو شد" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "برنامه دسکتاپ کانال ارتباط امن را نامعتبر کرد. لطفاً این عملیات را دوباره امتحان کنید" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "ارتباط دسکتاپ قطع شد" + }, + "nativeMessagingWrongUserDesc": { + "message": "برنامه دسکتاپ به یک حساب دیگر وارد شده است. لطفاً اطمینان حاصل کنید که هر دو برنامه به یک حساب وارد شده اند." + }, + "nativeMessagingWrongUserTitle": { + "message": "عدم تطابق حساب" + }, + "biometricsNotEnabledTitle": { + "message": "بیومتریک فعال نیست" + }, + "biometricsNotEnabledDesc": { + "message": "بیومتریک مرورگر ابتدا نیاز به فعالسازی بیومتریک دسکتاپ در تنظیمات دارد." + }, + "biometricsNotSupportedTitle": { + "message": "بیومتریک پشتیبانی نمی شود" + }, + "biometricsNotSupportedDesc": { + "message": "بیومتریک مرورگر در این دستگاه پشتیبانی نمی شود." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "مجوز ارائه نشده است" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "بدون اجازه ارتباط با برنامه دسکتاپ Bitwarden ، نمی توانیم بیومتریک را در افزونه مرورگر ارائه دهیم. لطفا دوباره تلاش کنید." + }, + "personalOwnershipSubmitError": { + "message": "به دلیل خط مشی Enterprise ، برای ذخیره موارد در گاوصندوق شخصی خود محدود شده اید. گزینه مالکیت را به یک سازمان تغییر دهید و مجموعه های موجود را انتخاب کنید." + }, + "personalOwnershipPolicyInEffect": { + "message": "خط مشی سازمانی بر تنظیمات مالکیت شما تأثیر می گذارد." } } diff --git a/src/_locales/fi/messages.json b/src/_locales/fi/messages.json index 4d576723ce..a356dbe0cd 100644 --- a/src/_locales/fi/messages.json +++ b/src/_locales/fi/messages.json @@ -3,15 +3,15 @@ "message": "Bitwarden" }, "extName": { - "message": "Bitwarden – Ilmainen salasananhallinta", + "message": "Bitwarden – Ilmainen salasanojen hallinta", "description": "Extension name" }, "extDesc": { - "message": "Bitwarden on turvallinen ja ilmainen salasananhallintapalvelu kaikille laitteillesi.", + "message": "Turvallinen ja ilmainen salasanojen hallinta kaikille laitteillesi.", "description": "Extension description" }, "loginOrCreateNewAccount": { - "message": "Kirjaudu sisään tai luo tili päästäksesi salattuun holviisi." + "message": "Kirjaudu sisään tai luo uusi tili päästäksesi salattuun holviisi." }, "createAccount": { "message": "Luo tili" @@ -20,7 +20,7 @@ "message": "Kirjaudu sisään" }, "enterpriseSingleSignOn": { - "message": "Yrityksen kertakirjautuminen [SSO]" + "message": "Yrityksen kertakirjautuminen (SSO)" }, "cancel": { "message": "Peruuta" @@ -38,10 +38,10 @@ "message": "Pääsalasana" }, "masterPassDesc": { - "message": "Pääsalasanalla pääset käsiksi holviisi. On hyvin tärkeää, että et unohda pääsalasanaasi. Sitä ei voida palauttaa mitenkään, jos satut unohtamaan sen." + "message": "Pääsalasanalla pääset käsiksi holviisi. On erittäin tärkeää, että muistat pääsalasanasi, koska sen palautus ei ole mahdollista, jos unohdat sen." }, "masterPassHintDesc": { - "message": "Salasanavihje voi auttaa sinua muistamaan pääsalasanasi, jos satut unohtamaan sen." + "message": "Pääsalasanan vihje voi auttaa sinua muistamaan unohtamasi salasanan." }, "reTypeMasterPass": { "message": "Syötä pääsalasana uudelleen" @@ -53,7 +53,7 @@ "message": "Välilehti" }, "myVault": { - "message": "Minun holvini" + "message": "Oma holvi" }, "tools": { "message": "Työkalut" @@ -68,13 +68,13 @@ "message": "Kopioi salasana" }, "copyNote": { - "message": "Kopioi muistiinpano" + "message": "Kopioi muistio" }, "copyUri": { "message": "Kopioi URI" }, "copyUsername": { - "message": "Kopioi käyttäjänimi" + "message": "Kopioi käyttäjätunnus" }, "copyNumber": { "message": "Kopioi numero" @@ -83,13 +83,13 @@ "message": "Kopioi turvakoodi" }, "autoFill": { - "message": "Täytä automaattisesti" + "message": "Automaattinen täyttö" }, "generatePasswordCopied": { "message": "Luo salasana (leikepöydälle)" }, "noMatchingLogins": { - "message": "Ei täsmääviä käyttäjätunnuksia." + "message": "Ei tunnistettuja kirjautumistietoja." }, "vaultLocked": { "message": "Holvi on lukittu." @@ -98,10 +98,10 @@ "message": "Holvista on kirjauduttu ulos." }, "autoFillInfo": { - "message": "Selaimen nykyiselle välilehdelle ei ole automaattisesti täytettäviä käyttäjätunnuksia." + "message": "Selaimen avoimelle välilehdelle ei ole automaattisesti täytettäviä kirjautumistietoja." }, "addLogin": { - "message": "Lisää käyttäjätunnus" + "message": "Lisää kirjautumistieto" }, "addItem": { "message": "Lisää kohde" @@ -113,16 +113,16 @@ "message": "Syötä tilisi sähköpostiosoite saadaksesi pääsalasanan vihjeen." }, "getMasterPasswordHint": { - "message": "Pyydä salasanavihjettä" + "message": "Pyydä pääsalasanan vihjettä" }, "continue": { "message": "Jatka" }, "verificationCode": { - "message": "Vahvistuskoodi" + "message": "Todennuskoodi" }, "account": { - "message": "Tili" + "message": "Käyttäjätili" }, "changeMasterPassword": { "message": "Vaihda pääsalasana" @@ -166,7 +166,7 @@ "message": "Kansiot" }, "noFolders": { - "message": "Ei kansioita näytettäväksi." + "message": "Ei näytettäviä kansioita." }, "helpFeedback": { "message": "Tuki ja palaute" @@ -188,7 +188,7 @@ "description": "Short for 'Password Generator'." }, "passGenInfo": { - "message": "Luo automaattisesti vahvoja, sivustokohtaisia salasanoja kirjautumisiasi varten." + "message": "Luo kirjautumistiedoillesi automaattisesti vahvoja, ainutlaatuisia salasanoja." }, "bitWebVault": { "message": "Bitwardenin verkkoholvi" @@ -206,7 +206,7 @@ "message": "Luo uusi salasana" }, "options": { - "message": "Asetukset" + "message": "Lisäasetukset" }, "length": { "message": "Pituus" @@ -215,10 +215,10 @@ "message": "Sanojen määrä" }, "wordSeparator": { - "message": "Sanaerotin" + "message": "Sanojen erotin" }, "capitalize": { - "message": "Jokainen sana isolla alkukirjaimella", + "message": "Sanat isoilla alkukirjaimilla", "description": "Make the first letter of a work uppercase." }, "includeNumber": { @@ -249,13 +249,13 @@ "message": "Kohteen tiedot" }, "username": { - "message": "Käyttäjänimi" + "message": "Käyttäjätunnus" }, "password": { "message": "Salasana" }, "passphrase": { - "message": "Tunnuslause" + "message": "Salauslauseke" }, "favorite": { "message": "Suosikki" @@ -264,7 +264,7 @@ "message": "Merkinnät" }, "note": { - "message": "Muistiinpano" + "message": "Merkintä" }, "editItem": { "message": "Muokkaa kohdetta" @@ -282,10 +282,10 @@ "message": "Avaa" }, "website": { - "message": "Sivusto" + "message": "Verkkosivusto" }, "toggleVisibility": { - "message": "Näytä/piilota" + "message": "Näytä tai piilota" }, "manage": { "message": "Hallinta" @@ -294,10 +294,10 @@ "message": "Muut" }, "rateExtension": { - "message": "Arvostele laajennus" + "message": "Arvioi laajennus" }, "rateExtensionDesc": { - "message": "Autathan meitä jättämällä hyvän arvostelun!" + "message": "Harkitse tukemistamme hyvällä arvostelulla!" }, "browserNotSupportClipboard": { "message": "Selaimesi ei tue helppoa leikepöydälle kopiointia. Kopioi kohde manuaalisesti." @@ -306,13 +306,13 @@ "message": "Vahvista pääsalasana" }, "yourVaultIsLocked": { - "message": "Holvisi on lukittu. Vahvista pääsalasanasi jatkaaksesi." + "message": "Holvisi on lukittu. Syötä pääsalasana jatkaaksesi." }, "unlock": { - "message": "Avaa" + "message": "Avaa lukitus" }, "loggedInAsOn": { - "message": "Kirjautuneena käyttäjänä $EMAIL$ palvelimelle $HOSTNAME$.", + "message": "Kirjautuneena tunnuksella $EMAIL$ palveluun $HOSTNAME$.", "placeholders": { "email": { "content": "$1", @@ -367,46 +367,46 @@ "message": "4 tuntia" }, "onLocked": { - "message": "Järjestelmän lukittuessa" + "message": "Kun järjestelmän lukitaan" }, "onRestart": { - "message": "Selainta uudelleenkäynnistettäessä" + "message": "Kun selain käynnistetään uudelleen" }, "never": { "message": "Ei koskaan" }, "security": { - "message": "Turvallisuus" + "message": "Suojaus" }, "errorOccurred": { "message": "Tapahtui virhe" }, "emailRequired": { - "message": "Sähköpostiosoite on pakollinen." + "message": "Sähköpostiosoite vaaditaan." }, "invalidEmail": { "message": "Virheellinen sähköpostiosoite." }, "masterPassRequired": { - "message": "Pääsalasana on pakollinen." + "message": "Pääsalasana vaaditaan." }, "masterPassLength": { "message": "Pääsalasanan on oltava vähintään 8 merkkiä pitkä." }, "masterPassDoesntMatch": { - "message": "Pääsalasanan varmistus ei täsmää." + "message": "Pääsalasanan vahvistus ei täsmää." }, "newAccountCreated": { - "message": "Uusi tilisi on luotu! Voit nyt kirjautua sisään." + "message": "Uusi käyttäjätilisi on luotu! Voit nyt kirjautua sisään." }, "masterPassSent": { - "message": "Lähetimme sinulle sähköpostilla pääsalasanasi vihjeen." + "message": "Lähetimme pääsalasanasi vihjeen sähköpostitse." }, "verificationCodeRequired": { - "message": "Vahvistuskoodi vaaditaan." + "message": "Todennuskoodi vaaditaan." }, "valueCopied": { - "message": "$VALUE$ kopioitu", + "message": "$VALUE$ kopioitiin", "description": "Value has been copied to the clipboard.", "placeholders": { "value": { @@ -416,13 +416,13 @@ } }, "autofillError": { - "message": "Valitun kohteen automaattinen täyttö tälle sivulle ei onnistu. Kopioi ja liitä kohde manuaalisesti." + "message": "Valitun kohteen automaattinen täyttö tälle sivulle ei onnistu. Kopioi ja liitä tiedot sen sijaan." }, "loggedOut": { "message": "Kirjauduttu ulos" }, "loginExpired": { - "message": "Kirjautumisistuntosi on vanhentunut." + "message": "Kirjautumisesi on vanhentunut." }, "logOutConfirmation": { "message": "Haluatko varmasti kirjautua ulos?" @@ -440,7 +440,7 @@ "message": "Nimi vaaditaan." }, "addedFolder": { - "message": "Kansio lisätty" + "message": "Lisättiin kansio" }, "changeMasterPass": { "message": "Vaihda pääsalasana" @@ -449,31 +449,31 @@ "message": "Voit vaihtaa pääsalasanasi bitwarden.com-verkkoholvissa. Haluatko käydä sivustolla nyt?" }, "twoStepLoginConfirmation": { - "message": "Kaksivaiheinen kirjautuminen tekee tilistäsi turvallisemman edellyttämällä sinulta kirjautumisvahvistuksen todennuslaitteen, ‑sovelluksen, tekstiviestin, puhelun tai sähköpostin avulla. Voit ottaa kaksivaiheisen kirjautumisen käyttöön bitwarden.com‑verkkoholvissa. Haluatko käydä sivustolla nyt?" + "message": "Kaksivaiheinen kirjautuminen tekee tilistäsi turvallisemman edellyttämällä salasanan lisäksi kirjautumisen lisätodennusta todennuslaitteen, ‑sovelluksen, tekstiviestin, puhelun tai sähköpostin avulla. Voit ottaa kaksivaiheisen kirjautumisen käyttöön bitwarden.com‑verkkoholvissa. Haluatko käydä sivustolla nyt?" }, "editedFolder": { - "message": "Kansiota muokattu" + "message": "Muokattiin kansiota" }, "deleteFolderConfirmation": { - "message": "Haluatko varmasti poistaa tämän kansion?" + "message": "Haluatko varmasti poistaa kansion?" }, "deletedFolder": { - "message": "Kansio poistettu" + "message": "Poistettiin kansio" }, "gettingStartedTutorial": { - "message": "Käytön aloittaminen" + "message": "Aloitusopas" }, "gettingStartedTutorialVideo": { - "message": "Ota kaikki irti selainlaajennuksesta katsomalla video-ohjeemme." + "message": "Ota selainlaajennuksesta kaikki irti katsomalla video-oppaamme." }, "syncingComplete": { - "message": "Synkronointi valmis" + "message": "Synkronointi on valmis" }, "syncingFailed": { "message": "Synkronointi epäonnistui" }, "passwordCopied": { - "message": "Salasana kopioitu" + "message": "Salasana kopioitiin" }, "uri": { "message": "URI" @@ -492,53 +492,53 @@ "message": "Uusi URI" }, "addedItem": { - "message": "Kohde lisätty" + "message": "Lisättiin kohde" }, "editedItem": { - "message": "Kohdetta muokattu" + "message": "Muokattiin kohdetta" }, "deleteItemConfirmation": { - "message": "Haluatko varmasti poistaa tämän kohteen?" + "message": "Haluatko varmasti siirtää roskakoriin?" }, "deletedItem": { - "message": "Kohde lähetetty roskakoriin" + "message": "Siirrettiin kohde roskakoriin" }, "overwritePassword": { "message": "Korvaa salasana" }, "overwritePasswordConfirmation": { - "message": "Haluatko varmasti korvata nykyisen salasanasi?" + "message": "Haluatko varmasti korvata nykyisen salasanan?" }, "searchFolder": { "message": "Hae kansiosta" }, "searchCollection": { - "message": "Hae valikoimasta" + "message": "Hae kokoelmasta" }, "searchType": { - "message": "Hae tämän tyypin kohteista" + "message": "Hae tyypeistä" }, "noneFolder": { "message": "Ei kansiota", "description": "This is the folder for uncategorized items" }, "disableAddLoginNotification": { - "message": "Älä näytä tallennuskehotetta" + "message": "Älä käytä \"Lisää kirjautumistieto\" -kehotetta" }, "addLoginNotificationDesc": { - "message": "Tallennuskehote kysyy, haluatko tallentaa kirjautumistiedot holviisi, kun kirjaudut sivustoille ensimmäistä kertaa." + "message": "\"Lisää kirjautumistieto\" -kehote kysyy, haluatko tallentaa kirjautumistiedot holviisi kun kirjaudut niillä ensimmäistä kertaa." }, "dontShowCardsCurrentTab": { - "message": "Älä näytä kortteja Välilehti-sivulla" + "message": "Älä näytä välilehtikohtaisia korttiehdotuksia" }, "dontShowCardsCurrentTabDesc": { - "message": "Holvissasi olevat kortit näytetään 'Nykyinen välilehti' -sivulla, jotta automaattinen täyttö on helppoa." + "message": "Holvissasi olevat kortit tunnistetaan ja näytetään selaimen avoimelle välilehdelle, jotta niiden valinta täyttöä varten on helppoa." }, "dontShowIdentitiesCurrentTab": { - "message": "Älä näytä henkilöllisyyksiä Välilehti-sivulla" + "message": "Älä näytä välilehtikohtaisia henkilöllisyysehdotuksia" }, "dontShowIdentitiesCurrentTabDesc": { - "message": "Holvissasi olevat henkilöllisyydet näytetään 'Nykyinen välilehti' -sivulla, jotta automaattinen täyttö on helppoa." + "message": "Holvissasi olevat henkilöllisyydet tunnistetaan ja näytetään selaimen avoimelle välilehdelle, jotta niiden valinta täyttöä varten on helppoa." }, "clearClipboard": { "message": "Tyhjennä leikepöytä", @@ -549,7 +549,7 @@ "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { - "message": "Haluatko, että Bitwarden muistaa tämän salasanan puolestasi?" + "message": "Haluatko, että Bitwarden muistaa salasanan puolestasi?" }, "notificationAddSave": { "message": "Kyllä, tallenna nyt" @@ -558,35 +558,35 @@ "message": "Ei koskaan tälle sivustolle" }, "disableChangedPasswordNotification": { - "message": "Älä näytä salasanan muutosilmoitusta" + "message": "Älä näytä \"Salasana vaihdettu\" -ilmoitusta" }, "disableChangedPasswordNotificationDesc": { - "message": "\"Vaihdettu salasana\" -ilmoitus kehottaa automaattisesti sinua päivittämään holvissasi olevan käyttäjätunnuksen salasanan, kun se havaitsee, että olet muuttanut sitä verkkosivulla." + "message": "\"Salasana vaihdettu\" -ilmoitus ehdottaa holviisi tallennetun salasanan automaattista päivitystä kun se havaitsee, että olet vaihtanut sen verkkosivustolla." }, "notificationChangeDesc": { - "message": "Haluatko päivittää tämän salasanan Bitwardenissa?" + "message": "Haluatko päivittää salasanan Bitwardeniin?" }, "notificationChangeSave": { "message": "Kyllä, päivitä nyt" }, "disableContextMenuItem": { - "message": "Älä näytä toimintoja pikavalikossa" + "message": "Älä käytä hiiren kakkospainikkeen pikavalikon toimintoja" }, "disableContextMenuItemDesc": { - "message": "Hiiren oikealla painikkeella ilmestyvän pikavalikon toiminnoilla voit nopeasti luoda itsellesi salasanan tai täyttää kirjautumiskentät nykyiselle välilehdelle." + "message": "Hiiren kakkospainikkeen pikavalikon kautta pääset nopeasti käsiksi salasanojen luontiin ja nykyisellä välilehdellä auki olevan sivuston kirjautumisteitoihin." }, "defaultUriMatchDetection": { - "message": "URIn oletustunnistustapa", + "message": "URI:n tunnistuksen oletustapa", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { - "message": "Valitse oletustapa, jolla URIen tunnistaminen tehdään esimerkiksi automaattisen täytön yhteydessä." + "message": "Valitse oletustapa, jolla URI tunnistetaan esimerkiksi automaattisen täytön yhteydessä." }, "theme": { "message": "Teema" }, "themeDesc": { - "message": "Vaihda sovelluksen väriteema." + "message": "Vaihda sovelluksen väriteemaa." }, "dark": { "message": "Tumma", @@ -606,11 +606,17 @@ "message": "VAROITUS", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Vahvista holvin vienti" + }, "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." + "message": "Tämä vienti sisältää holvisi tiedot salaamattomassa muodossa. Sinun ei tulisi säilyttää tai lähettää vietyä tiedostoa suojaamattomien kanavien (kuten sähköpostin) välityksellä. Poista se välittömästi kun sille ei enää ole käyttöä." + }, + "encExportWarningDesc": { + "message": "Tämä vienti salaa tietosi käyttäjätilisi salausavaimella. Jos joskus uudistat tilisi salausavaimen, on teitojen vienti tehtävä uudelleen, koska et voi enää purkaa nyt viedyn tiedoston salausta." }, "exportMasterPassword": { - "message": "Syötä pääsalasanasi viedäksesi holvisi tiedot." + "message": "Syötä pääsalasana viedäksesi holvisi tiedot." }, "shared": { "message": "Jaettu" @@ -619,7 +625,7 @@ "message": "Jaa holvisi" }, "shareVaultConfirmation": { - "message": "Voit jakaa Bitwardenilla holvisi sisällön muiden kanssa käyttämällä organisaatiotiliä. Haluatko käydä bitwarden.com-sivustolla lukemassa lisää?" + "message": "Bitwardenin avulla voit jakaa holvisi sisältöä muiden kanssa organisaatiotiliä käyttäen. Haluatko lukea bitwarden.com-sivustolta lisää?" }, "shareItem": { "message": "Jaa kohde" @@ -631,40 +637,40 @@ "message": "Jaettu kohde" }, "shareDesc": { - "message": "Valitse organisaatio, jonka kanssa haluat jakaa tämän kohteen. Jakaminen siirtää kohteen omistajuuden organisaatiolle. Et enää ole tämän kohteen suora omistaja, kun se on jaettu." + "message": "Valitse organisaatio, jonka kanssa haluat jakaa kohteen. Jako siirtää kohteen organisaation omistukseen, etkä tämän jälkeen ole enää sen suora omistaja." }, "learnMore": { "message": "Lue lisää" }, "authenticatorKeyTotp": { - "message": "Todennusavain (TOTP)" + "message": "Todennusmenetelmän avain (TOTP)" }, "verificationCodeTotp": { - "message": "Vahvistuskoodi (TOTP)" + "message": "Todennuskoodi (TOTP)" }, "copyVerificationCode": { - "message": "Kopioi vahvistuskoodi" + "message": "Kopioi todennuskoodi" }, "attachments": { "message": "Liitteet" }, "deleteAttachment": { - "message": "Poista liite" + "message": "Poista tiedostoliite" }, "deleteAttachmentConfirmation": { "message": "Haluatko varmasti poistaa liitteen?" }, "deletedAttachment": { - "message": "Liite poistettu" + "message": "Poistettiin tiedostoliite" }, "newAttachment": { - "message": "Lisää uusi liite" + "message": "Lisää uusi tiedostoliite" }, "noAttachments": { - "message": "Ei liitteitä." + "message": "Liitteitä ei ole." }, "attachmentSaved": { - "message": "Liite tallennettu." + "message": "Tiedostoliite tallennettiin." }, "file": { "message": "Tiedosto" @@ -673,7 +679,7 @@ "message": "Valitse tiedosto." }, "maxFileSize": { - "message": "Tiedoston enimmäiskoko on 100 MB." + "message": "Tiedoston enimmäiskoko on 100 Mt." }, "featureUnavailable": { "message": "Toiminto ei ole käytettävissä" @@ -694,43 +700,43 @@ "message": "Päivitä jäsenyys" }, "premiumNotCurrentMember": { - "message": "Et ole tällä hetkellä premium-jäsen." + "message": "Et ole tällä hetkellä Premium-jäsen." }, "premiumSignUpAndGet": { - "message": "Ryhdy premium-jäseneksi saadaksesi" + "message": "Ryhdy Premium-jäseneksi saadaksesi:" }, "ppremiumSignUpStorage": { "message": "1 Gt salattua tallennustilaa tiedostoliitteille." }, "ppremiumSignUpTwoStep": { - "message": "lisävaihtoehtoja kaksivaiheiselle kirjautumiselle, kuten YubiKey, FIDO U2F ja Duo" + "message": "Muita kaksivaiheisen kirjautumisen todennusmenetelmiä kuten YubiKey, FIDO U2F ja Duo Security." }, "ppremiumSignUpReports": { - "message": "Salasanahygienia-, tiliturvallisuus- ja tietovuotoraportit pitävät holvisi turvassa." + "message": "Salasanahygienian, tilin terveyden ja tietovuotojen raportointitoiminnot pitävät holvisi turvassa." }, "ppremiumSignUpTotp": { - "message": "TOTP-vahvistuskoodigeneraattorin (2FA) holvisi käyttäjätunnuksille" + "message": "Kaksivaiheisen kirjautumisen (2FA) TOTP-todennuskoodien generaattori holvisi kirjautumistiedoille." }, "ppremiumSignUpSupport": { - "message": "etusijan asiakastuessa" + "message": "Ensisijainen asiakastuki." }, "ppremiumSignUpFuture": { - "message": "kaikki tulevat premium-ominaisuudet. Lisää tulossa pian!" + "message": "Kaikki tulossa olevat Premium-toiminnot. Lisää tulossa pian!" }, "premiumPurchase": { - "message": "Osta premium-jäsenyys" + "message": "Osta Premium" }, "premiumPurchaseAlert": { - "message": "Voit ostaa premium-jäsenyyden bitwarden.com-verkkoholvissa. Haluatko käydä sivustolla nyt?" + "message": "Voit ostaa Premium-jäsenyyden bitwarden.com-verkkoholvissa. Haluatko käydä sivustolla nyt?" }, "premiumCurrentMember": { - "message": "Olet premium-jäsen!" + "message": "Olet Premium-jäsen!" }, "premiumCurrentMemberThanks": { - "message": "Kiitos, että tuet Bitwardenin toimintaa." + "message": "Kiitos kun tuet Bitwardenia." }, "premiumPrice": { - "message": "Kaikki nämä vain $PRICE$ / vuosi!", + "message": "Kaikki tämä vain $PRICE$/vuosi!", "placeholders": { "price": { "content": "$1", @@ -739,25 +745,25 @@ } }, "refreshComplete": { - "message": "Päivitys valmis" + "message": "Päivitys on valmis" }, "disableAutoTotpCopy": { - "message": "Älä kopioi TOTP-koodeja automaattisesti" + "message": "Älä kopioi TOTP-todennuskoodeja automaattisesti" }, "disableAutoTotpCopyDesc": { - "message": "Jos käyttäjätunnukseesi on liitetty todennusavain, TOTP-vahvistuskoodi kopioidaan automaattisesti leikepöydällesi tehdessäsi kohteella automaattisen täytön." + "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." }, "premiumRequired": { "message": "Premium vaaditaan" }, "premiumRequiredDesc": { - "message": "Tarvitset premium-jäsenyyden tämän toiminnon käyttämiseen." + "message": "Käyttääksesi tätä toimintoa tarvitset Premium-jäsenyyden." }, "enterVerificationCodeApp": { - "message": "Syötä 6-numeroinen vahvistuskoodi todennussovelluksestasi." + "message": "Syötä 6-numeroinen todennuskoodi todennussovelluksestasi." }, "enterVerificationCodeEmail": { - "message": "Syötä 6-numeroinen vahvistuskoodi, joka lähetettiin osoitteeseen $EMAIL$.", + "message": "Syötä 6-numeroinen todennuskoodi, joka lähetettiin sähköpostitse osoitteeseen $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -766,7 +772,7 @@ } }, "verificationCodeEmailSent": { - "message": "Vahvistussähköposti lähetettiin osoitteeseen $EMAIL$.", + "message": "Todennussähköposti lähetettiin osoitteeseen $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -778,31 +784,31 @@ "message": "Muista minut" }, "sendVerificationCodeEmailAgain": { - "message": "Lähetä vahvistuskoodisähköposti uudestaan" + "message": "Lähetä todennuskoodi sähköpostitse uudelleen" }, "useAnotherTwoStepMethod": { - "message": "Käytä toista menetelmää kaksivaiheiseen kirjautumiseen" + "message": "Käytä eri kaksivaiheisen kirjautumisen todennusmenetelmää" }, "insertYubiKey": { - "message": "Kytke YubiKey-laitteesi tietokoneesi USB-porttiin ja paina sen nappia." + "message": "Kytke YubiKey-todennuslaitteesi tietokoneen USB-porttiin ja paina sen painiketta." }, "insertU2f": { - "message": "Kytke todennuslaitteesi tietokoneesi USB-porttiin. Jos laitteessa on painike, paina sitä." + "message": "Kytke todennuslaitteesi tietokoneen USB-porttiin. Jos laitteessa on painike, paina sitä." }, "loginUnavailable": { - "message": "Kirjautuminen epäonnistui" + "message": "Kirjautuminen ei ole käytettävissä" }, "noTwoStepProviders": { - "message": "Tällä tilillä on kaksivaiheinen kirjautuminen käytössä, mutta tämä selain ei tue yhtäkään määritetyistä kaksivaihekirjautumisen menetelmistä." + "message": "Tilillä on käytössä kaksivaiheinen kirjautuminen, mutta tämä selain ei tue käytettävissä olevia todennusmenetelmiä." }, "noTwoStepProviders2": { - "message": "Käytä tuettua selainta (kuten Chromea) ja/tai ota käyttöön paremmin tuettu todennusmenetelmä (kuten todennussovellus)." + "message": "Käytä tuettua selainta (kuten Chrome) ja/tai ota käyttöön laajemmin tuettu todennusmenetelmä (kuten todennussovellus)." }, "twoStepOptions": { "message": "Kaksivaiheisen kirjautumisen asetukset" }, "recoveryCodeDesc": { - "message": "Etkö pysty käyttämään mitään kaksivaihemenetelmistäsi? Käytä palautuskoodiasi poistaaksesi käytöstä kaikki kaksivaiheisen todennuksen menetelmät tililtäsi." + "message": "Etkö pysty käyttämään kaksivaiheisen kirjautumisen todennusmenetelmiäsi? Poista kaikki menetelmät käytöstä tililtäsi palautuskoodillasi." }, "recoveryCodeTitle": { "message": "Palautuskoodi" @@ -811,25 +817,25 @@ "message": "Todennussovellus" }, "authenticatorAppDesc": { - "message": "Käytä todennussovellusta (Kuten Authya tai Google Authenticatoria) luodaksesi aikarajallisia vahvistuskoodeja.", + "message": "Käytä todennussovellusta (kuten Authy tai Google Authenticator) luodaksesi aikarajallisia todennuskoodeja.", "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." }, "yubiKeyTitle": { "message": "YubiKey OTP -todennuslaite" }, "yubiKeyDesc": { - "message": "Käytä YubiKeytä päästäksesi käsiksi tiliisi. Toimii seuraavien YubiKey-mallien kanssa: 4, 4 Nano, 4C ja NEO." + "message": "Käytä YubiKey-todennuslaitetta tilisi avaukseen. Toimii YubiKey 4, 4 Nano, 4C sekä NEO -laitteiden kanssa." }, "duoDesc": { - "message": "Vahvista kirjautumisesi Duo Securityn kautta käyttämällä Duo Mobile -sovellusta, tekstiviestiä, puhelua tai U2F-todennuslaitetta.", + "message": "Vahvista Duo Securityn avulla käyttäen Duo Mobile ‑sovellusta, tekstiviestiä, puhelua tai U2F-todennuslaitetta.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "Vahvista organisaatiosi kirjautumiset Duo Securityn kautta käyttämällä Duo Mobile ‑sovellusta, tekstiviestiä, puhelua tai U2F-todennuslaitetta.", + "message": "Vahvista organisaatiollesi Duo Securityn avulla käyttäen Duo Mobile ‑sovellusta, tekstiviestiä, puhelua tai U2F-todennuslaitetta.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "u2fDesc": { - "message": "Käytä mitä tahansa FIDO U2F ‑yhteensopivaa todennuslaitetta päästäksesi käsiksi tiliisi." + "message": "Käytä tilisi avaukseen mitä tahansa FIDO U2F ‑yhteensopivaa todennuslaitetta." }, "u2fTitle": { "message": "FIDO U2F ‑todennuslaite" @@ -838,19 +844,19 @@ "message": "Sähköposti" }, "emailDesc": { - "message": "Vahvistuskoodit lähetetään sinulle sähköpostilla." + "message": "Todennuskoodit lähetetään sinulle sähköpostitse." }, "selfHostedEnvironment": { - "message": "Itse ylläpidetty ohjelmistoympäristö" + "message": "Oma palvelinympäristö" }, "selfHostedEnvironmentFooter": { - "message": "Syötä omalla palvelimella ylläpitämäsi Bitwarden-asennuksen kanta-URL." + "message": "Määritä omassa palvelinympäristössäsi suoritettavan Bitwarden-asennuksen pääverkkotunnus." }, "customEnvironment": { - "message": "Mukautettu ohjelmistoympäristö" + "message": "Mukautettu palvelinympäristö" }, "customEnvironmentFooter": { - "message": "Edistyneille käyttäjille. Voit syöttää jokaisen palvelun kanta-URL:n erikseen." + "message": "Edistyneille käyttäjille. Voit määrittää jokaiselle palvelulle oman pääverkkotunnuksen." }, "baseUrl": { "message": "Palvelimen URL" @@ -862,7 +868,7 @@ "message": "Verkkoholvipalvelimen URL" }, "identityUrl": { - "message": "Identiteettipalvelimen URL" + "message": "Henkilöllisyyspalvelimen URL" }, "notificationsUrl": { "message": "Ilmoituspalvelimen URL" @@ -871,13 +877,13 @@ "message": "Kuvakepalvelimen URL" }, "environmentSaved": { - "message": "Ohjelmistoympäristön URL:t tallennettu." + "message": "Palvelinten URL-osoitteet tallennettiin." }, "enableAutoFillOnPageLoad": { "message": "Täytä automaattisesti sivun latautuessa" }, "enableAutoFillOnPageLoadDesc": { - "message": "Tiedot täytetään automaattisesti, jos sivun latautuessa havaitaan kirjautumislomake." + "message": "Jos sivulla havaitaan kirjautumislomake, täytetään kirjautumistiedot automaattisesti sivua ladattaessa." }, "experimentalFeature": { "message": "Tämä on vielä kokeellinen toiminto. Käytä omalla vastuullasi." @@ -889,7 +895,7 @@ "message": "Avaa holvi sivupalkissa" }, "commandAutofillDesc": { - "message": "Täytä automaattisesti tällä sivustolla viimeksi käytetty käyttäjätunnus." + "message": "Täytä automaattisesti viimeisin nykyisellä sivustolla käytetty kirjautumistieto" }, "commandGeneratePasswordDesc": { "message": "Luo uusi satunnainen salasana ja kopioi se leikepöydälle." @@ -898,7 +904,7 @@ "message": "Lukitse holvi" }, "privateModeMessage": { - "message": "Valitettavasti tämä ikkuna ei ole saatavilla tämän selaimen yksityisyystilassa." + "message": "Valitettavasti tämä ikkuna ei ole käytettävissä tämän selaimen yksityisessä selaustilassa." }, "customFields": { "message": "Lisäkentät" @@ -907,34 +913,34 @@ "message": "Kopioi arvo" }, "value": { - "message": "Teksti" + "message": "Arvo" }, "newCustomField": { "message": "Uusi lisäkenttä" }, "dragToSort": { - "message": "Lajittele vetämällä" + "message": "Järjestä raahaamalla" }, "cfTypeText": { "message": "Teksti" }, "cfTypeHidden": { - "message": "Piilotettu teksti" + "message": "Piilotettu" }, "cfTypeBoolean": { - "message": "Valintaruutu" + "message": "Totuusarvo" }, "popup2faCloseMessage": { - "message": "Kun napsautat ponnahdusikkunan ulkopuolelta tarkistaaksesi vahvistuskoodin sähköpostistasi, näkymä sulkeutuu. Haluatko avata tämän näkymän uuteen ikkunaan, jotta se ei sulkeutuisi?" + "message": "Klikkaus ponnahdusikkunan ulkopuolelle todennuskoodin sähköpostista noutoa varten sulkee ikkunan. Haluatko avata näkymän uuteen ikkunaan, jotta se pysyy avoinna?" }, "popupU2fCloseMessage": { - "message": "Tämä selain ei mahdollista U2F:n käyttämistä tässä ponnahdusikkunassa. Haluatko avata tämän näkymän uuteen ikkunaan, jotta voit kirjautua U2F-todennuslaitteella?" + "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ä sivustokuvakkeita" + "message": "Älä näytä sivustojen kuvakkeita" }, "disableFaviconDesc": { - "message": "Holvisi käyttäjätunnuslistassa näytettävät sivustokuvakkeet helpottavat kohteiden tunnistamista." + "message": "Kirjautumistietojen vieressä näytettävät sivustojen kuvakkeet helpottavat kohteiden tunnistusta." }, "cardholderName": { "message": "Kortinhaltijan nimi" @@ -991,7 +997,7 @@ "message": "Joulukuu" }, "securityCode": { - "message": "Turvakoodi" + "message": "Turvakoodi (CVC/CVV)" }, "ex": { "message": "esim." @@ -1024,7 +1030,7 @@ "message": "Henkilöllisyyden nimi" }, "company": { - "message": "Yhtiö" + "message": "Yritys" }, "ssn": { "message": "Henkilötunnus" @@ -1033,10 +1039,10 @@ "message": "Passin numero" }, "licenseNumber": { - "message": "Rekisterinumero" + "message": "Ajokortin numero" }, "email": { - "message": "Sähköpostiosoite" + "message": "Sähköposti" }, "phone": { "message": "Puhelinnumero" @@ -1069,13 +1075,13 @@ "message": "Tyyppi" }, "typeLogin": { - "message": "Käyttäjätunnus" + "message": "Kirjautumistieto" }, "typeLogins": { - "message": "Käyttäjätunnukset" + "message": "Kirjautumistiedot" }, "typeSecureNote": { - "message": "Salattu muistiinpano" + "message": "Salattu muistio" }, "typeCard": { "message": "Kortti" @@ -1090,7 +1096,7 @@ "message": "Takaisin" }, "collections": { - "message": "Valikoimat" + "message": "Kokoelmat" }, "favorites": { "message": "Suosikit" @@ -1108,20 +1114,20 @@ "message": "Henkilöllisyydet" }, "logins": { - "message": "Käyttäjätunnukset" + "message": "Kirjautumistiedot" }, "secureNotes": { - "message": "Salatut muistiinpanot" + "message": "Salatut muistiot" }, "clear": { "message": "Tyhjennä", "description": "To clear something out. example: To clear browser history." }, "checkPassword": { - "message": "Tarkista, onko salasana vuotanut." + "message": "Tarkasta, onko salasana vuotanut." }, "passwordExposed": { - "message": "Tämä salasana on paljastunut $VALUE$ tietovuodossa. Sinun kannattaa vaihtaa se.", + "message": "Salasana on paljastunut $VALUE$ tietovuodossa. Se tulisi vaihtaa.", "placeholders": { "value": { "content": "$1", @@ -1136,14 +1142,14 @@ "message": "Pääverkkotunnus" }, "host": { - "message": "Osoite", + "message": "Isäntä", "description": "A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'." }, "exact": { - "message": "Täsmälleen…" + "message": "Tarkka" }, "startsWith": { - "message": "Alkaa…" + "message": "Alkaa" }, "regEx": { "message": "Säännöllinen lauseke", @@ -1154,14 +1160,14 @@ "description": "URI match detection for auto-fill." }, "defaultMatchDetection": { - "message": "Oletustunnistustapa", + "message": "Tunnistuksen oletustapa", "description": "Default URI match detection for auto-fill." }, "toggleOptions": { - "message": "Näytä/piilota asetukset" + "message": "Näytä tai piilota asetukset" }, "toggleCurrentUris": { - "message": "Näytä/piilota nykyiset URI:t", + "message": "Näytä tai piilota nykyiset URI:t", "description": "Toggle the display of the URIs of the currently open tabs in the browser." }, "currentUri": { @@ -1179,7 +1185,7 @@ "message": "Kaikki kohteet" }, "noPasswordsInList": { - "message": "Ei salasanoja näytettäväksi." + "message": "Ei näytettäviä salasanoja." }, "remove": { "message": "Poista" @@ -1192,11 +1198,11 @@ "description": "ex. Date this item was updated" }, "datePasswordUpdated": { - "message": "Salasana päivitetty", + "message": "Salasana päivitettiin", "description": "ex. Date this password was updated" }, "neverLockWarning": { - "message": "Oletko varma, että haluat käyttää asetusta \"ei koskaan\"? Tämä valinta tallentaa holvisi salausavaimen laitteellesi. Jos käytät tätä asetusta, varmista että laitteesi on hyvin suojattu." + "message": "Oletko varma, että haluat käyttää asetusta \"Ei koskaan\"? Tämä valinta tallentaa holvisi salausavaimen laitteellesi. Jos käytät asetusta, varmista että laitteesi on hyvin suojattu." }, "noOrganizationsList": { "message": "Et kuulu mihinkään organisaatioon. Organisaatioiden avulla voit jakaa kohteita turvallisesti muiden käyttäjien kanssa." @@ -1205,7 +1211,7 @@ "message": "Ei näytettäviä kokoelmia." }, "ownership": { - "message": "Omistajuus" + "message": "Omistus" }, "whoOwnsThisItem": { "message": "Kuka omistaa tämän kohteen?" @@ -1226,17 +1232,17 @@ "message": "Heikko pääsalasana" }, "weakMasterPasswordDesc": { - "message": "Valitsemasi pääsalasana on heikko. Sinun kannattaa käyttää vahvaa pääsalasanaa (tai ‑salalauseketta) suojataksesi Bitwarden-tilisi kunnolla. Haluatko varmasti käyttää tätä pääsalasanaa?" + "message": "Valitsemasi pääsalasana on heikko. Sinun tulisi käyttää vahvaa pääsalasanaa (tai salauslauseketta) suojataksesi Bitwarden-tilisi kunnolla. Haluatko varmasti käyttää tätä pääsalasanaa?" }, "pin": { - "message": "PIN-koodi", + "message": "PIN", "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." }, "unlockWithPin": { - "message": "Avaa PIN-koodilla" + "message": "Avaa lukitus PIN-koodilla" }, "setYourPinCode": { - "message": "Aseta PIN-koodi Bitwardenin avaamista varten. PIN-asetukset nollautuvat, jos kirjaudut täysin ulos sovelluksesta." + "message": "Aseta PIN-koodisi Bitwardenin avausta varten. PIN-asetukset tyhjentyvät, jos kirjaudut kokonaan ulos sovelluksesta." }, "pinRequired": { "message": "PIN-koodi vaaditaan." @@ -1250,11 +1256,20 @@ "yourVaultIsLockedPinCode": { "message": "Holvisi on lukittu. Vahvista PIN-koodisi jatkaaksesi." }, + "unlockWithBiometrics": { + "message": "Avaa biometrialla" + }, + "awaitDesktop": { + "message": "Odottaa vahvistusta työpöydältä" + }, + "awaitDesktopDesc": { + "message": "Vahvista biometrian käyttö Bitwardenin työpöytäsovelluksessa käyttääksesi sitä selaimessa." + }, "lockWithMasterPassOnRestart": { - "message": "Lukitse pääsalasanalla selainta uudelleenkäynnistettäessä" + "message": "Lukitse pääsalasanalla kun selain käynnistetään uudelleen" }, "selectOneCollection": { - "message": "Valitse vähintään yksi kokoelma." + "message": "Valitse ainakin yksi kokoelma." }, "cloneItem": { "message": "Kloonaa kohde" @@ -1283,22 +1298,22 @@ "message": "Poista kohde pysyvästi" }, "permanentlyDeleteItemConfirmation": { - "message": "Haluatko varmasti poistaa tämän kohteen pysyvästi?" + "message": "Haluatko varmasti poistaa kohteen pysyvästi?" }, "permanentlyDeletedItem": { - "message": "Kohde poistettu pysyvästi" + "message": "Poistettiin kohde pysyvästi" }, "restoreItem": { "message": "Palauta kohde" }, "restoreItemConfirmation": { - "message": "Haluatko varmasti palauttaa tämän kohteen?" + "message": "Haluatko varmasti palauttaa kohteen?" }, "restoredItem": { - "message": "Kohde palautettu" + "message": "Kohde palautettiin" }, "vaultTimeoutLogOutConfirmation": { - "message": "Uloskirjautuminen poistaa kaiken pääsyn holviisi ja vaatii online-todennuksen aikakatkaisuajan jälkeen. Haluatko varmasti käyttää tätä asetusta?" + "message": "Uloskirjautuminen estää pääsyn holviisi ja vaatii ajan umpeuduttua todennuksen internet-yhteyden välityksellä. Haluatko varmasti käyttää tätä asetusta?" }, "vaultTimeoutLogOutConfirmationTitle": { "message": "Aikakatkaisun toiminnon vahvistus" @@ -1355,18 +1370,84 @@ } }, "masterPasswordPolicyRequirementsNotMet": { - "message": "Uusi pääsalasanasi ei täytä käytäntövaatimuksia." + "message": "Uusi pääsalasanasi ei täytä käytännön määrittämiä vaatimuksia." }, "acceptPolicies": { "message": "Valitsemalla tämän ruudun hyväksyt seuraavat:" }, "acceptPoliciesError": { - "message": "Palvelu- ja tietosuojakäytäntöä ei ole vahvistettu." + "message": "Käyttöehtoja ja tietosuojakäytäntöä ei ole vahvistettu." }, "termsOfService": { "message": "Käyttöehdot" }, "privacyPolicy": { "message": "Tietosuojakäytäntö" + }, + "hintEqualsPassword": { + "message": "Salasanavihjeesi ei voi olla sama kuin salasanasi." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Työpöytäsynkronoinnin vahvistus" + }, + "desktopIntegrationVerificationText": { + "message": "Varmista, että työpöytäsovellus näyttää tämän tunnistelausekkeen:" + }, + "desktopIntegrationDisabledTitle": { + "message": "Selainintegrointi ei ole käytössä" + }, + "desktopIntegrationDisabledDesc": { + "message": "Selainintegrointi ei ole käytössä Bitwardenin työpöytäsovelluksessa. Ota se käyttöön työpöytäsovelluksen asetuksista." + }, + "startDesktopTitle": { + "message": "Käynnistä Bitwardenin työpöytäsovellus" + }, + "startDesktopDesc": { + "message": "Bitwardenin työpöytäsovellus on käynnistettävä ennen kuin tätä toimintoa voidaan käyttää." + }, + "errorEnableBiometricTitle": { + "message": "Biometrian käyttöönotto ei onnistu" + }, + "errorEnableBiometricDesc": { + "message": "Toiminto peruttiin työpöytäsovelluksen toimesta" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Työpöytäsovellus hyläsi suojatun viestintäväylän. Yritä toimintoa uudelleen" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Työpöytäyhteys keskeytyi" + }, + "nativeMessagingWrongUserDesc": { + "message": "Työpöytäsovellus on kirjautuneena eri tilille. Varmista, että molemmat sovellukset ovat kirjautuneet samalle tilille." + }, + "nativeMessagingWrongUserTitle": { + "message": "Tili ei täsmää" + }, + "biometricsNotEnabledTitle": { + "message": "Biometria ei ole käytössä" + }, + "biometricsNotEnabledDesc": { + "message": "Käyttääksesi biometriaa selaimessa, on biometria otettava käyttöön työpöytäsovelluksen asetuksista." + }, + "biometricsNotSupportedTitle": { + "message": "Biometriaa ei tueta" + }, + "biometricsNotSupportedDesc": { + "message": "Selaimen biometriaa ei tueta tällä laitteella." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Yrityksen asettaman käytännön johdosta kohteiden tallennus omaan holviisi ei ole mahdollista. Muuta omistusasetus organisaatiolle ja valitse käytettävissä olevista kokoelmista." + }, + "personalOwnershipPolicyInEffect": { + "message": "Organisaatiokäytäntö vaikuttaa omistajuusvalintoihisi." } } diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json index cd3872b8df..88660194fb 100644 --- a/src/_locales/fr/messages.json +++ b/src/_locales/fr/messages.json @@ -498,7 +498,7 @@ "message": "Identifiant modifié" }, "deleteItemConfirmation": { - "message": "Êtes-vous sûr(e) de vouloir supprimer cet identifiant ?" + "message": "Êtes-vous sûr•e de vouloir supprimer cet identifiant ?" }, "deletedItem": { "message": "L'élément a été envoyé dans la corbeille" @@ -606,9 +606,15 @@ "message": "AVERTISSEMENT", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirmer l'export du coffre" + }, "exportWarningDesc": { "message": "Cet export contient les données de votre coffre dans un format non chiffré. Vous ne devriez ni le stocker ni l'envoyer via des canaux non sécurisés (tel que l'e-mail). Supprimez-le immédiatement après l'avoir utilisé." }, + "encExportWarningDesc": { + "message": "Cet export chiffre vos données en utilisant la clé de chiffrement de votre compte. Si jamais vous modifiez la clé de chiffrement de votre compte, vous devriez exporter à nouveau car vous ne pourrez pas déchiffrer ce fichier." + }, "exportMasterPassword": { "message": "Saisissez votre mot de passe maître pour exporter les données de votre coffre." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Votre coffre est verrouillé. Saisissez votre code PIN pour continuer." }, + "unlockWithBiometrics": { + "message": "Déverrouiller par biométrie" + }, + "awaitDesktop": { + "message": "En attente de confirmation de l'application de bureau" + }, + "awaitDesktopDesc": { + "message": "Veuillez confirmer l'utilisation de la biométrie dans l'application Bitwarden de bureau pour activer la biométrie dans le navigateur." + }, "lockWithMasterPassOnRestart": { "message": "Verrouiller avec le mot de passe maître lors du redémarrage" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Politique de confidentialité" + }, + "hintEqualsPassword": { + "message": "Votre indice de mot de passe ne peut pas être identique à votre mot de passe." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Vérification de la synchronisation avec l'application de bureau" + }, + "desktopIntegrationVerificationText": { + "message": "Veuillez vérifier que l'application de bureau affiche cette phrase d'empreinte : " + }, + "desktopIntegrationDisabledTitle": { + "message": "L'intégration avec le navigateur n'est pas activée" + }, + "desktopIntegrationDisabledDesc": { + "message": "L'intégration avec le navigateur n'est pas activée dans l'application de bureau Bitwarden. Veuillez l'activer dans les paramètres de l'application de bureau." + }, + "startDesktopTitle": { + "message": "Démarrer l'application de bureau Bitwarden." + }, + "startDesktopDesc": { + "message": "L'application de bureau Bitwarden doit être démarrée avant que cette fonction puisse être utilisée." + }, + "errorEnableBiometricTitle": { + "message": "Impossible d'activer la biométrie" + }, + "errorEnableBiometricDesc": { + "message": "L'action a été annulée par l'application de bureau" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "L'application de bureau a invalidé le canal de communication sécurisé. Veuillez réessayer cette opération" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Communication interrompue avec l'application de bureau" + }, + "nativeMessagingWrongUserDesc": { + "message": "L'application de bureau est connectée à un autre compte. Veuillez vous assurer que les deux applications sont connectées au même compte." + }, + "nativeMessagingWrongUserTitle": { + "message": "Erreur de correspondance entre les comptes" + }, + "biometricsNotEnabledTitle": { + "message": "Le déverrouillage biométrique n'est pas activé" + }, + "biometricsNotEnabledDesc": { + "message": "Les options de biométrie dans le navigateur nécessitent au préalable l'activation des options de biométrie dans l'application de bureau." + }, + "biometricsNotSupportedTitle": { + "message": "Le déverrouillage biométrique n'est pas pris en charge" + }, + "biometricsNotSupportedDesc": { + "message": "Le déverrouillage biométrique dans le navigateur n’est pas pris en charge sur cet appareil" + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Permission non accordée" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Sans la permission de communiquer avec l'application de bureau Bitwarden, nous ne pouvons pas activer le déverrouillage biométrique dans l'extension navigateur. Veuillez réessayer." + }, + "personalOwnershipSubmitError": { + "message": "En raison d'une politique d'entreprise, il vous est interdit d'enregistrer des éléments dans votre coffre personnel. Sélectionnez une organisation dans l'option Propriété et choisissez parmi les collections disponibles." + }, + "personalOwnershipPolicyInEffect": { + "message": "Une politique d'organisation affecte vos options de propriété." } } diff --git a/src/_locales/he/messages.json b/src/_locales/he/messages.json index a6b4642144..c573ac2593 100644 --- a/src/_locales/he/messages.json +++ b/src/_locales/he/messages.json @@ -606,9 +606,15 @@ "message": "אזהרה", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "אישור ייצוא כספת" + }, "exportWarningDesc": { "message": "הקובץ מכיל את פרטי הכספת שלך בפורמט לא מוצפן. מומלץ להעביר את הקובץ רק בדרכים מוצפנות, ומאוד לא מומלץ לשמור או לשלוח את הקובץ הזה בדרכים לא מוצפנות (כדוגמת סתם אימייל). מחק את הקובץ מיד לאחר שסיימת את השימוש בו." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "הזן את הסיסמה הראשית שלך עבור יצוא המידע מהכספת." }, @@ -895,7 +901,7 @@ "message": "צור והעתק סיסמה רנדומלית חדשה." }, "commandLockVaultDesc": { - "message": "נעילת הכספת" + "message": "נעל את הכספת" }, "privateModeMessage": { "message": "לצערנו חלון זה אינו זמין במצב גלישה פרטית בדפדפן זה." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "הכספת שלך נעולה. הזן את קוד הPIN שלך כדי להמשיך." }, + "unlockWithBiometrics": { + "message": "ביטול נעילה עם זיהוי ביומטרי" + }, + "awaitDesktop": { + "message": "Awaiting confirmation from desktop" + }, + "awaitDesktopDesc": { + "message": "Please confirm using biometrics in the Bitwarden Desktop application to enable biometrics for browser." + }, "lockWithMasterPassOnRestart": { "message": "נעל בעזרת הסיסמה הראשית בהפעלת הדפדפן מחדש" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "מדיניות הפרטיות" + }, + "hintEqualsPassword": { + "message": "Your password hint cannot be the same as your password." + }, + "ok": { + "message": "אוקי" + }, + "desktopSyncVerificationTitle": { + "message": "Desktop sync verification" + }, + "desktopIntegrationVerificationText": { + "message": "Please verify that the desktop application shows this fingerprint: " + }, + "desktopIntegrationDisabledTitle": { + "message": "אינטרציית דפדפן לא מאופשרת" + }, + "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 this function can be used." + }, + "errorEnableBiometricTitle": { + "message": "לא ניתן להפעיל זיהוי ביומטרי" + }, + "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": "זיהוי בימוטרי לא מאופשר." + }, + "biometricsNotEnabledDesc": { + "message": "Browser biometrics requires desktop biometric to be enabled in the settings first." + }, + "biometricsNotSupportedTitle": { + "message": "אין תמיכה באמצעי זיהוי ביומטרים" + }, + "biometricsNotSupportedDesc": { + "message": "אין תמיכה בזיהוי ביומטרי בדפדפן במכשיר זה." + }, + "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." + }, + "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." } } diff --git a/src/_locales/hi/messages.json b/src/_locales/hi/messages.json index 7e09db094b..fe1e9c05c3 100644 --- a/src/_locales/hi/messages.json +++ b/src/_locales/hi/messages.json @@ -498,7 +498,7 @@ "message": "Edited item" }, "deleteItemConfirmation": { - "message": "Are you sure you want to delete this item?" + "message": "Do you really want to send to the trash?" }, "deletedItem": { "message": "Sent item to trash" @@ -606,9 +606,15 @@ "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." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Enter your master password to export your vault data." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Your vault is locked. Verify your PIN code to continue." }, + "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" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/hr/messages.json b/src/_locales/hr/messages.json index 56ede02c06..e0ade3e04a 100644 --- a/src/_locales/hr/messages.json +++ b/src/_locales/hr/messages.json @@ -606,9 +606,15 @@ "message": "UPOZORENJE", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Ovaj izvoz sadrži podatke trezora u nešifriranom obliku. Izvezenu datoteku ne smijete pohranjivati ili slati preko nesigurnih kanala (kao što je e-pošta). Izbrišite je odmah nakon završetka korištenja." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Unesite glavnu lozinku za izvoz podataka iz trezora." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Vaš trezor je zaključan. Potvrdite Vaš PIN da biste nastavili." }, + "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": "Zaključaj s glavnom lozinkom kod ponovnog pokretanja preglednika" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/hu/messages.json b/src/_locales/hu/messages.json index 46dfba0f80..07e30b6d7e 100644 --- a/src/_locales/hu/messages.json +++ b/src/_locales/hu/messages.json @@ -11,7 +11,7 @@ "description": "Extension description" }, "loginOrCreateNewAccount": { - "message": "Jelentkezz be vagy készíts új felhasználót a biztonsági széfed eléréshez." + "message": "Bejelentkezés vagy új fiók létrehozása a biztonsági széf eléréséhez." }, "createAccount": { "message": "Fiók létrehozása" @@ -498,7 +498,7 @@ "message": "Elem szerkesztve" }, "deleteItemConfirmation": { - "message": "Biztosan törlöd ezt az elemet?" + "message": "Biztosan törlésre kerüljön ezt az elem?" }, "deletedItem": { "message": "Az elem törlésre került." @@ -606,8 +606,14 @@ "message": "FIGYELEM", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Széf exportálás megerősítése" + }, "exportWarningDesc": { - "message": "Ez az exportálás titkosítás nélkül tartalmazza a széfadatokat.Nem célszerű az exportált fájlt nem biztonságos csatornákon tárolni és továbbküldeni (például emailben). A felhasználás után erősen ajánlott a törlés." + "message": "Ez az exportálás titkosítás nélkül tartalmazza a széfadatokat. Nem célszerű az exportált fájlt nem biztonságos csatornákon tárolni és tovább küldeni (például emailben). A felhasználás után erősen ajánlott a törlés." + }, + "encExportWarningDesc": { + "message": "Ez az exportálás titkosítja az adatokat a fiók titkosítási kulcsával. Ha valaha a fiók forgatási kulcsa más lesz, akkor újra exportálni kell, mert nem lehet visszafejteni ezt az exportálási fájlt." }, "exportMasterPassword": { "message": "Add meg a jelszavad a széf adataid exportálásához." @@ -847,7 +853,7 @@ "message": "A helyileg működtetett Bitwarden telepítés alap webcímének megadása." }, "customEnvironment": { - "message": "Egyéni környezet" + "message": "Egyedi környezet" }, "customEnvironmentFooter": { "message": "Haladó felhasználóknak. Minden egyes szolgáltatás alap URL-jét külön megadhatod." @@ -991,10 +997,10 @@ "message": "December" }, "securityCode": { - "message": "Biztonsági Kód" + "message": "Biztonsági kód" }, "ex": { - "message": "pl." + "message": "példa:" }, "title": { "message": "Titulus" @@ -1136,7 +1142,7 @@ "message": "Alap domain" }, "host": { - "message": "Gazdagép", + "message": "Kiszolgáló", "description": "A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'." }, "exact": { @@ -1245,11 +1251,20 @@ "message": "A pinkód érvénytelen." }, "verifyPin": { - "message": "Pnkód ellenőrzése" + "message": "Pinkód ellenőrzése" }, "yourVaultIsLockedPinCode": { "message": "A széf zárolásra került. A folytatáshoz meg kell adni a pinkódot." }, + "unlockWithBiometrics": { + "message": "Biometrikus feloldás" + }, + "awaitDesktop": { + "message": "Várakozás megerősítésre az asztali alkalmazásból" + }, + "awaitDesktopDesc": { + "message": "Erősítsük meg a biometrikus adatok használatát a Bitwarden asztali alkalmazásban a biometrikus adatok engedélyezéséhez a böngészőben." + }, "lockWithMasterPassOnRestart": { "message": "Lezárás mesterjelszóval a böngésző újraindításakor" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Adatvédelem" + }, + "hintEqualsPassword": { + "message": "A jelszavas tipp nem lehet azonos a jelszóval." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Asztali szinkronizálás ellenőrzés" + }, + "desktopIntegrationVerificationText": { + "message": "Ellenőrizzük, hogy az asztali alkalmazás megjeleníti-e ezt az ujjlenyomatot: " + }, + "desktopIntegrationDisabledTitle": { + "message": "A böngésző integráció nem engedélyezett." + }, + "desktopIntegrationDisabledDesc": { + "message": "A böngésző integráció nincs engedélyezve a Bitwarden asztali alkalmazásban. Engedélyezzük az asztali alkalmazás beállításai között." + }, + "startDesktopTitle": { + "message": "A Bitwarden asztali alkalmazás indítása" + }, + "startDesktopDesc": { + "message": "A funkció használatához el kell indítani a Bitwarden asztali alkalmazást." + }, + "errorEnableBiometricTitle": { + "message": "Nem lehet engedélyezni a biometrikus adatokat." + }, + "errorEnableBiometricDesc": { + "message": "A műveletet az asztali alkalmazás törölte." + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Az asztali alkalmazás érvénytelenítette a biztonságos kommunikációs csatornát. Próbálkozzunk újra ezzel a művelettel" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Az asztali kommunikáció megszakadt." + }, + "nativeMessagingWrongUserDesc": { + "message": "Az asztali alkalmazás egy másik fiókba van bejelentkezve. Ellenőrizzük, hogy mindkét alkalmazást azonos fiókba van bejelentkezve." + }, + "nativeMessagingWrongUserTitle": { + "message": "A fiók nem egyezik." + }, + "biometricsNotEnabledTitle": { + "message": "A biometrikus adatok nincsenek engedélyezve." + }, + "biometricsNotEnabledDesc": { + "message": "A böngésző biometrikus adataihoz először az asztali biometrikus adatokat kell engedélyezni a beállításokban." + }, + "biometricsNotSupportedTitle": { + "message": "A biometrikus adatok nem támogatottak." + }, + "biometricsNotSupportedDesc": { + "message": "A böngésző biometrikus adatait ez az eszköz nem támogatja." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "A jogosultság nincs megadva." + }, + "nativeMessaginPermissionErrorDesc": { + "message": "A Bitwarden Desktop alkalmazással való kommunikáció engedélye nélkül nem adhatunk meg biometrikus adatokat a böngésző kiterjesztésében. Próbáljuk újra." + }, + "personalOwnershipSubmitError": { + "message": "Egy vállalati házirend miatt korlátozásra került az elemek személyes tárolóba történő mentése. Módosítsuk a Tulajdon opciót egy szervezetre és válasszunk az elérhető gyűjtemények közül." + }, + "personalOwnershipPolicyInEffect": { + "message": "A szervezeti házirend befolyásolja a tulajdonosi opciókat." } } diff --git a/src/_locales/id/messages.json b/src/_locales/id/messages.json index c217e2e61f..577b2dbf29 100644 --- a/src/_locales/id/messages.json +++ b/src/_locales/id/messages.json @@ -606,9 +606,15 @@ "message": "PERINGATAN", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Konfirmasi Ekspor Vault" + }, "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." }, + "encExportWarningDesc": { + "message": "Ekspor ini mengenkripsi data Anda menggunakan kunci enkripsi akun Anda. Jika Anda pernah merotasi kunci enkripsi akun Anda, Anda harus mengekspor lagi karena Anda tidak akan dapat mendekripsi file ekspor ini." + }, "exportMasterPassword": { "message": "Masukkan sandi utama Anda untuk mengekspor data brankas Anda." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Brankas Anda terkunci. Verifikasi kode PIN Anda untuk melanjutkan." }, + "unlockWithBiometrics": { + "message": "Buka kunci dengan biometrik" + }, + "awaitDesktop": { + "message": "Menunggu konfirmasi dari desktop" + }, + "awaitDesktopDesc": { + "message": "Harap konfirmasi menggunakan biometrik di aplikasi Bitwarden Desktop untuk mengaktifkan biometrik untuk browser." + }, "lockWithMasterPassOnRestart": { "message": "Kunci dengan kata sandi utama saat browser dihidupkan ulang" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Kebijakan Privasi" + }, + "hintEqualsPassword": { + "message": "Petunjuk kata sandi Anda tidak boleh sama dengan kata sandi Anda." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Verifikasi sinkronisasi desktop" + }, + "desktopIntegrationVerificationText": { + "message": "Harap verifikasi bahwa aplikasi desktop menunjukkan sidik jari ini:" + }, + "desktopIntegrationDisabledTitle": { + "message": "Integrasi browser tidak diaktifkan" + }, + "desktopIntegrationDisabledDesc": { + "message": "Integrasi browser tidak diaktifkan di aplikasi Bitwarden Desktop. Harap aktifkan di pengaturan dalam aplikasi desktop." + }, + "startDesktopTitle": { + "message": "Jalankan aplikasi Bitwarden Desktop" + }, + "startDesktopDesc": { + "message": "Aplikasi Bitwarden Desktop harus dijalankan sebelum fungsi ini dapat digunakan." + }, + "errorEnableBiometricTitle": { + "message": "Tidak dapat mengaktifkan biometrik" + }, + "errorEnableBiometricDesc": { + "message": "Tindakan dibatalkan oleh aplikasi desktop" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Aplikasi desktop membatalkan saluran komunikasi aman. Silakan coba lagi operasi ini" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Komunikasi desktop terputus" + }, + "nativeMessagingWrongUserDesc": { + "message": "Aplikasi desktop masuk ke akun yang berbeda. Harap pastikan kedua aplikasi masuk ke akun yang sama." + }, + "nativeMessagingWrongUserTitle": { + "message": "Akun tidak cocok" + }, + "biometricsNotEnabledTitle": { + "message": "Biometrik tidak diaktifkan" + }, + "biometricsNotEnabledDesc": { + "message": "Biometrik browser mengharuskan biometrik desktop diaktifkan di pengaturan terlebih dahulu." + }, + "biometricsNotSupportedTitle": { + "message": "Biometrik tidak didukung" + }, + "biometricsNotSupportedDesc": { + "message": "Biometrik browser tidak didukung di perangkat ini." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Karena Kebijakan Perusahaan, Anda dilarang menyimpan item ke lemari besi pribadi Anda. Ubah opsi Kepemilikan ke organisasi dan pilih dari Koleksi yang tersedia." + }, + "personalOwnershipPolicyInEffect": { + "message": "Kebijakan organisasi memengaruhi opsi kepemilikan Anda." } } diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json index 4d4afbd962..4d540c7b27 100644 --- a/src/_locales/it/messages.json +++ b/src/_locales/it/messages.json @@ -501,7 +501,7 @@ "message": "Sei sicuro di voler eliminare questo elemento?" }, "deletedItem": { - "message": "Elemento eliminato" + "message": "Elemento spostato nel cestino" }, "overwritePassword": { "message": "Sovrascrivi password" @@ -606,9 +606,15 @@ "message": "ATTENZIONE", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Conferma esportazione della Cassaforte" + }, "exportWarningDesc": { "message": "Questa esportazione contiene i dati del tuo portachiavi in un formato non criptato. Non salvare o inviare il file esportato su canali non protetti (come la posta elettronica). Eliminalo immediatamente dopo aver finito di usarlo." }, + "encExportWarningDesc": { + "message": "Questa esportazione cifra i tuoi dati utilizzando la chiave di crittografia del tuo account. Se cambi la chiave di crittografia del tuo account, non sarai più in grado di decifrare il file esportato e sarà necessario eseguire nuovo export." + }, "exportMasterPassword": { "message": "Inserisci la tua password principale per esportare i dati della tua cassaforte." }, @@ -895,7 +901,7 @@ "message": "Genera e copia una nuova password casuale negli appunti." }, "commandLockVaultDesc": { - "message": "Blocca il portachiavi" + "message": "Blocca la cassaforte" }, "privateModeMessage": { "message": "Purtroppo questa finestra non è disponibile nella modalità anonima per questo browser." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Il tuo portachiavi è bloccato. Inserisci il tuo codice PIN per continuare." }, + "unlockWithBiometrics": { + "message": "Sblocca utilizzando l'autenticazione biometrica" + }, + "awaitDesktop": { + "message": "In attesa di conferma dal desktop" + }, + "awaitDesktopDesc": { + "message": "Si prega di confermare utilizzando l'autenticazione biometrica nell'applicazione Bitwarden Desktop per abilitare l'autenticazione biometrica per il browser." + }, "lockWithMasterPassOnRestart": { "message": "Blocca con la password principale al riavvio del browser" }, @@ -1263,7 +1278,7 @@ "message": "Clona" }, "passwordGeneratorPolicyInEffect": { - "message": "Una o più politiche dell'organizzazione stanno influenzando le impostazioni del tuo generatore." + "message": "Una o più policy dell'organizzazione controllano le impostazioni del tuo generatore." }, "vaultTimeoutAction": { "message": "Azione Timeout Portachiavi" @@ -1358,7 +1373,7 @@ "message": "La tua nuova password principale non soddisfa i requisiti di sicurezza." }, "acceptPolicies": { - "message": "Selezionando questa casella accetti quanto segue:" + "message": "Selezionando la casella accetti quanto segue:" }, "acceptPoliciesError": { "message": "I Termini di Servizio e l'Informativa sulla Privacy non sono stati accettati." @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Informativa sulla privacy" + }, + "hintEqualsPassword": { + "message": "Il suggerimento password non può essere uguale alla password." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Verifica sincronizzazione desktop" + }, + "desktopIntegrationVerificationText": { + "message": "Verifica che l'applicazione desktop mostri questa impronta digitale: " + }, + "desktopIntegrationDisabledTitle": { + "message": "L'integrazione del browser non è abilitata" + }, + "desktopIntegrationDisabledDesc": { + "message": "L'integrazione del browser non è abilitata nell'applicazione Bitwarden Desktop. Si prega di attivarla nelle impostazioni all'interno dell'applicazione desktop." + }, + "startDesktopTitle": { + "message": "Avvia l'applicazione desktop Bitwarden" + }, + "startDesktopDesc": { + "message": "L'applicazione Bitwarden Desktop deve essere avviata prima che questa funzione possa essere utilizzata." + }, + "errorEnableBiometricTitle": { + "message": "Impossibile abilitare l'autenticazione biometrica" + }, + "errorEnableBiometricDesc": { + "message": "L'azione è stata annullata dall'applicazione desktop" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "L'applicazione desktop ha invalidato il canale di comunicazione sicuro. Ritenta l'operazione" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Comunicazione desktop interrotta" + }, + "nativeMessagingWrongUserDesc": { + "message": "L'applicazione desktop è collegata a un account diverso. Assicurarsi che entrambe le applicazioni siano collegate allo stesso account." + }, + "nativeMessagingWrongUserTitle": { + "message": "Account non corrispondente" + }, + "biometricsNotEnabledTitle": { + "message": "Autenticazione biometrica non abilitata" + }, + "biometricsNotEnabledDesc": { + "message": "L'autenticazione biometrica del browser richiede che l'autenticazione biometrica del desktop sia prima abilitata nelle impostazioni." + }, + "biometricsNotSupportedTitle": { + "message": "Autenticazione biometrica non supportata" + }, + "biometricsNotSupportedDesc": { + "message": "L'autenticazione biometrica del browser non è supportata su questo dispositivo." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Permesso non concesso" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Senza l'autorizzazione per comunicare con l'applicazione Bitwarden Desktop non è possibile fornire l'autenticazione biometrica nell'estensione del browser.\nRiprova di nuovo." + }, + "personalOwnershipSubmitError": { + "message": "A causa di una policy aziendale, non è possibile salvare elementi nella tua cassaforte personale. Cambia l'opzione proprietà in un'organizzazione e scegli tra le raccolte disponibili." + }, + "personalOwnershipPolicyInEffect": { + "message": "Una policy dell'organizzazione controlla le opzioni di proprietà." } } diff --git a/src/_locales/ja/messages.json b/src/_locales/ja/messages.json index fe1167ce09..003e346ce6 100644 --- a/src/_locales/ja/messages.json +++ b/src/_locales/ja/messages.json @@ -606,9 +606,15 @@ "message": "警告", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "保管庫のエクスポートの確認" + }, "exportWarningDesc": { "message": "このエクスポートデータは暗号化されていない形式の保管庫データを含んでいます。メールなどのセキュリティ保護されていない方法で共有したり保管したりしないでください。使用した後はすぐに削除してください。" }, + "encExportWarningDesc": { + "message": "このエクスポートは、アカウントの暗号化キーを使用してデータを暗号化します。 暗号化キーをローテーションした場合は、このエクスポートファイルを復号することはできなくなるので、もう一度エクスポートする必要があります。" + }, "exportMasterPassword": { "message": "保管庫のデータをエクスポートするにはマスターパスワードを入力してください。" }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "保管庫がロックされています。PIN コードで認証してください。" }, + "unlockWithBiometrics": { + "message": "生体認証でロック解除" + }, + "awaitDesktop": { + "message": "デスクトップからの確認待ち" + }, + "awaitDesktopDesc": { + "message": "ブラウザの生体認証を有効にするには、Bitwarden デスクトップアプリの生体認証を使用してください。" + }, "lockWithMasterPassOnRestart": { "message": "ブラウザー再起動時にマスターパスワードでロック" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "プライバシーポリシー" + }, + "hintEqualsPassword": { + "message": "パスワードのヒントをパスワードと同じにすることはできません。" + }, + "ok": { + "message": "OK" + }, + "desktopSyncVerificationTitle": { + "message": "デスクトップ同期の検証" + }, + "desktopIntegrationVerificationText": { + "message": "デスクトップアプリにこの指紋が表示されていることを確認してください: " + }, + "desktopIntegrationDisabledTitle": { + "message": "ブラウザ統合が有効になっていません" + }, + "desktopIntegrationDisabledDesc": { + "message": "Bitwarden デスクトップアプリでブラウザ統合が有効になっていません。デスクトップアプリの設定で有効にしてください。" + }, + "startDesktopTitle": { + "message": "Bitwarden デスクトップアプリを起動" + }, + "startDesktopDesc": { + "message": "この機能を使用するには、Bitwarden デスクトップアプリを起動してください。" + }, + "errorEnableBiometricTitle": { + "message": "生体認証を有効にできません" + }, + "errorEnableBiometricDesc": { + "message": "デスクトップアプリによってアクションがキャンセルされました" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "デスクトップアプリが安全な通信チャネルを無効にしました。操作をやり直してください。" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "デスクトップ通信が中断されました" + }, + "nativeMessagingWrongUserDesc": { + "message": "デスクトップアプリは別のアカウントにログインしています。両方のアプリが同じアカウントにログインしているか確認してください。" + }, + "nativeMessagingWrongUserTitle": { + "message": "アカウントが一致しません" + }, + "biometricsNotEnabledTitle": { + "message": "生体認証が有効になっていません" + }, + "biometricsNotEnabledDesc": { + "message": "ブラウザ生体認証を利用するには、まず設定でデスクトップ生体認証を有効にする必要があります。" + }, + "biometricsNotSupportedTitle": { + "message": "生体認証に対応していません" + }, + "biometricsNotSupportedDesc": { + "message": "このデバイスではブラウザの生体認証に対応していません。" + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "組織のポリシーにより、個人の保管庫へのアイテムの保存が制限されています。 所有権を組織に変更し、利用可能なコレクションから選択してください。" + }, + "personalOwnershipPolicyInEffect": { + "message": "組織のポリシーが所有者のオプションに影響を与えています。" } } diff --git a/src/_locales/ko/messages.json b/src/_locales/ko/messages.json index fd3f82df6d..83d8a1f935 100644 --- a/src/_locales/ko/messages.json +++ b/src/_locales/ko/messages.json @@ -498,7 +498,7 @@ "message": "항목 편집함" }, "deleteItemConfirmation": { - "message": "정말 이 항목을 삭제하시겠습니까?" + "message": "정말로 휴지통으로 이동시킬까요?" }, "deletedItem": { "message": "항목 삭제함" @@ -580,7 +580,7 @@ "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { - "message": "자동 완성같은 작업을 수행할 때 로그인에 대해 URI 일치 감지가 처리되는 기본 방법을 선택하십시오." + "message": "자동 완성 등의 작업에서 각 로그인 항목의 URI 일치 감지를 처리할 기본 방법을 선택하세요." }, "theme": { "message": "테마" @@ -606,9 +606,15 @@ "message": "경고", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "보관함 내보내기 확인" + }, "exportWarningDesc": { "message": "내보내기는 보관함 데이터가 암호화되지 않은 형식으로 포함됩니다. 내보낸 파일을 안전하지 않은 채널(예: 이메일)을 통해 저장하거나 보내지 마십시오. 사용이 끝난 후에는 즉시 삭제하십시오." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "보관함 데이터를 내보내려면 마스터 비밀번호를 입력하세요." }, @@ -895,7 +901,7 @@ "message": "새 무작위 비밀번호를 만들고 클립보드에 복사합니다." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "보관함 잠그기" }, "privateModeMessage": { "message": "죄송합니다. 이 브라우저에서는 시크릿 창에서 이 창을 사용할 수 없습니다." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "보관함이 잠겨 있습니다. PIN 코드를 입력하여 계속하세요." }, + "unlockWithBiometrics": { + "message": "생체 인식을 사용하여 잠금 해제" + }, + "awaitDesktop": { + "message": "데스크톱으로부터의 확인을 대기 중" + }, + "awaitDesktopDesc": { + "message": "Please confirm using biometrics in the Bitwarden Desktop application to enable biometrics for browser." + }, "lockWithMasterPassOnRestart": { "message": "브라우저 다시 시작 시 마스터 비밀번호로 잠금" }, @@ -1358,15 +1373,81 @@ "message": "새 마스터 비밀번호가 정책 요구 사항을 따르지 않습니다." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "이 박스를 체크하면 다음에 동의하는 것으로 간주됩니다:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "서비스 약관 및 개인 정보 보호 정책을 확인하지 않았습니다." }, "termsOfService": { - "message": "Terms of Service" + "message": "서비스 약관" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "개인 정보 보호 정책" + }, + "hintEqualsPassword": { + "message": "비밀번호 힌트는 비밀번호와 같을 수 없습니다." + }, + "ok": { + "message": "확인" + }, + "desktopSyncVerificationTitle": { + "message": "Desktop sync verification" + }, + "desktopIntegrationVerificationText": { + "message": "Please verify that the desktop application shows this fingerprint: " + }, + "desktopIntegrationDisabledTitle": { + "message": "브라우저와 연결이 활성화되지 않았습니다" + }, + "desktopIntegrationDisabledDesc": { + "message": "브라우저와 연결이 Bitwarden 데스크톱 앱에서 활성화되지 않았습니다. 데스크톱 앱의 설정에서 브라우저와 연결을 활성화해주세요." + }, + "startDesktopTitle": { + "message": "Start the Bitwarden Desktop application" + }, + "startDesktopDesc": { + "message": "이 기능을 사용하기 위해서는 Bitwarden 데스크톱 앱이 먼저 실행되어 있어야 합니다." + }, + "errorEnableBiometricTitle": { + "message": "생체 인식을 활성화할 수 없음" + }, + "errorEnableBiometricDesc": { + "message": "데스크톱 앱에서 작업이 취소되었습니다" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Desktop application invalidated the secure communication channel. Please retry this operation" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Desktop communication interrupted" + }, + "nativeMessagingWrongUserDesc": { + "message": "데스크톱 앱에 다른 계정으로 로그인된 상태입니다. 두 앱에 같은 계정으로 로그인되어 있는지 확인해주세요." + }, + "nativeMessagingWrongUserTitle": { + "message": "계정이 일치하지 않음" + }, + "biometricsNotEnabledTitle": { + "message": "생체 인식이 활성화되지 않음" + }, + "biometricsNotEnabledDesc": { + "message": "브라우저에서 생체 인식을 사용하기 위해서는 설정에서 데스크톱 생체 인식을 먼저 활성화해야 합니다." + }, + "biometricsNotSupportedTitle": { + "message": "생체 인식이 지원되지 않음" + }, + "biometricsNotSupportedDesc": { + "message": "이 기기에서는 생체 인식이 지원되지 않습니다." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "엔터프라이즈 정책으로 인해 개인 보관함에 항목을 저장할 수 없습니다. 조직에서 소유권 설정을 변경한 다음, 사용 가능한 컬렉션 중에서 선택해주세요." + }, + "personalOwnershipPolicyInEffect": { + "message": "조직의 정책이 소유권 설정에 영향을 미치고 있습니다." } } diff --git a/src/_locales/lv/messages.json b/src/_locales/lv/messages.json index f1be962e47..bb7a1f7898 100644 --- a/src/_locales/lv/messages.json +++ b/src/_locales/lv/messages.json @@ -606,9 +606,15 @@ "message": "UZMANĪBU", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Šis eksports satur jūsu datus nešifrētā formātā. Eksportēto failu nevajadzētu saglabāt vai sūtīt izmantojot nedrošus kanālus (piemēram E-pastu). Izdzēsiet to līdzko esiet beidzis to izmantot." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Ievadiet savu galveno paroli lai eksportētu sava seifa datus." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Jūsu seifs ir slēgts. Ievadiet savu PIN kodu lai turpinātu." }, + "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": "Aizslēgt ar galveno paroli pēc pārlūka atsāknēšanas" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/ml/messages.json b/src/_locales/ml/messages.json index 71b8487d4c..89ca2891af 100644 --- a/src/_locales/ml/messages.json +++ b/src/_locales/ml/messages.json @@ -606,9 +606,15 @@ "message": "മുന്നറിയിപ്പ്", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "ഈ എക്‌സ്‌പോർട്ടിൽ എൻക്രിപ്റ്റ് ചെയ്യാത്ത ഫോർമാറ്റിൽ നിങ്ങളുടെ വാൾട് ഡാറ്റ അടങ്ങിയിരിക്കുന്നു. എക്‌സ്‌പോർട് ചെയ്ത ഫയൽ സുരക്ഷിതമല്ലാത്ത ചാനലുകളിൽ (ഇമെയിൽ പോലുള്ളവ) നിങ്ങൾ സംഭരിക്കുകയോ അയയ്ക്കുകയോ ചെയ്യരുത്. നിങ്ങൾ ഇത് ഉപയോഗിച്ചുകഴിഞ്ഞാലുടൻ അത് മായ്ച്ചുകളയണം." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "നിങ്ങളുടെ വാൾട് ഡാറ്റ എക്‌സ്‌പോർട്ടുചെയ്യാൻ പ്രാഥമിക പാസ്‌വേഡ് നൽകുക." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "നിങ്ങളുടെ വാൾട് പൂട്ടിയിരിക്കുന്നു. തുടരാൻ പിൻ കോഡ് സ്ഥിരീകരിക്കുക." }, + "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": "ബ്രൌസർ പുനരാരംഭത്തിൽ പ്രാഥമിക പാസ്‌വേഡ് ഉപയോഗിച്ച് ലോക്ക് ചെയ്യുക" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "സ്വകാര്യതാനയം" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/nb/messages.json b/src/_locales/nb/messages.json index ef91e42ec9..17fa03525f 100644 --- a/src/_locales/nb/messages.json +++ b/src/_locales/nb/messages.json @@ -17,10 +17,10 @@ "message": "Opprett en konto" }, "login": { - "message": "Logg på" + "message": "Logg inn" }, "enterpriseSingleSignOn": { - "message": "Enterprise Single Sign-On" + "message": "Bedriftsinnlogging (SSO)" }, "cancel": { "message": "Lukk" @@ -104,7 +104,7 @@ "message": "Legg til en innlogging" }, "addItem": { - "message": "Legg til et objekt" + "message": "Legg til en gjenstand" }, "passwordHint": { "message": "Passordhint" @@ -139,7 +139,7 @@ "message": "2-trinnsinnlogging" }, "logOut": { - "message": "Logg av" + "message": "Logg ut" }, "about": { "message": "Om" @@ -194,7 +194,7 @@ "message": "Bitwarden netthvelv" }, "importItems": { - "message": "Importer objekter" + "message": "Importer gjenstander" }, "select": { "message": "Velg" @@ -231,7 +231,7 @@ "message": "Minste antall spesialtegn" }, "avoidAmbChar": { - "message": "Unngå tegn som kan forveksles" + "message": "Unngå tvetydige tegn" }, "searchVault": { "message": "Søk i hvelvet" @@ -246,7 +246,7 @@ "message": "Det er ingen gjenstander å liste opp." }, "itemInformation": { - "message": "Objektinformasjon" + "message": "Gjenstandsinformasjon" }, "username": { "message": "Brukernavn" @@ -306,7 +306,7 @@ "message": "Verifiser hovedpassordet" }, "yourVaultIsLocked": { - "message": "Hvelvet ditt er låst. Kontroller superpassordet ditt for å fortsette." + "message": "Hvelvet ditt er låst. Kontroller hovedpassordet ditt for å fortsette." }, "unlock": { "message": "Lås opp" @@ -498,7 +498,7 @@ "message": "Redigerte gjenstanden" }, "deleteItemConfirmation": { - "message": "Er du sikker på at du vil slette denne gjenstanden?" + "message": "Er du sikker på at du vil slette dette objektet?" }, "deletedItem": { "message": "Slettet objektet" @@ -606,9 +606,15 @@ "message": "ADVARSEL", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Eksporten inneholder dine hvelvdataer i et ukryptert format. Du burde ikke lagre eller sende den eksporterte filen over usikre tjenester (f.eks. E-post). Slett det umiddelbart etter at du er ferdig med å bruke dem." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Skriv inn ditt superpassord for å eksportere dine hvelvdataer." }, @@ -895,7 +901,7 @@ "message": "Generer og kopier et nytt tilfeldig passord til utklippstavlen." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Lås hvelvet" }, "privateModeMessage": { "message": "Dessverre er dette vinduet ikke tilgjengelig i privat modus for denne nettleseren." @@ -1233,7 +1239,7 @@ "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." }, "unlockWithPin": { - "message": "Lås opp med PIN" + "message": "Lås opp med PIN-kode" }, "setYourPinCode": { "message": "Angi PIN-koden din for å låse opp Bitwarden. PIN-innstillingene tilbakestilles hvis du logger deg helt ut av programmet." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Hvelvet ditt er låst. Kontroller PIN-koden din for å fortsette." }, + "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": "Lås med hovedpassordet når du starter nettleseren på nytt" }, @@ -1304,22 +1319,22 @@ "message": "Bekreftelse på handling ved tidsavbrudd" }, "autoFillAndSave": { - "message": "Auto-fill and Save" + "message": "Autofyll og lagre" }, "autoFillSuccessAndSavedUri": { - "message": "Auto-filled Item and Saved URI" + "message": "Autoutfylt element og lagret URI" }, "autoFillSuccess": { - "message": "Auto-filled Item" + "message": "Autoutfylt gjenstand" }, "setMasterPassword": { - "message": "Set Master Password" + "message": "Angi hovedpassord" }, "masterPasswordPolicyInEffect": { - "message": "One or more organization policies require your master password to meet the following requirements:" + "message": "Ett eller flere av organisasjonens vilkår krever at hovedpassordet oppfyller følgende krav:" }, "policyInEffectMinComplexity": { - "message": "Minimum complexity score of $SCORE$", + "message": "Minimumspoengsum for kompleksistet er $SCORE$", "placeholders": { "score": { "content": "$1", @@ -1328,7 +1343,7 @@ } }, "policyInEffectMinLength": { - "message": "Minimum length of $LENGTH$", + "message": "Minimumslengde på $LENGTH$", "placeholders": { "length": { "content": "$1", @@ -1337,16 +1352,16 @@ } }, "policyInEffectUppercase": { - "message": "Contain one or more uppercase characters" + "message": "Inneholde én eller flere store bokstaver" }, "policyInEffectLowercase": { - "message": "Contain one or more lowercase characters" + "message": "Inneholde én eller flere små bokstaver" }, "policyInEffectNumbers": { - "message": "Contain one or more numbers" + "message": "Inneholde ett eller flere tall" }, "policyInEffectSpecial": { - "message": "Contain one or more of the following special characters $CHARS$", + "message": "Inneholde ett eller flere av følgende spesialtegn $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -1355,18 +1370,84 @@ } }, "masterPasswordPolicyRequirementsNotMet": { - "message": "Your new master password does not meet the policy requirements." + "message": "Det nye hovedpassordet ditt oppfyller ikke vilkårene." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Ved å merke av denne boksen sier du deg enig i følgende:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Vilkårene for bruk og personvernerklæring er ikke akseptert." }, "termsOfService": { - "message": "Terms of Service" + "message": "Vilkår for bruk" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Personvernerklæring" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json index 03194a40a1..984ed2a19f 100644 --- a/src/_locales/nl/messages.json +++ b/src/_locales/nl/messages.json @@ -312,7 +312,7 @@ "message": "Ontgrendelen" }, "loggedInAsOn": { - "message": "Ingelogd als $EMAIL$ op $HOSTNAME$.", + "message": "Aangemeld als $EMAIL$ op $HOSTNAME$.", "placeholders": { "email": { "content": "$1", @@ -606,9 +606,15 @@ "message": "WAARSCHUWING", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Kluisexport bevestigen" + }, "exportWarningDesc": { "message": "Deze export bevat jouw kluisgegevens in een niet-versleutelde opmaak. Je moet het geëxporteerde bestand niet opslaan of verzenden over onbeveiligde kanalen (zoals e-mail). Verwijder het exportbestand direct na gebruik." }, + "encExportWarningDesc": { + "message": "Deze export versleutelt je gegevens met de encryptiesleutel van je account. Als je je encryptiesleutel verandert moet je opnieuw exporteren, omdat je deze export dan niet meer kunt ontcijferen." + }, "exportMasterPassword": { "message": "Voer je hoofdwachtwoord in om de kluisgegevens te exporteren." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Je kluis is vergrendeld. Voer je PIN-code in om door te gaan." }, + "unlockWithBiometrics": { + "message": "Biometrisch ontgrendelen" + }, + "awaitDesktop": { + "message": "Wacht op bevestiging van de desktop" + }, + "awaitDesktopDesc": { + "message": "Bevestig het gebruik van biometrie in de Bitwarden-desktopapplicatie om biometrie voor de browser in te schakelen." + }, "lockWithMasterPassOnRestart": { "message": "Vergrendelen met hoofdwachtwoord bij herstart browser" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Privacybeleid" + }, + "hintEqualsPassword": { + "message": "Je wachtwoordhint moet anders zijn dan je wachtwoord." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Desktopsynchronisatieverificatie" + }, + "desktopIntegrationVerificationText": { + "message": "Controleer of de desktopapplicatie deze vingerafdruk weergeeft: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Browserintegratie is niet ingeschakeld" + }, + "desktopIntegrationDisabledDesc": { + "message": "Browserintegratie is niet ingeschakeld in de Bitwarden-desktopapplicatie. Schakel deze optie in de instellingen binnen de desktop-applicatie in." + }, + "startDesktopTitle": { + "message": "Bitwarden-desktopapplicatie opstarten" + }, + "startDesktopDesc": { + "message": "Je moet de Bitwarden-desktopapplicatie starten om deze functie te gebruiken." + }, + "errorEnableBiometricTitle": { + "message": "Kon biometrie niet inschakelen" + }, + "errorEnableBiometricDesc": { + "message": "Actie is geannuleerd door de desktopapplicatie" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "De desktopapplicatie heeft het beveiligde communicatiekanaal ongeldig verklaard. Probeer het opnieuw" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Desktopcommunicatie onderbroken" + }, + "nativeMessagingWrongUserDesc": { + "message": "De desktopapplicatie is aangemeld bij een ander account. Zorg ervoor dat beide applicaties op hetzelfde account zijn aangemeld." + }, + "nativeMessagingWrongUserTitle": { + "message": "Accounts komt niet overeen" + }, + "biometricsNotEnabledTitle": { + "message": "Biometrie niet ingeschakeld" + }, + "biometricsNotEnabledDesc": { + "message": "Voor browserbiometrie moet je eerst desktopbiometrie inschakelen in de instellingen." + }, + "biometricsNotSupportedTitle": { + "message": "Biometrie niet ondersteund" + }, + "biometricsNotSupportedDesc": { + "message": "Dit apparaat ondersteunt geen browserbiometrie." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Toestemming niet verleend" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Zonder toestemming om te communiceren met de Bitwarden Desktop-applicatie, kunnen we biometrisch inloggen in de browserextensie niet leveren. Probeer het opnieuw." + }, + "personalOwnershipSubmitError": { + "message": "Wegens bedrijfsbeleid mag je geen wachtwoorden opslaan in je persoonlijke kluis. Verander het eigenaarschap naar een organisatie en kies uit een van de beschikbare collecties." + }, + "personalOwnershipPolicyInEffect": { + "message": "Een organisatiebeleid heeft invloed op je eigendomsopties." } } diff --git a/src/_locales/pl/messages.json b/src/_locales/pl/messages.json index 2bd9e4aa47..7c16a89c45 100644 --- a/src/_locales/pl/messages.json +++ b/src/_locales/pl/messages.json @@ -606,9 +606,15 @@ "message": "UWAGA", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Potwierdź eksportowanie sejfu" + }, "exportWarningDesc": { "message": "Plik zawiera dane sejfu w niezaszyfrowanym formacie. Nie powinieneś go przechowywać, ani przesyłać poprzez niezabezpieczone kanały (takie jak poczta e-mail). Skasuj go natychmiast po użyciu." }, + "encExportWarningDesc": { + "message": "Dane eksportu zostaną zaszyfrowane za pomocą klucza szyfrowania konta. Jeśli kiedykolwiek zmienisz ten klucz, wyeksportuj dane ponownie, ponieważ nie będziesz w stanie odszyfrować tego pliku." + }, "exportMasterPassword": { "message": "Wpisz hasło główne, aby wyeksportować dane z sejfu." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Sejf jest zablokowany. Wpisz kod PIN, aby kontynuować." }, + "unlockWithBiometrics": { + "message": "Odblokuj danymi biometrycznymi" + }, + "awaitDesktop": { + "message": "Oczekiwanie na potwierdzenie z aplikacji desktopowej" + }, + "awaitDesktopDesc": { + "message": "Włącz dane biometryczne w aplikacji desktopowej Bitwarden, aby włączyć tę samą funkcję w przeglądarce." + }, "lockWithMasterPassOnRestart": { "message": "Zablokuj hasłem głównym po uruchomieniu przeglądarki" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Polityka prywatności" + }, + "hintEqualsPassword": { + "message": "Podpowiedź do hasła nie może być taka sama jak hasło." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Weryfikacja synchronizacji z aplikacją desktopową" + }, + "desktopIntegrationVerificationText": { + "message": "Zweryfikuj aplikację desktopową z wyświetlonym identyfikatorem: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Połączenie z przeglądarką jest wyłączone" + }, + "desktopIntegrationDisabledDesc": { + "message": "Połączenie z przeglądarką jest wyłączone. Włącz funkcję w ustawieniach aplikacji desktopowej Bitwarden." + }, + "startDesktopTitle": { + "message": "Uruchom aplikację desktopową Bitwarden" + }, + "startDesktopDesc": { + "message": "Aplikacja desktopowa Bitwarden musi zostać uruchomiona przed użyciem tej funkcji." + }, + "errorEnableBiometricTitle": { + "message": "Nie można włączyć danych biometrycznych" + }, + "errorEnableBiometricDesc": { + "message": "Operacja została anulowana przez aplikację desktopową" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Aplikacja desktopowa unieważniła bezpieczny kanał komunikacji. Spróbuj ponownie wykonać tę operację" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Komunikacja z aplikacją desktopową została przerwana" + }, + "nativeMessagingWrongUserDesc": { + "message": "W aplikacji desktopowej jesteś zalogowany na inne konto. Upewnij się, że w obu aplikacjach jesteś zalogowany na te same konto." + }, + "nativeMessagingWrongUserTitle": { + "message": "Konto jest niezgodne" + }, + "biometricsNotEnabledTitle": { + "message": "Dane biometryczne są wyłączone" + }, + "biometricsNotEnabledDesc": { + "message": "Aby włączyć dane biometryczne w przeglądarce, musisz włączyć tę samą funkcję w ustawianiach aplikacji desktopowej." + }, + "biometricsNotSupportedTitle": { + "message": "Dane biometryczne nie są obsługiwane" + }, + "biometricsNotSupportedDesc": { + "message": "Dane biometryczne przeglądarki nie są obsługiwane na tym urządzenie." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Uprawnienie nie zostało przyznane" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Bez uprawnienia do komunikowania się z aplikacją desktopową Bitwarden nie możemy dostarczyć obsługi danych biometrycznych w rozszerzeniu przeglądarki. Spróbuj ponownie." + }, + "personalOwnershipSubmitError": { + "message": "Ze względu na zasadę przedsiębiorstwa nie możesz zapisywać elementów w osobistym sejfie. Zmień właściciela elementu na organizację i wybierz jedną z dostępnych kolekcji." + }, + "personalOwnershipPolicyInEffect": { + "message": "Zasada organizacji ma wpływ na opcję własności elementów." } } diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json index 4124dd4143..43b3fbaf0c 100644 --- a/src/_locales/pt_BR/messages.json +++ b/src/_locales/pt_BR/messages.json @@ -20,7 +20,7 @@ "message": "Iniciar Sessão" }, "enterpriseSingleSignOn": { - "message": "Início de sessão empresarial" + "message": "Iniciar Sessão Empresarial Única" }, "cancel": { "message": "Cancelar" @@ -498,10 +498,10 @@ "message": "Item editado" }, "deleteItemConfirmation": { - "message": "Você tem certeza que deseja excluir este item?" + "message": "Tem certeza de que pretende apagar este item?" }, "deletedItem": { - "message": "Item excluído" + "message": "Enviar item para lixeira" }, "overwritePassword": { "message": "Sobrescrever Senha" @@ -606,9 +606,15 @@ "message": "AVISO", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirmar Exportação do Cofre" + }, "exportWarningDesc": { "message": "Esta exportação contém os dados do seu cofre em um formato não criptografado. Você não deve armazenar ou enviar o arquivo exportado por canais inseguros (como e-mail). Exclua o arquivo imediatamente após terminar de usá-lo." }, + "encExportWarningDesc": { + "message": "Esta exportação criptografa seus dados usando a chave de criptografia da sua conta. Se você rotacionar a chave de criptografia da sua conta, você deve exportar novamente, já que você não será capaz de descriptografar este arquivo de exportação." + }, "exportMasterPassword": { "message": "Insira a sua senha mestra para exportar os dados do seu cofre." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "O seu cofre está bloqueado. Verifique o seu PIN para continuar." }, + "unlockWithBiometrics": { + "message": "Desbloquear com a biometria" + }, + "awaitDesktop": { + "message": "Aguardando confirmação do desktop" + }, + "awaitDesktopDesc": { + "message": "Por favor, confirme o uso de dados biométricos no aplicativo Bitwarden Desktop para habilitar os dados biométricos para o navegador." + }, "lockWithMasterPassOnRestart": { "message": "Bloquear com senha mestra ao reiniciar o navegador" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Política de Privacidade" + }, + "hintEqualsPassword": { + "message": "Sua dica de senha senha não pode ser a mesma que a sua senha." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Verificação de sincronização do Desktop" + }, + "desktopIntegrationVerificationText": { + "message": "Por favor, verifique se o aplicativo desktop mostra esta impressão digital: " + }, + "desktopIntegrationDisabledTitle": { + "message": "A integração com o navegador não está ativada" + }, + "desktopIntegrationDisabledDesc": { + "message": "A integração com o navegador não está habilitada no aplicativo Bitwarden Desktop. Por favor, habilite-a nas configurações do aplicativo desktop." + }, + "startDesktopTitle": { + "message": "Iniciar o aplicativo Bitwarden Desktop" + }, + "startDesktopDesc": { + "message": "O aplicativo Bitwarden Desktop precisa ser iniciado antes que esta função possa ser usada." + }, + "errorEnableBiometricTitle": { + "message": "Não foi possível ativar os dados biométricos" + }, + "errorEnableBiometricDesc": { + "message": "Ação foi cancelada pelo desktop" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "O aplicativo desktop invalidou o canal de comunicação seguro. Por favor, tente esta operação novamente" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Comunicação com o desktop interrompida" + }, + "nativeMessagingWrongUserDesc": { + "message": "O aplicativo de desktop está conectado em uma conta diferente. Por favor, certifique-se de que ambos os aplicativos estejam conectados na mesma conta." + }, + "nativeMessagingWrongUserTitle": { + "message": "A conta não confere" + }, + "biometricsNotEnabledTitle": { + "message": "Biometria não habilitada" + }, + "biometricsNotEnabledDesc": { + "message": "A biometria com o navegador requer que a biometria de desktop seja ativada nas configurações primeiro." + }, + "biometricsNotSupportedTitle": { + "message": "Biometria não suportada" + }, + "biometricsNotSupportedDesc": { + "message": "A biometria com o navegador não é suportada neste dispositivo." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Devido a uma Política Empresarial, você está restrito de salvar itens para seu cofre pessoal. Altere a opção de Propriedade para uma organização e escolha entre as Coleções disponíveis." + }, + "personalOwnershipPolicyInEffect": { + "message": "Uma política de organização está afetando suas opções de propriedade." } } diff --git a/src/_locales/pt_PT/messages.json b/src/_locales/pt_PT/messages.json index c2ca6e11f3..d6ba0ef652 100644 --- a/src/_locales/pt_PT/messages.json +++ b/src/_locales/pt_PT/messages.json @@ -498,7 +498,7 @@ "message": "Item editado" }, "deleteItemConfirmation": { - "message": "Tem a certeza de que pretende eliminar este item?" + "message": "Tem a certeza de que pretende apagar este item?" }, "deletedItem": { "message": "Item enviado para o lixo" @@ -606,9 +606,15 @@ "message": "AVISO", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Esta exportação contém os seus dados do cofre num formato desencriptado. Não deve armazenar ou enviar o ficheiro exportado através de canais inseguros (como email). Apague-a imediatamente após a utilizar." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Introduza a sua palavra-passe mestra para exportar os dados do seu cofre." }, @@ -895,7 +901,7 @@ "message": "Gerar e copiar uma nova palavra-passe aleatória para a área de transferência" }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Bloquear o cofre" }, "privateModeMessage": { "message": "Infelizmente esta janela não está disponível no modo privado para este navegador." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "O seu cofre está bloqueado. Verifique o seu PIN para continuar." }, + "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": "Bloquear com palavra-passe mestra quando reiniciar o navegador" }, @@ -1361,12 +1376,78 @@ "message": "Ao marcar esta caixa concorda com o seguinte:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Os Termos de Serviço e a Política de Privacidade não foram aceites." }, "termsOfService": { "message": "Termos de serviço" }, "privacyPolicy": { "message": "Política de privacidade" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/ro/messages.json b/src/_locales/ro/messages.json index 868aedcf90..7c8acac2f7 100644 --- a/src/_locales/ro/messages.json +++ b/src/_locales/ro/messages.json @@ -11,7 +11,7 @@ "description": "Extension description" }, "loginOrCreateNewAccount": { - "message": "Autentificați-vă sau creați un cont nou pentru a vă accesa seiful dvs. securizat." + "message": "Autentificați-vă sau creați un cont nou pentru a accesa seiful dvs. securizat." }, "createAccount": { "message": "Creare cont" @@ -20,7 +20,7 @@ "message": "Autentificare" }, "enterpriseSingleSignOn": { - "message": "Identificare unică antrepriză (SSO)" + "message": "Conectare unică organizație (SSO)" }, "cancel": { "message": "Anulare" @@ -35,22 +35,22 @@ "message": "Adresă de e-mail" }, "masterPass": { - "message": "Parola principală" + "message": "Parolă principală" }, "masterPassDesc": { - "message": "Parola principală este parola pe care o utilizați pentru a accesa seiful dvs. Este foarte important să nu uitați această parolă. Nu există nici o modalitate de a recupera parola în cazul în care ați uitat-o." + "message": "Parola principală este parola pe care o utilizați pentru a vă accesa seiful. Este foarte important să nu uitați această parolă. Nu există nicio modalitate de a recupera parola în cazul în care ați uitat-o." }, "masterPassHintDesc": { - "message": "Un indiciu pentru parola principală vă poate ajuta să v-o reamintiți dacă ați uitat-o." + "message": "Un indiciu pentru parola principală vă poate ajuta să v-o reamintiți dacă o uitați." }, "reTypeMasterPass": { - "message": "Reintroduceți parola principală" + "message": "Reintroducere parolă principală" }, "masterPassHint": { "message": "Indiciu pentru parola principală (opțional)" }, "tab": { - "message": "Pagină" + "message": "Filă" }, "myVault": { "message": "Seiful meu" @@ -62,7 +62,7 @@ "message": "Setări" }, "currentTab": { - "message": "Pagina curentă" + "message": "Fila curentă" }, "copyPassword": { "message": "Copiere parolă" @@ -83,7 +83,7 @@ "message": "Copiere cod de securitate" }, "autoFill": { - "message": "Completare automată" + "message": "Auto-completare" }, "generatePasswordCopied": { "message": "Generare parolă (s-a copiat)" @@ -98,7 +98,7 @@ "message": "Seiful este deconectat." }, "autoFillInfo": { - "message": "Nu sunt disponibile autentificări pentru completarea automată în pagina curentă." + "message": "Nu sunt disponibile autentificări pentru auto-completare în fila curentă a browserului." }, "addLogin": { "message": "Adăugare autentificare" @@ -110,10 +110,10 @@ "message": "Indiciu parolă" }, "enterEmailToGetHint": { - "message": "Introduceți adresa de e-mail a contului dvs. pentru a primi indiciul parolei principale." + "message": "Adresa de e-mail a contului pentru primirea indiciului parolei principale." }, "getMasterPasswordHint": { - "message": "Obțineți indiciul parolei principale" + "message": "Obținere indiciu parolă principală" }, "continue": { "message": "Continuare" @@ -132,11 +132,11 @@ "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": "Fraza amprentă a contului", + "message": "Fraza amprentă a contului dvs.", "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 doi pași" + "message": "Autentificare în două etape" }, "logOut": { "message": "Deconectare" @@ -166,7 +166,7 @@ "message": "Dosare" }, "noFolders": { - "message": "Nu există dosare de afișat." + "message": "Nu există niciun dosar de afișat." }, "helpFeedback": { "message": "Ajutor și feedback" @@ -175,7 +175,7 @@ "message": "Sincronizare" }, "syncVaultNow": { - "message": "Sincronizați seiful imediat" + "message": "Sincronizare seif acum" }, "lastSync": { "message": "Ultima sincronizare:" @@ -188,10 +188,10 @@ "description": "Short for 'Password Generator'." }, "passGenInfo": { - "message": "Generează automat parole puternice, unice pentru datele de conectare." + "message": "Generează automat parole unice și puternice pentru autentificările dvs." }, "bitWebVault": { - "message": "Seif bitwarden Web" + "message": "Seif web Bitwarden" }, "importItems": { "message": "Import elemente" @@ -212,44 +212,44 @@ "message": "Lungime" }, "numWords": { - "message": "Number of Words" + "message": "Număr de cuvinte" }, "wordSeparator": { - "message": "Word Separator" + "message": "Separator de cuvinte" }, "capitalize": { - "message": "Majuscule", + "message": "Se folosesc majuscule inițiale", "description": "Make the first letter of a work uppercase." }, "includeNumber": { - "message": "Include număr" + "message": "Se includ cifre" }, "minNumbers": { - "message": "Număr minim de caractere" + "message": "Minimum de cifre" }, "minSpecial": { - "message": "Număr minim de caractere speciale" + "message": "Minim de caractere speciale" }, "avoidAmbChar": { - "message": "Evitare caractere ambigue" + "message": "Se evită caracterele ambigue" }, "searchVault": { - "message": "Căutaţi în seif" + "message": "Căutare în seif" }, "edit": { "message": "Editare" }, "view": { - "message": "Vizualizare" + "message": "Afișare" }, "noItemsInList": { - "message": "Nu există niciun element de afișat." + "message": "Nu există niciun articol de afișat." }, "itemInformation": { "message": "Informații de autentificare" }, "username": { - "message": "Nume de utilizator" + "message": "Nume utilizator" }, "password": { "message": "Parolă" @@ -276,13 +276,13 @@ "message": "Ștergere articol" }, "viewItem": { - "message": "Vizualizare articol" + "message": "Afișare articol" }, "launch": { "message": "Lansare" }, "website": { - "message": "Site web" + "message": "Sait web" }, "toggleVisibility": { "message": "Comutare vizibilitate" @@ -300,16 +300,16 @@ "message": "Vă rugăm să luați în considerare să ne ajutați cu o recenzie bună!" }, "browserNotSupportClipboard": { - "message": "Browserul dvs. web nu acceptă copierea ușoară în clipboard. Copiați manual." + "message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual." }, "verifyMasterPassword": { "message": "Verificare parolă principală" }, "yourVaultIsLocked": { - "message": "Seiful dvs. este blocat. Verificaţi parola principală pentru a continua." + "message": "Seiful dvs. este blocat. Verificați parola principală pentru a continua." }, "unlock": { - "message": "Deblochează" + "message": "Deblocare" }, "loggedInAsOn": { "message": "Autentificat ca $EMAIL$ în $HOSTNAME$.", @@ -325,10 +325,10 @@ } }, "invalidMasterPassword": { - "message": "Parola principală este incorectă" + "message": "Parolă principală incorectă" }, "vaultTimeout": { - "message": "Expirarea seifului" + "message": "Expirare seif" }, "lockNow": { "message": "Blocare imediată" @@ -367,7 +367,7 @@ "message": "4 ore" }, "onLocked": { - "message": "La blocarea computerului" + "message": "La blocarea dispozitivului" }, "onRestart": { "message": "La repornirea browserului" @@ -382,31 +382,31 @@ "message": "S-a produs o eroare" }, "emailRequired": { - "message": "Adresa de e-mail este necesară." + "message": "Este necesară adresa de e-mail." }, "invalidEmail": { - "message": "Adresa de email greșită." + "message": "Adresă de e-mail greșită." }, "masterPassRequired": { "message": "Este necesară parola principală." }, "masterPassLength": { - "message": "Parola principală trebuie să fie de cel puțin 8 caractere." + "message": "Parola principală trebuie să conțină minimum 8 caractere." }, "masterPassDoesntMatch": { - "message": "Confirmarea parolei principale nu se potrivește." + "message": "Parola principală și confirmarea ei nu coincid!" }, "newAccountCreated": { - "message": "Contul a fost creat! Acum vă puteţi autentifica." + "message": "Noul dvs. cont a fost creat! Acum vă puteți autentifica." }, "masterPassSent": { "message": "V-am trimis un e-mail cu indiciul parolei principale." }, "verificationCodeRequired": { - "message": "Codul de verificare este necesar." + "message": "Este necesar codul de verificare." }, "valueCopied": { - "message": " s-a copiat", + "message": " $VALUE$ s-a copiat", "description": "Value has been copied to the clipboard.", "placeholders": { "value": { @@ -416,7 +416,7 @@ } }, "autofillError": { - "message": "Nu se pot completa automat datele de autentificare selectate în această pagină. În schimb, puteți copia și lipi numele de utilizator și/sau parola." + "message": "Nu se pot auto-completa datele de conectare pentru această pagină. În schimb, puteți copia și lipi aceste date." }, "loggedOut": { "message": "Deconectat" @@ -425,7 +425,7 @@ "message": "Sesiunea de autentificare a expirat." }, "logOutConfirmation": { - "message": "Sunteți sigur că doriți să vă deconectați?" + "message": "Sigur doriți să vă deconectați?" }, "yes": { "message": "Da" @@ -434,10 +434,10 @@ "message": "Nu" }, "unexpectedError": { - "message": "A apărut o eroare neașteptată." + "message": "A survenit o eroare neașteptată." }, "nameRequired": { - "message": "Numele este obligatoriu." + "message": "Numele utilizator este obligatoriu." }, "addedFolder": { "message": "Dosar adăugat" @@ -446,25 +446,25 @@ "message": "Schimbare parolă principală" }, "changeMasterPasswordConfirmation": { - "message": "Puteţi modifica parola principală pe site-ul web bitwarden.com. Doriţi să vizitaţi site-ul acum?" + "message": "Puteți modifica parola principală în seiful web bitwarden.com. Doriți să vizitați saitul acum?" }, "twoStepLoginConfirmation": { - "message": "Autentificarea în două etape face ca contul dvs. să fie mai sigur, solicitând să introduceți un cod de securitate dintr-o aplicație de autentificare ori de câte ori vă conectați. Autentificarea în două etape poate fi activată în seiful web bitwarden.com. Doriți să vizitați site-ul acum?" + "message": "Autentificarea în două etape întărește siguranța contului dvs. prin solicitarea unei confirmări de autentificare cu un alt dispozitiv, cum ar fi: o cheie de securitate, o aplicație de autentificare, un SMS, un apel telefonic sau un e-mail. Autentificarea în două etape poate fi activată în seiful web bitwarden.com. Doriți să vizitați saitul acum?" }, "editedFolder": { "message": "Dosar editat" }, "deleteFolderConfirmation": { - "message": "Sunteți sigur că vreți să ștergeți dosarul?" + "message": "Sigur doriți să ștergeți dosarul?" }, "deletedFolder": { - "message": "Dosar şters" + "message": "Dosar șters" }, "gettingStartedTutorial": { - "message": "Noțiuni de bază" + "message": "Tutorial introductiv" }, "gettingStartedTutorialVideo": { - "message": "Urmăriți introducerea noastră pentru a începe să învățați cum să beneficiați cât mai mult de extensia browserului." + "message": "Urmăriți tutorialul nostru pentru a afla cum să beneficiați cât mai mult de această extensie a browserului." }, "syncingComplete": { "message": "Sincronizare completă" @@ -473,7 +473,7 @@ "message": "Sincronizare eșuată" }, "passwordCopied": { - "message": "Parolă copiată" + "message": "Parola s-a copiat" }, "uri": { "message": "URI" @@ -492,56 +492,56 @@ "message": "URI nou" }, "addedItem": { - "message": "Element adăugat" + "message": "Articol adăugat" }, "editedItem": { - "message": "Element editat" + "message": "Articol editat" }, "deleteItemConfirmation": { - "message": "Sigur ștergeți acest articol?" + "message": "Sigur doriți să trimiteți în coșul de reciclare?" }, "deletedItem": { - "message": "Element șters" + "message": "Articolul a fost trimis în coșul de reciclare" }, "overwritePassword": { "message": "Modificare parolă" }, "overwritePasswordConfirmation": { - "message": "Sunteţi sigur că doriţi să suprascrieţi parola curentă?" + "message": "Sigur doriți să modificați parola curentă?" }, "searchFolder": { - "message": "Căutare dosar" + "message": "Căutare în dosar" }, "searchCollection": { - "message": "Căutare colecție" + "message": "Căutare în colecție" }, "searchType": { - "message": "Scrieți ca să căutați" + "message": "Căutare în tipuri" }, "noneFolder": { - "message": "Niciun dosar", + "message": "Fără dosar", "description": "This is the folder for uncategorized items" }, "disableAddLoginNotification": { - "message": "Dezactivare \"Notificare de adăugare a datelor de autentificare\"" + "message": "Dezactivare \"Notificare de adăugare a autentificărilor\"" }, "addLoginNotificationDesc": { - "message": "\"Notificarea de adăugare a datelor de autentificare\" vă solicită automat salvarea noilor conturi în seiful dvs. de fiecare dată când vă conectați pentru prima dată cu conturile respective." + "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ă." }, "dontShowCardsCurrentTab": { - "message": "Don't Show Cards on Tab Page" + "message": "Nu se afișează carduri în pagina filei curente" }, "dontShowCardsCurrentTabDesc": { - "message": "Elementele dvs. de tip card din seif sunt listate în pagina 'Tab-ul curent' pentru acces ușor la auto-completare." + "message": "Informațiile de tip card din seiful dvs. sunt afișate în pagina din \"Fila curentă\" pentru acces ușor la auto-completare." }, "dontShowIdentitiesCurrentTab": { - "message": "Don't Show Identities on Tab Page" + "message": "Nu se afișează identități în pagina filei curente" }, "dontShowIdentitiesCurrentTabDesc": { - "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + "message": "Informațiile de tip identitate din seiful dvs. sunt afișate în pagina din \"Fila curentă\" pentru acces ușor la auto-completare." }, "clearClipboard": { - "message": "Goliți Clipboard-ul", + "message": "Golire clipboard", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { @@ -549,38 +549,38 @@ "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { - "message": "Ar trebui ca bitwarden să memoreze această parolă pentru dvs.?" + "message": "Ar trebui ca Bitwarden să memoreze această parolă pentru dvs.?" }, "notificationAddSave": { "message": "Da, salvează acum" }, "notificationNeverSave": { - "message": "Niciodată pentru acest site" + "message": "Niciodată pentru acest sait" }, "disableChangedPasswordNotification": { - "message": "Disable Changed Password Notification" + "message": "Dezactivare notificare de modificare a parolei" }, "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." + "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." }, "notificationChangeDesc": { - "message": "Doriţi să actualizaţi această parolă în Bitwarden?" + "message": "Doriți să actualizați această parolă în Bitwarden?" }, "notificationChangeSave": { - "message": "Yes, Update Now" + "message": "Da, actualizează acum" }, "disableContextMenuItem": { "message": "Dezactivare opțiuni meniu contextual" }, "disableContextMenuItemDesc": { - "message": "Opțiunile meniului contextual oferă acces rapid la generarea de parole și la autentificările pentru site-ul web din fila curentă." + "message": "Opțiunile din meniul contextual oferă acces rapid la generarea de parole și la autentificările pentru saitul web din fila curentă." }, "defaultUriMatchDetection": { "message": "Detectare de potrivire URI implicită", "description": "Default URI match detection for auto-fill." }, "defaultUriMatchDetectionDesc": { - "message": "Alege modul în care se gestionează detectarea de potrivire de URI pentru autentificări la acțiuni precum cea de auto-completare." + "message": "Alege modul implicit de gestionare a detectării de potrivire URI pentru conectări când se efectuează acțiuni precum auto-completarea." }, "theme": { "message": "Temă" @@ -589,49 +589,55 @@ "message": "Schimbă tema de culori a aplicației." }, "dark": { - "message": "Întunecată", + "message": "Întunecat", "description": "Dark color" }, "light": { - "message": "Luminoasă", + "message": "Luminos", "description": "Light color" }, "exportVault": { "message": "Export seif" }, "fileFormat": { - "message": "File Format" + "message": "Format fișier" }, "warning": { "message": "AVERTISMENT", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirmare export seif" + }, "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." + "message": "Acest export conține datele dvs. din seif în format necriptat. Nu ar trebui să stocați sau să trimiteți fișierul pe canale nesecurizate (cum ar fi e-mail). Ștergeți-l imediat după ce nu îl mai folosiți." + }, + "encExportWarningDesc": { + "message": "Acest export criptează datele folosind cheia de criptare a contului. Dacă schimbați vreodată cheia de criptare a contului, ar trebui să o exportați din nou, deoarece nu veți putea decripta acest fișier exportat." }, "exportMasterPassword": { - "message": "Introduceţi parola principală pentru a exporta datele din seif." + "message": "Introduceți parola principală pentru a exporta datele din seif." }, "shared": { - "message": "Partajate" + "message": "Partajat" }, "shareVault": { "message": "Partajare seif" }, "shareVaultConfirmation": { - "message": "Bitwarden vă permite să vă împărtășiți seiful cu alte persoane utilizând un cont pentru organizații. Doriți să vizitați site-ul bitwarden.com pentru a afla mai multe?" + "message": "Bitwarden vă permite să vă partajați seiful cu alte persoane utilizând un cont pentru organizații. Doriți să vizitați saitul bitwarden.com pentru a afla mai multe?" }, "shareItem": { - "message": "Distribuie element" + "message": "Partajare articol" }, "share": { - "message": "Distribuie" + "message": "Partajare" }, "sharedItem": { - "message": "Element distribuit" + "message": "Articol partajat" }, "shareDesc": { - "message": "Choose an organization that you wish to share this item with. Sharing transfers ownership of the item to the organization. You will no longer be the direct owner of this item once it has been shared." + "message": "Alegeți o organizație cu care doriți să partajați acest articol. Partajarea transferă proprietatea asupra articolului către organizație. Nu veți mai fi proprietarul direct al acestuia după ce a fost partajat." }, "learnMore": { "message": "Aflați mai multe" @@ -646,91 +652,91 @@ "message": "Copiere cod de verificare" }, "attachments": { - "message": "Ataşamente" + "message": "Atașamente" }, "deleteAttachment": { "message": "Ștergere atașament" }, "deleteAttachmentConfirmation": { - "message": "Sunteţi sigur că doriţi să ştergeţi acest atașament?" + "message": "Sigur doriți să ștergeți acest atașament?" }, "deletedAttachment": { - "message": "Ataşament şters" + "message": "Atașament șters" }, "newAttachment": { - "message": "Adăugare atașament" + "message": "Adăugare atașament nou" }, "noAttachments": { - "message": "Niciun ataşament." + "message": "Niciun atașament." }, "attachmentSaved": { - "message": "Ataşamentul a fost salvat." + "message": "Atașamentul a fost salvat." }, "file": { - "message": "Fişier" + "message": "Fișier" }, "selectFile": { - "message": "Selectați un fișier." + "message": "Selectare fișier." }, "maxFileSize": { - "message": "Mărimea maximă a fişierului este de 100 MB." + "message": "Mărimea maximă a fișierului este de 100 MB." }, "featureUnavailable": { "message": "Caracteristică indisponibilă" }, "updateKey": { - "message": "Veți putea utiliza această caracteristică după ce veți actualiza cheia de criptare." + "message": "Nu puteți utiliza această caracteristică înainte de a actualiza cheia de criptare." }, "premiumMembership": { "message": "Membru Premium" }, "premiumManage": { - "message": "Gestionare statut" + "message": "Gestionare statut de membru" }, "premiumManageAlert": { - "message": "Puteţi gestiona apartenenţa pe site-ul web bitwarden.com. Doriţi să vizitaţi site-ul acum?" + "message": "Vă puteți gestiona statutul de membru pe saitul web bitwarden.com. Doriți să vizitați saitul acum?" }, "premiumRefresh": { - "message": "Actualizare statut" + "message": "Actualizare statut de membru" }, "premiumNotCurrentMember": { - "message": "Nu sunteţi în prezent un membru premium." + "message": "În prezent nu sunteți un membru Premium." }, "premiumSignUpAndGet": { - "message": "Înscrieţi-vă pentru un abonament premium şi obţineţi:" + "message": "Înscrieți-vă pentru statutul de membru Premium și obțineți:" }, "ppremiumSignUpStorage": { - "message": "1 GB spațiu de stocare a fișierelor criptate." + "message": "1 GB spațiu de stocare criptat pentru atașamente de fișiere." }, "ppremiumSignUpTwoStep": { - "message": "Opțiuni adiţionale de conectare în doi pași, cum ar fi YubiKey, FIDO U2F şi Duo." + "message": "Opțiuni adiționale de conectare în două etape, cum ar fi YubiKey, FIDO U2F și Duo." }, "ppremiumSignUpReports": { - "message": "Igiena parolelor, sănătate cont, și raporturi de breșe de date pentru a vă păstra seiful în siguranță." + "message": "Rapoarte privind igiena parolelor, sănătatea contului și breșele de date pentru a vă păstra seiful în siguranță." }, "ppremiumSignUpTotp": { - "message": "Generatorul codului de verificare TOTP (2FA) pentru autentificările din seif." + "message": "Generator de cod de verificare TOTP (2FA) pentru autentificările din seif." }, "ppremiumSignUpSupport": { - "message": "Suport pentru clienți prioritari." + "message": "Asistență prioritară pentru clienți." }, "ppremiumSignUpFuture": { - "message": "Toate caracteristicile premium viitoare. Mai multe în curând!" + "message": "Toate caracteristicile Premium viitoare. Mai multe în curând!" }, "premiumPurchase": { - "message": "Achiziționați un abonament Premium" + "message": "Achiziționare abonament Premium" }, "premiumPurchaseAlert": { - "message": "Puteţi procura un abonament premium pe site-ul web bitwarden.com. Doriţi să vizitaţi site-ul acum?" + "message": "Puteți achiziționa un abonament premium pe saitul web bitwarden.com. Doriți să vizitați saitul acum?" }, "premiumCurrentMember": { - "message": "Sunteţi un membru premium!" + "message": "Sunteți un membru Premium!" }, "premiumCurrentMemberThanks": { - "message": "Vă mulțumim pentru susținerea bitwarden." + "message": "Vă mulțumim pentru susținerea Bitwarden." }, "premiumPrice": { - "message": "Totul pentru doar %price% / an!", + "message": "Totul pentru doar %price% /an!", "placeholders": { "price": { "content": "$1", @@ -739,25 +745,25 @@ } }, "refreshComplete": { - "message": "Reîmprospătare completă" + "message": "Actualizare completă" }, "disableAutoTotpCopy": { "message": "Dezactivare copiere automată a codului TOTP" }, "disableAutoTotpCopyDesc": { - "message": "Dacă datele dvs. de conectare au o cheie de autentificare atașată, codul de verificare TOTP este copiat automat în clipboard de fiecare dată când efectuați automat completarea datelor de conectare." + "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." }, "premiumRequired": { "message": "Este necesară versiunea Premium" }, "premiumRequiredDesc": { - "message": "Un abonament premium este necesar pentru a utiliza această caracteristică." + "message": "Este necesar statutul de membru Premium pentru a utiliza această caracteristică." }, "enterVerificationCodeApp": { - "message": "Introduceţi codul de verificare din 6 cifre din aplicaţia de autentificare." + "message": "Introducere cod de verificare din 6 cifre din aplicația de autentificare." }, "enterVerificationCodeEmail": { - "message": "Introduceți codul de verificare din 6 cifre, care a fost trimis prin e-mail la", + "message": "Introducere cod de verificare din 6 cifre care a fost trimis prin e-mail la $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -766,7 +772,7 @@ } }, "verificationCodeEmailSent": { - "message": "E-mail de verificare a fost trimis la $EMAIL$.", + "message": "E-mailul de verificare a fost trimis la $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -775,34 +781,34 @@ } }, "rememberMe": { - "message": "Memorizare" + "message": "Memorare autentificare" }, "sendVerificationCodeEmailAgain": { - "message": "Trimitere e-mail cu codul de verificare din nou" + "message": "Retrimitere e-mail cu codul de verificare" }, "useAnotherTwoStepMethod": { - "message": "Utilizaţi o altă metodă de autentificare în două etape" + "message": "Utilizare de metodă diferită de autentificare în două etape" }, "insertYubiKey": { - "message": "Introduceți YubiKey în portul USB al calculatorului, apoi atingeți butonul acestuia." + "message": "Introduceți YubiKey în portul USB al calculatorului apoi apăsați butonul acestuia." }, "insertU2f": { - "message": "Introduceți cheia de securitate în portul USB al computerului. Dacă are un buton, atingeți-l." + "message": "Introduceți cheia de securitate în portul USB al computerului. Dacă are un buton, apăsați-l." }, "loginUnavailable": { - "message": "Autentificare indisponibilă" + "message": "Conectare indisponibilă" }, "noTwoStepProviders": { - "message": "Acest cont are activată autentificarea în două etape, dar niciunul dintre furnizorii configurați pentru aceasta nu este acceptat de acest navigator web." + "message": "Acest cont are activată autentificarea în două etape, dar niciunul dintre furnizorii configurați pentru aceasta nu este acceptat de acest browser web." }, "noTwoStepProviders2": { - "message": "Utilizați un browser web acceptat (cum ar fi Chrome) și/sau adăugați furnizori suplimentari care sunt mai bine susținuți în browserele web (cum ar fi o aplicație de autentificare)." + "message": "Utilizați un browser acceptat (cum ar fi Chrome) și/sau adăugați furnizori suplimentari mai bine susținuți de browserele web (cum ar fi o aplicație de autentificare)." }, "twoStepOptions": { "message": "Opțiuni de autentificare în două etape" }, "recoveryCodeDesc": { - "message": "Ai pierdut accesul la toți furnizorii de autentificare în doi paşi? Utilizați codul de recuperare pentru a dezactiva toți furnizorii de autentificare în doi paşi din contul dvs." + "message": "Ați pierdut accesul la toți furnizorii de autentificare în două etape? Utilizați codul de recuperare pentru a dezactiva toți acești furnizori din contul dvs." }, "recoveryCodeTitle": { "message": "Cod de recuperare" @@ -811,25 +817,25 @@ "message": "Aplicație de autentificare" }, "authenticatorAppDesc": { - "message": "Utilizaţi o aplicaţie de autentificare (cum ar fi Authy sau Google Authenticator) pentru a genera codurile de verificare bazate de timp.", + "message": "Utilizați o aplicație de autentificare (cum ar fi Authy sau Google Authenticator) pentru a genera codurile de verificare bazate pe timp.", "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." }, "yubiKeyTitle": { "message": "Cheie de securitate YubiKey OTP" }, "yubiKeyDesc": { - "message": "Utilizați un YubiKey pentru a accesa contul dvs. Funcționează cu dispozitivele YubiKey 4, 4 Nano, 4C și NEO." + "message": "Utilizați YubiKey pentru a accesa contul dvs. Funcționează cu dispozitivele YubiKey 4, 4 Nano, 4C și NEO." }, "duoDesc": { - "message": "Verificați cu Duo Security utilizând aplicația Duo Mobile, SMS, apel sau cheia de securitate U2F.", + "message": "Verificați cu Duo Security utilizând aplicația Duo Mobile, SMS, apel telefonic sau cheia de securitate U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "Verificați cu Duo Security pentru organizaţia dvs. utilizând aplicația Duo Mobile, SMS, apel telefonic sau cheia de securitate U2F.", + "message": "Verificați cu Duo Security pentru organizația dvs. utilizând aplicația Duo Mobile, SMS, apel telefonic sau cheia de securitate U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "u2fDesc": { - "message": "Utilizați orice cheie de securitate activată FIDO U2F pentru a accesa contul dvs." + "message": "Utilizați orice cheie de securitate FIDO U2F activată pentru a accesa contul dvs." }, "u2fTitle": { "message": "Cheie de securitate FIDO U2F" @@ -844,7 +850,7 @@ "message": "Mediu de găzduire personal" }, "selfHostedEnvironmentFooter": { - "message": "Specificați URL-ul implementări locale, personale a bitwarden." + "message": "Specificați URL-ul de bază al implementări Bitwarden găzduită local." }, "customEnvironment": { "message": "Mediu personalizat" @@ -859,22 +865,22 @@ "message": "URL server API" }, "webVaultUrl": { - "message": "URL seif web" + "message": "URL server seif Web" }, "identityUrl": { "message": "URL server de identificare" }, "notificationsUrl": { - "message": "Notifications Server URL" + "message": "URL server de notificări" }, "iconsUrl": { - "message": "URL server de pictograme" + "message": "URL server de iconuri" }, "environmentSaved": { - "message": "URL-urile mediului bitwarden au fost salvate." + "message": "URL-urile mediului au fost salvate." }, "enableAutoFillOnPageLoad": { - "message": "Activare completare automată la încărcarea paginii" + "message": "Activare auto-completare la încărcarea paginii" }, "enableAutoFillOnPageLoadDesc": { "message": "Dacă este detectat un formular de autentificare, se efectuează automat o completare a acestuia la încărcarea paginii." @@ -883,25 +889,25 @@ "message": "În acest moment, aceasta funcțiune este experimentală. O puteți folosi pe propria răspundere." }, "commandOpenPopup": { - "message": "Deschide seiful pop-up" + "message": "Deschidere seif pop-up" }, "commandOpenSidebar": { - "message": "Deschide seiful în bara laterală" + "message": "Deschidere seif în bara laterală" }, "commandAutofillDesc": { - "message": "Completare automată a ultimelor date de autentificare utilizate pentru saitul web curent." + "message": "Auto-completare a ultimei autentificări utilizate pe saitul web curent" }, "commandGeneratePasswordDesc": { - "message": "Generare parolă aleatorie și copiere în clipboard." + "message": "Generare parolă aleatorie și copiere în clipboard" }, "commandLockVaultDesc": { - "message": "Blochează seiful" + "message": "Blocare seif" }, "privateModeMessage": { - "message": "Din păcate această fereastră nu este disponibilă în modul de navigare privat pentru acest navigator." + "message": "Din păcate, această fereastră nu este disponibilă în modul privat pentru acest browser." }, "customFields": { - "message": "Câmpuri personalizate" + "message": "Câmpuri particularizate" }, "copyValue": { "message": "Copiere valoare" @@ -910,31 +916,31 @@ "message": "Valoare" }, "newCustomField": { - "message": "Câmp nou" + "message": "Câmp nou particularizat" }, "dragToSort": { - "message": "Trageţi pentru sortare" + "message": "Tragere pentru sortare" }, "cfTypeText": { "message": "Text" }, "cfTypeHidden": { - "message": "Text cu caractere ascunse" + "message": "Ascuns" }, "cfTypeBoolean": { - "message": "Bifat/Nebifat, Da/Nu" + "message": "Valoare logică" }, "popup2faCloseMessage": { - "message": "Dacă dați clic pentru a verifica e-mailul în afara acestei casete, aceasta se va închide. Doriți să afișați aceste informații într-o filă nouă, astfel încât aceasta să nu se închidă?" + "message": "Dând clic în afara ferestrei pop-up pentru a vă verifica e-mailul pentru codul de verificare, aceasta se va închide. Doriți să deschideți acest pop-up într-o fereastră nouă, astfel încât aceasta să nu se închidă?" }, "popupU2fCloseMessage": { - "message": "Acest browser nu poate prelucra cererile U2F în această fereastră pop-up. Doriți să deschideți această fereastră într-o fereastră nouă, astfel încât să vă puteți autentifica folosind U2F?" + "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 pictograme" + "message": "Dezactivare iconuri sait" }, "disableFaviconDesc": { - "message": "Pictogramele oferă o imagine recognoscibilă alături de fiecare element de conectare din seiful dvs." + "message": "Iconurile saiturilor oferă o imagine identificabilă lângă fiecare element de conectare din seiful dvs." }, "cardholderName": { "message": "Deținător card" @@ -991,7 +997,7 @@ "message": "decembrie" }, "securityCode": { - "message": "Cod CVV2/CVC2" + "message": "Cod de securitate (CVV/CVC)" }, "ex": { "message": "ex." @@ -1027,10 +1033,10 @@ "message": "Companie" }, "ssn": { - "message": "CNP" + "message": "Cod Numeric Personal" }, "passportNumber": { - "message": "Număr CI/pașaport" + "message": "Număr CI / Pașaport" }, "licenseNumber": { "message": "Număr licență" @@ -1069,13 +1075,13 @@ "message": "Tip" }, "typeLogin": { - "message": "Autentificare" + "message": "Conectare" }, "typeLogins": { - "message": "Autentificări" + "message": "Conectări" }, "typeSecureNote": { - "message": "Mențiune securizată" + "message": "Notă protejată" }, "typeCard": { "message": "Card" @@ -1108,20 +1114,20 @@ "message": "Identități" }, "logins": { - "message": "Date de autentificare" + "message": "Conectări" }, "secureNotes": { - "message": "Notițe securizate" + "message": "Note protejate" }, "clear": { - "message": "Ştergere", + "message": "Ștergere", "description": "To clear something out. example: To clear browser history." }, "checkPassword": { - "message": "Verifică dacă parola a fost dezvăluită." + "message": "Verificați dacă parola a fost dezvăluită." }, "passwordExposed": { - "message": "This password has been exposed in data breaches. You should change it.", + "message": "Această parolă a fost dezvăluită de $VALUE$ ori în breșe de date. Ar trebui să o schimbați.", "placeholders": { "value": { "content": "$1", @@ -1130,7 +1136,7 @@ } }, "passwordSafe": { - "message": "Aceasta parola nu a fost găsită în nicio breșă de date cunoscută. Ar trebui să fie sigură pentru a fi utilizată." + "message": "Aceasta parola nu a fost găsită în nicio breșă de date cunoscută. Ar trebui să fie sigură de utilizat." }, "baseDomain": { "message": "Domeniu de bază" @@ -1150,22 +1156,22 @@ "description": "A programming term, also known as 'RegEx'." }, "matchDetection": { - "message": "Detectare de potriviri", + "message": "Detectare de potrivire", "description": "URI match detection for auto-fill." }, "defaultMatchDetection": { - "message": "Detectarea de potriviri implicite", + "message": "Detectare de potrivire implicită", "description": "Default URI match detection for auto-fill." }, "toggleOptions": { "message": "Activare/dezactivare opțiuni" }, "toggleCurrentUris": { - "message": "Comută URI-urile curente", + "message": "Comutare URI-uri curente", "description": "Toggle the display of the URIs of the currently open tabs in the browser." }, "currentUri": { - "message": "URI-ul actual", + "message": "URI curent", "description": "The URI of one of the current open tabs in the browser." }, "organization": { @@ -1179,30 +1185,30 @@ "message": "Toate elementele" }, "noPasswordsInList": { - "message": "Nu există parole de afișat." + "message": "Nicio parolă de afișat." }, "remove": { - "message": "Ștergeți" + "message": "Ștergere" }, "default": { "message": "Implicit" }, "dateUpdated": { - "message": "Actualizat", + "message": "S-a actualizat", "description": "ex. Date this item was updated" }, "datePasswordUpdated": { - "message": "Password Updated", + "message": "Parola s-a actualizat", "description": "ex. Date this password was updated" }, "neverLockWarning": { - "message": "Sunteți sigur că doriți folosirea opțiunii \"Niciodată\"? Setarea opțiunii de blocare pe \"Niciodată\" salvează cheia de criptare pe dispozitivul dumneavoastră. Dacă folosiți această opțiune ar trebui să vă asigurați că vă păstrați dispozitivul protejat corespunzător." + "message": "Sigur doriți să utilizați opțiunea \"Niciodată\"? Setarea opțiunii de blocare pe \"Niciodată\" vă salvează cheia de criptare pe dispozitiv. Dacă utilizați această opțiune ar trebui să vă asigurați că vă păstrați dispozitivul protejat corespunzător." }, "noOrganizationsList": { - "message": "Nu aparțineti niciunei organizații. Organizațiile vă permit să distribuiți elemente cu alți utilizatori." + "message": "Nu aparțineți niciunei organizații. Organizațiile vă permit să partajați în siguranță articole cu alți utilizatori." }, "noCollectionsInList": { - "message": "Nu există colecții în listă." + "message": "Nu există nicio colecție de afișat." }, "ownership": { "message": "Proprietar" @@ -1223,10 +1229,10 @@ "description": "ex. A weak password. Scale: Weak -> Good -> Strong" }, "weakMasterPassword": { - "message": "Weak Master Password" + "message": "Parolă principală slabă" }, "weakMasterPasswordDesc": { - "message": "Parola principală aleasă este slabă. Ar trebui folosită o parolă (sau o frază de access) principală puternică pentru a vă proteja corespunzător contul Bitwarden. Sunteți sigur că doriți să folosiți această parola principală?" + "message": "Parola principală aleasă este slabă. Ar trebui să folosiți o parolă principală (sau o frază de acces) puternică pentru a vă proteja corespunzător contul Bitwarden. Sigur doriți să folosiți această parolă principală?" }, "pin": { "message": "PIN", @@ -1236,7 +1242,7 @@ "message": "Deblocare cu codul PIN" }, "setYourPinCode": { - "message": "Setați codul PIN de deblocare Bitwarden. Setările codului PIN vor fi resetate dacă vă deconectați vreodată din aplicație." + "message": "Stabiliți codul PIN de deblocare Bitwarden. Setările codului PIN vor fi reinițializate dacă vă deconectați vreodată din aplicație." }, "pinRequired": { "message": "Codul PIN este necesar." @@ -1245,19 +1251,28 @@ "message": "Codul PIN este invalid." }, "verifyPin": { - "message": "Verificaţi codul PIN" + "message": "Verificare cod PIN" }, "yourVaultIsLockedPinCode": { "message": "Seiful dvs. este blocat. Verificați codul PIN pentru a continua." }, + "unlockWithBiometrics": { + "message": "Deblocare folosind biometria" + }, + "awaitDesktop": { + "message": "Se așteaptă confirmarea de la desktop" + }, + "awaitDesktopDesc": { + "message": "Vă rugăm să confirmați utilizarea biometriei în aplicația Bitwarden Desktop pentru a activa biometria pentru browser." + }, "lockWithMasterPassOnRestart": { - "message": "Blocare cu parola principală după ce browserul repornește," + "message": "Blocare cu parola principală la repornirea browserului" }, "selectOneCollection": { - "message": "Este nevoie să alegeți măcar o colecție." + "message": "Trebuie să selectați cel puțin o colecție." }, "cloneItem": { - "message": "Clonează articolul" + "message": "Clonare articol" }, "clone": { "message": "Clonare" @@ -1273,32 +1288,32 @@ "description": "Verb form: to make secure or inaccesible by" }, "trash": { - "message": "Trash", + "message": "Coș de reciclare", "description": "Noun: a special folder to hold deleted items" }, "searchTrash": { - "message": "Căutați în trash" + "message": "Căutare în coșul de reciclare" }, "permanentlyDeleteItem": { - "message": "Șterge permanent elementul" + "message": "Ștergere definitivă a articolului" }, "permanentlyDeleteItemConfirmation": { - "message": "Sigur doriți să ștergeți permanent acest articol?" + "message": "Sigur doriți să ștergeți definitiv acest articol?" }, "permanentlyDeletedItem": { - "message": "Articol șters permanent" + "message": "Articolul a fost șters definitiv" }, "restoreItem": { - "message": "Restabiliți articolul" + "message": "Restabilire articol" }, "restoreItemConfirmation": { - "message": "Sigur doriți să restaurați acest articol?" + "message": "Sigur doriți să restabiliți acest articol?" }, "restoredItem": { - "message": "Articol restaurat" + "message": "Articol restabilit" }, "vaultTimeoutLogOutConfirmation": { - "message": "Deconectarea va elimina accesul la seiful dvs. și necesită autentificare online după perioada de expirare. Sunteți sigur că doriți să utilizați această setare?" + "message": "După expirare, accesul la seiful dvs. va fi restricționat și va fi necesară autentificarea online. Sigur doriți să utilizați această setare?" }, "vaultTimeoutLogOutConfirmationTitle": { "message": "Confirmare acțiune la expirare" @@ -1307,13 +1322,13 @@ "message": "Auto-completare și Salvare" }, "autoFillSuccessAndSavedUri": { - "message": "Articol cu Auto-completare și URl Salvat" + "message": "Articolul s-a completat automat și URl-ul s-a salvat" }, "autoFillSuccess": { - "message": "Articol cu Auto-completare" + "message": "Articolul s-a completat automat" }, "setMasterPassword": { - "message": "Setați parola principală" + "message": "Setare parolă principală" }, "masterPasswordPolicyInEffect": { "message": "Una sau mai multe politici ale organizației necesită ca parola principală să îndeplinească următoarele cerințe:" @@ -1337,16 +1352,16 @@ } }, "policyInEffectUppercase": { - "message": "Conține unul sau mai multe caractere majuscule" + "message": "Unul sau mai multe caractere majuscule" }, "policyInEffectLowercase": { - "message": "Conține unul sau mai multe caractere minuscule" + "message": "Unul sau mai multe caractere minuscule" }, "policyInEffectNumbers": { - "message": "Conține unul sau mai multe numere" + "message": "Una sau mai multe cifre" }, "policyInEffectSpecial": { - "message": "Conține unul sau mai multe din următoarele caractere: $CHARS$", + "message": "Unul sau mai multe din următoarele caractere: $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -1358,15 +1373,81 @@ "message": "Noua dvs. parolă principală nu îndeplinește cerințele politicii." }, "acceptPolicies": { - "message": "Bifând această casetă sunteți de acord cu următoarele:" + "message": "Dacă bifați această casetă sunteți de acord cu următoarele:" }, "acceptPoliciesError": { - "message": "Termenii Serviciului și Politica Intimității nu au fost recunoscute." + "message": "Termenii de utilizare și Politica de confidențialitate nu au fost recunoscute." }, "termsOfService": { - "message": "Termenii Serviciului" + "message": "Termeni de utilizare" }, "privacyPolicy": { - "message": "Politica Intimității" + "message": "Politică de confidențialitate" + }, + "hintEqualsPassword": { + "message": "Indiciul dvs. de parolă nu poate fi același cu parola dvs." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Verificare sincronizare desktop" + }, + "desktopIntegrationVerificationText": { + "message": "Verificați dacă aplicația desktop afișează această amprentă digitală:" + }, + "desktopIntegrationDisabledTitle": { + "message": "Integrarea browserului nu este activată" + }, + "desktopIntegrationDisabledDesc": { + "message": "Integrarea browserului nu este activată în aplicația Bitwarden Desktop. Vă rugăm să o activați în setările din aplicația desktop." + }, + "startDesktopTitle": { + "message": "Porniți aplicația Bitwarden Desktop" + }, + "startDesktopDesc": { + "message": "Aplicația Bitwarden Desktop trebuie pornită înainte de a putea utiliza această funcție." + }, + "errorEnableBiometricTitle": { + "message": "Nu se poate activa biometria" + }, + "errorEnableBiometricDesc": { + "message": "Acțiunea a fost anulată de aplicația desktop" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Aplicația desktop a invalidat canalul de comunicare securizată. Reîncercați această operație" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Comunicare desktop întreruptă" + }, + "nativeMessagingWrongUserDesc": { + "message": "Aplicația desktop este conectată la un alt cont. Vă rugăm să vă asigurați că ambele aplicații sunt înregistrate în același cont." + }, + "nativeMessagingWrongUserTitle": { + "message": "Eroare de cont" + }, + "biometricsNotEnabledTitle": { + "message": "Biometria nu a fost activată" + }, + "biometricsNotEnabledDesc": { + "message": "Biometria browserului necesită activarea mai întâi a biometriei de pe desktop în setări." + }, + "biometricsNotSupportedTitle": { + "message": "Biometria nu este acceptată" + }, + "biometricsNotSupportedDesc": { + "message": "Biometria browserului nu este acceptată pe acest dispozitiv." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Datorită unei politici pentru întreprinderi, vă este restricționată salvarea de elemente în seiful dvs. personal. Schimbați opțiunea de proprietate la o organizație și alegeți dintre colecțiile disponibile." + }, + "personalOwnershipPolicyInEffect": { + "message": "O politică de organizație vă afectează opțiunile de proprietate." } } diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json index 6e28e95b7a..2a550b56aa 100644 --- a/src/_locales/ru/messages.json +++ b/src/_locales/ru/messages.json @@ -498,7 +498,7 @@ "message": "Элемент изменен" }, "deleteItemConfirmation": { - "message": "Вы действительно хотите удалить этот элемент?" + "message": "Вы действительно хотите отправить в корзину?" }, "deletedItem": { "message": "Элемент отправлен в корзину" @@ -606,9 +606,15 @@ "message": "ВНИМАНИЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Подтвердить экспорт хранилища" + }, "exportWarningDesc": { "message": "Экспортируемый файл содержит данные вашего хранилища в незашифрованном формате. Его не следует хранить или отправлять по небезопасным каналам (например, по электронной почте). Удалите его сразу после использования." }, + "encExportWarningDesc": { + "message": "При экспорте данные шифруются с помощью ключа шифрования учетной записи. Если вы когда-либо повернете ключ шифрования учетной записи, вам следует экспортировать данные повторно, поскольку вы не сможете расшифровать этот файл экспорта." + }, "exportMasterPassword": { "message": "Для экспорта данных из хранилища введите мастер-пароль." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Ваше хранилище заблокировано. Для продолжения введите PIN-код." }, + "unlockWithBiometrics": { + "message": "Разблокировать с помощью биометрии" + }, + "awaitDesktop": { + "message": "Ожидание подтверждения с компьютера" + }, + "awaitDesktopDesc": { + "message": "Для включения биометрии в браузере, подтвердите это в приложении Bitwarden для компьютера." + }, "lockWithMasterPassOnRestart": { "message": "Блокировать мастер-паролем при перезапуске браузера" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Политика конфиденциальности" + }, + "hintEqualsPassword": { + "message": "Подсказка для пароля не может совпадать с паролем." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Проверка синхронизации на компьютере" + }, + "desktopIntegrationVerificationText": { + "message": "Пожалуйста, убедитесь, что приложение для компьютера отображает этот отпечаток: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Интеграция с браузером не включена" + }, + "desktopIntegrationDisabledDesc": { + "message": "Интеграция браузера не включена в приложении Bitwarden для компьютера. Пожалуйста, включите ее в настройках приложения для компьютера." + }, + "startDesktopTitle": { + "message": "Запустить приложение Bitwarden для компьютера" + }, + "startDesktopDesc": { + "message": "Перед использованием этой функции необходимо запустить приложение Bitwarden для компьютера." + }, + "errorEnableBiometricTitle": { + "message": "Не удается включить биометрию" + }, + "errorEnableBiometricDesc": { + "message": "Действие было отменено приложением для компьютера" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Приложению для компьютера не удалось создать защищенный канал подключения. Пожалуйста, попробуйте еще раз" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Соединение с приложением для компьютера прервано" + }, + "nativeMessagingWrongUserDesc": { + "message": "Приложение для компьютера авторизовано под другим аккаунтом. Необходимо чтобы оба приложения были авторизованы под одной учетной записью." + }, + "nativeMessagingWrongUserTitle": { + "message": "Несоответствие аккаунта" + }, + "biometricsNotEnabledTitle": { + "message": "Биометрия не включена" + }, + "biometricsNotEnabledDesc": { + "message": "Для активации биометрии в браузере сначала необходимо включить биометрию в приложении для компьютера." + }, + "biometricsNotSupportedTitle": { + "message": "Биометрия не поддерживается" + }, + "biometricsNotSupportedDesc": { + "message": "Биометрия в браузере не поддерживается этом устройстве." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "Разрешение не представлено" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Без разрешения на взаимодействие с Bitwarden для компьютера биометрия в расширении браузера работать не сможет. Попробуйте еще раз." + }, + "personalOwnershipSubmitError": { + "message": "В соответствии с корпоративной политикой вам запрещено сохранять элементы в личном хранилище. Измените владельца на организацию и выберите из доступных Коллекций." + }, + "personalOwnershipPolicyInEffect": { + "message": "Политика организации влияет на ваши варианты владения." } } diff --git a/src/_locales/si/messages.json b/src/_locales/si/messages.json index f0349b00b3..650045089f 100644 --- a/src/_locales/si/messages.json +++ b/src/_locales/si/messages.json @@ -1,6 +1,6 @@ { "appName": { - "message": "Bitwarden" + "message": "බිට්වාඩන්" }, "extName": { "message": "Bitwarden - Free Password Manager", @@ -17,7 +17,7 @@ "message": "ගිණුමක් නිර්මාණය කරන්න" }, "login": { - "message": "Log In" + "message": "පිවිසෙන්න" }, "enterpriseSingleSignOn": { "message": "Enterprise Single Sign-On" @@ -498,7 +498,7 @@ "message": "Edited item" }, "deleteItemConfirmation": { - "message": "Are you sure you want to delete this item?" + "message": "Do you really want to send to the trash?" }, "deletedItem": { "message": "Sent item to trash" @@ -606,9 +606,15 @@ "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." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Enter your master password to export your vault data." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Your vault is locked. Verify your PIN code to continue." }, + "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" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/sk/messages.json b/src/_locales/sk/messages.json index e48eb2eaa3..e4fbf404c9 100644 --- a/src/_locales/sk/messages.json +++ b/src/_locales/sk/messages.json @@ -191,7 +191,7 @@ "message": "Automaticky generovať silné a unikátne heslá k prihlasovacím údajom." }, "bitWebVault": { - "message": "bitwarden webový trezor" + "message": "Webový trezor Bitwarden" }, "importItems": { "message": "Importovať položky" @@ -549,7 +549,7 @@ "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { - "message": "Má si bitwarden zapamätať toto heslo?" + "message": "Má si pre vás Bitwarden zapamätať toto heslo?" }, "notificationAddSave": { "message": "Áno, uložiť teraz" @@ -606,9 +606,15 @@ "message": "UPOZORNENIE", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "Tento export obsahuje vaše dáta v nešifrovanom formáte. Nemali by ste ich ukladať, ani posielať cez nezabezpečené kanály (napr. email). Okamžite ho odstráňte, keď ho prestanete používať." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Zadajte vaše hlavné heslo pre export údajov trezoru." }, @@ -619,7 +625,7 @@ "message": "Zdieľať trezor" }, "shareVaultConfirmation": { - "message": "Bitwarden vám umožňuje zdieľať váš trezor s ostatnými ak používate konto v Organizácii. Chcete navštíviť stránku bitwarden.com a dozvedieť sa viac?" + "message": "Bitwarden vám umožňuje zdieľať váš trezor s ostatnými použitím konta v organizácii. Chcete navštíviť stránku bitwarden.com a dozvedieť sa viac?" }, "shareItem": { "message": "Zdieľať položku" @@ -727,7 +733,7 @@ "message": "Ste prémiovým členom!" }, "premiumCurrentMemberThanks": { - "message": "Ďakujeme, že podporujete bitwarden." + "message": "Ďakujeme, že podporujete Bitwarden." }, "premiumPrice": { "message": "Všetko len za %price% /rok!", @@ -844,7 +850,7 @@ "message": "Sebou hosťované prostredie" }, "selfHostedEnvironmentFooter": { - "message": "Špecifikujte základnú URL lokálne hosťovanej inštalácie bitwarden." + "message": "Zadajte základnú URL adresu lokálne hosťovanej inštalácie Bitwarden." }, "customEnvironment": { "message": "Vlastné prostredie" @@ -1226,7 +1232,7 @@ "message": "Slabé hlavné heslo" }, "weakMasterPasswordDesc": { - "message": "Hlavné heslo ktoré ste zadali je slabé. Mali by ste použiť silné heslo (alebo frázu) aby ste spoľahlivo ochránili váš Bitwarden účet. Naozaj chcete použiť toto heslo?" + "message": "Hlavné heslo, ktoré ste zadali, je slabé. Mali by ste použiť silné heslo (alebo frázu), aby ste spoľahlivo ochránili váš Bitwarden účet. Naozaj chcete použiť toto heslo?" }, "pin": { "message": "PIN", @@ -1236,7 +1242,7 @@ "message": "Odomknúť s PIN" }, "setYourPinCode": { - "message": "Nastaviť kód PIN na odomknutie Bitwarden. Nastavenie PIN sa vynuluje, ak úplne odhlásite z aplikácie." + "message": "Nastaviť kód PIN na odomykanie Bitwardenu. Nastavenie PIN sa vynuluje, ak sa úplne odhlásite z aplikácie." }, "pinRequired": { "message": "Kód PIN je povinný." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Váš trezor je uzamknutý. Overte sa PIN kódom ak chcete pokračovať." }, + "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": "Pri reštarte prehliadača zamknúť s hlavným heslom" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Zásady ochrany osobných údajov" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/sl/messages.json b/src/_locales/sl/messages.json new file mode 100644 index 0000000000..02c4279727 --- /dev/null +++ b/src/_locales/sl/messages.json @@ -0,0 +1,1453 @@ +{ + "appName": { + "message": "Bitwarden" + }, + "extName": { + "message": "Bitwarden - Free Password Manager", + "description": "Extension name" + }, + "extDesc": { + "message": "A secure and free password manager for all of your devices.", + "description": "Extension description" + }, + "loginOrCreateNewAccount": { + "message": "Log in or create a new account to access your secure vault." + }, + "createAccount": { + "message": "Create Account" + }, + "login": { + "message": "Log In" + }, + "enterpriseSingleSignOn": { + "message": "Enterprise Single Sign-On" + }, + "cancel": { + "message": "Cancel" + }, + "close": { + "message": "Close" + }, + "submit": { + "message": "Submit" + }, + "emailAddress": { + "message": "Email Address" + }, + "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)" + }, + "tab": { + "message": "Tab" + }, + "myVault": { + "message": "My Vault" + }, + "tools": { + "message": "Tools" + }, + "settings": { + "message": "Settings" + }, + "currentTab": { + "message": "Current Tab" + }, + "copyPassword": { + "message": "Copy Password" + }, + "copyNote": { + "message": "Copy Note" + }, + "copyUri": { + "message": "Copy URI" + }, + "copyUsername": { + "message": "Copy Username" + }, + "copyNumber": { + "message": "Copy Number" + }, + "copySecurityCode": { + "message": "Copy Security Code" + }, + "autoFill": { + "message": "Auto-fill" + }, + "generatePasswordCopied": { + "message": "Generate Password (copied)" + }, + "noMatchingLogins": { + "message": "No matching logins." + }, + "vaultLocked": { + "message": "Vault is locked." + }, + "vaultLoggedOut": { + "message": "Vault is logged out." + }, + "autoFillInfo": { + "message": "There are no logins available to auto-fill for the current browser tab." + }, + "addLogin": { + "message": "Add a Login" + }, + "addItem": { + "message": "Add Item" + }, + "passwordHint": { + "message": "Password Hint" + }, + "enterEmailToGetHint": { + "message": "Enter your account email address to receive your master password hint." + }, + "getMasterPasswordHint": { + "message": "Get master password hint" + }, + "continue": { + "message": "Continue" + }, + "verificationCode": { + "message": "Verification Code" + }, + "account": { + "message": "Account" + }, + "changeMasterPassword": { + "message": "Change Master Password" + }, + "fingerprintPhrase": { + "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": { + "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." + }, + "twoStepLogin": { + "message": "Two-step Login" + }, + "logOut": { + "message": "Log Out" + }, + "about": { + "message": "About" + }, + "version": { + "message": "Version" + }, + "save": { + "message": "Save" + }, + "addFolder": { + "message": "Add Folder" + }, + "name": { + "message": "Name" + }, + "editFolder": { + "message": "Edit Folder" + }, + "deleteFolder": { + "message": "Delete Folder" + }, + "folders": { + "message": "Folders" + }, + "noFolders": { + "message": "There are no folders to list." + }, + "helpFeedback": { + "message": "Help & Feedback" + }, + "sync": { + "message": "Sync" + }, + "syncVaultNow": { + "message": "Sync Vault Now" + }, + "lastSync": { + "message": "Last Sync:" + }, + "passGen": { + "message": "Password Generator" + }, + "generator": { + "message": "Generator", + "description": "Short for 'Password Generator'." + }, + "passGenInfo": { + "message": "Automatically generate strong, unique passwords for your logins." + }, + "bitWebVault": { + "message": "Bitwarden Web Vault" + }, + "importItems": { + "message": "Import Items" + }, + "select": { + "message": "Select" + }, + "generatePassword": { + "message": "Generate Password" + }, + "regeneratePassword": { + "message": "Regenerate Password" + }, + "options": { + "message": "Options" + }, + "length": { + "message": "Length" + }, + "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" + }, + "minNumbers": { + "message": "Minimum Numbers" + }, + "minSpecial": { + "message": "Minimum Special" + }, + "avoidAmbChar": { + "message": "Avoid Ambiguous Characters" + }, + "searchVault": { + "message": "Search vault" + }, + "edit": { + "message": "Edit" + }, + "view": { + "message": "View" + }, + "noItemsInList": { + "message": "There are no items to list." + }, + "itemInformation": { + "message": "Item Information" + }, + "username": { + "message": "Username" + }, + "password": { + "message": "Password" + }, + "passphrase": { + "message": "Passphrase" + }, + "favorite": { + "message": "Favorite" + }, + "notes": { + "message": "Notes" + }, + "note": { + "message": "Note" + }, + "editItem": { + "message": "Edit Item" + }, + "folder": { + "message": "Folder" + }, + "deleteItem": { + "message": "Delete Item" + }, + "viewItem": { + "message": "View Item" + }, + "launch": { + "message": "Launch" + }, + "website": { + "message": "Website" + }, + "toggleVisibility": { + "message": "Toggle Visibility" + }, + "manage": { + "message": "Manage" + }, + "other": { + "message": "Other" + }, + "rateExtension": { + "message": "Rate the Extension" + }, + "rateExtensionDesc": { + "message": "Please consider helping us out with a good review!" + }, + "browserNotSupportClipboard": { + "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." + }, + "verifyMasterPassword": { + "message": "Verify Master Password" + }, + "yourVaultIsLocked": { + "message": "Your vault is locked. Verify your master password to continue." + }, + "unlock": { + "message": "Unlock" + }, + "loggedInAsOn": { + "message": "Logged in as $EMAIL$ on $HOSTNAME$.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "hostname": { + "content": "$2", + "example": "bitwarden.com" + } + } + }, + "invalidMasterPassword": { + "message": "Invalid master password" + }, + "vaultTimeout": { + "message": "Vault Timeout" + }, + "lockNow": { + "message": "Lock Now" + }, + "immediately": { + "message": "Immediately" + }, + "tenSeconds": { + "message": "10 seconds" + }, + "twentySeconds": { + "message": "20 seconds" + }, + "thirtySeconds": { + "message": "30 seconds" + }, + "oneMinute": { + "message": "1 minute" + }, + "twoMinutes": { + "message": "2 minutes" + }, + "fiveMinutes": { + "message": "5 minutes" + }, + "fifteenMinutes": { + "message": "15 minutes" + }, + "thirtyMinutes": { + "message": "30 minutes" + }, + "oneHour": { + "message": "1 hour" + }, + "fourHours": { + "message": "4 hours" + }, + "onLocked": { + "message": "On System Lock" + }, + "onRestart": { + "message": "On Browser Restart" + }, + "never": { + "message": "Never" + }, + "security": { + "message": "Security" + }, + "errorOccurred": { + "message": "An error has occurred" + }, + "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." + }, + "verificationCodeRequired": { + "message": "Verification code is required." + }, + "valueCopied": { + "message": "$VALUE$ copied", + "description": "Value has been copied to the clipboard.", + "placeholders": { + "value": { + "content": "$1", + "example": "Password" + } + } + }, + "autofillError": { + "message": "Unable to auto-fill the selected item on this page. Copy and paste the information instead." + }, + "loggedOut": { + "message": "Logged out" + }, + "loginExpired": { + "message": "Your login session has expired." + }, + "logOutConfirmation": { + "message": "Are you sure you want to log out?" + }, + "yes": { + "message": "Yes" + }, + "no": { + "message": "No" + }, + "unexpectedError": { + "message": "An unexpected error has occurred." + }, + "nameRequired": { + "message": "Name is required." + }, + "addedFolder": { + "message": "Added folder" + }, + "changeMasterPass": { + "message": "Change Master Password" + }, + "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?" + }, + "searchFolder": { + "message": "Search folder" + }, + "searchCollection": { + "message": "Search collection" + }, + "searchType": { + "message": "Search type" + }, + "noneFolder": { + "message": "No Folder", + "description": "This is the folder for uncategorized items" + }, + "disableAddLoginNotification": { + "message": "Disable Add Login Notification" + }, + "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" + }, + "dontShowCardsCurrentTabDesc": { + "message": "Card items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + }, + "dontShowIdentitiesCurrentTab": { + "message": "Don't Show Identities on Tab Page" + }, + "dontShowIdentitiesCurrentTabDesc": { + "message": "Identity items from your vault are listed on the 'Current Tab' page for easy auto-fill access." + }, + "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": "Yes, Save Now" + }, + "notificationNeverSave": { + "message": "Never for this website" + }, + "disableChangedPasswordNotification": { + "message": "Disable Changed Password Notification" + }, + "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." + }, + "notificationChangeDesc": { + "message": "Do you want to update this password in Bitwarden?" + }, + "notificationChangeSave": { + "message": "Yes, Update Now" + }, + "disableContextMenuItem": { + "message": "Disable Context Menu Options" + }, + "disableContextMenuItemDesc": { + "message": "Context menu options provide quick access to password generation and logins for the website in your current tab." + }, + "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" + }, + "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." + }, + "encExportWarningDesc": { + "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." + }, + "exportMasterPassword": { + "message": "Enter your master password to export your vault data." + }, + "shared": { + "message": "Shared" + }, + "shareVault": { + "message": "Share Your Vault" + }, + "shareVaultConfirmation": { + "message": "Bitwarden allows you to share your vault with others by using an organization account. Would you like to visit the bitwarden.com website to learn more?" + }, + "shareItem": { + "message": "Share Item" + }, + "share": { + "message": "Share" + }, + "sharedItem": { + "message": "Shared Item" + }, + "shareDesc": { + "message": "Choose an organization that you wish to share this item with. Sharing transfers ownership of the item to the organization. You will no longer be the direct owner of this item once it has been shared." + }, + "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 100 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" + }, + "disableAutoTotpCopy": { + "message": "Disable Automatic TOTP Copy" + }, + "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." + }, + "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." + }, + "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." + }, + "u2fDesc": { + "message": "Use any FIDO U2F enabled security key to access your account." + }, + "u2fTitle": { + "message": "FIDO U2F Security Key" + }, + "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": "Enable Auto-fill On Page Load" + }, + "enableAutoFillOnPageLoadDesc": { + "message": "If a login form is detected, automatically perform an auto-fill when the web page loads." + }, + "experimentalFeature": { + "message": "This is currently an experimental feature. Use at your own risk." + }, + "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" + }, + "privateModeMessage": { + "message": "Unfortunately this window is not available in private mode for this browser." + }, + "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" + }, + "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?" + }, + "disableFavicon": { + "message": "Disable Website Icons" + }, + "disableFaviconDesc": { + "message": "Website Icons provide a recognizable image next to each login item in your vault." + }, + "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" + }, + "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" + }, + "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." + }, + "verifyPin": { + "message": "Verify PIN" + }, + "yourVaultIsLockedPinCode": { + "message": "Your vault is locked. Verify your PIN code to continue." + }, + "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 this function 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." + }, + "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." + } +} diff --git a/src/_locales/sr/messages.json b/src/_locales/sr/messages.json index 3da482343d..7be8e1c76f 100644 --- a/src/_locales/sr/messages.json +++ b/src/_locales/sr/messages.json @@ -50,7 +50,7 @@ "message": "Савет Главне Лозинке (опционо)" }, "tab": { - "message": "Картица" + "message": "Језичак" }, "myVault": { "message": "Мој Сеф" @@ -62,7 +62,7 @@ "message": "Подешавања" }, "currentTab": { - "message": "Тренутна картица" + "message": "Тренутни језичак" }, "copyPassword": { "message": "Копирај лозинку" @@ -71,7 +71,7 @@ "message": "Копирај белешку" }, "copyUri": { - "message": "Копирај везу" + "message": "Копирај УРЛ" }, "copyUsername": { "message": "Копирај име" @@ -98,7 +98,7 @@ "message": "Одјављени сте од сефа." }, "autoFillInfo": { - "message": "Нема доступне пријаве за ауто-пуњење за за тренутну картицу прегледача." + "message": "Нема доступне пријаве за ауто-пуњење за тренутни језичак прегледача." }, "addLogin": { "message": "Додај Пријаву" @@ -125,7 +125,7 @@ "message": "Налог" }, "changeMasterPassword": { - "message": "Промени Главну Лозинку" + "message": "Промени главну лозинку" }, "fingerprintPhrase": { "message": "Сигурносна Фраза Сефа", @@ -172,10 +172,10 @@ "message": "Помоћ и подршка" }, "sync": { - "message": "Синхронизуј" + "message": "Синхронизација" }, "syncVaultNow": { - "message": "Синхронизуј сеф одмах" + "message": "Одмах синхронизуј сеф" }, "lastSync": { "message": "Задња синронизација:" @@ -191,10 +191,10 @@ "message": "Аутоматски генеришите јаке, јединствене лозинке за ваше пријаве." }, "bitWebVault": { - "message": "Bitwarden Сеф" + "message": "Bitwarden Интернет Сеф" }, "importItems": { - "message": "Увоз ставка" + "message": "Увоз ставки" }, "select": { "message": "Изабери" @@ -218,7 +218,7 @@ "message": "Одвајач речи" }, "capitalize": { - "message": "Велика слова", + "message": "Прво слово велико", "description": "Make the first letter of a work uppercase." }, "includeNumber": { @@ -234,7 +234,7 @@ "message": "Избегавајте двосмислене знакове" }, "searchVault": { - "message": "Претраћи сеф" + "message": "Претражи сеф" }, "edit": { "message": "Уреди" @@ -246,7 +246,7 @@ "message": "Нама ставке у листи." }, "itemInformation": { - "message": "Ставка Информације" + "message": "Инфо о ставци" }, "username": { "message": "Корисничко име" @@ -255,7 +255,7 @@ "message": "Лозинка" }, "passphrase": { - "message": "Реченица" + "message": "Фраза лозинка" }, "favorite": { "message": "Омиљено" @@ -279,7 +279,7 @@ "message": "Види ставку" }, "launch": { - "message": "Покрени" + "message": "Отвори" }, "website": { "message": "Веб сајт" @@ -288,7 +288,7 @@ "message": "Пребаци видљивост" }, "manage": { - "message": "Управљај" + "message": "Управљати" }, "other": { "message": "Остало" @@ -303,10 +303,10 @@ "message": "Ваш прегледач не подржава једноставно копирање клипборда. Уместо тога копирајте га ручно." }, "verifyMasterPassword": { - "message": "Проверити Главну Лозинку" + "message": "Верификујте Главну Лозинку" }, "yourVaultIsLocked": { - "message": "Сеф је блокиран. Проверити главну лозинку за наставак." + "message": "Сеф је блокиран. Унесите главну лозинку за наставак." }, "unlock": { "message": "Откључај" @@ -443,7 +443,7 @@ "message": "Фасцикла додата" }, "changeMasterPass": { - "message": "Промени Главну Лозинку" + "message": "Промени главну лозинку" }, "changeMasterPasswordConfirmation": { "message": "Можете променити главну лозинку у Вашем сефу на bitwarden.com. Да ли желите да посетите веб страницу сада?" @@ -501,7 +501,7 @@ "message": "Сигурно избрисати ову ставку?" }, "deletedItem": { - "message": "Пошаљи ставку у Ђубре" + "message": "Пошаљи ставку у Отпад" }, "overwritePassword": { "message": "Препиши лозинку" @@ -519,20 +519,20 @@ "message": "Тип претраге" }, "noneFolder": { - "message": "Нема фасцикле", + "message": "Без фасцикле", "description": "This is the folder for uncategorized items" }, "disableAddLoginNotification": { "message": "Онемогући обавештење Додај Пријаву" }, "addLoginNotificationDesc": { - "message": "\"Нотификације Додај Лозинку\" аутоматски тражи да сачувате нове пријаве у сефу кад год се први пут пријавите на њих." + "message": "„Нотификације Додај Лозинку“ аутоматски тражи да сачувате нове пријаве у сефу кад год се први пут пријавите на њих." }, "dontShowCardsCurrentTab": { - "message": "Не приказуј картице на страници" + "message": "Не приказуј кредитне картице на страници" }, "dontShowCardsCurrentTabDesc": { - "message": "Ставке картица из вашег сефа наведене су на страници „Тренутна картица“ ради једноставног приступа аутоматског попуњавања." + "message": "Ставке кредитне картице из вашег сефа наведене су на страници „Тренутна картица“ ради једноставног приступа аутоматског попуњавања." }, "dontShowIdentitiesCurrentTab": { "message": "Не приказуј идентитете на страници" @@ -561,7 +561,7 @@ "message": "Угаси Нотификацију Промењена Лозинка" }, "disableChangedPasswordNotificationDesc": { - "message": "\"Нотификација Промењена Лозинка\" аутоматски тражи да ажурирате лозинку за пријављивање у сефу сваки пут када открије да сте је променили на веб сајту." + "message": "„Нотификација Промењена Лозинка“ аутоматски тражи да ажурирате лозинку за пријављивање у сефу сваки пут када открије да сте је променили на веб сајту." }, "notificationChangeDesc": { "message": "Да се ажурира ова лозинка у Bitwarden?" @@ -589,11 +589,11 @@ "message": "Промени боје апликације" }, "dark": { - "message": "Тамно", + "message": "Тамна", "description": "Dark color" }, "light": { - "message": "Светло", + "message": "Светла", "description": "Light color" }, "exportVault": { @@ -606,9 +606,15 @@ "message": "УПОЗОРЕЊЕ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Потврдите извоз сефа" + }, "exportWarningDesc": { "message": "Овај извоз садржи податке сефа у нешифрираном формату. Не бисте смели да сачувате или шаљете извезену датотеку преко несигурних канала (као што је имејл). Избришите датотеку одмах након што завршите са коришћењем." }, + "encExportWarningDesc": { + "message": "Овај извоз шифрује податке користећи кључ за шифровање вашег налога. Ако икада промените кључ за шифровање свог налога, требало би да поново извезете, јер нећете моћи да дешифрујете овај извоз." + }, "exportMasterPassword": { "message": "Унети главну лозинку за извиз сефа." }, @@ -637,13 +643,13 @@ "message": "Сазнај више" }, "authenticatorKeyTotp": { - "message": "Кључ аутентификације (TOTP)" + "message": "Једнократни код" }, "verificationCodeTotp": { - "message": "Верификациони код (TOTP)" + "message": "Једнократни код" }, "copyVerificationCode": { - "message": "Копирај Верификациони код" + "message": "Копирај верификациони код" }, "attachments": { "message": "Прилози" @@ -694,10 +700,10 @@ "message": "Освежите чланство" }, "premiumNotCurrentMember": { - "message": "Тренутно нисте премиум члан." + "message": "Тренутно нисте премијум члан." }, "premiumSignUpAndGet": { - "message": "Пријавите се за премиум чланство и добијте:" + "message": "Пријавите се за премијум чланство и добијте:" }, "ppremiumSignUpStorage": { "message": "1ГБ шифровано складиште за прилоге." @@ -709,22 +715,22 @@ "message": "Извештаји о хигијени лозинки, здравственом стању налога и кршењу података да бисте заштитили сеф." }, "ppremiumSignUpTotp": { - "message": "Генератор TOTP верификационог кода (2FA) за пријаве из сефа." + "message": "Генератор једнократног кода (2FA) за пријаве из сефа." }, "ppremiumSignUpSupport": { "message": "Приоритетна корисничка подршка." }, "ppremiumSignUpFuture": { - "message": "Све будуће премиум функције. Више ускоро!" + "message": "Све будуће премијум функције. Више долазе ускоро!" }, "premiumPurchase": { "message": "Купити премијум" }, "premiumPurchaseAlert": { - "message": "Можете купити премиум претплату на bitwarden.com. Да ли желите да посетите веб сајт сада?" + "message": "Можете купити премијум претплату на bitwarden.com. Да ли желите да посетите веб сајт сада?" }, "premiumCurrentMember": { - "message": "Ви сте премиум члан!" + "message": "Ви сте премијум члан!" }, "premiumCurrentMemberThanks": { "message": "Хвала Вам за подршку Bitwarden-а." @@ -742,10 +748,10 @@ "message": "Освежавање је завршено" }, "disableAutoTotpCopy": { - "message": "Угаси аутоматско копирање TOTP" + "message": "Угаси аутоматско копирање једнократног кода" }, "disableAutoTotpCopyDesc": { - "message": "Ако је за вашу пријаву приложен аутентификациони кључ, TOTP верификациони код се аутоматски копира у вашем клипборду кад год ауто-попуните пријаву." + "message": "Ако је за вашу пријаву приложен аутентификациони кључ, једнократни код се аутоматски копира у вашем клипборду кад год ауто-попуните пријаву." }, "premiumRequired": { "message": "Потребан Премијум" @@ -1078,7 +1084,7 @@ "message": "Сигурносна белешка" }, "typeCard": { - "message": "Картица" + "message": "Кредитна Картица" }, "typeIdentity": { "message": "Идентитет" @@ -1102,7 +1108,7 @@ "message": "Освежи" }, "cards": { - "message": "Картице" + "message": "Кредитне Картице" }, "identities": { "message": "Идентитети" @@ -1150,7 +1156,7 @@ "description": "A programming term, also known as 'RegEx'." }, "matchDetection": { - "message": "Налажење везе", + "message": "Налажење УРЛ", "description": "URI match detection for auto-fill." }, "defaultMatchDetection": { @@ -1188,7 +1194,7 @@ "message": "Подразумевано" }, "dateUpdated": { - "message": "Ажурирано", + "message": "Промењено", "description": "ex. Date this item was updated" }, "datePasswordUpdated": { @@ -1226,14 +1232,14 @@ "message": "Слаба Главна Лозинка" }, "weakMasterPasswordDesc": { - "message": "Главна лозинка коју сте одабрали је слаба. Требали бисте користити јаку главну лозинку (или приступну фразу) да бисте правилно заштитили свој налог. Да ли сте сигурни да желите да користите ову главну лозинку?" + "message": "Главна лозинка коју сте одабрали је слаба. Требали бисте користити јаку главну лозинку (или фразу лозинке) да бисте правилно заштитили свој налог. Да ли сте сигурни да желите да користите ову главну лозинку?" }, "pin": { "message": "ПИН", "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." }, "unlockWithPin": { - "message": "Деблокирај са ПИН" + "message": "Откључај са ПИН" }, "setYourPinCode": { "message": "Поставите свој ПИН код за откључавање Bitwarden-а. Поставке ПИН-а ће се ресетовати ако се икада потпуно одјавите из апликације." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Сеф је блокиран. Проверити ПИН код за наставак." }, + "unlockWithBiometrics": { + "message": "Откључавајте помоћу биометрије" + }, + "awaitDesktop": { + "message": "Чекање потврде са десктопа" + }, + "awaitDesktopDesc": { + "message": "Потврдити са биометриком у Bitwarden Desktop апликацији да би упалили биометрику у претраживачу." + }, "lockWithMasterPassOnRestart": { "message": "Закључајте са главном лозинком при поновном покретању прегледача" }, @@ -1257,7 +1272,7 @@ "message": "Морате одабрати макар једну колекцију." }, "cloneItem": { - "message": "Цлонирај ставку" + "message": "Клонирај ставку" }, "clone": { "message": "Клонирај" @@ -1273,11 +1288,11 @@ "description": "Verb form: to make secure or inaccesible by" }, "trash": { - "message": "Смеће", + "message": "Отпад", "description": "Noun: a special folder to hold deleted items" }, "searchTrash": { - "message": "Тражи смеће" + "message": "Тражи отпад" }, "permanentlyDeleteItem": { "message": "Трајно избрисати ставку" @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Политика приватности" + }, + "hintEqualsPassword": { + "message": "Ваша помоћ за лозинку не може да буде иста као лозинка." + }, + "ok": { + "message": "У реду" + }, + "desktopSyncVerificationTitle": { + "message": "Провера синх Desktop-а" + }, + "desktopIntegrationVerificationText": { + "message": "Проверите да десктоп апликација показује овај отисак: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Интеграција претраживача није омогућена" + }, + "desktopIntegrationDisabledDesc": { + "message": "Интеграција претраживача није омогућена у Bitwarden Desktop. Омогућите је у подешавања из Bitwarden Desktop апликације." + }, + "startDesktopTitle": { + "message": "Покрени Bitwarden Desktop апликацију" + }, + "startDesktopDesc": { + "message": "Bitwarden Desktop апликација треба да се покрене пре употребе ове функције." + }, + "errorEnableBiometricTitle": { + "message": "Погрешно омогућавање биометрике" + }, + "errorEnableBiometricDesc": { + "message": "Desktop апликација је поништила акцију" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Desktop апликација је онемогућила безбедни комуникациони канал. Поновите ову операцију" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Desktop комуникација прекинута" + }, + "nativeMessagingWrongUserDesc": { + "message": "Desktop апликација је пријављена на други налог. Проверите да су обе апликације са истим налогом." + }, + "nativeMessagingWrongUserTitle": { + "message": "Неподударање налога" + }, + "biometricsNotEnabledTitle": { + "message": "Биометрија није омогућена" + }, + "biometricsNotEnabledDesc": { + "message": "Биометрија прегледача захтева да у поставкама прво буде омогућена биометрија desktop-а." + }, + "biometricsNotSupportedTitle": { + "message": "Биометрија није подржана" + }, + "biometricsNotSupportedDesc": { + "message": "Биометрија прегледача није подржана на овом уређају." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "Због смерница за предузећа, ограничено вам је чување предмета у вашем личном трезору. Промените опцију власништва у организацију и изаберите из доступних колекција." + }, + "personalOwnershipPolicyInEffect": { + "message": "Политика организације утичу на ваше могућности власништва." } } diff --git a/src/_locales/sv/messages.json b/src/_locales/sv/messages.json index 5997d4b801..4077aeb50e 100644 --- a/src/_locales/sv/messages.json +++ b/src/_locales/sv/messages.json @@ -498,7 +498,7 @@ "message": "Ändrade objekt" }, "deleteItemConfirmation": { - "message": "Är du säker på att du vill ta bort detta objekt?" + "message": "Är du säker på att du vill radera detta objekt?" }, "deletedItem": { "message": "Raderade objekt" @@ -606,9 +606,15 @@ "message": "VARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Bekräfta export av valv" + }, "exportWarningDesc": { "message": "Den här exporten innehåller ditt valvs okrypterade data i .csv-format. Du bör inte lagra eller skicka filen över osäkra anslutningar (genom t.ex. mejl). Radera filen efter du är färdig med den." }, + "encExportWarningDesc": { + "message": "Denna export krypterar dina data med kontots krypteringsnyckel. Om du någonsin roterar kontots krypteringsnyckel bör du exportera igen eftersom du inte kommer att kunna dekryptera denna exportfil." + }, "exportMasterPassword": { "message": "Ange ditt huvudlösenord för att exportera ditt valv." }, @@ -895,7 +901,7 @@ "message": "Skapa och kopiera ett nytt slumpmässigt lösenord till urklipp." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Lås valvet" }, "privateModeMessage": { "message": "Det här fönstret är tyvärr inte tillgängligt i privat läge för denna webbläsare." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Valvet är låst. Kontrollera din PIN-kod för att fortsätta." }, + "unlockWithBiometrics": { + "message": "Lås upp med biometri" + }, + "awaitDesktop": { + "message": "Väntar på bekräftelse från skrivbordsprogrammet" + }, + "awaitDesktopDesc": { + "message": "Säkerställ att du använder biometri i Bitwardens skrivbordsprogram för att aktivera biometri för webbläsaren." + }, "lockWithMasterPassOnRestart": { "message": "Lås med huvudlösenordet vid omstart av webbläsaren" }, @@ -1358,15 +1373,81 @@ "message": "Ditt nya huvudlösenord uppfyller inte kraven i policyn." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Genom att markera denna ruta godkänner du följande:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Användarvillkoren och Integritetspolicyn har inte accepterats." }, "termsOfService": { - "message": "Terms of Service" + "message": "Användarvillkor" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Integritetspolicy" + }, + "hintEqualsPassword": { + "message": "Din lösenordsledtråd får inte vara samma som ditt lösenord." + }, + "ok": { + "message": "OK" + }, + "desktopSyncVerificationTitle": { + "message": "Verifiering av synkronisering med skrivbordsprogrammet" + }, + "desktopIntegrationVerificationText": { + "message": "Vänligen bekräfta att skrivbordsprogrammet visar det här fingeravtrycket: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Webbläsarintegration är inte aktiverad" + }, + "desktopIntegrationDisabledDesc": { + "message": "Webbläsarintegration är inte aktiverad i Bitwardens skrivbordsprogram. Aktivera det i inställningarna i skrivbordsprogrammet." + }, + "startDesktopTitle": { + "message": "Starta Bitwardens skrivbordsprogram" + }, + "startDesktopDesc": { + "message": "Bitwardens skrivbordsprogram måste köras innan denna funktion kan användas." + }, + "errorEnableBiometricTitle": { + "message": "Det gick inte att aktivera biometri" + }, + "errorEnableBiometricDesc": { + "message": "Åtgärden avbröts av skrivbordsprogrammet" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Skrivbordsprogrammet ogiltigförklarade den säkra kommunikationskanalen. Försök igen" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "Kommunikationen med skrivbordsprogrammet avbröts" + }, + "nativeMessagingWrongUserDesc": { + "message": "Skrivbordsprogrammet är inloggat på ett annat konto. Se till att båda applikationerna är inloggade på samma konto." + }, + "nativeMessagingWrongUserTitle": { + "message": "Kontoavvikelse" + }, + "biometricsNotEnabledTitle": { + "message": "Biometri är inte aktiverat" + }, + "biometricsNotEnabledDesc": { + "message": "Biometri i webbläsaren kräver att biometri på skrivbordet aktiveras i inställningarna först." + }, + "biometricsNotSupportedTitle": { + "message": "Biometri stöds inte" + }, + "biometricsNotSupportedDesc": { + "message": "Biometri i webbläsaren stöds inte på den här enheten." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "På grund av en av företagets policyer är du begränsad från att spara objekt till ditt personliga valv. Ändra ägarskap till en organisation och välj från tillgängliga samlingar." + }, + "personalOwnershipPolicyInEffect": { + "message": "En organisationspolicy påverkar dina ägarskapsalternativ." } } diff --git a/src/_locales/th/messages.json b/src/_locales/th/messages.json index a878d167cd..8093dedcae 100644 --- a/src/_locales/th/messages.json +++ b/src/_locales/th/messages.json @@ -29,7 +29,7 @@ "message": "ปิด" }, "submit": { - "message": "Submit" + "message": "ส่งข้อมูล" }, "emailAddress": { "message": "ที่อยู่อีเมล" @@ -264,7 +264,7 @@ "message": "โน้ต" }, "note": { - "message": "Note" + "message": "โน้ต" }, "editItem": { "message": "แก้ไขรายการ" @@ -279,7 +279,7 @@ "message": "ดูรายการ" }, "launch": { - "message": "Launch" + "message": "เริ่ม" }, "website": { "message": "เว็บไซต์" @@ -309,7 +309,7 @@ "message": "Your vault is locked. Verify your master password to continue." }, "unlock": { - "message": "Unlock" + "message": "ปลดล็อค" }, "loggedInAsOn": { "message": "Logged in as $EMAIL$ on $HOSTNAME$.", @@ -325,7 +325,7 @@ } }, "invalidMasterPassword": { - "message": "Invalid master password" + "message": "รหัสผ่านหลักไม่ถูกต้อง" }, "vaultTimeout": { "message": "Vault Timeout" @@ -337,19 +337,19 @@ "message": "ทันที" }, "tenSeconds": { - "message": "10 seconds" + "message": "10 วินาที" }, "twentySeconds": { - "message": "20 seconds" + "message": "20 วินาที" }, "thirtySeconds": { - "message": "30 seconds" + "message": "30 วินาที" }, "oneMinute": { "message": "1 นาที" }, "twoMinutes": { - "message": "2 minutes" + "message": "2 นาที" }, "fiveMinutes": { "message": "5 นาที" @@ -373,10 +373,10 @@ "message": "On Restart" }, "never": { - "message": "Never" + "message": "ไม่อีกเลย" }, "security": { - "message": "Security" + "message": "ความปลอดภัย" }, "errorOccurred": { "message": "An error has occurred" @@ -419,7 +419,7 @@ "message": "Unable to auto-fill the selected login on this page. Copy/paste your username and/or password instead." }, "loggedOut": { - "message": "Logged out" + "message": "ออกจากระบบ" }, "loginExpired": { "message": "Your login session has expired." @@ -498,7 +498,7 @@ "message": "Edited item" }, "deleteItemConfirmation": { - "message": "Are you sure you want to delete this item?" + "message": "Do you really want to send to the trash?" }, "deletedItem": { "message": "Sent item to trash" @@ -606,9 +606,15 @@ "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." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Enter your master password to export your vault data." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Your vault is locked. Verify your PIN code to continue." }, + "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" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/tr/messages.json b/src/_locales/tr/messages.json index b6a6e815eb..319068c0dd 100644 --- a/src/_locales/tr/messages.json +++ b/src/_locales/tr/messages.json @@ -523,7 +523,7 @@ "description": "This is the folder for uncategorized items" }, "disableAddLoginNotification": { - "message": "Giriş Ekleme Bildirimlerini Kapat" + "message": "Hesap Ekle Bildirimlerini Kapat" }, "addLoginNotificationDesc": { "message": "\"Hesap Ekle Bildirimi\" otomatik olarak, ilk kez oturum açtığınız hesabınızı kasanıza kaydetmeniz için uyarı verir." @@ -606,9 +606,15 @@ "message": "UYARI", "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." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Kasadaki verilerinizi dışa aktarmak için ana parolanızı girin." }, @@ -700,7 +706,7 @@ "message": "Premium üye olun ve ek olarak bu özelliklere sahip olun:" }, "ppremiumSignUpStorage": { - "message": "1 GB şifreli dosya depolama." + "message": "Dosyalarınız için 1GB şifreli depolama." }, "ppremiumSignUpTwoStep": { "message": "İki adımlı oturum açma seçenekleri YubiKey, FIDO U2F ve Duo gibi." @@ -895,7 +901,7 @@ "message": "Rastgele yeni bir parola oluştur ve panoya kopyala." }, "commandLockVaultDesc": { - "message": "Lock the vault" + "message": "Kasayı kilitle" }, "privateModeMessage": { "message": "Ne yazık ki bu pencere bu tarayıcının özel modunda kullanılabilir değildir." @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Kasan kilitlendi. Devam etmek için PIN kodunu doğrula." }, + "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": "Tarayıcı yeniden başlatıldığında ana şifre ile kilitle" }, @@ -1358,15 +1373,81 @@ "message": "Yeni ana parolanız ilke gereksinimlerini karşılamıyor." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "Bu kutuyu işaretleyerek aşağıdakileri kabul etmiş olursunuz:" }, "acceptPoliciesError": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Hizmet Şartları ve Gizlilik Politikası kabul edilmedi." }, "termsOfService": { - "message": "Terms of Service" + "message": "Hizmet Şartları" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "Gizlilik Politikası" + }, + "hintEqualsPassword": { + "message": "Your password hint cannot be the same as your password." + }, + "ok": { + "message": "Tamam" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/_locales/uk/messages.json b/src/_locales/uk/messages.json index 0b47df5068..59e733c0a6 100644 --- a/src/_locales/uk/messages.json +++ b/src/_locales/uk/messages.json @@ -166,7 +166,7 @@ "message": "Теки" }, "noFolders": { - "message": "Немає тек для відображення." + "message": "Немає тек." }, "helpFeedback": { "message": "Допомога і зворотній зв'язок" @@ -243,7 +243,7 @@ "message": "Перегляд" }, "noItemsInList": { - "message": "Немає записів для відображення." + "message": "Немає записів." }, "itemInformation": { "message": "Інформація про запис" @@ -467,7 +467,7 @@ "message": "Перегляньте знайомство, щоб дізнатися про можливості розширення для браузера." }, "syncingComplete": { - "message": "Синхронізація завершена" + "message": "Синхронізацію завершено" }, "syncingFailed": { "message": "Не вдалося синхронізувати" @@ -498,7 +498,7 @@ "message": "Запис змінено" }, "deleteItemConfirmation": { - "message": "Ви дійсно хочете видалити цей запис?" + "message": "Ви дійсно хочете перенести до смітника?" }, "deletedItem": { "message": "Запис перенесено до смітника" @@ -516,14 +516,14 @@ "message": "Пошук в збірках" }, "searchType": { - "message": "Типу пошуку" + "message": "Пошук за типом" }, "noneFolder": { "message": "Без теки", "description": "This is the folder for uncategorized items" }, "disableAddLoginNotification": { - "message": "Вимкнути сповіщення про додавання запису" + "message": "Вимкнути сповіщення про новий запис" }, "addLoginNotificationDesc": { "message": "Сповіщення про додавання пароля автоматично пропонує зберегти нові паролі у вашому сховищі під час першого входу." @@ -558,10 +558,10 @@ "message": "Ніколи для цього сайту" }, "disableChangedPasswordNotification": { - "message": "Вимкнути сповіщення про змінений пароль" + "message": "Вимкнути сповіщення зміненого пароля" }, "disableChangedPasswordNotificationDesc": { - "message": "\"Сповіщення про змінений пароль\" автоматично запитує вас про оновлення пароля у вашому сховищі, коли виявлено зміну пароля на вебсайті." + "message": "Сповіщення зміненого пароля автоматично запитує вас про оновлення пароля у сховищі, коли виявлено його зміну на вебсайті." }, "notificationChangeDesc": { "message": "Ви хочете оновити цей пароль в Bitwarden?" @@ -606,9 +606,15 @@ "message": "ПОПЕРЕДЖЕННЯ", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Підтвердити експорт сховища" + }, "exportWarningDesc": { "message": "Експортовані дані вашого сховища знаходяться в незашифрованому вигляді. Вам не слід зберігати чи надсилати їх через незахищені канали (наприклад, е-поштою). Після використання негайно видаліть їх." }, + "encExportWarningDesc": { + "message": "Цей експорт шифрує ваші дані за допомогою ключа шифрування облікового запису. Якщо ви коли-небудь оновите ключ шифрування облікового запису, ви повинні виконати експорт знову, оскільки не зможете розшифрувати цей файл експорту." + }, "exportMasterPassword": { "message": "Введіть головний пароль, щоб експортувати дані сховища." }, @@ -874,7 +880,7 @@ "message": "URL-адреси середовища збережено." }, "enableAutoFillOnPageLoad": { - "message": "Автозаповнення при завантаженні сторінки" + "message": "Автозаповнення на сторінці" }, "enableAutoFillOnPageLoadDesc": { "message": "При виявленні форми входу виконувати автоматичне її заповнення під час завантаження сторінки." @@ -1102,7 +1108,7 @@ "message": "Оновити" }, "cards": { - "message": "Карти" + "message": "Картки" }, "identities": { "message": "Особисті дані" @@ -1179,7 +1185,7 @@ "message": "Всі елементи" }, "noPasswordsInList": { - "message": "Немає паролів для відображення." + "message": "Немає паролів." }, "remove": { "message": "Вилучити" @@ -1202,7 +1208,7 @@ "message": "Ви не входите до жодної організації. Організації дозволяють безпечно обмінюватися елементами з іншими користувачами." }, "noCollectionsInList": { - "message": "Немає збірок для відображення." + "message": "Немає збірок." }, "ownership": { "message": "Власник" @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Ваше сховище заблоковане. Для продовження підтвердьте свій PIN-код." }, + "unlockWithBiometrics": { + "message": "Розблокувати з біометрією" + }, + "awaitDesktop": { + "message": "Очікується підтвердження з комп'ютера" + }, + "awaitDesktopDesc": { + "message": "Для увімкнення біометрії в браузері, будь ласка, підтвердьте це у програмі Bitwarden на комп'ютері." + }, "lockWithMasterPassOnRestart": { "message": "Блокувати головним паролем при перезапуску браузера" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "Політика приватності" + }, + "hintEqualsPassword": { + "message": "Підказка для пароля не може бути такою самою, як ваш пароль." + }, + "ok": { + "message": "Ok" + }, + "desktopSyncVerificationTitle": { + "message": "Перевірка синхронізації на комп'ютері" + }, + "desktopIntegrationVerificationText": { + "message": "Перевірте, чи програма на комп'ютері показує відбиток: " + }, + "desktopIntegrationDisabledTitle": { + "message": "Інтеграція з браузером не увімкнена" + }, + "desktopIntegrationDisabledDesc": { + "message": "Інтеграція з браузером не увімкнена в програмі Bitwarden на комп'ютері. Увімкніть її в налаштуваннях програми на комп'ютері." + }, + "startDesktopTitle": { + "message": "Запустити програму Bitwarden на комп'ютері" + }, + "startDesktopDesc": { + "message": "Для використання цієї функції необхідно запустити програму Bitwarden на комп'ютері." + }, + "errorEnableBiometricTitle": { + "message": "Не вдається увімкнути біометрію" + }, + "errorEnableBiometricDesc": { + "message": "Дію було скасовано програмою на комп'ютері" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "Програма на комп'ютері не схвалила безпечний канал зв'язку. Будь ласка, спробуйте знову" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "З'єднання з комп'ютером перервано" + }, + "nativeMessagingWrongUserDesc": { + "message": "Програма на комп'ютері використовує інший обліковий запис. Переконайтеся, що програма й розширення використовують однаковий обліковий запис." + }, + "nativeMessagingWrongUserTitle": { + "message": "Невідповідність облікових записів" + }, + "biometricsNotEnabledTitle": { + "message": "Біометрію не увімкнено" + }, + "biometricsNotEnabledDesc": { + "message": "Для активації біометрії в браузері необхідно спершу увімкнути біометрію в програмі на комп'ютері." + }, + "biometricsNotSupportedTitle": { + "message": "Біометрія не підтримується" + }, + "biometricsNotSupportedDesc": { + "message": "Біометрія в браузері не підтримується на цьому пристрої." + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "У зв'язку з корпоративною політикою, вам не дозволено зберігати записи до особистого сховища. Змініть налаштування власності на організацію та виберіть серед доступних збірок." + }, + "personalOwnershipPolicyInEffect": { + "message": "Політика організації впливає на ваші параметри власності." } } diff --git a/src/_locales/vi/messages.json b/src/_locales/vi/messages.json index a258510f0c..02e9e7f6c7 100644 --- a/src/_locales/vi/messages.json +++ b/src/_locales/vi/messages.json @@ -606,9 +606,15 @@ "message": "CẢNH BÁO", "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." }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "Nhập mật khẩu chủ để xuất kho dữ liệu của bạn." }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "Kho của bạn đã bị khóa. Xác minh mã PIN của bạn để mở." }, + "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": "Khóa với mật khẩu chính khi trình duyệt khởi động lại" }, @@ -1368,5 +1383,71 @@ }, "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 this function 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." + }, + "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." } } diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json index 3161f113db..d28a314f64 100644 --- a/src/_locales/zh_CN/messages.json +++ b/src/_locales/zh_CN/messages.json @@ -606,9 +606,15 @@ "message": "警告", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "确认密码库导出" + }, "exportWarningDesc": { "message": "导出的密码库数据包含未加密格式。您不应该通过不安全的渠道(例如电子邮件)来存储或发送导出的文件。用完后请立即将其删除。" }, + "encExportWarningDesc": { + "message": "此导出将使用您账户的加密密钥来加密您的数据。 如果您曾经轮换过账户的加密密钥,您应将其重新导出,否则您将无法解密导出的文件。" + }, "exportMasterPassword": { "message": "输入主密码来导出你的密码库。" }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "您的密码库已锁定。请验证您的 PIN 码以继续。" }, + "unlockWithBiometrics": { + "message": "使用生物识别解锁" + }, + "awaitDesktop": { + "message": "等待来自桌面应用程序的确认" + }, + "awaitDesktopDesc": { + "message": "请确认在 Bitwarden 桌面应用程序中使用了生物识别以启用浏览器的生物识别。" + }, "lockWithMasterPassOnRestart": { "message": "浏览器重启后使用主密码锁定" }, @@ -1368,5 +1383,71 @@ }, "privacyPolicy": { "message": "隐私政策" + }, + "hintEqualsPassword": { + "message": "您的密码提示不能与您的密码相同。" + }, + "ok": { + "message": "确定" + }, + "desktopSyncVerificationTitle": { + "message": "桌面同步验证" + }, + "desktopIntegrationVerificationText": { + "message": "请确认桌面应用程序显示此指纹: " + }, + "desktopIntegrationDisabledTitle": { + "message": "浏览器集成未启用" + }, + "desktopIntegrationDisabledDesc": { + "message": "浏览器集成在 Bitwarden 桌面应用程序中未启用。请在桌面应用程序的设置中启用它。" + }, + "startDesktopTitle": { + "message": "启动 Bitwarden 桌面应用程序" + }, + "startDesktopDesc": { + "message": "Bitwarden 桌面应用程序需要以运行才能使用此功能。" + }, + "errorEnableBiometricTitle": { + "message": "无法启用生物识别" + }, + "errorEnableBiometricDesc": { + "message": "操作被桌面应用程序取消" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "桌面应用程序使安全通道无效。请重试此操作" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "桌面通信已中断" + }, + "nativeMessagingWrongUserDesc": { + "message": "桌面应用程序登录到了不同的帐户。请确保两个应用程序都登录到同一个帐户。" + }, + "nativeMessagingWrongUserTitle": { + "message": "账户不匹配" + }, + "biometricsNotEnabledTitle": { + "message": "生物识别未启用" + }, + "biometricsNotEnabledDesc": { + "message": "需要首先在桌面应用程序的设置中启用生物识别才能使用浏览器的生物识别。" + }, + "biometricsNotSupportedTitle": { + "message": "不支持生物识别" + }, + "biometricsNotSupportedDesc": { + "message": "此设备不支持浏览器生物识别。" + }, + "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." + }, + "personalOwnershipSubmitError": { + "message": "由于企业策略,您被限制为保存项目到您的个人密码库。将所有权选项更改为组织,并从可用的集合中选择。" + }, + "personalOwnershipPolicyInEffect": { + "message": "一个组织策略正影响您的所有权选项。" } } diff --git a/src/_locales/zh_TW/messages.json b/src/_locales/zh_TW/messages.json index b498f63910..6babbc50cb 100644 --- a/src/_locales/zh_TW/messages.json +++ b/src/_locales/zh_TW/messages.json @@ -606,9 +606,15 @@ "message": "警告", "description": "WARNING (should stay in capitalized letters if the language permits)" }, + "confirmVaultExport": { + "message": "Confirm Vault Export" + }, "exportWarningDesc": { "message": "您的密碼將匯出成未加密的. csv 檔案。您不應將它存放或經由未經加密的方式傳送(例如電子郵件)。用完後請立即將它刪除。" }, + "encExportWarningDesc": { + "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." + }, "exportMasterPassword": { "message": "輸入您的主密碼以匯出密碼庫資料。" }, @@ -1250,6 +1256,15 @@ "yourVaultIsLockedPinCode": { "message": "密碼庫已鎖定。驗證 PIN 碼以繼續。" }, + "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": "瀏覽器重啟後使用主密碼鎖定" }, @@ -1367,6 +1382,72 @@ "message": "Terms of Service" }, "privacyPolicy": { - "message": "Privacy Policy" + "message": "隱私權政策" + }, + "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 this function 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." + }, + "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." } } diff --git a/src/background/commands.background.ts b/src/background/commands.background.ts index 625eb4cd67..463862852a 100644 --- a/src/background/commands.background.ts +++ b/src/background/commands.background.ts @@ -20,7 +20,7 @@ export default class CommandsBackground { } async init() { - if (this.isSafari || this.isVivaldi) { + if (this.isVivaldi) { BrowserApi.messageListener('commands.background', async (msg: any, sender: any, sendResponse: any) => { if (msg.command === 'keyboardShortcutTriggered' && msg.shortcut) { await this.processCommand(msg.shortcut, sender); diff --git a/src/background/main.background.ts b/src/background/main.background.ts index a929d52749..82d1f739a6 100644 --- a/src/background/main.background.ts +++ b/src/background/main.background.ts @@ -167,8 +167,8 @@ export default class MainBackground { return promise.then((result) => result.response === 'unlocked'); } }); - this.storageService = new BrowserStorageService(this.platformUtilsService); - this.secureStorageService = new BrowserStorageService(this.platformUtilsService); + this.storageService = new BrowserStorageService(); + this.secureStorageService = new BrowserStorageService(); this.i18nService = new I18nService(BrowserApi.getUILanguage(window)); this.cryptoFunctionService = new WebCryptoFunctionService(window, this.platformUtilsService); this.consoleLogService = new ConsoleLogService(false); @@ -252,21 +252,18 @@ export default class MainBackground { this.commandsBackground = new CommandsBackground(this, this.passwordGenerationService, this.platformUtilsService, this.analytics, this.vaultTimeoutService); - if (!this.isSafari) { - this.tabsBackground = new TabsBackground(this); - this.contextMenusBackground = new ContextMenusBackground(this, this.cipherService, - this.passwordGenerationService, this.analytics, this.platformUtilsService, this.vaultTimeoutService, - this.eventService, this.totpService); - this.idleBackground = new IdleBackground(this.vaultTimeoutService, this.storageService, - this.notificationsService); - this.webRequestBackground = new WebRequestBackground(this.platformUtilsService, this.cipherService, - this.vaultTimeoutService); - this.windowsBackground = new WindowsBackground(this); - } + this.tabsBackground = new TabsBackground(this); + this.contextMenusBackground = new ContextMenusBackground(this, this.cipherService, + this.passwordGenerationService, this.analytics, this.platformUtilsService, this.vaultTimeoutService, + this.eventService, this.totpService); + this.idleBackground = new IdleBackground(this.vaultTimeoutService, this.storageService, + this.notificationsService); + this.webRequestBackground = new WebRequestBackground(this.platformUtilsService, this.cipherService, + this.vaultTimeoutService); + this.windowsBackground = new WindowsBackground(this); } async bootstrap() { - SafariApp.init(); this.analytics.ga('send', 'pageview', '/background.html'); this.containerService.attachToWindow(window); @@ -276,13 +273,11 @@ export default class MainBackground { await this.runtimeBackground.init(); await this.commandsBackground.init(); - if (!this.isSafari) { - await this.tabsBackground.init(); - await this.contextMenusBackground.init(); - await this.idleBackground.init(); - await this.webRequestBackground.init(); - await this.windowsBackground.init(); - } + await this.tabsBackground.init(); + await this.contextMenusBackground.init(); + await this.idleBackground.init(); + await this.webRequestBackground.init(); + await this.windowsBackground.init(); return new Promise((resolve) => { setTimeout(async () => { @@ -297,7 +292,7 @@ export default class MainBackground { } async setIcon() { - if (this.isSafari || (!chrome.browserAction && !this.sidebarAction)) { + if (!chrome.browserAction && !this.sidebarAction) { return; } @@ -316,7 +311,7 @@ export default class MainBackground { } async refreshBadgeAndMenu(forLocked: boolean = false) { - if (this.isSafari || !chrome.windows || !chrome.contextMenus) { + if (!chrome.windows || !chrome.contextMenus) { return; } @@ -447,7 +442,7 @@ export default class MainBackground { } private async buildContextMenu() { - if (this.isSafari || !chrome.contextMenus || this.buildingContextMenu) { + if (!chrome.contextMenus || this.buildingContextMenu) { return; } diff --git a/src/background/nativeMessaging.background.ts b/src/background/nativeMessaging.background.ts index b83397e647..7c74c38db3 100644 --- a/src/background/nativeMessaging.background.ts +++ b/src/background/nativeMessaging.background.ts @@ -35,6 +35,13 @@ export class NativeMessagingBackground { private runtimeBackground: RuntimeBackground, private i18nService: I18nService, private userService: UserService, private messagingService: MessagingService, private appIdService: AppIdService) { this.storageService.save(ConstantsService.biometricFingerprintValidated, false); + + if (BrowserApi.isChromeApi) { + // Reload extension to activate nativeMessaging + chrome.permissions.onAdded.addListener((permissions) => { + BrowserApi.reloadExtension(null); + }); + } } async connect() { @@ -106,6 +113,13 @@ export class NativeMessagingBackground { } break; } + case 'wrongUserId': + this.messagingService.send('showDialog', { + text: this.i18nService.t('nativeMessagingWrongUserDesc'), + title: this.i18nService.t('nativeMessagingWrongUserTitle'), + confirmText: this.i18nService.t('ok'), + type: 'error', + }); default: // Ignore since it belongs to another device if (message.appId !== this.appId) { @@ -247,7 +261,11 @@ export class NativeMessagingBackground { this.publicKey = publicKey; this.privateKey = privateKey; - this.sendUnencrypted({command: 'setupEncryption', publicKey: Utils.fromBufferToB64(publicKey)}); + this.sendUnencrypted({ + command: 'setupEncryption', + publicKey: Utils.fromBufferToB64(publicKey), + userId: await this.userService.getUserId() + }); return new Promise((resolve, reject) => this.secureSetupResolve = resolve); } diff --git a/src/background/runtime.background.ts b/src/background/runtime.background.ts index f08915352b..685ffc1414 100644 --- a/src/background/runtime.background.ts +++ b/src/background/runtime.background.ts @@ -4,7 +4,6 @@ import { CipherView } from 'jslib/models/view/cipherView'; import { LoginUriView } from 'jslib/models/view/loginUriView'; import { LoginView } from 'jslib/models/view/loginView'; -import { AuthService } from 'jslib/abstractions/auth.service'; import { AutofillService } from '../services/abstractions/autofill.service'; import BrowserPlatformUtilsService from '../services/browserPlatformUtils.service'; import { CipherService } from 'jslib/abstractions/cipher.service'; @@ -13,10 +12,7 @@ import { EnvironmentService } from 'jslib/abstractions/environment.service'; import { I18nService } from 'jslib/abstractions/i18n.service'; import { NotificationsService } from 'jslib/abstractions/notifications.service'; import { PolicyService } from 'jslib/abstractions/policy.service'; -import { PopupUtilsService } from '../popup/services/popup-utils.service'; -import { StateService } from 'jslib/abstractions/state.service'; import { StorageService } from 'jslib/abstractions/storage.service'; -import { SyncService } from 'jslib/abstractions/sync.service'; import { SystemService } from 'jslib/abstractions/system.service'; import { UserService } from 'jslib/abstractions/user.service'; import { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service'; @@ -24,7 +20,6 @@ import { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service'; import { BrowserApi } from '../browser/browserApi'; import MainBackground from './main.background'; -import { NativeMessagingBackground } from './nativeMessaging.background'; import { Analytics } from 'jslib/misc'; import { Utils } from 'jslib/misc/utils'; @@ -36,7 +31,6 @@ export default class RuntimeBackground { private runtime: any; private autofillTimeout: any; private pageDetailsToAutoFill: any[] = []; - private isSafari: boolean; private onInstalledReason: string = null; constructor(private main: MainBackground, private autofillService: AutofillService, @@ -46,19 +40,15 @@ export default class RuntimeBackground { private systemService: SystemService, private vaultTimeoutService: VaultTimeoutService, private environmentService: EnvironmentService, private policyService: PolicyService, private userService: UserService) { - this.isSafari = this.platformUtilsService.isSafari(); - this.runtime = this.isSafari ? {} : chrome.runtime; // onInstalled listener must be wired up before anything else, so we do it in the ctor - if (!this.isSafari) { - this.runtime.onInstalled.addListener((details: any) => { - this.onInstalledReason = details.reason; - }); - } + chrome.runtime.onInstalled.addListener((details: any) => { + this.onInstalledReason = details.reason; + }); } async init() { - if (!this.runtime) { + if (!chrome.runtime) { return; } @@ -399,20 +389,6 @@ export default class RuntimeBackground { } private async checkOnInstalled() { - if (this.isSafari) { - const installedVersion = await this.storageService.get(ConstantsService.installedVersionKey); - if (installedVersion == null) { - this.onInstalledReason = 'install'; - } else if (BrowserApi.getApplicationVersion() !== installedVersion) { - this.onInstalledReason = 'update'; - } - - if (this.onInstalledReason != null) { - await this.storageService.save(ConstantsService.installedVersionKey, - BrowserApi.getApplicationVersion()); - } - } - setTimeout(async () => { if (this.onInstalledReason != null) { if (this.onInstalledReason === 'install') { diff --git a/src/browser/browserApi.ts b/src/browser/browserApi.ts index 1ee54a45b1..c5e5b2f118 100644 --- a/src/browser/browserApi.ts +++ b/src/browser/browserApi.ts @@ -4,20 +4,18 @@ import { Utils } from 'jslib/misc/utils'; export class BrowserApi { static isWebExtensionsApi: boolean = (typeof browser !== 'undefined'); - static isSafariApi: boolean = (window as any).safariAppExtension === true; + static isSafariApi: boolean = navigator.userAgent.indexOf(' Safari/') !== -1 && + navigator.userAgent.indexOf(' Chrome/') === -1 && + navigator.userAgent.indexOf(' Chromium/') === -1; static isChromeApi: boolean = !BrowserApi.isSafariApi && (typeof chrome !== 'undefined'); static isFirefoxOnAndroid: boolean = navigator.userAgent.indexOf('Firefox/') !== -1 && navigator.userAgent.indexOf('Android') !== -1; static async getTabFromCurrentWindowId(): Promise { - if (BrowserApi.isChromeApi) { - return await BrowserApi.tabsQueryFirst({ - active: true, - windowId: chrome.windows.WINDOW_ID_CURRENT, - }); - } else if (BrowserApi.isSafariApi) { - return await BrowserApi.getTabFromCurrentWindow(); - } + return await BrowserApi.tabsQueryFirst({ + active: true, + windowId: chrome.windows.WINDOW_ID_CURRENT, + }); } static async getTabFromCurrentWindow(): Promise { @@ -34,16 +32,11 @@ export class BrowserApi { } static async tabsQuery(options: any): Promise { - if (BrowserApi.isChromeApi) { - return new Promise((resolve) => { - chrome.tabs.query(options, (tabs: any[]) => { - resolve(tabs); - }); + return new Promise((resolve) => { + chrome.tabs.query(options, (tabs: any[]) => { + resolve(tabs); }); - } else if (BrowserApi.isSafariApi) { - const tabs = await SafariApp.sendMessageToApp('tabs_query', JSON.stringify(options)); - return tabs != null ? JSON.parse(tabs) : null; - } + }); } static async tabsQueryFirst(options: any): Promise { @@ -72,81 +65,36 @@ export class BrowserApi { return; } - if (BrowserApi.isChromeApi) { - return new Promise((resolve) => { - chrome.tabs.sendMessage(tab.id, obj, options, () => { - if (chrome.runtime.lastError) { - // Some error happened - } - resolve(); - }); + return new Promise((resolve) => { + chrome.tabs.sendMessage(tab.id, obj, options, () => { + if (chrome.runtime.lastError) { + // Some error happened + } + resolve(); }); - } else if (BrowserApi.isSafariApi) { - if (options != null && options.frameId != null && obj.bitwardenFrameId == null) { - obj.bitwardenFrameId = options.frameId; - } - await SafariApp.sendMessageToApp('tabs_message', JSON.stringify({ - tab: tab, - obj: JSON.stringify(obj), - options: options, - }), true); - } + }); } static getBackgroundPage(): any { - if (BrowserApi.isChromeApi) { - return chrome.extension.getBackgroundPage(); - } else if (BrowserApi.isSafariApi) { - return window; - } else { - return null; - } + return chrome.extension.getBackgroundPage(); } static getApplicationVersion(): string { - if (BrowserApi.isChromeApi) { - return chrome.runtime.getManifest().version; - } else if (BrowserApi.isSafariApi) { - return (window as any).bitwardenApplicationVersion; - } else { - return null; - } + return chrome.runtime.getManifest().version; } static async isPopupOpen(): Promise { - if (BrowserApi.isChromeApi) { - return Promise.resolve(chrome.extension.getViews({ type: 'popup' }).length > 0); - } else if (BrowserApi.isSafariApi) { - const open = await SafariApp.sendMessageToApp('isPopoverOpen'); - return open === 'true'; - } else { - return Promise.resolve(false); - } + return Promise.resolve(chrome.extension.getViews({ type: 'popup' }).length > 0); } static createNewTab(url: string, extensionPage: boolean = false) { - if (BrowserApi.isChromeApi) { - chrome.tabs.create({ url: url }); - } else if (BrowserApi.isSafariApi) { - SafariApp.sendMessageToApp('createNewTab', url, true); - } + chrome.tabs.create({ url: url }); } static messageListener(name: string, callback: (message: any, sender: any, response: any) => void) { - if (BrowserApi.isChromeApi) { - chrome.runtime.onMessage.addListener((msg: any, sender: any, response: any) => { - callback(msg, sender, response); - }); - } else if (BrowserApi.isSafariApi) { - SafariApp.addMessageListener(name, (message: any, sender: any, response: any) => { - if (message.bitwardenFrameId != null) { - if (sender != null && typeof (sender) === 'object' && sender.frameId == null) { - sender.frameId = message.bitwardenFrameId; - } - } - callback(message, sender, response); - }); - } + chrome.runtime.onMessage.addListener((msg: any, sender: any, response: any) => { + callback(msg, sender, response); + }); } static closePopup(win: Window) { @@ -155,10 +103,8 @@ export class BrowserApi { // condition is only called if the popup wasn't already dismissed (future proofing). // ref: https://bugzilla.mozilla.org/show_bug.cgi?id=1433604 browser.tabs.update({ active: true }).finally(win.close); - } else if (BrowserApi.isWebExtensionsApi || BrowserApi.isChromeApi) { + } else { win.close(); - } else if (BrowserApi.isSafariApi) { - SafariApp.sendMessageToApp('hidePopover'); } } @@ -196,30 +142,22 @@ export class BrowserApi { } static getUILanguage(win: Window) { - if (BrowserApi.isSafariApi) { - return win.navigator.language; - } else { - return chrome.i18n.getUILanguage(); - } + return chrome.i18n.getUILanguage(); } static reloadExtension(win: Window) { if (win != null) { return win.location.reload(true); - } else if (BrowserApi.isSafariApi) { - SafariApp.sendMessageToApp('reloadExtension'); - } else if (!BrowserApi.isSafariApi) { + } else { return chrome.runtime.reload(); } } static reloadOpenWindows() { - if (!BrowserApi.isSafariApi) { - const views = chrome.extension.getViews() as Window[]; - views.filter((w) => w.location.href != null).forEach((w) => { - w.location.reload(); - }); - } + const views = chrome.extension.getViews() as Window[]; + views.filter((w) => w.location.href != null).forEach((w) => { + w.location.reload(); + }); } static connectNative(application: string): browser.runtime.Port | chrome.runtime.Port { diff --git a/src/browser/safariApp.ts b/src/browser/safariApp.ts index 894ae2c6d4..b53d3754b7 100644 --- a/src/browser/safariApp.ts +++ b/src/browser/safariApp.ts @@ -1,23 +1,6 @@ import { BrowserApi } from './browserApi'; export class SafariApp { - static init() { - if ((window as any).bitwardenSafariAppInited) { - return; - } - (window as any).bitwardenSafariAppInited = true; - if (BrowserApi.isSafariApi) { - (window as any).bitwardenSafariAppRequests = - new Map void, timeoutDate: Date }>(); - (window as any).bitwardenSafariAppMessageListeners = - new Map void>(); - (window as any).bitwardenSafariAppMessageReceiver = (message: any) => { - SafariApp.receiveMessageFromApp(message); - }; - setInterval(() => SafariApp.cleanupOldRequests(), 5 * 60000); // every 5 mins - } - } - static sendMessageToApp(command: string, data: any = null, resolveNow = false): Promise { if (!BrowserApi.isSafariApi) { return Promise.resolve(null); @@ -25,69 +8,14 @@ export class SafariApp { return new Promise((resolve) => { const now = new Date(); const messageId = now.getTime().toString() + '_' + Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); - if (typeof safari === typeof undefined) { - (window as any).webkit.messageHandlers.bitwardenApp.postMessage(JSON.stringify({ - id: messageId, - command: command, - data: data, - responseData: null, - })); - } else { - safari.extension.dispatchMessage('bitwarden', { - command: command, - data: data, - responseData: null, - }); - } - if (resolveNow) { - resolve(); - } else { - (window as any).bitwardenSafariAppRequests.set(messageId, { - resolve: resolve, - timeoutDate: new Date(now.getTime() + 5 * 60000), - }); - } - }); - } - - static addMessageListener(name: string, callback: (message: any, sender: any, response: any) => void) { - (window as any).bitwardenSafariAppMessageListeners.set(name, callback); - } - - static sendMessageToListeners(message: any, sender: any, response: any) { - (window as any).bitwardenSafariAppMessageListeners.forEach((f: any) => f(message, sender, response)); - } - - private static receiveMessageFromApp(message: any) { - if (message == null) { - return; - } - if ((message.id == null || message.id === '') && message.command === 'app_message') { - try { - const msg = JSON.parse(message.data); - SafariApp.sendMessageToListeners(msg, { - id: 'app_message', - tab: message.senderTab, - }, null); - } catch { } - } else if (message.id != null && (window as any).bitwardenSafariAppRequests.has(message.id)) { - const p = (window as any).bitwardenSafariAppRequests.get(message.id); - p.resolve(message.responseData); - (window as any).bitwardenSafariAppRequests.delete(message.id); - } - } - - private static cleanupOldRequests() { - const removeIds: string[] = []; - ((window as any).bitwardenSafariAppRequests as - Map void, timeoutDate: Date }>) - .forEach((v, key) => { - if (v.timeoutDate < new Date()) { - removeIds.push(key); - } + (browser as any).runtime.sendNativeMessage('com.bitwarden.desktop', { + id: messageId, + command: command, + data: data, + responseData: null, + }, (response: any) => { + resolve(response); }); - removeIds.forEach((id) => { - (window as any).bitwardenSafariAppRequests.delete(id); }); } } diff --git a/src/content/autofill.js b/src/content/autofill.js index ca6c75ae08..956708fe3e 100644 --- a/src/content/autofill.js +++ b/src/content/autofill.js @@ -989,35 +989,6 @@ End 1Password Extension */ - if ((typeof safari !== 'undefined') && navigator.userAgent.indexOf(' Safari/') !== -1 && - navigator.userAgent.indexOf('Chrome') === -1) { - if (window.__bitwardenFrameId == null) { - window.__bitwardenFrameId = Math.floor(Math.random() * Math.floor(99999999)); - } - safari.self.addEventListener('message', function (msgEvent) { - var msg = JSON.parse(msgEvent.message.msg); - if (msg.bitwardenFrameId != null && window.__bitwardenFrameId !== msg.bitwardenFrameId) { - return; - } - - if (msg.command === 'collectPageDetails') { - var pageDetails = collect(document); - var pageDetailsObj = JSON.parse(pageDetails); - safari.extension.dispatchMessage('bitwarden', { - command: 'collectPageDetailsResponse', - tab: msg.tab, - details: pageDetailsObj, - sender: msg.sender, - bitwardenFrameId: window.__bitwardenFrameId - }); - } - else if (msg.command === 'fillForm') { - fill(document, msg.fillScript); - } - }, false); - return; - } - chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { if (msg.command === 'collectPageDetails') { var pageDetails = collect(document); diff --git a/src/content/autofiller.ts b/src/content/autofiller.ts index 253c82603c..1d756b8451 100644 --- a/src/content/autofiller.ts +++ b/src/content/autofiller.ts @@ -3,44 +3,17 @@ document.addEventListener('DOMContentLoaded', (event) => { let filledThisHref = false; let delayFillTimeout: number; - const isSafari = (typeof safari !== 'undefined') && navigator.userAgent.indexOf(' Safari/') !== -1 && - navigator.userAgent.indexOf('Chrome') === -1; - - if (isSafari) { - if ((window as any).__bitwardenFrameId == null) { - (window as any).__bitwardenFrameId = Math.floor(Math.random() * Math.floor(99999999)); + const enabledKey = 'enableAutoFillOnPageLoad'; + chrome.storage.local.get(enabledKey, (obj: any) => { + if (obj != null && obj[enabledKey] === true) { + setInterval(() => doFillIfNeeded(), 500); } - const responseCommand = 'autofillerAutofillOnPageLoadEnabledResponse'; - safari.extension.dispatchMessage('bitwarden', { - command: 'bgGetDataForTab', - responseCommand: responseCommand, - bitwardenFrameId: (window as any).__bitwardenFrameId, - }); - safari.self.addEventListener('message', (msgEvent: any) => { - const msg = JSON.parse(msgEvent.message.msg); - if (msg.bitwardenFrameId != null && (window as any).__bitwardenFrameId !== msg.bitwardenFrameId) { - return; - } - if (msg.command === responseCommand && msg.data.autofillEnabled === true) { - setInterval(() => doFillIfNeeded(), 500); - } else if (msg.command === 'fillForm' && pageHref === msg.url) { - filledThisHref = true; - } - }, false); - return; - } else { - const enabledKey = 'enableAutoFillOnPageLoad'; - chrome.storage.local.get(enabledKey, (obj: any) => { - if (obj != null && obj[enabledKey] === true) { - setInterval(() => doFillIfNeeded(), 500); - } - }); - chrome.runtime.onMessage.addListener((msg: any, sender: any, sendResponse: Function) => { - if (msg.command === 'fillForm' && pageHref === msg.url) { - filledThisHref = true; - } - }); - } + }); + chrome.runtime.onMessage.addListener((msg: any, sender: any, sendResponse: Function) => { + if (msg.command === 'fillForm' && pageHref === msg.url) { + filledThisHref = true; + } + }); function doFillIfNeeded(force: boolean = false) { if (force || pageHref !== window.location.href) { @@ -64,12 +37,7 @@ document.addEventListener('DOMContentLoaded', (event) => { sender: 'autofiller', }; - if (isSafari) { - msg.bitwardenFrameId = (window as any).__bitwardenFrameId; - safari.extension.dispatchMessage('bitwarden', msg); - } else { - chrome.runtime.sendMessage(msg); - } + chrome.runtime.sendMessage(msg); } } }); diff --git a/src/content/notificationBar.ts b/src/content/notificationBar.ts index 4974f53ad8..70fbd5e413 100644 --- a/src/content/notificationBar.ts +++ b/src/content/notificationBar.ts @@ -17,71 +17,30 @@ document.addEventListener('DOMContentLoaded', (event) => { const logInButtonNames = new Set(['log in', 'sign in', 'login', 'go', 'submit', 'continue', 'next']); const changePasswordButtonNames = new Set(['save password', 'update password', 'change password', 'change']); const changePasswordButtonContainsNames = new Set(['pass', 'change', 'contras', 'senha']); - let notificationBarData = null; - const isSafari = (typeof safari !== 'undefined') && navigator.userAgent.indexOf(' Safari/') !== -1 && - navigator.userAgent.indexOf('Chrome') === -1; let disabledAddLoginNotification = false; let disabledChangedPasswordNotification = false; - if (isSafari) { - if ((window as any).__bitwardenFrameId == null) { - (window as any).__bitwardenFrameId = Math.floor(Math.random() * Math.floor(99999999)); - } - if (inIframe) { + chrome.storage.local.get('neverDomains', (ndObj: any) => { + const domains = ndObj.neverDomains; + if (domains != null && domains.hasOwnProperty(window.location.hostname)) { return; } - const responseCommand = 'notificationBarDataResponse'; - safari.extension.dispatchMessage('bitwarden', { - command: 'bgGetDataForTab', - responseCommand: responseCommand, - bitwardenFrameId: (window as any).__bitwardenFrameId, - }); - safari.self.addEventListener('message', (msgEvent: any) => { - const msg = JSON.parse(msgEvent.message.msg); - if (msg.bitwardenFrameId != null && (window as any).__bitwardenFrameId !== msg.bitwardenFrameId) { - return; - } - if (msg.command === responseCommand && msg.data) { - notificationBarData = msg.data; - if (notificationBarData.neverDomains && - notificationBarData.neverDomains.hasOwnProperty(window.location.hostname)) { - return; - } - - disabledAddLoginNotification = notificationBarData.disabledAddLoginNotification === true; - disabledChangedPasswordNotification = notificationBarData.disabledChangedPasswordNotification === true; + chrome.storage.local.get('disableAddLoginNotification', (disAddObj: any) => { + disabledAddLoginNotification = disAddObj != null && disAddObj.disableAddLoginNotification === true; + chrome.storage.local.get('disableChangedPasswordNotification', (disChangedObj: any) => { + disabledChangedPasswordNotification = disChangedObj != null && + disChangedObj.disableChangedPasswordNotification === true; if (!disabledAddLoginNotification || !disabledChangedPasswordNotification) { collectIfNeededWithTimeout(); } - } - - processMessages(msg, () => { /* do nothing on send response for Safari */ }); - }, false); - return; - } else { - chrome.storage.local.get('neverDomains', (ndObj: any) => { - const domains = ndObj.neverDomains; - if (domains != null && domains.hasOwnProperty(window.location.hostname)) { - return; - } - - chrome.storage.local.get('disableAddLoginNotification', (disAddObj: any) => { - disabledAddLoginNotification = disAddObj != null && disAddObj.disableAddLoginNotification === true; - chrome.storage.local.get('disableChangedPasswordNotification', (disChangedObj: any) => { - disabledChangedPasswordNotification = disChangedObj != null && - disChangedObj.disableChangedPasswordNotification === true; - if (!disabledAddLoginNotification || !disabledChangedPasswordNotification) { - collectIfNeededWithTimeout(); - } - }); }); }); + }); - chrome.runtime.onMessage.addListener((msg: any, sender: any, sendResponse: Function) => { - processMessages(msg, sendResponse); - }); - } + chrome.runtime.onMessage.addListener((msg: any, sender: any, sendResponse: Function) => { + processMessages(msg, sendResponse); + }); function processMessages(msg: any, sendResponse: Function) { if (msg.command === 'openNotificationBar') { @@ -470,7 +429,7 @@ document.addEventListener('DOMContentLoaded', (event) => { } function closeExistingAndOpenBar(type: string, typeData: any) { - let barPage = (isSafari ? 'app/' : '') + 'notification/bar.html'; + let barPage = 'notification/bar.html'; switch (type) { case 'info': barPage = barPage + '?info=' + typeData.text; @@ -510,7 +469,7 @@ document.addEventListener('DOMContentLoaded', (event) => { return; } - const barPageUrl: string = isSafari ? (safari.extension.baseURI + barPage) : chrome.extension.getURL(barPage); + const barPageUrl: string = chrome.extension.getURL(barPage); const iframe = document.createElement('iframe'); iframe.style.cssText = 'height: 42px; width: 100%; border: 0; min-height: initial;'; @@ -580,11 +539,6 @@ document.addEventListener('DOMContentLoaded', (event) => { } function sendPlatformMessage(msg: any) { - if (isSafari) { - msg.bitwardenFrameId = (window as any).__bitwardenFrameId; - safari.extension.dispatchMessage('bitwarden', msg); - } else { - chrome.runtime.sendMessage(msg); - } + chrome.runtime.sendMessage(msg); } }); diff --git a/src/content/shortcuts.ts b/src/content/shortcuts.ts index f2d8de67dc..fe9699ac52 100644 --- a/src/content/shortcuts.ts +++ b/src/content/shortcuts.ts @@ -45,11 +45,6 @@ document.addEventListener('DOMContentLoaded', (event) => { shortcut: shortcut, }; - if (isSafari) { - msg.bitwardenFrameId = (window as any).__bitwardenFrameId; - safari.extension.dispatchMessage('bitwarden', msg); - } else { - chrome.runtime.sendMessage(msg); - } + chrome.runtime.sendMessage(msg); } }); diff --git a/src/content/sso.ts b/src/content/sso.ts index a127a39d55..508bc2aea3 100644 --- a/src/content/sso.ts +++ b/src/content/sso.ts @@ -3,15 +3,6 @@ window.addEventListener('message', (event) => { return; if (event.data.command && (event.data.command === 'authResult')) { - if (typeof chrome === typeof undefined) { - safari.extension.dispatchMessage('bitwarden', { - command: event.data.command, - code: event.data.code, - state: event.data.state, - referrer: event.source.location.hostname, - }); - return; - } chrome.runtime.sendMessage({ command: event.data.command, code: event.data.code, diff --git a/src/manifest.json b/src/manifest.json index d05030f072..3e50886648 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "1.47.1", + "version": "1.48.1", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", @@ -89,7 +89,9 @@ "http://*/*", "https://*/*", "webRequest", - "webRequestBlocking", + "webRequestBlocking" + ], + "optional_permissions": [ "nativeMessaging" ], "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", diff --git a/src/notification/bar.js b/src/notification/bar.js index c882bd2931..a5e55ca664 100644 --- a/src/notification/bar.js +++ b/src/notification/bar.js @@ -3,34 +3,21 @@ require('./bar.scss'); document.addEventListener('DOMContentLoaded', () => { var i18n = {}; var lang = window.navigator.language; - if (typeof safari !== 'undefined') { - const responseCommand = 'notificationBarFrameDataResponse'; - sendPlatformMessage({ - command: 'bgGetDataForTab', - responseCommand: responseCommand - }); - safari.self.addEventListener('message', (msgEvent) => { - const msg = JSON.parse(msgEvent.message.msg); - if (msg.command === responseCommand && msg.data) { - i18n = msg.data.i18n; - load(); - } - }, false); - } else { - i18n.appName = chrome.i18n.getMessage('appName'); - i18n.close = chrome.i18n.getMessage('close'); - i18n.yes = chrome.i18n.getMessage('yes'); - i18n.never = chrome.i18n.getMessage('never'); - i18n.notificationAddSave = chrome.i18n.getMessage('notificationAddSave'); - i18n.notificationNeverSave = chrome.i18n.getMessage('notificationNeverSave'); - i18n.notificationAddDesc = chrome.i18n.getMessage('notificationAddDesc'); - i18n.notificationChangeSave = chrome.i18n.getMessage('notificationChangeSave'); - i18n.notificationChangeDesc = chrome.i18n.getMessage('notificationChangeDesc'); - lang = chrome.i18n.getUILanguage(); + + i18n.appName = chrome.i18n.getMessage('appName'); + i18n.close = chrome.i18n.getMessage('close'); + i18n.yes = chrome.i18n.getMessage('yes'); + i18n.never = chrome.i18n.getMessage('never'); + i18n.notificationAddSave = chrome.i18n.getMessage('notificationAddSave'); + i18n.notificationNeverSave = chrome.i18n.getMessage('notificationNeverSave'); + i18n.notificationAddDesc = chrome.i18n.getMessage('notificationAddDesc'); + i18n.notificationChangeSave = chrome.i18n.getMessage('notificationChangeSave'); + i18n.notificationChangeDesc = chrome.i18n.getMessage('notificationChangeDesc'); + lang = chrome.i18n.getUILanguage(); - // delay 50ms so that we get proper body dimensions - setTimeout(load, 50); - } + // delay 50ms so that we get proper body dimensions + setTimeout(load, 50); + function load() { var closeButton = document.getElementById('close-button'), @@ -131,10 +118,6 @@ document.addEventListener('DOMContentLoaded', () => { } function sendPlatformMessage(msg) { - if (typeof safari !== 'undefined') { - safari.extension.dispatchMessage('bitwarden', msg); - } else { - chrome.runtime.sendMessage(msg); - } + chrome.runtime.sendMessage(msg); } }); diff --git a/src/popup/accounts/lock.component.html b/src/popup/accounts/lock.component.html index 1a40769500..173487f001 100644 --- a/src/popup/accounts/lock.component.html +++ b/src/popup/accounts/lock.component.html @@ -38,7 +38,7 @@

diff --git a/src/popup/accounts/two-factor.component.ts b/src/popup/accounts/two-factor.component.ts index a84ed5070a..57aef6e4d9 100644 --- a/src/popup/accounts/two-factor.component.ts +++ b/src/popup/accounts/two-factor.component.ts @@ -58,13 +58,12 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { // ref: https://bugzilla.mozilla.org/show_bug.cgi?id=1562620 this.initU2f = false; } - const isSafari = this.platformUtilsService.isSafari(); await super.ngOnInit(); if (this.selectedProviderType == null) { return; } - if (!isSafari && this.selectedProviderType === TwoFactorProviderType.Email && + if (this.selectedProviderType === TwoFactorProviderType.Email && this.popupUtilsService.inPopup(window)) { const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('popup2faCloseMessage'), null, this.i18nService.t('yes'), this.i18nService.t('no')); diff --git a/src/popup/app-routing.animations.ts b/src/popup/app-routing.animations.ts index b75b15e2a7..0c44460d62 100644 --- a/src/popup/app-routing.animations.ts +++ b/src/popup/app-routing.animations.ts @@ -185,8 +185,6 @@ export const routerTransition = trigger('routerTransition', [ transition('tabs => premium', inSlideLeft), transition('premium => tabs', outSlideRight), -]); -if (!BrowserApi.isSafariApi) { - routerTransition.definitions.push(transition('tabs => lock', inSlideDown)); -} + transition('tabs => lock', inSlideDown), +]); diff --git a/src/popup/app-routing.module.ts b/src/popup/app-routing.module.ts index 5c3ea8dbba..cf253b8d9f 100644 --- a/src/popup/app-routing.module.ts +++ b/src/popup/app-routing.module.ts @@ -20,9 +20,14 @@ import { SetPasswordComponent } from './accounts/set-password.component'; import { TwoFactorOptionsComponent } from './accounts/two-factor-options.component'; import { TwoFactorComponent } from './accounts/two-factor.component'; import { SsoComponent } from './accounts/sso.component'; -import { PasswordGeneratorHistoryComponent } from './generator/password-generator-history.component'; + import { PasswordGeneratorComponent } from './generator/password-generator.component'; +import { PasswordGeneratorHistoryComponent } from './generator/password-generator-history.component'; + import { PrivateModeComponent } from './private-mode.component'; +import { TabsComponent } from './tabs.component'; + +import { ExcludedDomainsComponent } from './settings/excluded-domains.component'; import { ExportComponent } from './settings/export.component'; import { FolderAddEditComponent } from './settings/folder-add-edit.component'; import { FoldersComponent } from './settings/folders.component'; @@ -30,7 +35,7 @@ import { OptionsComponent } from './settings/options.component'; import { PremiumComponent } from './settings/premium.component'; import { SettingsComponent } from './settings/settings.component'; import { SyncComponent } from './settings/sync.component'; -import { TabsComponent } from './tabs.component'; + import { AddEditComponent } from './vault/add-edit.component'; import { AttachmentsComponent } from './vault/attachments.component'; import { CiphersComponent } from './vault/ciphers.component'; @@ -41,6 +46,8 @@ import { PasswordHistoryComponent } from './vault/password-history.component'; import { ShareComponent } from './vault/share.component'; import { ViewComponent } from './vault/view.component'; +import { SendComponent } from './send/send.component'; + const routes: Routes = [ { path: '', @@ -200,6 +207,12 @@ const routes: Routes = [ canActivate: [AuthGuardService], data: { state: 'sync' }, }, + { + path: 'excluded-domains', + component: ExcludedDomainsComponent, + canActivate: [AuthGuardService], + data: { state: 'excluded-domains' }, + }, { path: 'premium', component: PremiumComponent, @@ -258,6 +271,12 @@ const routes: Routes = [ canActivate: [AuthGuardService], data: { state: 'tabs_settings' }, }, + { + path: 'send', + component: SendComponent, + canActivate: [AuthGuardService], + data: { state: 'tabs_send' }, + }, ], }, ]; diff --git a/src/popup/app.module.ts b/src/popup/app.module.ts index 125f7a713e..b1a1efc800 100644 --- a/src/popup/app.module.ts +++ b/src/popup/app.module.ts @@ -25,10 +25,15 @@ import { SetPasswordComponent } from './accounts/set-password.component'; import { TwoFactorOptionsComponent } from './accounts/two-factor-options.component'; import { TwoFactorComponent } from './accounts/two-factor.component'; import { SsoComponent } from './accounts/sso.component'; -import { AppComponent } from './app.component'; + import { PasswordGeneratorHistoryComponent } from './generator/password-generator-history.component'; import { PasswordGeneratorComponent } from './generator/password-generator.component'; + +import { AppComponent } from './app.component'; import { PrivateModeComponent } from './private-mode.component'; +import { TabsComponent } from './tabs.component'; + +import { ExcludedDomainsComponent } from './settings/excluded-domains.component'; import { ExportComponent } from './settings/export.component'; import { FolderAddEditComponent } from './settings/folder-add-edit.component'; import { FoldersComponent } from './settings/folders.component'; @@ -36,7 +41,7 @@ import { OptionsComponent } from './settings/options.component'; import { PremiumComponent } from './settings/premium.component'; import { SettingsComponent } from './settings/settings.component'; import { SyncComponent } from './settings/sync.component'; -import { TabsComponent } from './tabs.component'; + import { AddEditComponent } from './vault/add-edit.component'; import { AttachmentsComponent } from './vault/attachments.component'; import { CiphersComponent } from './vault/ciphers.component'; @@ -47,6 +52,8 @@ import { PasswordHistoryComponent } from './vault/password-history.component'; import { ShareComponent } from './vault/share.component'; import { ViewComponent } from './vault/view.component'; +import { SendComponent } from './send/send.component'; + import { A11yTitleDirective } from 'jslib/angular/directives/a11y-title.directive'; import { ApiActionDirective } from 'jslib/angular/directives/api-action.directive'; import { AutofocusDirective } from 'jslib/angular/directives/autofocus.directive'; @@ -181,6 +188,7 @@ registerLocaleData(localeZhTw, 'zh-TW'); ColorPasswordPipe, CurrentTabComponent, EnvironmentComponent, + ExcludedDomainsComponent, ExportComponent, FallbackSrcDirective, FolderAddEditComponent, @@ -203,6 +211,7 @@ registerLocaleData(localeZhTw, 'zh-TW'); RegisterComponent, SearchCiphersPipe, SelectCopyDirective, + SendComponent, SettingsComponent, ShareComponent, StopClickDirective, diff --git a/src/popup/components/action-buttons.component.html b/src/popup/components/action-buttons.component.html index 5d81817e9c..a3caa2c933 100644 --- a/src/popup/components/action-buttons.component.html +++ b/src/popup/components/action-buttons.component.html @@ -2,7 +2,7 @@ - diff --git a/src/popup/components/action-buttons.component.ts b/src/popup/components/action-buttons.component.ts index 909d20b8e2..8cc92d8842 100644 --- a/src/popup/components/action-buttons.component.ts +++ b/src/popup/components/action-buttons.component.ts @@ -29,6 +29,7 @@ import { PopupUtilsService } from '../services/popup-utils.service'; }) export class ActionButtonsComponent { @Output() onView = new EventEmitter(); + @Output() launchEvent = new EventEmitter(); @Input() cipher: CipherView; @Input() showView = false; @@ -44,16 +45,8 @@ export class ActionButtonsComponent { this.userHasPremiumAccess = await this.userService.canAccessPremium(); } - launch() { - if (this.cipher.type !== CipherType.Login || !this.cipher.login.canLaunch) { - return; - } - - this.analytics.eventTrack.next({ action: 'Launched URI From Listing' }); - BrowserApi.createNewTab(this.cipher.login.launchUri); - if (this.popupUtilsService.inPopup(window)) { - BrowserApi.closePopup(window); - } + launchCipher() { + this.launchEvent.emit(this.cipher); } async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) { diff --git a/src/popup/components/ciphers-list.component.html b/src/popup/components/ciphers-list.component.html index 33c585ad1f..6c8c4a407b 100644 --- a/src/popup/components/ciphers-list.component.html +++ b/src/popup/components/ciphers-list.component.html @@ -1,4 +1,4 @@ -

- + diff --git a/src/popup/components/ciphers-list.component.ts b/src/popup/components/ciphers-list.component.ts index 81b477af3d..4c1101826c 100644 --- a/src/popup/components/ciphers-list.component.ts +++ b/src/popup/components/ciphers-list.component.ts @@ -15,7 +15,7 @@ import { CipherView } from 'jslib/models/view/cipherView'; }) export class CiphersListComponent { @Output() onSelected = new EventEmitter(); - @Output() onDoubleSelected = new EventEmitter(); + @Output() launchEvent = new EventEmitter(); @Output() onView = new EventEmitter(); @Input() ciphers: CipherView[]; @Input() showView = false; @@ -27,8 +27,8 @@ export class CiphersListComponent { this.onSelected.emit(c); } - doubleSelectCipher(c: CipherView) { - this.onDoubleSelected.emit(c); + launchCipher(c: CipherView) { + this.launchEvent.emit(c); } viewCipher(c: CipherView) { diff --git a/src/popup/components/pop-out.component.html b/src/popup/components/pop-out.component.html index 2f14e7c0cb..1c34a1c762 100644 --- a/src/popup/components/pop-out.component.html +++ b/src/popup/components/pop-out.component.html @@ -1,4 +1,4 @@ - + diff --git a/src/popup/components/pop-out.component.ts b/src/popup/components/pop-out.component.ts index 40e02c6906..df9ceba57f 100644 --- a/src/popup/components/pop-out.component.ts +++ b/src/popup/components/pop-out.component.ts @@ -22,8 +22,7 @@ export class PopOutComponent implements OnInit { ngOnInit() { if (this.show) { - this.show = !this.platformUtilsService.isSafari(); - if (this.show && this.popupUtilsService.inSidebar(window) && this.platformUtilsService.isFirefox()) { + if (this.popupUtilsService.inSidebar(window) && this.platformUtilsService.isFirefox()) { this.show = false; } } diff --git a/src/popup/scss/base.scss b/src/popup/scss/base.scss index c1b5a242b4..7911b0acd4 100644 --- a/src/popup/scss/base.scss +++ b/src/popup/scss/base.scss @@ -281,14 +281,13 @@ header { } ul { - width: 100%; + display: flex; list-style: none; padding: 0; margin: 0; li { - width: 25%; - float: left; + flex: 1; display: inline-block; padding: 0; margin: 0; @@ -329,12 +328,6 @@ header { } } } - - &.tabs-3 { - ul li { - width: 33.33%; - } - } } app-root { @@ -342,6 +335,9 @@ app-root { width: 100%; height: 100%; z-index: 980; + @include themify($themes) { + background-color: themed('backgroundColor'); + } } content { diff --git a/src/popup/scss/box.scss b/src/popup/scss/box.scss index 71ad813d7a..34b6e363a2 100644 --- a/src/popup/scss/box.scss +++ b/src/popup/scss/box.scss @@ -378,11 +378,13 @@ &.disabled { @include themify($themes) { color: themed('disabledIconColor'); + opacity: themed('disabledBoxOpacity'); } &:hover { @include themify($themes) { color: themed('disabledIconColor'); + opacity: themed('disabledBoxOpacity'); } } } diff --git a/src/popup/scss/environment.scss b/src/popup/scss/environment.scss index eddd550e07..c3b5378ee2 100644 --- a/src/popup/scss/environment.scss +++ b/src/popup/scss/environment.scss @@ -1,6 +1,18 @@ @import "variables.scss"; html.browser_safari { + body { + height: 360px !important; + + &.body-xs { + height: 300px !important; + } + + &.body-full { + height: 100% !important; + } + } + header { .search .fa { left: 20px; diff --git a/src/popup/scss/variables.scss b/src/popup/scss/variables.scss index 8d29409eb8..8ec057f6e9 100644 --- a/src/popup/scss/variables.scss +++ b/src/popup/scss/variables.scss @@ -9,7 +9,8 @@ $text-color: #000000; $border-color: #f0f0f0; $border-color-dark: #ddd; $list-item-hover: #fbfbfb; -$list-icon-color: #c7c7cd; +$list-icon-color: #767679; +$disabled-box-opacity: 1; $border-radius: 3px; $line-height-base: 1.42857143; @@ -59,6 +60,7 @@ $themes: ( headerInputPlaceholderColor: lighten($brand-primary, 35%), listItemBackgroundHoverColor: $list-item-hover, disabledIconColor: $list-icon-color, + disabledBoxOpacity: $disabled-box-opacity, headingColor: $gray-light, labelColor: $gray-light, mutedColor: $text-muted, @@ -106,7 +108,8 @@ $themes: ( headerInputColor: #ffffff, headerInputPlaceholderColor: #707070, listItemBackgroundHoverColor: #3c3c3c, - disabledIconColor: #c7c7cd, + disabledIconColor: #cacaca, + disabledBoxOpacity: 0.5, headingColor: #a3a3a3, labelColor: #a3a3a3, mutedColor: #a3a3a3, @@ -154,7 +157,8 @@ $themes: ( headerInputColor: $nord2, headerInputPlaceholderColor: $nord3, listItemBackgroundHoverColor: $nord3, - disabledIconColor: $nord5, + disabledIconColor: $nord4, + disabledBoxOpacity: 0.5, headingColor: $nord4, labelColor: $nord4, mutedColor: $nord4, diff --git a/src/popup/send/send.component.html b/src/popup/send/send.component.html new file mode 100644 index 0000000000..7c646071e9 --- /dev/null +++ b/src/popup/send/send.component.html @@ -0,0 +1,8 @@ +
+
+ +
+ +

Coming soon...

+
+
diff --git a/src/popup/send/send.component.ts b/src/popup/send/send.component.ts new file mode 100644 index 0000000000..540e3989d1 --- /dev/null +++ b/src/popup/send/send.component.ts @@ -0,0 +1,35 @@ +import { + Component, + NgZone, +} from '@angular/core'; + +import { SendView } from 'jslib/models/view/sendView'; + +import { SendComponent as BaseSendComponent } from 'jslib/angular/components/send/send.component'; + +import { EnvironmentService } from 'jslib/abstractions/environment.service'; +import { I18nService } from 'jslib/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; +import { SendService } from 'jslib/abstractions/send.service'; + +import { BroadcasterService } from 'jslib/angular/services/broadcaster.service'; + +@Component({ + selector: 'app-send', + templateUrl: 'send.component.html', +}) +export class SendComponent extends BaseSendComponent { + constructor(sendService: SendService, i18nService: I18nService, + platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService, + broadcasterService: BroadcasterService, ngZone: NgZone) { + super(sendService, i18nService, platformUtilsService, environmentService, broadcasterService, ngZone); + } + + addSend() { + // TODO + } + + editSend(send: SendView) { + // TODO + } +} diff --git a/src/popup/services/popup-utils.service.ts b/src/popup/services/popup-utils.service.ts index 21ce5fd950..a02ba61c8e 100644 --- a/src/popup/services/popup-utils.service.ts +++ b/src/popup/services/popup-utils.service.ts @@ -71,8 +71,6 @@ export class PopupUtilsService { chrome.tabs.create({ url: href, }); - } else if ((typeof safari !== 'undefined')) { - // Safari can't open popup in full page tab :( } } } diff --git a/src/popup/settings/excluded-domains.component.html b/src/popup/settings/excluded-domains.component.html new file mode 100644 index 0000000000..7a10449282 --- /dev/null +++ b/src/popup/settings/excluded-domains.component.html @@ -0,0 +1,53 @@ +
+
+ +
+ {{'excludedDomains' | i18n}} +
+
+ +
+
+ +
+
+ +
+ + + +
+ + + + +
+
+ + + +
+
+
+ + {{'newUri' | i18n}} + +
+ +
+
+
\ No newline at end of file diff --git a/src/popup/settings/excluded-domains.component.ts b/src/popup/settings/excluded-domains.component.ts new file mode 100644 index 0000000000..57bfa0bb02 --- /dev/null +++ b/src/popup/settings/excluded-domains.component.ts @@ -0,0 +1,112 @@ +import { + Component, + OnDestroy, + OnInit, + NgZone +} from '@angular/core'; +import { Router } from '@angular/router'; + +import { I18nService } from 'jslib/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; +import { StorageService } from 'jslib/abstractions/storage.service'; +import { ConstantsService } from 'jslib/services/constants.service'; +import { BroadcasterService } from 'jslib/angular/services/broadcaster.service'; + +import { BrowserApi } from '../../browser/browserApi'; +import { Utils } from 'jslib/misc/utils'; + +interface ExcludedDomain { + uri: string; + showCurrentUris: boolean; +} + +const BroadcasterSubscriptionId = 'excludedDomains'; + +@Component({ + selector: 'app-excluded-domains', + templateUrl: 'excluded-domains.component.html', +}) +export class ExcludedDomainsComponent implements OnInit, OnDestroy { + excludedDomains: ExcludedDomain[] = []; + currentUris: string[]; + loadCurrentUrisTimeout: number; + + constructor(private storageService: StorageService, + private i18nService: I18nService, private router: Router, + private broadcasterService: BroadcasterService, private ngZone: NgZone, + private platformUtilsService: PlatformUtilsService) { + } + + async ngOnInit() { + const savedDomains = await this.storageService.get(ConstantsService.neverDomainsKey); + if (savedDomains) { + for (const uri of Object.keys(savedDomains)) { + this.excludedDomains.push({ uri: uri, showCurrentUris: false }); + } + } + + await this.loadCurrentUris(); + + this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => { + this.ngZone.run(async () => { + switch (message.command) { + case 'tabChanged': + case 'windowChanged': + if (this.loadCurrentUrisTimeout != null) { + window.clearTimeout(this.loadCurrentUrisTimeout); + } + this.loadCurrentUrisTimeout = window.setTimeout(async () => await this.loadCurrentUris(), 500); + break; + default: + break; + } + }); + }); + } + + ngOnDestroy() { + this.broadcasterService.unsubscribe(BroadcasterSubscriptionId); + } + + async addUri() { + this.excludedDomains.push({ uri: '', showCurrentUris: false }); + } + + async removeUri(i: number) { + this.excludedDomains.splice(i, 1); + } + + async submit() { + const savedDomains: { [name: string]: null } = {}; + for (const domain of this.excludedDomains) { + if (domain.uri && domain.uri !== '') { + const validDomain = Utils.getHostname(domain.uri); + if (!validDomain) { + this.platformUtilsService.showToast('error', null, + this.i18nService.t('excludedDomainsInvalidDomain', domain.uri)); + return; + } + savedDomains[validDomain] = null; + } + } + await this.storageService.save(ConstantsService.neverDomainsKey, savedDomains); + this.router.navigate(['/tabs/settings']); + } + + trackByFunction(index: number, item: any) { + return index; + } + + toggleUriInput(domain: ExcludedDomain) { + domain.showCurrentUris = !domain.showCurrentUris; + } + + async loadCurrentUris() { + const tabs = await BrowserApi.tabsQuery({ windowType: 'normal' }); + if (tabs) { + const uriSet = new Set(tabs.map((tab) => Utils.getHostname(tab.url))); + uriSet.delete(null); + this.currentUris = Array.from(uriSet); + } + } +} diff --git a/src/popup/settings/options.component.html b/src/popup/settings/options.component.html index 6104b85d84..938bcd756e 100644 --- a/src/popup/settings/options.component.html +++ b/src/popup/settings/options.component.html @@ -96,7 +96,7 @@ -
+
diff --git a/src/popup/settings/options.component.ts b/src/popup/settings/options.component.ts index 4050060617..e5cf6322bb 100644 --- a/src/popup/settings/options.component.ts +++ b/src/popup/settings/options.component.ts @@ -29,7 +29,6 @@ export class OptionsComponent implements OnInit { disableChangedPasswordNotification = false; dontShowCards = false; dontShowIdentities = false; - showDisableContextMenu = true; showClearClipboard = true; theme: string; themeOptions: any[]; @@ -68,8 +67,6 @@ export class OptionsComponent implements OnInit { } async ngOnInit() { - this.showDisableContextMenu = !this.platformUtilsService.isSafari(); - this.enableAutoFillOnPageLoad = await this.storageService.get( ConstantsService.enableAutoFillOnPageLoadKey); diff --git a/src/popup/settings/settings.component.html b/src/popup/settings/settings.component.html index fc1eeedfe7..ba69adeddd 100644 --- a/src/popup/settings/settings.component.html +++ b/src/popup/settings/settings.component.html @@ -19,6 +19,10 @@
{{'sync' | i18n}}
+ +
{{'excludedDomains' | i18n}}
+ +
@@ -42,7 +46,7 @@
-
+
diff --git a/src/popup/settings/settings.component.ts b/src/popup/settings/settings.component.ts index 0cf3972dce..cddb5c07f8 100644 --- a/src/popup/settings/settings.component.ts +++ b/src/popup/settings/settings.component.ts @@ -51,6 +51,7 @@ export class SettingsComponent implements OnInit { vaultTimeoutActions: any[]; vaultTimeoutAction: string; pin: boolean = null; + supportsBiometric: boolean; biometric: boolean = false; previousVaultTimeout: number = null; @@ -101,6 +102,8 @@ export class SettingsComponent implements OnInit { const pinSet = await this.vaultTimeoutService.isPinLockSet(); this.pin = pinSet[0] || pinSet[1]; + + this.supportsBiometric = await this.platformUtilsService.supportsBiometric(); this.biometric = await this.vaultTimeoutService.isBiometricLockSet(); } @@ -207,7 +210,33 @@ export class SettingsComponent implements OnInit { } async updateBiometric() { - if (this.biometric) { + if (this.biometric && this.supportsBiometric) { + + // Request permission to use the optional permission for nativeMessaging + if (!this.platformUtilsService.isFirefox()) { + const hasPermission = await new Promise((resolve) => { + chrome.permissions.contains({permissions: ['nativeMessaging']}, resolve); + }); + + if (!hasPermission) { + await this.platformUtilsService.showDialog( + this.i18nService.t('nativeMessagingPermissionPromptDesc'), this.i18nService.t('nativeMessagingPermissionPromptTitle'), + this.i18nService.t('ok'), null); + + const granted = await new Promise((resolve, reject) => { + chrome.permissions.request({permissions: ['nativeMessaging']}, resolve); + }); + + if (!granted) { + await this.platformUtilsService.showDialog( + this.i18nService.t('nativeMessaginPermissionErrorDesc'), this.i18nService.t('nativeMessaginPermissionErrorTitle'), + this.i18nService.t('ok'), null); + this.biometric = false; + return; + } + } + } + const submitted = Swal.fire({ heightAuto: false, buttonsStyling: false, diff --git a/src/popup/tabs.component.html b/src/popup/tabs.component.html index 71de2575bf..645bd2359e 100644 --- a/src/popup/tabs.component.html +++ b/src/popup/tabs.component.html @@ -1,6 +1,6 @@
+ (onSelected)="selectCipher($event)" (launchEvent)="launchCipher($event)">
diff --git a/src/popup/vault/current-tab.component.html b/src/popup/vault/current-tab.component.html index 4fe67ae9b2..0d4181f5cb 100644 --- a/src/popup/vault/current-tab.component.html +++ b/src/popup/vault/current-tab.component.html @@ -1,5 +1,5 @@
-
+
@@ -146,7 +146,7 @@
+ (launchEvent)="launchCipher($event)">
diff --git a/src/popup/vault/groupings.component.ts b/src/popup/vault/groupings.component.ts index 84aca18084..5c6c2bc79a 100644 --- a/src/popup/vault/groupings.component.ts +++ b/src/popup/vault/groupings.component.ts @@ -92,8 +92,7 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit async ngOnInit() { this.searchTypeSearch = !this.platformUtilsService.isSafari(); - this.showLeftHeader = !this.platformUtilsService.isSafari() && - !(this.popupUtils.inSidebar(window) && this.platformUtilsService.isFirefox()); + this.showLeftHeader = !(this.popupUtils.inSidebar(window) && this.platformUtilsService.isFirefox()); this.stateService.remove('CiphersComponent'); this.broadcasterService.subscribe(ComponentId, (message: any) => { diff --git a/src/safari/desktop.xcodeproj/project.pbxproj b/src/safari/desktop.xcodeproj/project.pbxproj index b563d9d34e..c3157a17bb 100644 --- a/src/safari/desktop.xcodeproj/project.pbxproj +++ b/src/safari/desktop.xcodeproj/project.pbxproj @@ -7,37 +7,42 @@ objects = { /* Begin PBXBuildFile section */ - 27E5E98D22F3D5B2005EA1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E5E98C22F3D5B2005EA1D9 /* AppDelegate.swift */; }; - 27E5E98F22F3D5B2005EA1D9 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E5E98E22F3D5B2005EA1D9 /* ViewController.swift */; }; - 27E5E99122F3D5B4005EA1D9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 27E5E99022F3D5B4005EA1D9 /* Assets.xcassets */; }; - 27E5E99422F3D5B4005EA1D9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 27E5E99222F3D5B4005EA1D9 /* Main.storyboard */; }; - 27E5E9A322F3D5FE005EA1D9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27E5E9A222F3D5FE005EA1D9 /* Cocoa.framework */; }; - 27E5E9A622F3D5FE005EA1D9 /* SafariExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E5E9A522F3D5FE005EA1D9 /* SafariExtensionHandler.swift */; }; - 27E5E9A822F3D5FE005EA1D9 /* SafariExtensionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E5E9A722F3D5FE005EA1D9 /* SafariExtensionViewController.swift */; }; - 27E5E9AB22F3D5FE005EA1D9 /* SafariExtensionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27E5E9A922F3D5FE005EA1D9 /* SafariExtensionViewController.xib */; }; - 27E5E9B022F3D5FE005EA1D9 /* ToolbarItemIcon.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 27E5E9AF22F3D5FE005EA1D9 /* ToolbarItemIcon.pdf */; }; - 27E5E9B422F3D5FE005EA1D9 /* safari.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 27E5E9A022F3D5FE005EA1D9 /* safari.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 27E5E9BC22F4B9D5005EA1D9 /* app in Resources */ = {isa = PBXBuildFile; fileRef = 27E5E9BB22F4B9D5005EA1D9 /* app */; }; + 55E0374D2577FA6B00979016 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E0374C2577FA6B00979016 /* AppDelegate.swift */; }; + 55E037502577FA6B00979016 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 55E0374E2577FA6B00979016 /* Main.storyboard */; }; + 55E037522577FA6B00979016 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E037512577FA6B00979016 /* ViewController.swift */; }; + 55E037542577FA6E00979016 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 55E037532577FA6E00979016 /* Assets.xcassets */; }; + 55E0375B2577FA6F00979016 /* safari.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 55E0375A2577FA6F00979016 /* safari.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 55E037602577FA6F00979016 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E0375F2577FA6F00979016 /* Cocoa.framework */; }; + 55E037632577FA6F00979016 /* SafariWebExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E037622577FA6F00979016 /* SafariWebExtensionHandler.swift */; }; + 55E037792577FA6F00979016 /* popup in Resources */ = {isa = PBXBuildFile; fileRef = 55E037702577FA6F00979016 /* popup */; }; + 55E0377A2577FA6F00979016 /* background.js in Resources */ = {isa = PBXBuildFile; fileRef = 55E037712577FA6F00979016 /* background.js */; }; + 55E0377B2577FA6F00979016 /* images in Resources */ = {isa = PBXBuildFile; fileRef = 55E037722577FA6F00979016 /* images */; }; + 55E0377C2577FA6F00979016 /* notification in Resources */ = {isa = PBXBuildFile; fileRef = 55E037732577FA6F00979016 /* notification */; }; + 55E0377D2577FA6F00979016 /* content in Resources */ = {isa = PBXBuildFile; fileRef = 55E037742577FA6F00979016 /* content */; }; + 55E0377E2577FA6F00979016 /* vendor.js in Resources */ = {isa = PBXBuildFile; fileRef = 55E037752577FA6F00979016 /* vendor.js */; }; + 55E0377F2577FA6F00979016 /* manifest.json in Resources */ = {isa = PBXBuildFile; fileRef = 55E037762577FA6F00979016 /* manifest.json */; }; + 55E037802577FA6F00979016 /* background.html in Resources */ = {isa = PBXBuildFile; fileRef = 55E037772577FA6F00979016 /* background.html */; }; + 55E037812577FA6F00979016 /* _locales in Resources */ = {isa = PBXBuildFile; fileRef = 55E037782577FA6F00979016 /* _locales */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 27E5E9B222F3D5FE005EA1D9 /* PBXContainerItemProxy */ = { + 55E0375C2577FA6F00979016 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 27E5E98122F3D5B2005EA1D9 /* Project object */; + containerPortal = 55E037402577FA6B00979016 /* Project object */; proxyType = 1; - remoteGlobalIDString = 27E5E99F22F3D5FD005EA1D9; - remoteInfo = safari; + remoteGlobalIDString = 55E037592577FA6F00979016; + remoteInfo = "safari"; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 27E5E9B822F3D5FE005EA1D9 /* Embed App Extensions */ = { + 55E0376B2577FA6F00979016 /* Embed App Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - 27E5E9B422F3D5FE005EA1D9 /* safari.appex in Embed App Extensions */, + 55E0375B2577FA6F00979016 /* safari.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -45,151 +50,170 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 27E5E98922F3D5B2005EA1D9 /* desktop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 27E5E98C22F3D5B2005EA1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 27E5E98E22F3D5B2005EA1D9 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 27E5E99022F3D5B4005EA1D9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 27E5E99322F3D5B4005EA1D9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 27E5E99522F3D5B4005EA1D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 27E5E99622F3D5B4005EA1D9 /* desktop.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = desktop.entitlements; sourceTree = ""; }; - 27E5E9A022F3D5FE005EA1D9 /* safari.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = safari.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - 27E5E9A222F3D5FE005EA1D9 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 27E5E9A522F3D5FE005EA1D9 /* SafariExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariExtensionHandler.swift; sourceTree = ""; }; - 27E5E9A722F3D5FE005EA1D9 /* SafariExtensionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariExtensionViewController.swift; sourceTree = ""; }; - 27E5E9AA22F3D5FE005EA1D9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SafariExtensionViewController.xib; sourceTree = ""; }; - 27E5E9AC22F3D5FE005EA1D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 27E5E9AF22F3D5FE005EA1D9 /* ToolbarItemIcon.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = ToolbarItemIcon.pdf; sourceTree = ""; }; - 27E5E9B122F3D5FE005EA1D9 /* safari.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = safari.entitlements; sourceTree = ""; }; - 27E5E9BB22F4B9D5005EA1D9 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = ""; }; + 55E037482577FA6B00979016 /* desktop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 55E0374B2577FA6B00979016 /* desktop.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = desktop.entitlements; sourceTree = ""; }; + 55E0374C2577FA6B00979016 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 55E0374F2577FA6B00979016 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 55E037512577FA6B00979016 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 55E037532577FA6E00979016 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 55E037552577FA6E00979016 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 55E0375A2577FA6F00979016 /* safari.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = safari.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 55E0375F2577FA6F00979016 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 55E037622577FA6F00979016 /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; + 55E037642577FA6F00979016 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 55E037652577FA6F00979016 /* safari.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = safari.entitlements; sourceTree = ""; }; + 55E037702577FA6F00979016 /* popup */ = {isa = PBXFileReference; lastKnownFileType = folder; name = popup; path = ../../../build/popup; sourceTree = ""; }; + 55E037712577FA6F00979016 /* background.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = background.js; path = ../../../build/background.js; sourceTree = ""; }; + 55E037722577FA6F00979016 /* images */ = {isa = PBXFileReference; lastKnownFileType = folder; name = images; path = ../../../build/images; sourceTree = ""; }; + 55E037732577FA6F00979016 /* notification */ = {isa = PBXFileReference; lastKnownFileType = folder; name = notification; path = ../../../build/notification; sourceTree = ""; }; + 55E037742577FA6F00979016 /* content */ = {isa = PBXFileReference; lastKnownFileType = folder; name = content; path = ../../../build/content; sourceTree = ""; }; + 55E037752577FA6F00979016 /* vendor.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = vendor.js; path = ../../../build/vendor.js; sourceTree = ""; }; + 55E037762577FA6F00979016 /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = manifest.json; path = ../../../build/manifest.json; sourceTree = ""; }; + 55E037772577FA6F00979016 /* background.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = background.html; path = ../../../build/background.html; sourceTree = ""; }; + 55E037782577FA6F00979016 /* _locales */ = {isa = PBXFileReference; lastKnownFileType = folder; name = _locales; path = ../../../build/_locales; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 27E5E98622F3D5B2005EA1D9 /* Frameworks */ = { + 55E037452577FA6B00979016 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 27E5E99D22F3D5FD005EA1D9 /* Frameworks */ = { + 55E037572577FA6F00979016 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 27E5E9A322F3D5FE005EA1D9 /* Cocoa.framework in Frameworks */, + 55E037602577FA6F00979016 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27E5E98022F3D5B2005EA1D9 = { + 55E0373F2577FA6B00979016 = { isa = PBXGroup; children = ( - 27E5E98B22F3D5B2005EA1D9 /* desktop */, - 27E5E9A422F3D5FE005EA1D9 /* safari */, - 27E5E9A122F3D5FE005EA1D9 /* Frameworks */, - 27E5E98A22F3D5B2005EA1D9 /* Products */, + 55E0374A2577FA6B00979016 /* desktop */, + 55E037612577FA6F00979016 /* safari */, + 55E0375E2577FA6F00979016 /* Frameworks */, + 55E037492577FA6B00979016 /* Products */, ); sourceTree = ""; }; - 27E5E98A22F3D5B2005EA1D9 /* Products */ = { + 55E037492577FA6B00979016 /* Products */ = { isa = PBXGroup; children = ( - 27E5E98922F3D5B2005EA1D9 /* desktop.app */, - 27E5E9A022F3D5FE005EA1D9 /* safari.appex */, + 55E037482577FA6B00979016 /* desktop.app */, + 55E0375A2577FA6F00979016 /* safari.appex */, ); name = Products; sourceTree = ""; }; - 27E5E98B22F3D5B2005EA1D9 /* desktop */ = { + 55E0374A2577FA6B00979016 /* desktop */ = { isa = PBXGroup; children = ( - 27E5E98C22F3D5B2005EA1D9 /* AppDelegate.swift */, - 27E5E98E22F3D5B2005EA1D9 /* ViewController.swift */, - 27E5E99022F3D5B4005EA1D9 /* Assets.xcassets */, - 27E5E99222F3D5B4005EA1D9 /* Main.storyboard */, - 27E5E99522F3D5B4005EA1D9 /* Info.plist */, - 27E5E99622F3D5B4005EA1D9 /* desktop.entitlements */, + 55E0374B2577FA6B00979016 /* desktop.entitlements */, + 55E0374C2577FA6B00979016 /* AppDelegate.swift */, + 55E0374E2577FA6B00979016 /* Main.storyboard */, + 55E037512577FA6B00979016 /* ViewController.swift */, + 55E037532577FA6E00979016 /* Assets.xcassets */, + 55E037552577FA6E00979016 /* Info.plist */, ); path = desktop; sourceTree = ""; }; - 27E5E9A122F3D5FE005EA1D9 /* Frameworks */ = { + 55E0375E2577FA6F00979016 /* Frameworks */ = { isa = PBXGroup; children = ( - 27E5E9A222F3D5FE005EA1D9 /* Cocoa.framework */, + 55E0375F2577FA6F00979016 /* Cocoa.framework */, ); name = Frameworks; sourceTree = ""; }; - 27E5E9A422F3D5FE005EA1D9 /* safari */ = { + 55E037612577FA6F00979016 /* safari */ = { isa = PBXGroup; children = ( - 27E5E9BB22F4B9D5005EA1D9 /* app */, - 27E5E9A522F3D5FE005EA1D9 /* SafariExtensionHandler.swift */, - 27E5E9A722F3D5FE005EA1D9 /* SafariExtensionViewController.swift */, - 27E5E9A922F3D5FE005EA1D9 /* SafariExtensionViewController.xib */, - 27E5E9AC22F3D5FE005EA1D9 /* Info.plist */, - 27E5E9AF22F3D5FE005EA1D9 /* ToolbarItemIcon.pdf */, - 27E5E9B122F3D5FE005EA1D9 /* safari.entitlements */, + 55E0376F2577FA6F00979016 /* Resources */, + 55E037622577FA6F00979016 /* SafariWebExtensionHandler.swift */, + 55E037642577FA6F00979016 /* Info.plist */, + 55E037652577FA6F00979016 /* safari.entitlements */, ); path = safari; sourceTree = ""; }; + 55E0376F2577FA6F00979016 /* Resources */ = { + isa = PBXGroup; + children = ( + 55E037702577FA6F00979016 /* popup */, + 55E037712577FA6F00979016 /* background.js */, + 55E037722577FA6F00979016 /* images */, + 55E037732577FA6F00979016 /* notification */, + 55E037742577FA6F00979016 /* content */, + 55E037752577FA6F00979016 /* vendor.js */, + 55E037762577FA6F00979016 /* manifest.json */, + 55E037772577FA6F00979016 /* background.html */, + 55E037782577FA6F00979016 /* _locales */, + ); + name = Resources; + path = "safari"; + sourceTree = SOURCE_ROOT; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 27E5E98822F3D5B2005EA1D9 /* desktop */ = { + 55E037472577FA6B00979016 /* desktop */ = { isa = PBXNativeTarget; - buildConfigurationList = 27E5E99922F3D5B4005EA1D9 /* Build configuration list for PBXNativeTarget "desktop" */; + buildConfigurationList = 55E0376C2577FA6F00979016 /* Build configuration list for PBXNativeTarget "desktop" */; buildPhases = ( - 27E5E98522F3D5B2005EA1D9 /* Sources */, - 27E5E98622F3D5B2005EA1D9 /* Frameworks */, - 27E5E98722F3D5B2005EA1D9 /* Resources */, - 27E5E9B822F3D5FE005EA1D9 /* Embed App Extensions */, + 55E037442577FA6B00979016 /* Sources */, + 55E037452577FA6B00979016 /* Frameworks */, + 55E037462577FA6B00979016 /* Resources */, + 55E0376B2577FA6F00979016 /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( - 27E5E9B322F3D5FE005EA1D9 /* PBXTargetDependency */, + 55E0375D2577FA6F00979016 /* PBXTargetDependency */, ); name = desktop; productName = desktop; - productReference = 27E5E98922F3D5B2005EA1D9 /* desktop.app */; + productReference = 55E037482577FA6B00979016 /* desktop.app */; productType = "com.apple.product-type.application"; }; - 27E5E99F22F3D5FD005EA1D9 /* safari */ = { + 55E037592577FA6F00979016 /* safari */ = { isa = PBXNativeTarget; - buildConfigurationList = 27E5E9B522F3D5FE005EA1D9 /* Build configuration list for PBXNativeTarget "safari" */; + buildConfigurationList = 55E037682577FA6F00979016 /* Build configuration list for PBXNativeTarget "safari" */; buildPhases = ( - 27E5E99C22F3D5FD005EA1D9 /* Sources */, - 27E5E99D22F3D5FD005EA1D9 /* Frameworks */, - 27E5E99E22F3D5FD005EA1D9 /* Resources */, + 55E037562577FA6F00979016 /* Sources */, + 55E037572577FA6F00979016 /* Frameworks */, + 55E037582577FA6F00979016 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = safari; - productName = safari; - productReference = 27E5E9A022F3D5FE005EA1D9 /* safari.appex */; + productName = "safari"; + productReference = 55E0375A2577FA6F00979016 /* safari.appex */; productType = "com.apple.product-type.app-extension"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 27E5E98122F3D5B2005EA1D9 /* Project object */ = { + 55E037402577FA6B00979016 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1030; - LastUpgradeCheck = 1030; + LastSwiftUpdateCheck = 1220; + LastUpgradeCheck = 1220; ORGANIZATIONNAME = "8bit Solutions LLC"; TargetAttributes = { - 27E5E98822F3D5B2005EA1D9 = { - CreatedOnToolsVersion = 10.3; + 55E037472577FA6B00979016 = { + CreatedOnToolsVersion = 12.2; }; - 27E5E99F22F3D5FD005EA1D9 = { - CreatedOnToolsVersion = 10.3; + 55E037592577FA6F00979016 = { + CreatedOnToolsVersion = 12.2; SystemCapabilities = { com.apple.Sandbox = { enabled = 1; @@ -198,7 +222,7 @@ }; }; }; - buildConfigurationList = 27E5E98422F3D5B2005EA1D9 /* Build configuration list for PBXProject "desktop" */; + buildConfigurationList = 55E037432577FA6B00979016 /* Build configuration list for PBXProject "desktop" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; @@ -206,92 +230,88 @@ en, Base, ); - mainGroup = 27E5E98022F3D5B2005EA1D9; - productRefGroup = 27E5E98A22F3D5B2005EA1D9 /* Products */; + mainGroup = 55E0373F2577FA6B00979016; + productRefGroup = 55E037492577FA6B00979016 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 27E5E98822F3D5B2005EA1D9 /* desktop */, - 27E5E99F22F3D5FD005EA1D9 /* safari */, + 55E037472577FA6B00979016 /* desktop */, + 55E037592577FA6F00979016 /* safari */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 27E5E98722F3D5B2005EA1D9 /* Resources */ = { + 55E037462577FA6B00979016 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 27E5E99122F3D5B4005EA1D9 /* Assets.xcassets in Resources */, - 27E5E99422F3D5B4005EA1D9 /* Main.storyboard in Resources */, + 55E037542577FA6E00979016 /* Assets.xcassets in Resources */, + 55E037502577FA6B00979016 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 27E5E99E22F3D5FD005EA1D9 /* Resources */ = { + 55E037582577FA6F00979016 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 27E5E9BC22F4B9D5005EA1D9 /* app in Resources */, - 27E5E9B022F3D5FE005EA1D9 /* ToolbarItemIcon.pdf in Resources */, - 27E5E9AB22F3D5FE005EA1D9 /* SafariExtensionViewController.xib in Resources */, + 55E037812577FA6F00979016 /* _locales in Resources */, + 55E0377B2577FA6F00979016 /* images in Resources */, + 55E0377F2577FA6F00979016 /* manifest.json in Resources */, + 55E037802577FA6F00979016 /* background.html in Resources */, + 55E0377A2577FA6F00979016 /* background.js in Resources */, + 55E037792577FA6F00979016 /* popup in Resources */, + 55E0377C2577FA6F00979016 /* notification in Resources */, + 55E0377E2577FA6F00979016 /* vendor.js in Resources */, + 55E0377D2577FA6F00979016 /* content in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 27E5E98522F3D5B2005EA1D9 /* Sources */ = { + 55E037442577FA6B00979016 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 27E5E98F22F3D5B2005EA1D9 /* ViewController.swift in Sources */, - 27E5E98D22F3D5B2005EA1D9 /* AppDelegate.swift in Sources */, + 55E037522577FA6B00979016 /* ViewController.swift in Sources */, + 55E0374D2577FA6B00979016 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 27E5E99C22F3D5FD005EA1D9 /* Sources */ = { + 55E037562577FA6F00979016 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 27E5E9A822F3D5FE005EA1D9 /* SafariExtensionViewController.swift in Sources */, - 27E5E9A622F3D5FE005EA1D9 /* SafariExtensionHandler.swift in Sources */, + 55E037632577FA6F00979016 /* SafariWebExtensionHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 27E5E9B322F3D5FE005EA1D9 /* PBXTargetDependency */ = { + 55E0375D2577FA6F00979016 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 27E5E99F22F3D5FD005EA1D9 /* safari */; - targetProxy = 27E5E9B222F3D5FE005EA1D9 /* PBXContainerItemProxy */; + target = 55E037592577FA6F00979016 /* safari */; + targetProxy = 55E0375C2577FA6F00979016 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 27E5E99222F3D5B4005EA1D9 /* Main.storyboard */ = { + 55E0374E2577FA6B00979016 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 27E5E99322F3D5B4005EA1D9 /* Base */, + 55E0374F2577FA6B00979016 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 27E5E9A922F3D5FE005EA1D9 /* SafariExtensionViewController.xib */ = { - isa = PBXVariantGroup; - children = ( - 27E5E9AA22F3D5FE005EA1D9 /* Base */, - ); - name = SafariExtensionViewController.xib; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 27E5E99722F3D5B4005EA1D9 /* Debug */ = { + 55E037662577FA6F00979016 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -315,6 +335,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -340,7 +361,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -350,10 +371,9 @@ }; name = Debug; }; - 27E5E99822F3D5B4005EA1D9 /* Release */ = { + 55E037672577FA6F00979016 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -377,6 +397,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -396,7 +417,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -405,11 +426,12 @@ }; name = Release; }; - 27E5E99A22F3D5B4005EA1D9 /* Debug */ = { + 55E0376D2577FA6F00979016 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = desktop/desktop.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; @@ -420,19 +442,21 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_BUNDLE_IDENTIFIER = com.bitwarden.desktop; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; }; name = Debug; }; - 27E5E99B22F3D5B4005EA1D9 /* Release */ = { + 55E0376E2577FA6F00979016 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = desktop/desktop.entitlements; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = LTZ2PFU5D6; @@ -442,28 +466,28 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_BUNDLE_IDENTIFIER = com.bitwarden.desktop; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; }; name = Release; }; - 27E5E9B622F3D5FE005EA1D9 /* Debug */ = { + 55E037692577FA6F00979016 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_ENTITLEMENTS = safari/safari.entitlements; + CODE_SIGN_ENTITLEMENTS = "safari/safari.entitlements"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = LTZ2PFU5D6; ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = safari/Info.plist; + INFOPLIST_FILE = "safari/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", "@executable_path/../../../../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_BUNDLE_IDENTIFIER = com.bitwarden.desktop.safari; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -471,21 +495,22 @@ }; name = Debug; }; - 27E5E9B722F3D5FE005EA1D9 /* Release */ = { + 55E0376A2577FA6F00979016 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_ENTITLEMENTS = safari/safari.entitlements; + CODE_SIGN_ENTITLEMENTS = "safari/safari.entitlements"; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = LTZ2PFU5D6; ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = safari/Info.plist; + INFOPLIST_FILE = "safari/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", "@executable_path/../../../../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_BUNDLE_IDENTIFIER = com.bitwarden.desktop.safari; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -496,34 +521,34 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 27E5E98422F3D5B2005EA1D9 /* Build configuration list for PBXProject "desktop" */ = { + 55E037432577FA6B00979016 /* Build configuration list for PBXProject "desktop" */ = { isa = XCConfigurationList; buildConfigurations = ( - 27E5E99722F3D5B4005EA1D9 /* Debug */, - 27E5E99822F3D5B4005EA1D9 /* Release */, + 55E037662577FA6F00979016 /* Debug */, + 55E037672577FA6F00979016 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 27E5E99922F3D5B4005EA1D9 /* Build configuration list for PBXNativeTarget "desktop" */ = { + 55E037682577FA6F00979016 /* Build configuration list for PBXNativeTarget "safari" */ = { isa = XCConfigurationList; buildConfigurations = ( - 27E5E99A22F3D5B4005EA1D9 /* Debug */, - 27E5E99B22F3D5B4005EA1D9 /* Release */, + 55E037692577FA6F00979016 /* Debug */, + 55E0376A2577FA6F00979016 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 27E5E9B522F3D5FE005EA1D9 /* Build configuration list for PBXNativeTarget "safari" */ = { + 55E0376C2577FA6F00979016 /* Build configuration list for PBXNativeTarget "desktop" */ = { isa = XCConfigurationList; buildConfigurations = ( - 27E5E9B622F3D5FE005EA1D9 /* Debug */, - 27E5E9B722F3D5FE005EA1D9 /* Release */, + 55E0376D2577FA6F00979016 /* Debug */, + 55E0376E2577FA6F00979016 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 27E5E98122F3D5B2005EA1D9 /* Project object */; + rootObject = 55E037402577FA6B00979016 /* Project object */; } diff --git a/src/safari/desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/src/safari/desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 699699887b..919434a625 100644 --- a/src/safari/desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/src/safari/desktop.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/src/safari/desktop.xcodeproj/xcshareddata/xcschemes/desktop.xcscheme b/src/safari/desktop.xcodeproj/xcshareddata/xcschemes/desktop.xcscheme new file mode 100644 index 0000000000..7dd13c8dc8 --- /dev/null +++ b/src/safari/desktop.xcodeproj/xcshareddata/xcschemes/desktop.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/safari/desktop/AppDelegate.swift b/src/safari/desktop/AppDelegate.swift index 9ef5111723..6222982a6e 100644 --- a/src/safari/desktop/AppDelegate.swift +++ b/src/safari/desktop/AppDelegate.swift @@ -1,12 +1,18 @@ import Cocoa -@NSApplicationMain +@main class AppDelegate: NSObject, NSApplicationDelegate { - func applicationDidFinishLaunching(_: Notification) { + + func applicationDidFinishLaunching(_ notification: Notification) { // Insert code here to initialize your application } - func applicationWillTerminate(_: Notification) { + func applicationWillTerminate(_ notification: Notification) { // Insert code here to tear down your application } + + func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + } diff --git a/src/safari/desktop/Assets.xcassets/AccentColor.colorset/Contents.json b/src/safari/desktop/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000..eb87897008 --- /dev/null +++ b/src/safari/desktop/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/Contents.json b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/Contents.json index 2db2b1c7c6..6bf9a9b330 100644 --- a/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,54 +1,58 @@ { "images" : [ { - "idiom" : "mac", "size" : "16x16", + "idiom" : "mac", + "filename" : "icon16.png", "scale" : "1x" }, { - "idiom" : "mac", "size" : "16x16", + "idiom" : "mac", + "filename" : "icon32.png", "scale" : "2x" }, { - "idiom" : "mac", "size" : "32x32", + "idiom" : "mac", + "filename" : "icon32.png", "scale" : "1x" }, { "idiom" : "mac", - "size" : "32x32", - "scale" : "2x" + "scale" : "2x", + "size" : "32x32" }, { - "idiom" : "mac", "size" : "128x128", + "idiom" : "mac", + "filename" : "icon128.png", "scale" : "1x" }, { "idiom" : "mac", - "size" : "128x128", - "scale" : "2x" + "scale" : "2x", + "size" : "128x128" }, { "idiom" : "mac", - "size" : "256x256", - "scale" : "1x" + "scale" : "1x", + "size" : "256x256" }, { "idiom" : "mac", - "size" : "256x256", - "scale" : "2x" + "scale" : "2x", + "size" : "256x256" }, { "idiom" : "mac", - "size" : "512x512", - "scale" : "1x" + "scale" : "1x", + "size" : "512x512" }, { "idiom" : "mac", - "size" : "512x512", - "scale" : "2x" + "scale" : "2x", + "size" : "512x512" } ], "info" : { diff --git a/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon128.png b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon128.png new file mode 100644 index 0000000000..914b3e3899 Binary files /dev/null and b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon128.png differ diff --git a/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon16.png b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon16.png new file mode 100644 index 0000000000..3acbfd1435 Binary files /dev/null and b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon16.png differ diff --git a/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon32.png b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon32.png new file mode 100644 index 0000000000..35008195d9 Binary files /dev/null and b/src/safari/desktop/Assets.xcassets/AppIcon.appiconset/icon32.png differ diff --git a/src/safari/desktop/Assets.xcassets/Contents.json b/src/safari/desktop/Assets.xcassets/Contents.json index da4a164c91..73c00596a7 100644 --- a/src/safari/desktop/Assets.xcassets/Contents.json +++ b/src/safari/desktop/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/src/safari/desktop/Base.lproj/Main.storyboard b/src/safari/desktop/Base.lproj/Main.storyboard index 10c32c44e0..5a53dedcec 100644 --- a/src/safari/desktop/Base.lproj/Main.storyboard +++ b/src/safari/desktop/Base.lproj/Main.storyboard @@ -1,7 +1,8 @@ - - + + - + + @@ -21,13 +22,6 @@ - - - - - - - @@ -54,607 +48,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -677,15 +70,15 @@ - + - - - - + + + + @@ -705,13 +98,70 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/safari/desktop/Info.plist b/src/safari/desktop/Info.plist index 3c9b847a73..201669d037 100644 --- a/src/safari/desktop/Info.plist +++ b/src/safari/desktop/Info.plist @@ -11,13 +11,13 @@ CFBundleIconFile CFBundleIdentifier - com.bitwarden.desktop + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName - Bitwarden + $(PRODUCT_NAME) CFBundlePackageType - APPL + $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString 1.0 CFBundleVersion diff --git a/src/safari/desktop/ViewController.swift b/src/safari/desktop/ViewController.swift index 5af73ffee0..fbda5decf8 100644 --- a/src/safari/desktop/ViewController.swift +++ b/src/safari/desktop/ViewController.swift @@ -1,14 +1,44 @@ import Cocoa +import SafariServices.SFSafariApplication +import SafariServices.SFSafariExtensionManager + +let appName = "desktop" +let extensionBundleIdentifier = "com.bitwarden.desktop.Extension" class ViewController: NSViewController { + + @IBOutlet var appNameLabel: NSTextField! + override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. - } + self.appNameLabel.stringValue = appName + SFSafariExtensionManager.getStateOfSafariExtension(withIdentifier: extensionBundleIdentifier) { (state, error) in + guard let state = state, error == nil else { + // Insert code to inform the user that something went wrong. + return + } - override var representedObject: Any? { - didSet { - // Update the view, if already loaded. + DispatchQueue.main.async { + if (state.isEnabled) { + self.appNameLabel.stringValue = "\(appName)'s extension is currently on." + } else { + self.appNameLabel.stringValue = "\(appName)'s extension is currently off. You can turn it on in Safari Extensions preferences." + } + } } } + + @IBAction func openSafariExtensionPreferences(_ sender: AnyObject?) { + SFSafariApplication.showPreferencesForExtension(withIdentifier: extensionBundleIdentifier) { error in + guard error == nil else { + // Insert code to inform the user that something went wrong. + return + } + + DispatchQueue.main.async { + NSApplication.shared.terminate(nil) + } + } + } + } diff --git a/src/safari/safari/Base.lproj/SafariExtensionViewController.xib b/src/safari/safari/Base.lproj/SafariExtensionViewController.xib deleted file mode 100644 index 3716df7567..0000000000 --- a/src/safari/safari/Base.lproj/SafariExtensionViewController.xib +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/safari/safari/Info.plist b/src/safari/safari/Info.plist index 82f785e9c6..8f23fb23e0 100644 --- a/src/safari/safari/Info.plist +++ b/src/safari/safari/Info.plist @@ -9,13 +9,13 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.bitwarden.desktop.safari + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName - Bitwarden + $(PRODUCT_NAME) CFBundlePackageType - XPC! + $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString 0.0.1 CFBundleVersion @@ -25,63 +25,17 @@ NSExtension NSExtensionPointIdentifier - com.apple.Safari.extension + com.apple.Safari.web-extension NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).SafariExtensionHandler - SFSafariStyleSheet - - - Style Sheet - app/content/autofill.css - - - SFSafariContentScript - - - Script - app/content/autofill.js - - - Script - app/content/autofiller.js - - - Script - app/content/notificationBar.js - - - Script - app/content/shortcuts.js - - - Script - app/content/sso.js - - - SFSafariToolbarItem - - Action - Popover - Identifier - Button - Image - ToolbarItemIcon.pdf - Label - Bitwarden - - SFSafariWebsiteAccess - - Level - All - - SFSafariExtensionBundleIdentifiersToUninstall - - com.bitwarden.safari - + $(PRODUCT_MODULE_NAME).SafariWebExtensionHandler NSHumanReadableCopyright Copyright © 2020 Bitwarden Inc. All rights reserved. NSHumanReadableDescription A secure and free password manager for all of your devices. + SFSafariAppExtensionBundleIdentifiersToReplace + + com.bitwarden.desktop.safari + diff --git a/src/safari/safari/SafariExtensionHandler.swift b/src/safari/safari/SafariExtensionHandler.swift deleted file mode 100644 index 3d8711f401..0000000000 --- a/src/safari/safari/SafariExtensionHandler.swift +++ /dev/null @@ -1,101 +0,0 @@ -import SafariServices - -class SafariExtensionHandler: SFSafariExtensionHandler { - override init() { - super.init() - SafariExtensionViewController.shared.initWebView() - } - - override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String: Any]?) { - // This method will be called when a content script provided by your extension - // calls safari.extension.dispatchMessage("message"). - if messageName == "bitwarden" { - page.getPropertiesWithCompletionHandler { properties in - DispatchQueue.main.async { - makeSenderTabObject(page: page, props: properties, complete: { senderTab in - DispatchQueue.main.async { - self.sendMessage(msg: userInfo, sender: senderTab) - } - }) - } - } - } - } - - override func toolbarItemClicked(in _: SFSafariWindow) { - // This method will be called when your toolbar item is clicked. - } - - override func validateToolbarItem(in _: SFSafariWindow, validationHandler: @escaping ((Bool, String) -> Void)) { - // This is called when Safari's state changed in some way that would require the extension's - // toolbar item to be validated again. - validationHandler(true, "") - } - - override func popoverViewController() -> SFSafariExtensionViewController { - return SafariExtensionViewController.shared - } - - override func popoverWillShow(in _: SFSafariWindow) { - SafariExtensionViewController.shared.popoverOpenCount += 1 - DispatchQueue.main.async { - self.sendMessage(msg: ["command": "reloadPopup"], sender: nil) - } - } - - override func popoverDidClose(in _: SFSafariWindow) { - SafariExtensionViewController.shared.popoverOpenCount -= 1 - } - - func sendMessage(msg: [String: Any]?, sender: Tab? = nil) { - if SafariExtensionViewController.shared.webView == nil { - return - } - let newMsg = AppMessage() - newMsg.command = "app_message" - newMsg.senderTab = sender - do { - let jsonData = try JSONSerialization.data(withJSONObject: msg as Any, options: []) - newMsg.data = String(data: jsonData, encoding: .utf8) - } catch let error { - print("error converting to json: \(error)") - } - SafariExtensionViewController.shared.replyMessage(message: newMsg) - } -} - -func makeSenderTabObject(page: SFSafariPage, props: SFSafariPageProperties?, complete: @escaping (Tab) -> Void) { - let t = Tab() - t.title = props?.title - t.url = props?.url?.absoluteString - page.getContainingTab { tab in - tab.getContainingWindow(completionHandler: { win in - guard let window = win else { - t.active = false; - t.windowId = -100 - SFSafariApplication.getAllWindows(completionHandler: { allWins in - if (allWins.count == 0) { - return - } - allWins[0].getAllTabs { allWinTabs in - t.index = allWinTabs.firstIndex(of: tab) ?? -1 - t.id = "\(t.windowId)_\(t.index)" - complete(t) - } - }) - return - } - window.getActiveTab(completionHandler: { activeTab in - t.active = activeTab != nil && tab == activeTab - SFSafariApplication.getAllWindows(completionHandler: { allWins in - t.windowId = allWins.firstIndex(of: window) ?? -100 - window.getAllTabs { allWinTabs in - t.index = allWinTabs.firstIndex(of: tab) ?? -1 - t.id = "\(t.windowId)_\(t.index)" - complete(t) - } - }) - }) - }) - } -} diff --git a/src/safari/safari/SafariExtensionViewController.swift b/src/safari/safari/SafariExtensionViewController.swift deleted file mode 100644 index 0241df00ce..0000000000 --- a/src/safari/safari/SafariExtensionViewController.swift +++ /dev/null @@ -1,440 +0,0 @@ -import SafariServices -import WebKit - -class SafariExtensionViewController: SFSafariExtensionViewController, WKScriptMessageHandler, WKNavigationDelegate { - var webView: WKWebView! - var initedWebView: Bool = false - var popoverOpenCount: Int = 0 - - static let shared: SafariExtensionViewController = { - let shared = SafariExtensionViewController() - shared.preferredContentSize = NSSize(width: 375, height: 600) - return shared - }() - - func initWebView() { - if initedWebView { - return - } - initedWebView = true - let parentHeight = SafariExtensionViewController.shared.preferredContentSize.height - let parentWidth = SafariExtensionViewController.shared.preferredContentSize.width - let webViewConfig = WKWebViewConfiguration() - webViewConfig.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs") - webViewConfig.preferences.setValue(true, forKey: "developerExtrasEnabled") - webViewConfig.userContentController.add(self, name: "bitwardenApp") - webView = WKWebView(frame: CGRect(x: 0, y: 0, width: parentWidth, height: parentHeight), - configuration: webViewConfig) - webView.navigationDelegate = self - webView.allowsLinkPreview = false - navigateWebView("app/popup/index.html") - webView.alphaValue = 0.0 - webView.uiDelegate = self - view.addSubview(webView) - } - - func navigateWebView(_ relativeUrl: String){ - let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String - let bundleUrl = Bundle.main.resourceURL!.absoluteURL - - if var urlComponents = URLComponents(string: bundleUrl.absoluteString + relativeUrl) { - if (urlComponents.queryItems?.first(where: { $0.name == "appVersion" })?.value == nil) { - urlComponents.queryItems = urlComponents.queryItems ?? [] - urlComponents.queryItems!.append(URLQueryItem(name: "appVersion", value: version)) - } - - webView.loadFileURL(urlComponents.url!, allowingReadAccessTo: bundleUrl) - } - } - - func webView(_ webView: WKWebView, didFinish _: WKNavigation!) { - if #available(OSXApplicationExtension 10.12, *) { - NSAnimationContext.runAnimationGroup({ _ in - NSAnimationContext.current.duration = 0.35 - webView.animator().alphaValue = 1.0 - }) - } else { - // Fallback on earlier versions - } - } - - override func viewDidLoad() { - super.viewDidLoad() - let backgroundColor = NSColor(red: (39 / 255.0), green: (42 / 255.0), blue: (46 / 255.0), alpha: 1.0) - view.setValue(backgroundColor, forKey: "backgroundColor") - initWebView() - } - - func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) { - if message.name != "bitwardenApp" { - return - } - guard let messageBody = message.body as? String else { - return - } - guard let m: AppMessage = jsonDeserialize(json: messageBody) else { - return - } - let command = m.command - NSLog("Command: \(command)") - if command == "storage_get" { - if let data = m.data { - let obj = UserDefaults.standard.string(forKey: data) - m.responseData = obj - replyMessage(message: m) - } - } else if command == "storage_save" { - guard let data: StorageData = jsonDeserialize(json: m.data) else { - return - } - if let obj = data.obj { - UserDefaults.standard.set(obj, forKey: data.key) - } else { - UserDefaults.standard.removeObject(forKey: data.key) - } - replyMessage(message: m) - } else if command == "storage_remove" { - if let data = m.data { - UserDefaults.standard.removeObject(forKey: data) - replyMessage(message: m) - } - } else if command == "getLocaleStrings" { - let language = m.data ?? "en" - guard let bundleUrl = Bundle.main.resourceURL?.absoluteURL else { - return - } - let messagesUrl = bundleUrl.appendingPathComponent("app/_locales/\(language)/messages.json") - do { - let json = try String(contentsOf: messagesUrl, encoding: .utf8) - webView.evaluateJavaScript("window.bitwardenLocaleStrings = \(json);", completionHandler: {(result, error) in - guard let err = error else { - return; - } - NSLog("evaluateJavaScript error : %@", err.localizedDescription); - }) - } catch { - NSLog("ERROR on getLocaleStrings, \(error)") - } - replyMessage(message: m) - } else if command == "tabs_query" { - guard let options: TabQueryOptions = jsonDeserialize(json: m.data) else { - return - } - if options.currentWindow ?? false { - SFSafariApplication.getActiveWindow { win in - if win != nil { - processWindowsForTabs(wins: [win!], options: options, complete: { tabs in - m.responseData = jsonSerialize(obj: tabs) - self.replyMessage(message: m) - }) - } else { - SFSafariApplication.getAllWindows { wins in - processWindowsForTabs(wins: wins, options: options, complete: { tabs in - m.responseData = jsonSerialize(obj: tabs) - self.replyMessage(message: m) - }) - } - } - } - } else { - SFSafariApplication.getAllWindows { wins in - processWindowsForTabs(wins: wins, options: options, complete: { tabs in - m.responseData = jsonSerialize(obj: tabs) - self.replyMessage(message: m) - }) - } - } - } else if command == "tabs_message" { - guard let tabMsg: TabMessage = jsonDeserialize(json: m.data) else { - return - } - SFSafariApplication.getAllWindows { wins in - var theWin: SFSafariWindow? - var winIndex = 0 - for win in wins { - if tabMsg.tab.windowId == winIndex { - theWin = win - break - } - winIndex = winIndex + 1 - } - var theTab: SFSafariTab? - theWin?.getAllTabs { tabs in - var tabIndex = 0 - for tab in tabs { - if tabMsg.tab.index == tabIndex { - theTab = tab - break - } - tabIndex = tabIndex + 1 - } - theTab?.getActivePage { activePage in - activePage?.dispatchMessageToScript(withName: "bitwarden", userInfo: ["msg": tabMsg.obj]) - } - } - } - } else if command == "hidePopover" { - dismissPopover() - replyMessage(message: m) - } else if command == "showPopover" { - if popoverOpenCount <= 0 { - SFSafariApplication.getActiveWindow { win in - win?.getToolbarItem(completionHandler: { item in - item?.showPopover() - }) - } - } - } else if command == "isPopoverOpen" { - m.responseData = popoverOpenCount > 0 ? "true" : "false" - replyMessage(message: m) - } else if command == "createNewTab" { - if let data = m.data, let url = URL(string: data) { - if !data.starts(with: "https://") && !data.starts(with: "http://") { - SFSafariApplication.getActiveWindow { win in - win?.getToolbarItem(completionHandler: { item in - item?.showPopover() - self.navigateWebView("app/" + url.absoluteString) - }) - } - } - SFSafariApplication.getActiveWindow { win in - win?.openTab(with: url, makeActiveIfPossible: true, completionHandler: { _ in - // Tab opened - }) - } - } - } else if command == "reloadExtension" { - webView?.reload() - replyMessage(message: m) - } else if command == "copyToClipboard" { - let pasteboard = NSPasteboard.general - pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil) - pasteboard.setString(m.data ?? "", forType: NSPasteboard.PasteboardType.string) - replyMessage(message: m) - } else if command == "readFromClipboard" { - let pasteboard = NSPasteboard.general - m.responseData = pasteboard.pasteboardItems?.first?.string(forType: .string) - replyMessage(message: m) - } else if command == "downloadFile" { - guard let jsonData = m.data else { - return - } - guard let dlMsg: DownloadFileMessage = jsonDeserialize(json: jsonData) else { - return - } - var blobData: Data? - if dlMsg.blobOptions?.type == "text/plain" { - blobData = dlMsg.blobData?.data(using: .utf8) - } else if let blob = dlMsg.blobData { - blobData = Data(base64Encoded: blob) - } - guard let data = blobData else { - return - } - let panel = NSSavePanel() - panel.canCreateDirectories = true - panel.nameFieldStringValue = dlMsg.fileName - panel.begin { response in - if response == NSApplication.ModalResponse.OK { - if let url = panel.url { - do { - let fileManager = FileManager.default - if !fileManager.fileExists(atPath: url.absoluteString) { - fileManager.createFile(atPath: url.absoluteString, contents: Data(), - attributes: nil) - } - try data.write(to: url) - } catch { - print(error) - NSLog("ERROR in downloadFile, \(error)") - } - } - } - } - } - } - - func replyMessage(message: AppMessage) { - if webView == nil { - return - } - let json = (jsonSerialize(obj: message) ?? "null") - webView.evaluateJavaScript("window.bitwardenSafariAppMessageReceiver(\(json));", completionHandler: {(result, error) in - guard let err = error else { - return; - } - NSLog("evaluateJavaScript error : %@", err.localizedDescription); - }) - } -} - -extension SafariExtensionViewController: WKUIDelegate { - @available(OSXApplicationExtension 10.12, *) - func webView(_: WKWebView, runOpenPanelWith _: WKOpenPanelParameters, initiatedByFrame _: WKFrameInfo, - completionHandler: @escaping ([URL]?) -> Void) { - let openPanel = NSOpenPanel() - openPanel.canChooseFiles = true - openPanel.begin { result in - if result == NSApplication.ModalResponse.OK && openPanel.url != nil { - completionHandler([openPanel.url!]) - } else { - completionHandler(nil) - } - } - } -} - -func processWindowsForTabs(wins: [SFSafariWindow], options: TabQueryOptions?, complete: @escaping ([Tab]) -> Void) { - if wins.count == 0 { - complete([]) - return - } - var newTabs: [Tab] = [] - let winGroup = DispatchGroup() - for win in wins { - winGroup.enter() - win.getActiveTab { activeTab in - win.getAllTabs { allTabs in - let tabGroup = DispatchGroup() - for tab in allTabs { - tabGroup.enter() - if options?.active ?? false { - if activeTab != nil && activeTab == tab { - let windowIndex = wins.firstIndex(of: win) ?? -100 - let tabIndex = allTabs.firstIndex(of: tab) ?? -1 - makeTabObject(tab: tab, activeTab: activeTab, windowIndex: windowIndex, - tabIndex: tabIndex, complete: { t in - newTabs.append(t) - tabGroup.leave() - }) - } else { - tabGroup.leave() - } - } else { - let windowIndex = wins.firstIndex(of: win) ?? -100 - let tabIndex = allTabs.firstIndex(of: tab) ?? -1 - makeTabObject(tab: tab, activeTab: activeTab, windowIndex: windowIndex, - tabIndex: tabIndex, complete: { t in - newTabs.append(t) - tabGroup.leave() - }) - } - } - tabGroup.notify(queue: .main) { - winGroup.leave() - } - } - } - } - winGroup.notify(queue: .main) { - complete(newTabs) - } -} - -func makeTabObject(tab: SFSafariTab, activeTab: SFSafariTab?, windowIndex: Int, tabIndex: Int, - complete: @escaping (Tab) -> Void) { - let t = Tab() - t.active = activeTab != nil && tab == activeTab - t.windowId = windowIndex - t.index = tabIndex - t.id = "\(windowIndex)_\(tabIndex)" - tab.getActivePage { page in - guard let activePage = page else { - complete(t) - return - } - activePage.getPropertiesWithCompletionHandler({ props in - t.title = props?.title - t.url = props?.url?.absoluteString - complete(t) - }) - } -} - -func jsonSerialize(obj: T?) -> String? { - let encoder = JSONEncoder() - do { - let data = try encoder.encode(obj) - return String(data: data, encoding: .utf8) ?? "null" - } catch _ { - return "null" - } -} - -func jsonDeserialize(json: String?) -> T? { - if json == nil { - return nil - } - let decoder = JSONDecoder() - do { - let obj = try decoder.decode(T.self, from: json!.data(using: .utf8)!) - return obj - } catch _ { - return nil - } -} - -class AppMessage: Decodable, Encodable { - init() { - id = "" - command = "" - data = nil - responseData = nil - responseError = nil - } - - var id: String - var command: String - var data: String? - var responseData: String? - var responseError: Bool? - var senderTab: Tab? -} - -class StorageData: Decodable, Encodable { - var key: String - var obj: String? -} - -class TabQueryOptions: Decodable, Encodable { - var currentWindow: Bool? - var active: Bool? -} - -class Tab: Decodable, Encodable { - init() { - id = "" - index = -1 - windowId = -100 - title = "" - active = false - url = "" - } - - var id: String - var index: Int - var windowId: Int - var title: String? - var active: Bool - var url: String? -} - -class TabMessage: Decodable, Encodable { - var tab: Tab - var obj: String - var options: TabMessageOptions? -} - -class TabMessageOptions: Decodable, Encodable { - var frameId: Int? -} - -class DownloadFileMessage: Decodable, Encodable { - var fileName: String - var blobData: String? - var blobOptions: DownloadFileMessageBlobOptions? -} - -class DownloadFileMessageBlobOptions: Decodable, Encodable { - var type: String? -} diff --git a/src/safari/safari/SafariWebExtensionHandler.swift b/src/safari/safari/SafariWebExtensionHandler.swift new file mode 100644 index 0000000000..001d388e6e --- /dev/null +++ b/src/safari/safari/SafariWebExtensionHandler.swift @@ -0,0 +1,109 @@ +import SafariServices +import os.log + +let SFExtensionMessageKey = "message" + +class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { + + func beginRequest(with context: NSExtensionContext) { + let item = context.inputItems[0] as! NSExtensionItem + let message = item.userInfo?[SFExtensionMessageKey] as AnyObject? + os_log(.default, "Received message from browser.runtime.sendNativeMessage: %@", message as! CVarArg) + + let response = NSExtensionItem() + + guard let command = message?["command"] as? String else { + return + } + + switch (command) { + case "readFromClipboard": + let pasteboard = NSPasteboard.general + response.userInfo = [ SFExtensionMessageKey: pasteboard.pasteboardItems?.first?.string(forType: .string) as Any ] + break + case "showPopover": + SFSafariApplication.getActiveWindow { win in + win?.getToolbarItem(completionHandler: { item in + item?.showPopover() + }) + } + break + case "downloadFile": + guard let jsonData = message?["data"] as? String else { + return + } + guard let dlMsg: DownloadFileMessage = jsonDeserialize(json: jsonData) else { + return + } + var blobData: Data? + if dlMsg.blobOptions?.type == "text/plain" { + blobData = dlMsg.blobData?.data(using: .utf8) + } else if let blob = dlMsg.blobData { + blobData = Data(base64Encoded: blob) + } + guard let data = blobData else { + return + } + let panel = NSSavePanel() + panel.canCreateDirectories = true + panel.nameFieldStringValue = dlMsg.fileName + panel.begin { response in + if response == NSApplication.ModalResponse.OK { + if let url = panel.url { + do { + let fileManager = FileManager.default + if !fileManager.fileExists(atPath: url.absoluteString) { + fileManager.createFile(atPath: url.absoluteString, contents: Data(), + attributes: nil) + } + try data.write(to: url) + } catch { + print(error) + NSLog("ERROR in downloadFile, \(error)") + } + } + } + } + break + + default: + return + } + + context.completeRequest(returningItems: [response], completionHandler: nil) + } + +} + +func jsonSerialize(obj: T?) -> String? { + let encoder = JSONEncoder() + do { + let data = try encoder.encode(obj) + return String(data: data, encoding: .utf8) ?? "null" + } catch _ { + return "null" + } +} + +func jsonDeserialize(json: String?) -> T? { + if json == nil { + return nil + } + let decoder = JSONDecoder() + do { + let obj = try decoder.decode(T.self, from: json!.data(using: .utf8)!) + return obj + } catch _ { + return nil + } +} + +class DownloadFileMessage: Decodable, Encodable { + var fileName: String + var blobData: String? + var blobOptions: DownloadFileMessageBlobOptions? +} + +class DownloadFileMessageBlobOptions: Decodable, Encodable { + var type: String? +} diff --git a/src/safari/safari/ToolbarItemIcon.pdf b/src/safari/safari/ToolbarItemIcon.pdf deleted file mode 100644 index dbf98ce90e..0000000000 Binary files a/src/safari/safari/ToolbarItemIcon.pdf and /dev/null differ diff --git a/src/safari/safari/app/popup/index.html b/src/safari/safari/app/popup/index.html deleted file mode 100644 index a6282445c3..0000000000 --- a/src/safari/safari/app/popup/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - Bitwarden - - - - - - -
-
- - - - - - - - - diff --git a/src/services/browserMessaging.service.ts b/src/services/browserMessaging.service.ts index 01f94269fb..e5bd9b1e98 100644 --- a/src/services/browserMessaging.service.ts +++ b/src/services/browserMessaging.service.ts @@ -1,16 +1,8 @@ -import { BrowserApi } from '../browser/browserApi'; -import { SafariApp } from '../browser/safariApp'; - import { MessagingService } from 'jslib/abstractions/messaging.service'; export default class BrowserMessagingService implements MessagingService { send(subscriber: string, arg: any = {}) { const message = Object.assign({}, { command: subscriber }, arg); - if (BrowserApi.isSafariApi) { - SafariApp.sendMessageToApp(subscriber, arg); - SafariApp.sendMessageToListeners(message, 'BrowserMessagingService', null); - } else { - chrome.runtime.sendMessage(message); - } + chrome.runtime.sendMessage(message); } } diff --git a/src/services/browserPlatformUtils.service.ts b/src/services/browserPlatformUtils.service.ts index 38bab53b43..969ab45bab 100644 --- a/src/services/browserPlatformUtils.service.ts +++ b/src/services/browserPlatformUtils.service.ts @@ -27,9 +27,7 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService return this.deviceCache; } - if (this.isSafariExtension()) { - this.deviceCache = DeviceType.SafariExtension; - } else if (navigator.userAgent.indexOf(' Firefox/') !== -1 || navigator.userAgent.indexOf(' Gecko/') !== -1) { + if (navigator.userAgent.indexOf(' Firefox/') !== -1 || navigator.userAgent.indexOf(' Gecko/') !== -1) { this.deviceCache = DeviceType.FirefoxExtension; } else if ((!!(window as any).opr && !!opr.addons) || !!(window as any).opera || navigator.userAgent.indexOf(' OPR/') >= 0) { @@ -40,6 +38,8 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService this.deviceCache = DeviceType.VivaldiExtension; } else if ((window as any).chrome && navigator.userAgent.indexOf(' Chrome/') !== -1) { this.deviceCache = DeviceType.ChromeExtension; + } else if (navigator.userAgent.indexOf(' Safari/') !== -1) { + this.deviceCache = DeviceType.SafariExtension; } return this.deviceCache; @@ -190,13 +190,7 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService } const clearing = options ? !!options.clearing : false; const clearMs: number = options && options.clearMs ? options.clearMs : null; - if (this.isSafariExtension()) { - SafariApp.sendMessageToApp('copyToClipboard', text).then(() => { - if (!clearing && this.clipboardWriteCallback != null) { - this.clipboardWriteCallback(text, clearMs); - } - }); - } else if (this.isFirefox() && (win as any).navigator.clipboard && (win as any).navigator.clipboard.writeText) { + if (this.isFirefox() && (win as any).navigator.clipboard && (win as any).navigator.clipboard.writeText) { (win as any).navigator.clipboard.writeText(text).then(() => { if (!clearing && this.clipboardWriteCallback != null) { this.clipboardWriteCallback(text, clearMs); @@ -244,7 +238,7 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService doc = options.doc; } - if (this.isSafariExtension()) { + if (this.isSafari()) { return await SafariApp.sendMessageToApp('readFromClipboard'); } else if (this.isFirefox() && (win as any).navigator.clipboard && (win as any).navigator.clipboard.readText) { return await (win as any).navigator.clipboard.readText(); @@ -290,7 +284,7 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService } supportsBiometric() { - return Promise.resolve(true); + return Promise.resolve(!this.isFirefox() && !this.isSafari()); } authenticateBiometric() { @@ -311,10 +305,6 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService return false; } - private isSafariExtension(): boolean { - return (window as any).safariAppExtension === true; - } - getDefaultSystemTheme() { return this.prefersColorSchemeDark.matches ? 'dark' : 'light'; } diff --git a/src/services/browserStorage.service.ts b/src/services/browserStorage.service.ts index 7510327d7d..9d3a6bc677 100644 --- a/src/services/browserStorage.service.ts +++ b/src/services/browserStorage.service.ts @@ -1,63 +1,47 @@ -import { - PlatformUtilsService, - StorageService, -} from 'jslib/abstractions'; - -import { SafariApp } from '../browser/safariApp'; +import { StorageService } from 'jslib/abstractions/storage.service'; export default class BrowserStorageService implements StorageService { private chromeStorageApi: any; - private isSafari: boolean; - constructor(platformUtilsService: PlatformUtilsService) { - this.isSafari = platformUtilsService.isSafari(); - if (!this.isSafari) { - this.chromeStorageApi = chrome.storage.local; - } + constructor() { + this.chromeStorageApi = chrome.storage.local; } async get(key: string): Promise { - if (this.isSafari) { - const obj = await SafariApp.sendMessageToApp('storage_get', key); - return obj == null ? null : JSON.parse(obj) as T; - } else { - return new Promise((resolve) => { - this.chromeStorageApi.get(key, (obj: any) => { - if (obj != null && obj[key] != null) { - resolve(obj[key] as T); - return; - } - resolve(null); - }); + return new Promise((resolve) => { + this.chromeStorageApi.get(key, (obj: any) => { + if (obj != null && obj[key] != null) { + resolve(obj[key] as T); + return; + } + resolve(null); }); - } + }); } async save(key: string, obj: any): Promise { - const keyedObj = { [key]: obj }; - if (this.isSafari) { - await SafariApp.sendMessageToApp('storage_save', JSON.stringify({ - key: key, - obj: JSON.stringify(obj), - })); - } else { - return new Promise((resolve) => { - this.chromeStorageApi.set(keyedObj, () => { - resolve(); - }); - }); - } - } - - async remove(key: string): Promise { - if (this.isSafari) { - await SafariApp.sendMessageToApp('storage_remove', key); - } else { + if (obj == null) { + // Fix safari not liking null in set return new Promise((resolve) => { this.chromeStorageApi.remove(key, () => { resolve(); }); }); } + + const keyedObj = { [key]: obj }; + return new Promise((resolve) => { + this.chromeStorageApi.set(keyedObj, () => { + resolve(); + }); + }); + } + + async remove(key: string): Promise { + return new Promise((resolve) => { + this.chromeStorageApi.remove(key, () => { + resolve(); + }); + }); } } diff --git a/src/services/i18n.service.ts b/src/services/i18n.service.ts index 4eb880424d..542dbb6f35 100644 --- a/src/services/i18n.service.ts +++ b/src/services/i18n.service.ts @@ -1,19 +1,11 @@ import { I18nService as BaseI18nService } from 'jslib/services/i18n.service'; -import { BrowserApi } from '../browser/browserApi'; -import { SafariApp } from '../browser/safariApp'; - export default class I18nService extends BaseI18nService { constructor(systemLanguage: string) { - super(systemLanguage, BrowserApi.isSafariApi ? 'safari' : null, async (formattedLocale: string) => { - if (BrowserApi.isSafariApi) { - await SafariApp.sendMessageToApp('getLocaleStrings', formattedLocale); - return (window as any).bitwardenLocaleStrings; - } else { - // Deprecated - const file = await fetch(this.localesDirectory + formattedLocale + '/messages.json'); - return await file.json(); - } + super(systemLanguage, null, async (formattedLocale: string) => { + // Deprecated + const file = await fetch(this.localesDirectory + formattedLocale + '/messages.json'); + return await file.json(); }); this.supportedTranslationLocales = [ diff --git a/store/locales/fi/copy.resx b/store/locales/fi/copy.resx index 0173435f31..e4a13b0276 100644 --- a/store/locales/fi/copy.resx +++ b/store/locales/fi/copy.resx @@ -118,39 +118,41 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Bitwarden – Ilmainen salasananhallinta + Bitwarden – Ilmainen salasanojen hallinta - Turvallinen ja ilmainen salasananhallintapalvelu kaikille laitteillesi + Turvallinen ja ilmainen salasanojen hallinta kaikille laitteillesi - Bitwarden on helpoin ja turvallisin tapa säilyttää kaikki käyttäjänimesi ja salasanasi, kätevästi synkronoituna kaikille laitteillesi. + Bitwarden on helpoin ja turvallisin tapa säilyttää käyttäjätunnuksesi ja salasanasi, samalla pitäen ne synkronoituna laitteidesi välillä. -Salasanavarkaudet ovat vakava ongelma. Käyttämäsi verkkosivustot ja sovellukset ovat hyökkäyksen kohteena päivittäin. Tietoturvavuotoja tapahtuu ja salasanoja varastetaan. Jos käytät samoja salasanoja eri sivustoilla ja sovelluksissa, hakkerit voivat helposti päästä käsiksi sähköpostiisi, pankkiisi ja muihin tärkeisiin tileihisi. +Salasanavarkaudet ovat vakava ongelma ja monet käyttämäsi sivustot ja sovellukset ovat päivittäisten hyökkäysten kohteina. Tietoturvavuotoja tapahtuu ja salasanoja varastetaan. Jos käytät samoja salasanoja uudelleen eri sivustoilla ja sovelluksissa, saattavat hakkerit päästä helposti käsiksi sähköpostiisi, pankkiisi tai muihin tärkeisiin käyttäjätileihisi. -Tietoturva-asiantuntijat suosittelevat erilaisten, satunnaisesti luotujen salasanojen käyttämistä kaikilla tileilläsi. Mutta kuinka hallitset kaikkia näitä salasanoja? Bitwarden tekee salasanojen luomisesta, säilyttämisestä ja käyttämisestä helppoa. +Tietoturva-asiantuntijat suosittelevat ainutlaatuisten, satunnaisesti luotujen salasanojen käyttöä kaikilla käyttäjätileilläsi. Mutta kuinka sitten hallitset näitä kaikkia erilaisia salasanoja? Bitwarden tekee laadukkaiden ja ainutlaatuisten salasanojen luonnista, säilytyksestä ja käytöstä helppoa. -Bitwarden säilöö kaikki kirjautumistietosi salattuun holviin, joka synkronoidaan kaikille laitteillesi. Koska tietosi ovat täysin salattuja jo ennen kuin ne lähtevät laitteeltasi, vain sinä pääset käsiksi niihin. Edes Bitwardenin kehitystiimi ei voi lukea tietojasi, vaikka haluaisi. Tietosi suojataan 256-bittisellä AES-salauksella, suolatulla tiivistyksellä sekä PBKDF2- ja SHA-256-menetelmillä.! +Bitwarden säilyttää kaikki kirjautumistietosi salattussa holvissa, joka synkronoidaan laitteidesi välillä. Koska tietosi ovat täysin salattuja jo ennen kuin ne edes lähtevät laitteeltasi, vain sinä pääset niihin käsiksi. Edes Bitwardenin kehittäjät eivät voi lukea tietojasi, vaikka haluaisivat. Tietosi suojataan 256-bittisellä AES-salauksella, suolatulla hajautuksella sekä PBKDF2 ja SHA-256 -menetelmillä. + +Bitwarden on 100% avointa lähdekoodia. Bitwardenin lähdekoodi on esillä GitHubissa ja kuka tahansa voi tutkia ja tarkastella sitä sekä osallistua Bitwardenin kehitykseen. - Turvallinen ja ilmainen salasananhallintapalvelu kaikille laitteillesi + Turvallinen ja ilmainen salasanojen hallinta kaikille laitteillesi - Synkronoi ja hallitse holviasi eri laitteilla + Synkronoi ja hallitse holviasi useilla laitteilla - Hallitse kirjautumistietojasi suojatusta holvista + Hallitse käyttäjätunnuksiasi ja salasanojasi suojatussa holvissa - Käytä automaattista kirjautumistietojen täydennystä millä tahansa sivustolla + Täytä kirjautumistietosi automaattisesti ja nopeasti millä tähänsä sivustolla - Pääse käsiksi holvisi tietoihin suoraan selaimesi kontekstivalikosta + Pääse käsiksi holviisi myös suoraan hiiren kakkospainikkeen pikavalikosta - Luo automaattiseti vahvoja, satunnaisia ja turvallisia salasanoja + Luo automaattisesti vahvoja, satunnaisia ja turvallisia salasanoja - Käsittele AES-256-salauksella suojattuja tietojasi turvallisesti + Käsittele 256-bittisellä AES-salauksella suojattuja tietojasi turvallisesti \ No newline at end of file diff --git a/store/locales/hu/copy.resx b/store/locales/hu/copy.resx index f9216b2340..0e6b6c3347 100644 --- a/store/locales/hu/copy.resx +++ b/store/locales/hu/copy.resx @@ -121,7 +121,7 @@ Bitwarden - Ingyenes jelszókezelő - Egy biztonságos és ingyenes jelszó kezelő az összes eszközödre + Egy biztonságos és ingyenes jelszókezelő az összes eszközre. A Bitwarden a legkönnyebb és legbiztonságosabb módja a bejelentkezések és jelszavak tárolására miközben szinkronba tarja ezeket az összes eszközön. @@ -133,24 +133,24 @@ A biztonság szakértők azt javasolják, hogy használjunk különböző vélet A Bitwarden egy titkosított széfben tárolja az összes bejelentkezés és szinkronizálja őket az összes eszközön. Mivel ezek az adatok teljesen titkosítva vannak még az eszköz elhagyása előtt, így csak a tulajdonos érheti el ezeket. Még maga a Bitwarden csapata se tudja elolvasni az adatokat, még ha akarnák, akkor sem. Az adatok AES-256 bites titkosítással, egy úgynevezett 'salted hasing' módszerrel és PBKDF2 SHA-256 titkosítással vannak védve. - Egy biztonságos és ingyenes jelszó kezelő az összes eszközödre + Egy biztonságos és ingyenes jelszókezelő az összes eszközre - Szinkronizáld és érd el a széfedet több eszközről is + A széf szinkronizálása és elérése több eszközön. - Kezeld az összes bejelentkezésed és jelszavad egy biztonságos széfből + Az összes bejelentkezés és jelszó kezelése egy biztonságos széfben. - Gyorsan és automatikusan töltsd ki a bejelentkezési hitelesítő adatokat bármely weboldalon + A hitelesítő adatok gyors és automatikus kitöltése bármelyik felkeresett webhelyen. - A széfed szintén könnyen elérhető a jobb kattintás menüből + A széf kényelmesen elérhető a jobb egérkattintásos menüből. - Automatikuson generálj erős, véletlenszerű és biztonságos jelszavakat + Erős, véletlenszerű és biztonságos jelszavak generálása automatikusan. - Adataid biztonságos AES-256 bites titkosítással van kezelve + Az információ biztonsággal kezelhető az AES-256 bit titkosítása. \ No newline at end of file diff --git a/store/locales/ro/copy.resx b/store/locales/ro/copy.resx index 03eb517f13..11eb912c2e 100644 --- a/store/locales/ro/copy.resx +++ b/store/locales/ro/copy.resx @@ -118,21 +118,21 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - bitwarden - Manager de parole gratuit + Bitwarden - Manager de parole gratuit Un manager de parole sigur și gratuit pentru toate dispozitivele dvs. - bitwarden este cea mai ușoară și cea mai sigură metodă de a stoca toate datele de autentificare și parolele dvs. păstrându-le în același timp sincronizate între toate dispozitivele dvs. + Bitwarden este cel mai simplu și mai sigur mod de a stoca toate autentificările și parolele dvs., păstrându-le în mod convenabil sincronizate între toate dispozitivele. -Furtul de parole este o problemă serioasă. Site-urile web și aplicațiile pe care le utilizați sunt atacate în fiecare zi. Se înregistrează încălcări ale securității și parolele dvs. sunt furate. Când reutilizați aceleași parole pe aplicații și site-uri web, hackerii pot accesa cu ușurință e-mailurile, conturile bancare și alte conturi importante. +Furtul de parole este o problemă serioasă. Saiturile web și aplicațiile pe care le utilizați sunt atacate în fiecare zi. Au loc încălcări ale securității și parolele dvs. sunt furate. Când reutilizați aceleași parole pe aplicații și saituri web, hackerii pot accesa cu ușurință e-mailurile, conturile bancare și alte conturi importante. -Experții în securitate vă recomandă să utilizați câte o parolă diferită, generată aleatoriu, pentru fiecare cont pe care îl utilizați. Dar cum veți gestiona toate aceste parole? bitwarden vă ușurează crearea, stocarea și accesarea parolelor dvs. +Experții în securitate vă recomandă să utilizați câte o parolă diferită, generată aleatoriu, pentru fiecare cont pe care îl utilizați. Dar cum veți gestiona toate aceste parole? Bitwarden vă ușurează crearea, stocarea și accesarea acestor parole. -bitwarden stochează toate date dvs. de autentificare într-un seif criptat care se sincronizează pe toate dispozitivele dvs. Deoarece seiful este complet criptat înainte de a fi transmis prin internet, numai dvs. aveți acces la date. Nici măcar echipa bitwarden nu poate citi datele dvs. chiar dacă ar dori. Datele dvs. sunt codificate prin criptare AES-256, salted hashing și PBKDF2 SHA-256. +Bitwarden stochează toate date dvs. de autentificare într-un seif criptat care se sincronizează pe toate dispozitivele dvs. Deoarece seiful este complet criptat înainte de a fi transmis prin internet, numai dvs. aveți acces la date. Nici măcar echipa Bitwarden nu poate citi datele dvs., chiar dacă ar dori. Datele dvs. sunt sigilate prin criptare cu AES-256 biți, salted hashing și PBKDF2 SHA-256. -bitwarden este software 100% open source. Codul sursa pentru bitwarden este găzduit pe GitHub și toată lumea este liberă să îl revizuiască, să îl verifice și să contribuie la codul sursă bitwarden. +Bitwarden este un software 100% "open source". Codul sursă pentru Bitwarden este găzduit pe GitHub și toată lumea este liberă să îl revizuiască, să îl verifice și să contribuie la dezvoltarea lui. Un manager de parole sigur și gratuit, pentru toate dispozitivele dvs. @@ -144,15 +144,15 @@ bitwarden este software 100% open source. Codul sursa pentru bitwarden este găz Gestionează toate datele de autentificare și parolele dintr-un seif securizat - Completează automat și rapid datele dvs. de autentificare în orice site web pe care îl vizitați + Completează automat și rapid datele dvs. de autentificare în orice sait web pe care îl vizitați - Seiful dvs. este, de asemenea, accesibil într-un mod convenabil din meniul contextual + Asigură accesarea seifului dvs., într-un mod convenabil, din meniul contextual - Generează automat parole sigure, aleatoare și puternice + Generează automat parole puternice, aleatorii și sigure - Informațiile dvs. sunt gestionate în siguranța folosind criptarea AES pe 256 de biți + Gestionează informațiile dvs. în siguranța folosind criptarea AES pe 256 de biți \ No newline at end of file diff --git a/store/locales/sk/copy.resx b/store/locales/sk/copy.resx index 9a0fdbd9f5..c77410be23 100644 --- a/store/locales/sk/copy.resx +++ b/store/locales/sk/copy.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - bitwarden - Bezplatný správca hesiel + Bitwarden – Bezplatný správca hesiel Bezpečný a bezplatný správca hesiel pre všetky vaše zariadenia diff --git a/store/locales/sl/copy.resx b/store/locales/sl/copy.resx new file mode 100644 index 0000000000..1eb62b5652 --- /dev/null +++ b/store/locales/sl/copy.resx @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bitwarden – Free Password Manager + + + A secure and free password manager for all of your devices + + + Bitwarden is the easiest and safest way to store all of your logins and passwords while conveniently keeping them synced between all of your devices. + +Password theft is a serious problem. The websites and apps that you use are under attack every day. Security breaches occur and your passwords are stolen. When you reuse the same passwords across apps and websites hackers can easily access your email, bank, and other important accounts. + +Security experts recommend that you use a different, randomly generated password for every account that you create. But how do you manage all those passwords? Bitwarden makes it easy for you to create, store, and access your passwords. + +Bitwarden stores all of your logins in an encrypted vault that syncs across all of your devices. Since it's fully encrypted before it ever leaves your device, only you have access to your data. Not even the team at Bitwarden can read your data, even if we wanted to. Your data is sealed with AES-256 bit encryption, salted hashing, and PBKDF2 SHA-256. + +Bitwarden is 100% open source software. The source code for Bitwarden is hosted on GitHub and everyone is free to review, audit, and contribute to the Bitwarden codebase. + + + A secure and free password manager for all of your devices + + + Sync and access your vault from multiple devices + + + Manage all your logins and passwords from a secure vault + + + Quickly auto-fill your login credentials into any website that you visit + + + Your vault is also conveniently accessible from the right-click menu + + + Automatically generate strong, random, and secure passwords + + + Your information is managed securely using AES-256 bit encryption + + \ No newline at end of file