diff --git a/.github/workflows/build-browser.yml b/.github/workflows/build-browser.yml index 610769859fe..562567ffe77 100644 --- a/.github/workflows/build-browser.yml +++ b/.github/workflows/build-browser.yml @@ -114,7 +114,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -257,7 +257,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index 76d86b45500..bccfc6d57ce 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -93,7 +93,7 @@ jobs: awk '{print tolower($0)}')" >> $GITHUB_ENV - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -171,7 +171,7 @@ jobs: choco install nasm --no-progress - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index ddb87320839..05039c3982b 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -143,7 +143,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -252,7 +252,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -458,7 +458,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -622,7 +622,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -839,7 +839,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -1045,7 +1045,7 @@ jobs: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-desktop') - uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 + uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 with: channel-id: C074F5UESQ0 payload: | @@ -1084,7 +1084,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index d875078757c..54e993edb33 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -94,7 +94,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index c8dd3e77838..272b68139ac 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -38,7 +38,7 @@ jobs: echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: node-version: ${{ steps.retrieve-node-version.outputs.node_version }} @@ -57,7 +57,7 @@ jobs: run: npm run build-storybook:ci - name: Publish to Chromatic - uses: chromaui/action@b984808b772126a9f44b2b7737b131b68a2ede32 # v11.7.1 + uses: chromaui/action@c883154c39671e194613be2f09ff4d17bb95f1e6 # v11.10.3 with: token: ${{ secrets.GITHUB_TOKEN }} projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index bb495a5a26d..3f72d62214b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -48,7 +48,7 @@ jobs: echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/release-desktop-beta.yml b/.github/workflows/release-desktop-beta.yml index 5a6a3d52361..80b1ae092c6 100644 --- a/.github/workflows/release-desktop-beta.yml +++ b/.github/workflows/release-desktop-beta.yml @@ -130,7 +130,7 @@ jobs: ref: ${{ needs.setup.outputs.branch-name }} - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -220,7 +220,7 @@ jobs: ref: ${{ needs.setup.outputs.branch-name }} - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -409,7 +409,7 @@ jobs: ref: ${{ needs.setup.outputs.branch-name }} - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -543,7 +543,7 @@ jobs: ref: ${{ needs.setup.outputs.branch-name }} - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -756,7 +756,7 @@ jobs: ref: ${{ needs.setup.outputs.branch-name }} - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index 076bfb46e80..2320bae72f3 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -32,7 +32,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Scan with Checkmarx - uses: checkmarx/ast-github-action@1fe318de2993222574e6249750ba9000a4e2a6cd # 2.0.33 + uses: checkmarx/ast-github-action@9fda5a4a2c297608117a5a56af424502a9192e57 # 2.0.34 env: INCREMENTAL: "${{ contains(github.event_name, 'pull_request') && '--sast-incremental' || '' }}" with: @@ -47,7 +47,7 @@ jobs: --output-path . ${{ env.INCREMENTAL }} - name: Upload Checkmarx results to GitHub - uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/upload-sarif@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 with: sarif_file: cx_result.sarif diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8d4067c1167..fbe0c0a798b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,7 +51,7 @@ jobs: echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - name: Set up Node - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml index 71e7d3c10aa..fea68161bab 100644 --- a/.github/workflows/version-bump.yml +++ b/.github/workflows/version-bump.yml @@ -447,7 +447,7 @@ jobs: echo "EOF" >> $GITHUB_ENV - name: Generate GH App token - uses: actions/create-github-app-token@3378cda945da322a8db4b193e19d46352ebe2de5 # v1.10.4 + uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0 id: app-token with: app-id: ${{ secrets.BW_GHAPP_ID }} diff --git a/apps/browser/package.json b/apps/browser/package.json index 4d008b684cb..fff378c72b9 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/browser", - "version": "2024.9.1", + "version": "2024.9.2", "scripts": { "build": "cross-env MANIFEST_VERSION=3 webpack", "build:mv2": "webpack", diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index e1fcf72c811..1b59a7805e7 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "التعبئة التلقائية" }, @@ -179,6 +194,18 @@ "addItem": { "message": "إضافة عنصر" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "تلميح كلمة المرور" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "البحث في الخزنة" }, @@ -504,6 +535,9 @@ "notes": { "message": "الملاحظات" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "الملاحظة" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "نفذ وقت الخزنة" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "إقفل الآن" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "تسجيل الدخول بخطوتين يجعل حسابك أكثر أمنا من خلال مطالبتك بالتحقق من تسجيل الدخول باستخدام جهاز آخر مثل مفتاح الأمان، تطبيق المصادقة، الرسائل القصيرة، المكالمة الهاتفية، أو البريد الإلكتروني. يمكن تمكين تسجيل الدخول بخطوتين على خزنة الويب bitwarden.com. هل تريد زيارة الموقع الآن؟" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "حُفظ المجلد" }, @@ -892,7 +938,7 @@ "message": "قائمة عناصر البطاقة في صفحة التبويب لسهولة التعبئة التلقائية." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "إظهار الهويات على صفحة التبويب" @@ -1097,6 +1143,9 @@ "file": { "message": "الملف" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "حدد ملفًا" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "فتح باستخدام رمز PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "تعيين رمز PIN الخاص بك لإلغاء قفل Bitwarden. سيتم إعادة تعيين إعدادات PIN الخاصة بك إذا قمت بتسجيل الخروج بالكامل من التطبيق." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "رمز PIN مطلوب." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "قفل مع كلمة المرور الرئيسية عند إعادة تشغيل المتصفح" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "يجب عليك تحديد مجموعة واحدة على الأقل." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "إجراء مهلة المخزن" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "قفل", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "سلة المهملات", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "عدم تطابق الحساب" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "لم يتم إعداد القياسات الحيوية" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "إرسال", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "نص" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ملف" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "تاريخ انتهاء الصلاحية" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "دقائق" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "سياسات مؤسستك تؤثر على مهلة الخزنة الخاص بك. الحد الأقصى المسموح به لمهلة الخزنة هو $HOURS$ ساعة/ساعات و $MINUTES$ دقيقة/دقائق", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index a6b2a35e133..795cd371232 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Lisenziya nömrəsini kopyala" }, + "copyCustomField": { + "message": "$FIELD$ - kopyala", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Veb saytı kopyala" + }, + "copyNotes": { + "message": "Notları kopyala" + }, "autoFill": { "message": "Avto-doldurma" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Element əlavə et" }, + "accountEmail": { + "message": "Hesab e-poçtu" + }, + "requestHint": { + "message": "İpucu tələb et" + }, + "requestPasswordHint": { + "message": "Parol ipucusu tələb et" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Hesabınızın e-poçt ünvanını daxil edin və parolunuz üçün ipucu sizə göndəriləcək" + }, "passwordHint": { "message": "Parol ipucu" }, @@ -308,7 +335,7 @@ "message": "Qovluq adı" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Ana qovluğun adından sonra \"/\" əlavə edərək qovluğu ardıcıl yerləşdirin. Nümunə: Social/Forums" }, "noFoldersAdded": { "message": "Heç bir qovluq əlavə edilmədi" @@ -462,6 +489,10 @@ "message": "Anlaşılmaz xarakterlərdən çəkin", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Anbarda axtar" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notlar" }, + "privateNote": { + "message": "Şəxsi not" + }, "note": { "message": "Not" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Seans vaxt bitməsi" }, + "vaultTimeoutHeader": { + "message": "Anbar vaxtının bitməsi" + }, "otherOptions": { "message": "Digər seçimlər" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Anbara müraciət bitəcək" }, + "vaultTimeout1": { + "message": "Vaxt bitmə" + }, "lockNow": { "message": "İndi kilidlə" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "İki addımlı giriş, güvənlik açarı, kimlik doğrulayıcı tətbiq, SMS, telefon zəngi və ya e-poçt kimi digər cihazlarla girişinizi doğrulamanızı tələb edərək hesabınızı daha da güvənli edir. İki addımlı giriş, bitwarden.com veb anbarında qurula bilər. Veb saytı indi ziyarət etmək istəyirsiniz?" }, + "twoStepLoginConfirmationContent": { + "message": "Bitwarden veb tətbiqində iki addımlı girişi quraraq hesabınızı daha güvənli edin." + }, + "twoStepLoginConfirmationTitle": { + "message": "Veb tətbiqlə davam edilsin?" + }, "editedFolder": { "message": "Qovluğ saxlanıldı" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Fayl" }, + "fileToShare": { + "message": "Paylaşılacaq fayl" + }, "selectFile": { "message": "Bir fayl seçin" }, @@ -1797,13 +1846,13 @@ "message": "Sadalanacaq heç bir parol yoxdur." }, "clearHistory": { - "message": "Clear history" + "message": "Tarixçəni təmizlə" }, "noPasswordsToShow": { - "message": "No passwords to show" + "message": "Göstəriləcək parol yoxdur." }, "noRecentlyGeneratedPassword": { - "message": "You haven't generated a password recently" + "message": "Təzəlikcə parol yaratmamısınız." }, "remove": { "message": "Çıxart" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "PIN ilə kilidi açın" }, + "setYourPinTitle": { + "message": "PIN təyin et" + }, + "setYourPinButton": { + "message": "PIN təyin et" + }, "setYourPinCode": { "message": "Bitwarden-in kilidini açmaq üçün PIN kodunuzu ayarlayın. Tətbiqdən tam çıxış etdikdə PIN ayarlarınız sıfırlanacaq." }, + "setYourPinCode1": { + "message": "Bitwarden kilidini açmaq üçün ana parolunuzun əvəzinə PIN-iniz istifadə ediləcək. Bitwarden-dən tamamilə çıxış etdikdə PIN-iniz sıfırlanacaq." + }, "pinRequired": { "message": "PIN kod lazımdır." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Brauzer yenidən başladılanda ana parolla kilidlə" }, + "lockWithMasterPassOnRestart1": { + "message": "Brauzer yenidən başladılanda ana parolu tələb et" + }, "selectOneCollection": { "message": "Ən azı bir kolleksiya seçməlisiniz." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Anbar vaxtının bitmə əməliyyatı" }, + "vaultTimeoutAction1": { + "message": "Vaxt bitmə əməliyyatı" + }, "lock": { "message": "Kilidlə", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Tullantı qutusu", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Hesablar uyuşmur" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrik kilidini açma uğursuz oldu. Biometrik sirr açarı anbarın kilidini aça bilmədi. Lütfən biometriki yenidən qurmağa çalışın." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometrik açarı uyuşmazlığı" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrik kilidini açma uğursuz oldu. Biometrik sirr açarı anbarın kilidini aça bilmədi. Lütfən biometriki yenidən qurmağa çalışın." + }, "biometricsNotEnabledTitle": { "message": "Biometriklər qurulmayıb" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "İstisna domen dəyişikliyi saxlanıldı" }, + "limitSendViews": { + "message": "Baxışları limitlə" + }, + "limitSendViewsHint": { + "message": "Limitə çatdıqdan sonra bu Send-ə heç kim baxa bilməz.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ baxış qaldı", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send detalları", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "\"Send\"ləri axtar", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Mətn" }, + "sendTypeTextToShare": { + "message": "Paylaşılacaq mətn" + }, "sendTypeFile": { "message": "Fayl" }, @@ -2232,6 +2320,9 @@ "message": "Bütün \"Send\"lər", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Mətni ilkin olaraq gizlət" + }, "maxAccessCountReached": { "message": "Maksimal müraciət sayına çatıldı", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "\"Send\" göstərilən tarix və saatda birdəfəlik silinəcək.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send, bu tarixdə həmişəlik silinəcək.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Bitmə tarixi" }, @@ -2338,6 +2433,10 @@ "message": "İstəyinizə görə istifadəçilərdən bu \"Send\"ə müraciət edərkən parol tələb edə bilərsiniz.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Send-ə baxmaq üçün bu parol tələb edilsin.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Bu \"Send\" ilə bağlı gizli notlar.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "E-poçt ünvanımı alıcılardan gizlət." }, + "hideYourEmail": { + "message": "E-poçt ünvanınız baxanlardan gizlədilsin." + }, "sendOptionsPolicyInEffect": { "message": "Bir və ya daha çox təşkilat siyasətləri \"Send\" seçimlərinizə təsir edir." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Dəqiqə" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Müəssisə siyasət tələbləri, vaxt bitmə seçimlərinizə tətbiq edildi" + }, "vaultTimeoutPolicyInEffect": { "message": "Təşkilatınızın siyasətləri, anbarınızın vaxt bitişinə təsir edir. Anbar vaxt bitişi üçün icazə verilən maksimum vaxt $HOURS$ saat $MINUTES$ dəqiqədir", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Maksimum $HOURS$ saat və $MINUTES$ dəqiqə.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Vaxt bitməsinə təyin olunan vaxt, təşkilatınız tərəfindən ayarlanan məhdudiyyəti aşır: Maksimum $HOURS$ saat və $MINUTES$ dəqiqə", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Təşkilatınızın siyasətləri, anbarınızın vaxt bitişinə təsir edir. Anbar vaxt bitişi üçün icazə verilən maksimum vaxt $HOURS$ saat $MINUTES$ dəqiqədir. Anbar vaxt bitişi əməliyyatı $ACTION$ olaraq ayarlandı.", "placeholders": { @@ -4309,8 +4440,17 @@ "enterprisePolicyRequirementsApplied": { "message": "Müəssisə siyasət tələbləri bu ayara tətbiq edildi" }, + "retry": { + "message": "Yenidən sına" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum özəl bitmə vaxtı 1 dəqiqədir." + }, + "additionalContentAvailable": { + "message": "Əlavə məzmun əlçatandır" + }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Fayl cihazda saxlanıldı. Endirilənləri cihazınızdan idarə edin." }, "showCharacterCount": { "message": "Xarakter sayını göstər" diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index cf14c8e32a0..384036840d3 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Аўтазапаўненне" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Дадаць элемент" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Падказка да пароля" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Пошук у сховішчы" }, @@ -504,6 +535,9 @@ "notes": { "message": "Нататкі" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Нататка" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Час чакання сховішча" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Заблакіраваць зараз" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Двухэтапны ўваход робіць ваш уліковы запіс больш бяспечным, патрабуючы пацвярджэнне ўваходу на іншай прыладзе з выкарыстаннем ключа бяспекі, праграмы аўтэнтыфікацыі, SMS, тэлефоннага званка або электроннай пошты. Двухэтапны ўваход уключаецца на bitwarden.com. Перайсці на вэб-сайт, каб зрабіць гэта?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Папка адрэдагавана" }, @@ -892,7 +938,7 @@ "message": "Спіс элементаў картак на старонцы з укладкамі для лёгкага аўтазапаўнення." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Паказваць пасведчанні на старонцы з укладкамі" @@ -1097,6 +1143,9 @@ "file": { "message": "Файл" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Выберыце файл." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Разблакіраваць PIN-кодам" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Прызначце PIN-код для разблакіроўкі Bitwarden. Налады PIN-кода будуць скінуты, калі вы калі-небудзь цалкам выйдзеце з праграмы." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Патрабуецца PIN-код." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Заблакіраваць асноўным паролем пры перазапуску браўзера" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Вы павінны выбраць прынамсі адну калекцыю." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Дзеянне пасля заканчэння часу чакання сховішча" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Заблакіраваць", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Сметніца", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Неадпаведнасць уліковых запісаў" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Біяметрыя не ўключана" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Пошук у Send'ах", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Тэкст" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Файл" }, @@ -2232,6 +2320,9 @@ "message": "Усе Send’ы", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Дасягнута максімальная колькасць доступаў", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send будзе незваротна выдалены ў азначаныя дату і час.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Дата завяршэння" }, @@ -2338,6 +2433,10 @@ "message": "Па магчымасці запытваць у карыстальнікаў пароль для доступу да гэтага Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Прыватныя нататкі пра гэты Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Схаваць мой адрас электроннай пошты ад атрымальнікаў." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Адна або больш палітык арганізацыі ўплываюць на параметры Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Хвіліны" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Палітыка вашай арганізацыі ўплывае на час чакання сховішча. Максімальны дазволены час чакання сховішча складае $HOURS$ гадз. і $MINUTES$ хв.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Палітыка вашай арганізацыі ўплывае на час чакання сховішча. Максімальны дазволены час чакання сховішча складае гадзін: $HOURS$; хвілін: $MINUTES$. Для часу чакання вашага сховішча прызначана дзеянне $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 9d90293b0ca..df91be9ff49 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Копиране на номера на свидетелството" }, + "copyCustomField": { + "message": "Копиране на $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Копиране на уеб сайта" + }, + "copyNotes": { + "message": "Копиране на бележките" + }, "autoFill": { "message": "Автоматично дописване" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Добавяне на елемент" }, + "accountEmail": { + "message": "Е-поща на регистрацията" + }, + "requestHint": { + "message": "Заявка за подсказка" + }, + "requestPasswordHint": { + "message": "Заявка за подсказка за паролата" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Въведете е-пощата на регистрацията си и подсказката за паролата ще Ви бъде изпратена" + }, "passwordHint": { "message": "Подсказка за паролата" }, @@ -462,6 +489,10 @@ "message": "Без нееднозначни знаци", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Търсене в трезора" }, @@ -504,6 +535,9 @@ "notes": { "message": "Бележки" }, + "privateNote": { + "message": "Лична бележка" + }, "note": { "message": "Бележка" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Изтичане на времето за сесията" }, + "vaultTimeoutHeader": { + "message": "Време за достъп до трезора" + }, "otherOptions": { "message": "Други настройки" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Време за достъп" }, + "vaultTimeout1": { + "message": "Време за достъп" + }, "lockNow": { "message": "Заключване сега" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Двустепенното вписване защитава регистрацията ви, като ви кара да потвърдите влизането си чрез устройство-ключ, приложение за удостоверение, мобилно съобщение, телефонно обаждане или електронна поща. Двустепенното вписване може да се включи чрез сайта bitwarden.com. Искате ли да го посетите?" }, + "twoStepLoginConfirmationContent": { + "message": "Подобрете защитата на регистрацията си, като настроите двустепенното удостоверяване в уеб приложението на Битуорден." + }, + "twoStepLoginConfirmationTitle": { + "message": "Продължаване към уеб приложението?" + }, "editedFolder": { "message": "Редактирана папка" }, @@ -892,7 +938,7 @@ "message": "Показване на картите в страницата с разделите, за лесно автоматично попълване." }, "showIdentitiesInVaultView": { - "message": "Показване на самоличности като предложения за самопопълване в изгледа на трезора" + "message": "Показване на самоличности като предложения за автоматично попълване в изгледа на трезора" }, "showIdentitiesCurrentTab": { "message": "Показване на самоличности в страницата с разделите" @@ -1097,6 +1143,9 @@ "file": { "message": "Файл" }, + "fileToShare": { + "message": "Файл за споделяне" + }, "selectFile": { "message": "Изберете файл." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Отключване с ПИН" }, + "setYourPinTitle": { + "message": "Задаване на ПИН" + }, + "setYourPinButton": { + "message": "Задаване на ПИН" + }, "setYourPinCode": { "message": "Задайте ПИН за отключване на Bitwarden. Настройките за ПИН се изчистват при всяко пълно излизане от програмата." }, + "setYourPinCode1": { + "message": "Вашият ПИН ще бъде ползван за отключване на Битуорден, вместо главната парола. Той ще бъде нулиран, ако някога се отпишете напълно от Битуорден." + }, "pinRequired": { "message": "Необходим е ПИН." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Заключване с главната парола при повторно пускане на браузъра" }, + "lockWithMasterPassOnRestart1": { + "message": "Изискване на главната парола при повторно пускане на браузъра" + }, "selectOneCollection": { "message": "Изберете поне една колекция." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Действие при изтичане на времето" }, + "vaultTimeoutAction1": { + "message": "Действие при изтичането на времето за достъп" + }, "lock": { "message": "Заключване", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Кошче", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Регистрациите са различни" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Отключването чрез биометрични данни не беше успешно. Биометричният таен ключ не успя да отключи трезора. Опитайте да направите настройката на биометричните данни отново." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Несъответстващ биометричен ключ" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Отключването чрез биометрични данни не беше успешно. Биометричният таен ключ не успя да отключи трезора. Опитайте да направите настройката на биометричните данни отново." + }, "biometricsNotEnabledTitle": { "message": "Потвърждаването с биометрични данни не е включено" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Промените на изключените домейни са запазени" }, + "limitSendViews": { + "message": "Ограничаване на преглежданията" + }, + "limitSendViewsHint": { + "message": "Никой няма да може да преглежда това Изпращане след достигане на ограничението.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Остават $ACCESSCOUNT$ преглеждания", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Изпращане", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Подробности за Изпращането", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Търсене в изпратените", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Текст" }, + "sendTypeTextToShare": { + "message": "Текст за споделяне" + }, "sendTypeFile": { "message": "Файл" }, @@ -2232,6 +2320,9 @@ "message": "Всички изпращания", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Скриване на текста по подразбиране" + }, "maxAccessCountReached": { "message": "Достигнат е максималният брой достъпвания", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Изпращането ще бъде окончателно изтрито на зададената дата и време.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Изпращането ще бъде окончателно изтрито на тази дата.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Срок на валидност" }, @@ -2338,6 +2433,10 @@ "message": "Изискване на парола за достъп до това изпращане.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Изискване на тази парола за преглеждане на Изпращането.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Скрити бележки за това изпращане.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Скриване на е-пощата ми от получателите." }, + "hideYourEmail": { + "message": "Скриване на Вашата е-поща от получателите." + }, "sendOptionsPolicyInEffect": { "message": "Поне една политика на организация влияе на настройките за изпращане." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Минути" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Изискванията на политиката за големи компании бяха приложени към настройките на времето за достъп" + }, "vaultTimeoutPolicyInEffect": { "message": "Настройките на организацията Ви влияят върху времето за достъп до трезора Ви. Максималното разрешено време за достъп е $HOURS$ час(а) и $MINUTES$ минути", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Максимум $HOURS$ час(а) и $MINUTES$ минута/и.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Времето за достъп превишава ограничението, зададено от Вашата организация: максимум $HOURS$ час(а) и $MINUTES$ минута/и", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Настройките на организацията Ви влияят върху времето за достъп до трезора Ви. Максималното разрешено време за достъп е $HOURS$ час(а) и $MINUTES$ минута/и. Зададеното действие при изтичане на това време е $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Изискванията на политиката за големи компании бяха приложени към тази настройка" }, + "retry": { + "message": "Повторен опит" + }, + "vaultCustomTimeoutMinimum": { + "message": "Минималното персонализирано време за достъп е 1 минута." + }, + "additionalContentAvailable": { + "message": "Има налично допълнително съдържание" + }, "fileSavedToDevice": { "message": "Файлът е запазен на устройството. Можете да го намерите в мястото за сваляния на устройството." }, diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index 53a3ceb1a65..5d8ea4ee404 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "স্বতঃপূরণ" }, @@ -179,6 +194,18 @@ "addItem": { "message": "বস্তু জুড়ুন" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "পাসওয়ার্ড ইঙ্গিত" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "ভল্ট খুঁজুন" }, @@ -504,6 +535,9 @@ "notes": { "message": "নোট" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "নোট" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "ভল্টের সময়সীমা" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "এখনই লক করুন" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "দ্বি-পদক্ষেপ লগইন অন্য ডিভাইসে আপনার লগইনটি যাচাই করার জন্য সিকিউরিটি কী, প্রমাণীকরণকারী অ্যাপ্লিকেশন, এসএমএস, ফোন কল বা ই-মেইল ব্যাবহারের মাধ্যমে আপনার অ্যাকাউন্টকে আরও সুরক্ষিত করে। bitwarden.com ওয়েব ভল্টে দ্বি-পদক্ষেপের লগইন সক্ষম করা যাবে। আপনি কি এখনই ওয়েবসাইটটি দেখতে চান?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "ফোল্ডার সম্পাদিত" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "ফাইল" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "একটি ফাইল নির্বাচন করুন।" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "পিন দিয়ে আনলক" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Bitwarden আনলক করার জন্য আপনার পিন কোডটি সেট করুন। আপনি যদি অ্যাপ্লিকেশনটি থেকে পুরোপুরি লগ আউট করেন তবে আপনার পিন সেটিংস রিসেট করা হবে।" }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "পিন কোড প্রয়োজন।" }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "ব্রাউজার পুনরারম্ভতে মূল পাসওয়ার্ড দিয়ে লক করুন" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "কমপক্ষে একটি সংগ্রহ নির্বাচন করুন।" }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "ভল্টের সময়সীমা কর্ম" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "লক", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "আবর্জনা", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "অ্যাকাউন্ট মেলেনি" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "বায়োমেট্রিকস সক্ষম নেই" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ফাইল" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 13cd7e7f54a..6f2a9be6185 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Nagovještaj lozinke" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Otključaj PIN-om" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Zaključaj", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Smeće", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fajl" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 160b625c4e3..7c1cc4b3367 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copia el número de llicència" }, + "copyCustomField": { + "message": "Copia $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copia lloc web" + }, + "copyNotes": { + "message": "Copia notes" + }, "autoFill": { "message": "Emplenament automàtic" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Afegeix element" }, + "accountEmail": { + "message": "Correu electrònic del compte" + }, + "requestHint": { + "message": "Sol·licita pista" + }, + "requestPasswordHint": { + "message": "Sol·licita pista de la contrasenya" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Introduïu l'adreça de correu electrònic del compte i se us enviarà la pista de contrasenya" + }, "passwordHint": { "message": "Pista de la contrasenya" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Cerca en la caixa forta" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Temps de sessió" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Altres opcions" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Temps d'espera de la caixa forta" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Bloqueja ara" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "L'inici de sessió en dues passes fa que el vostre compte siga més segur, ja que obliga a verificar el vostre inici de sessió amb un altre dispositiu, com ara una clau de seguretat, una aplicació autenticadora, un SMS, una trucada telefònica o un correu electrònic. Es pot habilitar l'inici de sessió en dues passes a la caixa forta web de bitwarden.com. Voleu visitar el lloc web ara?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Carpeta guardada" }, @@ -892,7 +938,7 @@ "message": "Llista els elements de la targeta a la pàgina de pestanya per facilitar l'autoemplenat." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Mostra les identitats a la pàgina de pestanya" @@ -1097,6 +1143,9 @@ "file": { "message": "Fitxer" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Seleccioneu un fitxer" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Desbloqueja amb codi PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Configureu el vostre codi PIN per desbloquejar Bitwarden. La configuració del PIN es restablirà si tanqueu la sessió definitivament." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Es necessita el codi PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Bloqueja amb la contrasenya mestra en reiniciar el navegador" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Heu d'escollir com a mínim una col·lecció." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Acció quan acabe el temps d'espera de la caixa forta" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Bloqueja", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Paperera", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "El compte no coincideix" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "La biomètrica no està habilitada" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Detalls de l'enviament", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Cerca Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text a compartir" + }, "sendTypeFile": { "message": "Fitxer" }, @@ -2232,6 +2320,9 @@ "message": "Tots els Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Ocultar el text per defecte" + }, "maxAccessCountReached": { "message": "S'ha assolit el recompte màxim d'accesos", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "L'enviament se suprimirà permanentment a la data i hora especificades.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "L'enviament s'esborrarà permanentment en aquesta data.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Data de caducitat" }, @@ -2338,6 +2433,10 @@ "message": "Opcionalment, necessiteu una contrasenya perquè els usuaris accedisquen a aquest Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Notes privades sobre aquest Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Amagueu la meua adreça de correu electrònic als destinataris." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Una o més polítiques d'organització afecten les vostres opcions del Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuts" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Les polítiques de l'organització afecten el temps d'espera de la caixa forta. El temps d'espera màxim permès d'aquesta és de $HOURS$ hores i $MINUTES$ minuts", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Les polítiques de l'organització afecten el temps d'espera de la caixa forta. El temps d'espera màxim permès de la caixa forta és de $HOURS$ hores i $MINUTES$ minuts. L'acció de temps d'espera de la caixa forta està definida en $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index bb3c81e0785..cee00a55ffe 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kopírovat číslo dokladu totožnosti" }, + "copyCustomField": { + "message": "Kopírovat $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Kopírovat webovou stránku" + }, + "copyNotes": { + "message": "Kopírovat poznámky" + }, "autoFill": { "message": "Automatické vyplňování" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Přidat položku" }, + "accountEmail": { + "message": "E-mail účtu" + }, + "requestHint": { + "message": "Vyžádat nápovědu" + }, + "requestPasswordHint": { + "message": "Vyžádat nápovědu k heslu" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Zadejte svou e-mailovou adresu, na kterou Vám zašleme nápovědu k heslu" + }, "passwordHint": { "message": "Nápověda pro heslo" }, @@ -462,6 +489,10 @@ "message": "Nepoužívat zaměnitelné znaky", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Vyhledat v trezoru" }, @@ -504,6 +535,9 @@ "notes": { "message": "Poznámky" }, + "privateNote": { + "message": "Soukromá poznámka" + }, "note": { "message": "Poznámka" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Časový limit relace" }, + "vaultTimeoutHeader": { + "message": "Časový limit trezoru" + }, "otherOptions": { "message": "Další volby" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Časový limit trezoru" }, + "vaultTimeout1": { + "message": "Časový limit" + }, "lockNow": { "message": "Zamknout nyní" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Dvoufázové přihlášení činí Váš účet mnohem bezpečnějším díky nutnosti po každém úspěšném přihlášení zadat ověřovací kód získaný z bezpečnostního klíče, aplikace, SMS, telefonního hovoru nebo e-mailu. Dvoufázové přihlášení lze aktivovat na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít?" }, + "twoStepLoginConfirmationContent": { + "message": "Vytvořte svůj účet bezpečnějším nastavením dvoufázového přihlášení ve webové aplikaci Bitwarden." + }, + "twoStepLoginConfirmationTitle": { + "message": "Pokračovat do webové aplikace?" + }, "editedFolder": { "message": "Složka byla uložena" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Soubor" }, + "fileToShare": { + "message": "Soubor ke sdílení" + }, "selectFile": { "message": "Zvolte soubor" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Odemknout pomocí PIN" }, + "setYourPinTitle": { + "message": "Nastavit PIN" + }, + "setYourPinButton": { + "message": "Nastavit PIN" + }, "setYourPinCode": { "message": "Nastavte svůj PIN kód pro odemknutí trezoru. Pokud se zcela odhlásíte z aplikace bude Váš aktuální PIN resetován." }, + "setYourPinCode1": { + "message": "Váš PIN bude použit k odemknutí Bitwardenu namísto hlavního hesla. Pokud se někdy plně odhlásíte z Bitwarden, Váš PIN kód se obnoví." + }, "pinRequired": { "message": "Je vyžadován PIN kód." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Zamknout trezor při restartu prohlížeče pomocí hlavního hesla" }, + "lockWithMasterPassOnRestart1": { + "message": "Vyžadovat hlavní heslo při restartu prohlížeče" + }, "selectOneCollection": { "message": "Musíte vybrat alespoň jednu kolekci." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Akce při vypršení časového limitu" }, + "vaultTimeoutAction1": { + "message": "Akce vypršení časového limitu" + }, "lock": { "message": "Zamknout", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Koš", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Neshoda účtů" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrické odemknutí se nezdařilo. Zkuste znovu nastavit biometrické prvky." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Neshoda biometrického klíče" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrické odemknutí se nezdařilo. Zkuste znovu nastavit biometrické prvky." + }, "biometricsNotEnabledTitle": { "message": "Biometrie není nastavena" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Vyloučené změny domény byly uloženy" }, + "limitSendViews": { + "message": "Omezit zobrazení" + }, + "limitSendViewsHint": { + "message": "Po dosažení limitu nebude nikdo moci zobrazit tento Send.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Zbývá $ACCESSCOUNT$ zobrazení", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Podrobnosti Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Prohledat Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text ke sdílení" + }, "sendTypeFile": { "message": "Soubor" }, @@ -2232,6 +2320,9 @@ "message": "Všechny Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Ve výchozím nastavení skrýt text" + }, "maxAccessCountReached": { "message": "Dosažen maximální počet přístupů", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Tento Send bude trvale smazán v určený datum a čas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Tento Send bude trvale smazán v určené datum.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Datum vypršení platnosti" }, @@ -2338,6 +2433,10 @@ "message": "Volitelně vyžadovat heslo pro přístup k tomuto Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Pro zobrazení Send bude vyžadováno toto heslo.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Soukromé poznámky o tomto Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Skrýt mou e-mailovou adresu před příjemci." }, + "hideYourEmail": { + "message": "Skryje Vaši e-mailovou adresu před zobrazením." + }, "sendOptionsPolicyInEffect": { "message": "Jedna nebo více zásad organizace ovlivňuje nastavení Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "minut" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Na volby časového limitu byly uplatněny požadavky podnikových zásad" + }, "vaultTimeoutPolicyInEffect": { "message": "Pravidla Vaší organizace ovlivňují časový limit trezoru. Maximální povolený časový limit trezoru je $HOURS$ hodin a $MINUTES$ minut.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Maximálně $HOURS$ hodin a $MINUTES$ minut.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Časový limit překračuje omezení stanovené Vaší organizací: maximálně $HOURS$ hodin a $MINUTES$ minut", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Pravidla Vaší organizace mají vliv na časový limit trezoru. Maximální povolený časový limit trezoru je $HOURS$ hodin a $MINUTES$ minut. Akce po časovém limitu trezoru je nastavena na $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Na toto nastavení byly uplatněny požadavky podnikových zásad" }, + "retry": { + "message": "Opakovat" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimální vlastní časový limit je 1 minuta." + }, + "additionalContentAvailable": { + "message": "Je k dispozici další obsah" + }, "fileSavedToDevice": { "message": "Soubor byl uložen. Můžete jej nalézt ve stažené složce v zařízení." }, diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index e43e81e1e50..476319b3709 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Llenwi'n awtomatig" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Ychwanegu eitem" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Chwilio'r gell" }, @@ -504,6 +535,9 @@ "notes": { "message": "Nodiadau" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nodyn" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Dewisiadau eraill" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Cloi'r gell" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Cloi nawr" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Ffolder wedi'i chadw" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "Ffeil" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Dewis ffeil" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Datgloi â PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Mae angen cod PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Cloi", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Sbwriel", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Chwilio drwy Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Testun" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Ffeil" }, @@ -2232,6 +2320,9 @@ "message": "Pob Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Dyddiad dod i ben" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Cuddio fy nghyfeiriad ebost rhag derbynwyr." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 8771b323cb7..e5c2c38c078 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -128,8 +128,23 @@ "copyLicenseNumber": { "message": "Kopier licensnummer" }, + "copyCustomField": { + "message": "Kopiér $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Kopiér websted" + }, + "copyNotes": { + "message": "Kopiér notater" + }, "autoFill": { - "message": "Auto-udfyld" + "message": "Autoudfyld" }, "autoFillLogin": { "message": "Autoudfyld login" @@ -171,7 +186,7 @@ "message": "Log ind på din boks" }, "autoFillInfo": { - "message": "Der findes ingen login til at auto-udfylde i den nuværende browserfane." + "message": "Der findes ingen logins at autoudfylde i den aktuelle webbrowserfane." }, "addLogin": { "message": "Tilføj et login" @@ -179,6 +194,18 @@ "addItem": { "message": "Tilføj element" }, + "accountEmail": { + "message": "Konto-e-mail" + }, + "requestHint": { + "message": "Anmod om tip" + }, + "requestPasswordHint": { + "message": "Anmod om adgangskodetip" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Angiv kontoens e-mailadresse og få et adgangskodetip fremsendt" + }, "passwordHint": { "message": "Adgangskodetip" }, @@ -462,6 +489,10 @@ "message": "Undgå tvetydige tegn", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Søg i boks" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notater" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Notat" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Sessionstimeout" }, + "vaultTimeoutHeader": { + "message": "Boks-timeout" + }, "otherOptions": { "message": "Andre innstillinger" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Boks timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lås nu" }, @@ -718,7 +758,7 @@ } }, "autofillError": { - "message": "Ikke i stand til at auto-udfylde det valgte element på denne side. Kopiér og indsæt dataene i stedet for." + "message": "Ikke i stand til at autoudfylde det valgte emne på denne side. Kopiér og indsæt informationen i stedet." }, "totpCaptureError": { "message": "Kan ikke skanne QR-koden fra den aktuelle webside" @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "To-trins login gør din konto mere sikker ved at kræve, at du verificerer dit login med en anden enhed, såsom en sikkerhedsnøgle, autentificeringsapp, SMS, telefonopkald eller e-mail. To-trins login kan aktiveres i bitwarden.com web-boksen. Vil du besøge hjemmesiden nu?" }, + "twoStepLoginConfirmationContent": { + "message": "Øg kontosikkerheden ved at oprette totrinsindlogning i Bitwarden web-appen." + }, + "twoStepLoginConfirmationTitle": { + "message": "Fortsæt til web-app?" + }, "editedFolder": { "message": "Mappe gemt" }, @@ -889,7 +935,7 @@ "message": "Vis kort på fanebladet" }, "showCardsCurrentTabDesc": { - "message": "Vis kortelementer på fanebladet for nem auto-udfyldning." + "message": "Vis kortemner på siden Fane for nem autoudfyldning." }, "showIdentitiesInVaultView": { "message": "Vis identiteter som Autoudfyldningsforslag ved Boks-visning" @@ -898,7 +944,7 @@ "message": "Vis identiteter på fanebladet" }, "showIdentitiesCurrentTabDesc": { - "message": "Vis identitetselementer på fanebladet for nem auto-udfyldning." + "message": "Vis identitetsemner på siden Fane for nem autoudfyldning." }, "clearClipboard": { "message": "Ryd udklipsholder", @@ -936,7 +982,7 @@ "message": "Opdatér" }, "notificationUnlockDesc": { - "message": "Oplås din Bitwarden boks for at færdiggøre autoudfyldanmodningen." + "message": "Oplås Bitwarden-boksen for at færdiggøre autoudfyldningsanmodningen." }, "notificationUnlock": { "message": "Oplås" @@ -958,7 +1004,7 @@ "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Vælg den standard måde, som URI matchmetode håndteres til logins, når du udfører handlinger som f.eks. Auto-udfyld." + "message": "Vælg standardmåden for håndtering af URI-matchdetektering til logins, når der udføres handlinger, såsom f.eks. Autoudfyld." }, "theme": { "message": "Tema" @@ -1097,6 +1143,9 @@ "file": { "message": "Fil" }, + "fileToShare": { + "message": "Fil, der skal deles" + }, "selectFile": { "message": "Vælg en fil" }, @@ -1191,7 +1240,7 @@ "message": "Kopiér TOTP automatisk" }, "disableAutoTotpCopyDesc": { - "message": "Hvis et login har en autentificeringsnøgle, så kopiér TOTP-bekræftelseskoden til din udklipsholder, når du auto-udfylder login." + "message": "Har et login har en autentificeringsnøgle, kopiér TOTP-bekræftelseskoden til udklipsholderen, når login autoudfyldes." }, "enableAutoBiometricsPrompt": { "message": "Bed om biometri ved start" @@ -1341,7 +1390,7 @@ "message": "Miljøets URLs er blevet gemt." }, "showAutoFillMenuOnFormFields": { - "message": "Vis autoudfyld-menu i formularfelter", + "message": "Vis autoudfyldningsmenu i formularfelter", "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { @@ -1371,17 +1420,17 @@ "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { - "message": "Når autoudfyld-ikon vælges", + "message": "Når autoudfyldikon vælges", "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { "message": "Autoudfyld ved sideindlæsning" }, "enableAutoFillOnPageLoad": { - "message": "Auto-udfyld ved sideindlæsning" + "message": "Autoudfyld ved sideindlæsning" }, "enableAutoFillOnPageLoadDesc": { - "message": "Hvis der registreres en loginformular, så auto-udfyld, når websiden indlæses." + "message": "Registreres en loginformular, autoudfyld når websiden indlæses." }, "autofillOnPageLoadWarning": { "message": "$OPENTAG$Advarsel:$CLOSETAG$ Kompromitterede eller ikke-betroede websteder kan misbruge autofyld ved sideindlæsning.", @@ -1409,19 +1458,19 @@ "message": "Standardindstilling for autofyld for loginelementer" }, "defaultAutoFillOnPageLoadDesc": { - "message": "Du kan deaktivere auto-udfyld ved sideindlæsning for individuelle login-elementer fra elementets redigeringsvisning." + "message": "Autoudfyldning ved sideindlæsning kan slås fra for individuelle loginemner fra emnets redigeringsvisning." }, "itemAutoFillOnPageLoad": { - "message": "Auto-udfyld ved sideindlæsning (hvis aktiveret i Indstillinger)" + "message": "Autoudfyld ved sideindlæsning (hvis opsat i Indstillinger)" }, "autoFillOnPageLoadUseDefault": { "message": "Anvend standardindstilling" }, "autoFillOnPageLoadYes": { - "message": "Auto-udfyld ved sideindlæsning" + "message": "Autoudfyld ved sideindlæsning" }, "autoFillOnPageLoadNo": { - "message": "Auto-udfyld ikke ved sideindlæsning" + "message": "Autoudfyld ikke ved sideindlæsning" }, "commandOpenPopup": { "message": "Åbn boks popup" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Lås op med pinkode" }, + "setYourPinTitle": { + "message": "Indstil PIN-kode" + }, + "setYourPinButton": { + "message": "Indstil PIN-kode" + }, "setYourPinCode": { "message": "Indstil din pinkode til at låse Bitwarden op. Dine pin-indstillinger nulstilles, hvis du nogensinde logger helt ud af programmet." }, + "setYourPinCode1": { + "message": "PIN-koden vil blive brugt til oplåsning af Bitwarden i stedet for hovedadgangskoden. PIN-koden nulstilles, hvis man logger helt ud af Bitwarden." + }, "pinRequired": { "message": "Pinkode er påkrævet." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lås med hovedadgangskode ved genstart af browseren" }, + "lockWithMasterPassOnRestart1": { + "message": "Kræver hovedadgangskode efter genstart af webbrowseren" + }, "selectOneCollection": { "message": "Du skal vælge minimum én samling." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Boks timeout-handling" }, + "vaultTimeoutAction1": { + "message": "Timeouthandling" + }, "lock": { "message": "Lås", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Papirkurv", @@ -1967,10 +2031,10 @@ "message": "Udfyld og gem" }, "autoFillSuccessAndSavedUri": { - "message": "Autoudfyldte element og URI gemt" + "message": "Emne autoudfyldt og URI gemt" }, "autoFillSuccess": { - "message": "Autoudfyldte element" + "message": "Emne autoudfyldt " }, "insecurePageWarning": { "message": "Advarsel: Dette er en ikke-sikret HTTP side, og alle indsendte oplysninger kan potentielt ses og ændres af andre. Dette login blev oprindeligt gemt på en sikker (HTTPS) side." @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Konto mismatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrisk oplåsning mislykkedes. Den hemmelige biometriske nøgle kunne ikke oplåse boksen. Prøv at opsætte biometri igen." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometrisk nøgle matcher ikke" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrisk oplåsning mislykkedes. Den hemmelige biometriske nøgle kunne ikke oplåse boksen. Prøv at opsætte biometri igen." + }, "biometricsNotEnabledTitle": { "message": "Biometri ikke aktiveret" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Ekskluderet domæne-ændringer gemt" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send-detaljer", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Søg i Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Tekst, der skal deles" + }, "sendTypeFile": { "message": "Fil" }, @@ -2232,6 +2320,9 @@ "message": "Alle Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Skjul tekst som standard" + }, "maxAccessCountReached": { "message": "Maksimalt adgangsantal nået", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2246,7 +2337,7 @@ "message": "Kodeordsbeskyttet" }, "copyLink": { - "message": "Kopier link" + "message": "Kopiér link" }, "copySendLink": { "message": "Kopiér Send link", @@ -2305,6 +2396,10 @@ "message": "Send'en slettes permanent på den angivne dato og tid.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Denne Send slettes permanent på denne dato.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Udløbsdato" }, @@ -2338,6 +2433,10 @@ "message": "Valgfrit brugeradgangskodekrav for at tilgå denne Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notater om denne Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Skjul min e-mailadresse for modtagere." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Én eller flere organisationspolitikker påvirker dine Send-valgmuligheder." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutter" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Virksomhedspolitikkrav er anvendt på disse timeoutindstillinger" + }, "vaultTimeoutPolicyInEffect": { "message": "Organisationspolitikkerne har fastsat den maksimalt tilladte boks-timeout til $HOURS$ time(r) og $MINUTES$ minut(ter).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ time(r) og $MINUTES$ minut(ter) maks.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout overskrider den af organisationen angivne restriktion: $HOURS$ time(r) og $MINUTES$ minut(ter) maks.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Organisationspolitikkerne påvirker boks-timeout. Maks. tilladt boks-timeout er $HOURS$ time(r) og $MINUTES$ minut(ter). Boks-timeouthandlingen er sat til $ACTION$.", "placeholders": { @@ -2927,7 +3058,7 @@ "message": "Forstået" }, "autofillSettings": { - "message": "Autoudfyldelsesindstillinger" + "message": "Autoudfyldnigsindstillinger" }, "autofillKeyboardShortcutSectionTitle": { "message": "Autoudfyld-genvej" @@ -3688,7 +3819,7 @@ "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutofillDescription": { - "message": "Ignoreres denne indstilling, kan det forårsage konflikter mellem Bitwardens autoudfyld-menu og webbrowsere.", + "message": "Ignoreres denne indstilling, kan det forårsage konflikter mellem Bitwardens og webbrowserens autoudfyldningsforslag.", "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutoFillSettings": { @@ -3994,10 +4125,10 @@ "message": "Godkendelsesnøgle" }, "autofillOptions": { - "message": "Autofill options" + "message": "Autoudfyldningsindstillinger" }, "websiteUri": { - "message": "Website (URI)" + "message": "Websted (URI)" }, "websiteUriCount": { "message": "Websted (URI) $COUNT$", @@ -4010,16 +4141,16 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Websted tilføjet" }, "addWebsite": { - "message": "Add website" + "message": "Tilføj websted" }, "deleteWebsite": { - "message": "Delete website" + "message": "Slet websted" }, "defaultLabel": { - "message": "Default ($VALUE$)", + "message": "Standard ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -4029,7 +4160,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "Vis matchdetektion $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4038,7 +4169,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "Skjul matchdetektion $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Virksomhedspolitikkrav er anvendt på denne indstilling" }, + "retry": { + "message": "Forsøg igen" + }, + "vaultCustomTimeoutMinimum": { + "message": "Tilpasset minimumstimeout udgør 1 minut." + }, + "additionalContentAvailable": { + "message": "Yderligere indhold er tilgængeligt" + }, "fileSavedToDevice": { "message": "Fil gemt på enheden. Håndtér fra enhedens downloads." }, diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 3af4de85e13..dc027fd44a5 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Lizenznummer kopieren" }, + "copyCustomField": { + "message": "$FIELD$ kopieren", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Website kopieren" + }, + "copyNotes": { + "message": "Notizen kopieren" + }, "autoFill": { "message": "Auto-Ausfüllen" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Eintrag hinzufügen" }, + "accountEmail": { + "message": "E-Mail-Adresse des Kontos" + }, + "requestHint": { + "message": "Hinweis anfragen" + }, + "requestPasswordHint": { + "message": "Passwort-Hinweis anfragen" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Gib deine E-Mail-Adresse ein und dein Passwort-Hinweis wird dir zugesandt" + }, "passwordHint": { "message": "Passwort-Hinweis" }, @@ -462,6 +489,10 @@ "message": "Mehrdeutige Zeichen vermeiden", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Tresor durchsuchen" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notizen" }, + "privateNote": { + "message": "Private Notiz" + }, "note": { "message": "Notiz" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Sitzungs-Timeout" }, + "vaultTimeoutHeader": { + "message": "Tresor-Timeout" + }, "otherOptions": { "message": "Andere Optionen" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Tresor-Timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Jetzt sperren" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Mit der Zwei-Faktor-Authentifizierung wird dein Konto zusätzlich abgesichert, da jede Anmeldung mit einem anderen Gerät wie einem Sicherheitsschlüssel, einer Authentifizierungs-App, einer SMS, einem Anruf oder einer E-Mail verifiziert werden muss. Die Zwei-Faktor-Authentifizierung kann im bitwarden.com Web-Tresor aktiviert werden. Möchtest du die Website jetzt öffnen?" }, + "twoStepLoginConfirmationContent": { + "message": "Mache dein Konto sicherer, indem du eine Zwei-Faktor-Authentifizierung in der Bitwarden Web-App einrichtest." + }, + "twoStepLoginConfirmationTitle": { + "message": "Weiter zur Web-App?" + }, "editedFolder": { "message": "Ordner gespeichert" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Datei" }, + "fileToShare": { + "message": "Zu teilende Datei" + }, "selectFile": { "message": "Wähle eine Datei" }, @@ -1797,13 +1846,13 @@ "message": "Keine Einträge zum Anzeigen vorhanden." }, "clearHistory": { - "message": "Clear history" + "message": "Verlauf löschen" }, "noPasswordsToShow": { - "message": "No passwords to show" + "message": "Keine Passwörter zum Anzeigen" }, "noRecentlyGeneratedPassword": { - "message": "You haven't generated a password recently" + "message": "Du hast in letzter Zeit kein Passwort generiert" }, "remove": { "message": "Entfernen" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Mit PIN-Code entsperren" }, + "setYourPinTitle": { + "message": "PIN festlegen" + }, + "setYourPinButton": { + "message": "PIN festlegen" + }, "setYourPinCode": { "message": "Gebe deinen PIN-Code für das Entsperren von Bitwarden ein. Deine PIN-Einstellungen werden zurückgesetzt, wenn du dich vollständig von der Anwendung abmeldest." }, + "setYourPinCode1": { + "message": "Deine PIN wird verwendet, um Bitwarden anstatt deines Master-Passworts zu entsperren. Deine PIN wird zurückgesetzt, wenn du dich jemals vollständig von Bitwarden abgemeldet hast." + }, "pinRequired": { "message": "PIN-Code ist erforderlich." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Bei Neustart des Browsers mit Master-Passwort sperren" }, + "lockWithMasterPassOnRestart1": { + "message": "Master-Passwort beim Neustart des Browsers verlangen" + }, "selectOneCollection": { "message": "Sie müssen mindestens eine Sammlung auswählen." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Aktion bei Tresor-Timeout" }, + "vaultTimeoutAction1": { + "message": "Timeout-Aktion" + }, "lock": { "message": "Sperren", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Papierkorb", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Konten stimmen nicht überein" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrische Entsperrung fehlgeschlagen. Der biometrische Geheimschlüssel konnte den Tresor nicht entsperren. Bitte versuche Biometrie erneut einzurichten." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometrische Schlüssel stimmen nicht überein" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrische Entsperrung fehlgeschlagen. Der biometrische Geheimschlüssel konnte den Tresor nicht entsperren. Bitte versuche Biometrie erneut einzurichten." + }, "biometricsNotEnabledTitle": { "message": "Biometrie ist nicht eingerichtet" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Änderungen der ausgeschlossenen Domain gespeichert" }, + "limitSendViews": { + "message": "Ansichten begrenzen" + }, + "limitSendViewsHint": { + "message": "Nach Erreichen des Limits kann niemand mehr dieses Send sehen.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ Ansichten übrig", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send-Details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Sends suchen", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Zu teilender Text" + }, "sendTypeFile": { "message": "Datei" }, @@ -2232,6 +2320,9 @@ "message": "Alle Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Text standardmäßig ausblenden" + }, "maxAccessCountReached": { "message": "Maximale Zugriffsanzahl erreicht", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Das Send wird am angegebenen Datum zur angegebenen Uhrzeit dauerhaft gelöscht.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Das Send wird an diesem Datum dauerhaft gelöscht.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Ablaufdatum" }, @@ -2338,6 +2433,10 @@ "message": "Optional ein Passwort verlangen, damit Benutzer auf dieses Send zugreifen können.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Dieses Passwort zum Anzeigen des Sends verlangen.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private Notizen zu diesem Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Meine E-Mail-Adresse vor den Empfängern ausblenden." }, + "hideYourEmail": { + "message": "Verberge deine E-Mail-Adresse vor Betrachtern." + }, "sendOptionsPolicyInEffect": { "message": "Eine oder mehrere Organisationsrichtlinien beeinflussen deine Send Einstellungen." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuten" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Die Unternehmens-Richtlinienanforderungen wurden auf deine Timeout-Optionen angewendet" + }, "vaultTimeoutPolicyInEffect": { "message": "Deine Unternehmensrichtlinien haben das maximal zulässige Tresor-Timeout auf $HOURS$ Stunde(n) und $MINUTES$ Minute(n) festgelegt.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Maximal $HOURS$ Stunde(n) und $MINUTES$ Minute(n).", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Das Timeout überschreitet die von deiner Organisation festgelegte Beschränkung: Maximal $HOURS$ Stunde(n) und $MINUTES$ Minute(n)", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Deine Organisationsrichtlinien beeinflussen dein Tresor-Timeout. Das maximal zulässige Tresor-Timeout beträgt $HOURS$ Stunde(n) und $MINUTES$ Minute(n). Deine Tresor-Timeout-Aktion ist auf $ACTION$ gesetzt.", "placeholders": { @@ -4309,8 +4440,17 @@ "enterprisePolicyRequirementsApplied": { "message": "Unternehmens-Richtlinienanforderungen wurden auf diese Einstellung angewandt" }, + "retry": { + "message": "Erneut versuchen" + }, + "vaultCustomTimeoutMinimum": { + "message": "Das minimal benutzerdefinierte Timeout beträgt 1 Minute." + }, + "additionalContentAvailable": { + "message": "Zusätzlicher Inhalt ist verfügbar" + }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Datei auf Gerät gespeichert. Greife darauf über die Downloads deines Geräts zu." }, "showCharacterCount": { "message": "Zeichenanzahl anzeigen" diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index cc008a4949b..7d0054267b6 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Αντιγραφή αριθμού άδειας" }, + "copyCustomField": { + "message": "Αντιγραφή του «$FIELD$»", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Αντιγραφή ιστοτόπου" + }, + "copyNotes": { + "message": "Αντιγραφή σημειώσεων" + }, "autoFill": { "message": "Αυτόματη συμπλήρωση" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Προσθήκη αντικειμένου" }, + "accountEmail": { + "message": "Email λογαριασμού" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Υπόδειξη κωδικού πρόσβασης" }, @@ -462,6 +489,10 @@ "message": "Αποφυγή αμφιλεγόμενων χαρακτήρων", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Αναζήτηση στο vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Σημειώσεις" }, + "privateNote": { + "message": "Ιδιωτική σημείωση" + }, "note": { "message": "Σημείωση" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Χρονικό όριο λήξης συνεδρίας" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Άλλες επιλογές" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Χρόνος Λήξης Vault" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Κλείδωμα Τώρα" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Η σύνδεση δύο βημάτων καθιστά πιο ασφαλή τον λογαριασμό σας, απαιτώντας να επαληθεύσετε τη συνδεσή σας με μια άλλη συσκευή, όπως ένα κλειδί ασφαλείας, μία εφαρμογή επαλήθευσης, ένα μήνυμα SMS, μία τηλεφωνική κλήση ή ένα μήνυμα ηλ. ταχυδρομείου. Μπορείτε να ενεργοποιήσετε τη σύνδεση δύο βημάτων στο διαδικτυακό θυσαυ/κιο bitwarden.com. Θέλετε να επισκεφθείτε την ιστοσελίδα τώρα;" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Συνέχεια στη διαδικτυακή εφαρμογή;" + }, "editedFolder": { "message": "Ο φάκελος αποθηκεύτηκε" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Αρχείο" }, + "fileToShare": { + "message": "Αρχείο προς κοινοποίηση" + }, "selectFile": { "message": "Επιλέξτε αρχείο" }, @@ -1797,7 +1846,7 @@ "message": "Δεν υπάρχουν κωδικοί στη λίστα." }, "clearHistory": { - "message": "Clear history" + "message": "Διαγραφή ιστορικού" }, "noPasswordsToShow": { "message": "No passwords to show" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Ξεκλείδωμα με PIN" }, + "setYourPinTitle": { + "message": "Ορισμός PIN" + }, + "setYourPinButton": { + "message": "Ορισμός PIN" + }, "setYourPinCode": { "message": "Ορίστε τον κωδικό PIN για να ξεκλειδώσετε το Bitwarden. Οι ρυθμίσεις PIN θα επαναρυθμιστούν αν αποσυνδεθείτε πλήρως από την εφαρμογή." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Απαιτείται κωδικός PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Κλείδωμα με κύριο κωδικό πρόσβασης στην επανεκκίνηση του προγράμματος περιήγησης" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Πρέπει να επιλέξετε τουλάχιστον μία συλλογή." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Ενέργεια Χρόνου Λήξης Vault" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Κλείδωμα", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Κάδος Απορριμάτων", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Απόρριψη λογαριασμού" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Το βιομετρικό ξεκλείδωμα απέτυχε. Το βιομετρικό μυστικό κλειδί απέτυχε να ξεκλειδώσει το θησαυ/κιο. Προσπαθήστε να ρυθμίσετε ξανά τα βιομετρικά." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Αναντιστοιχία βιομετρικού κλειδιού" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Το βιομετρικό ξεκλείδωμα απέτυχε. Το βιομετρικό μυστικό κλειδί απέτυχε να ξεκλειδώσει το θησαυ/κιο. Προσπαθήστε να ρυθμίσετε ξανά τα βιομετρικά." + }, "biometricsNotEnabledTitle": { "message": "Δεν έχουν οριστεί βιομετρικά" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Οι αλλαγές αποκλεισμένων τομέων αποθηκεύτηκαν" }, + "limitSendViews": { + "message": "Περιορισμός προβολών" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Απομένουν $ACCESSCOUNT$ προβολές", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Αναζήτηση Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Κείμενο" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Αρχείο" }, @@ -2232,6 +2320,9 @@ "message": "Όλα τα Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Φτάσατε στον μέγιστο αριθμό πρόσβασης", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Το Send θα διαγραφεί οριστικά την καθορισμένη ημερομηνία και ώρα.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Ημερομηνία λήξης" }, @@ -2338,6 +2433,10 @@ "message": "Προαιρετικά απαιτείται κωδικός πρόσβασης για τους χρήστες για να έχουν πρόσβαση σε αυτό το Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Ιδιωτικές σημειώσεις σχετικά με αυτό το Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Απόκρυψη της διεύθυνσης email μου από τους παραλήπτες." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Μία ή περισσότερες οργανωτικές πολιτικές επηρεάζουν τις επιλογές send σας." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Λεπτά" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο vault σας. Το μέγιστο επιτρεπόμενο Χρονικό όριο Vault είναι $HOURS$ ώρα(ες) και $MINUTES$ λεπτό(ά)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο λήξης του vault σας. Το μέγιστο επιτρεπόμενο χρονικό όριο λήξης vault είναι $HOURS$ ώρα(ες) και $MINUTES$ λεπτό(ά). H ενέργεια χρονικού ορίου λήξης είναι ορισμένη ως $ACTION$.", "placeholders": { @@ -3487,7 +3618,7 @@ "message": "Απαιτείται επαλήθευση από τον ιστότοπο εκκίνησης. Αυτή η λειτουργία δεν έχει ακόμα υλοποιηθεί για λογαριασμούς χωρίς τον κύριο κωδικό πρόσβασης." }, "logInWithPasskeyQuestion": { - "message": "Log in with passkey?" + "message": "Σύνδεση με κλειδί πρόσβασης;" }, "passkeyAlreadyExists": { "message": "Υπάρχει ήδη ένα κλειδί πρόσβασης για αυτήν την εφαρμογή." @@ -4309,14 +4440,23 @@ "enterprisePolicyRequirementsApplied": { "message": "Οι απαιτήσεις της πολιτικής για επιχειρήσεις έχουν εφαρμοστεί σε αυτήν τη ρύθμιση" }, + "retry": { + "message": "Επανάληψη" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Διατίθεται πρόσθετο περιεχόμενο" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, "showCharacterCount": { - "message": "Show character count" + "message": "Εμφάνιση αριθμού χαρακτήρων" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Απόκρυψη αριθμού χαρακτήρων" }, "itemsInTrash": { "message": "Αντικείμενα στον κάδο" diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 8eae45e6b38..8c08caec353 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -2374,6 +2374,10 @@ "message": "Are you sure you want to delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "editSend": { "message": "Edit Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4201,6 +4205,9 @@ "enableAnimations": { "message": "Enable animations" }, + "showAnimations": { + "message": "Show animations" + }, "addAccount": { "message": "Add account" }, diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index a8efa278e58..e8fcd3de2c9 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-fill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Bin", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account mismatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key mismatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organisation policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organisation policies are affecting your vault timeout. Maximum allowed Vault Timeout is $HOURS$ hour(s) and $MINUTES$ minute(s)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organisation: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organisation policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index c90115ee537..c4d7128eafa 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy licence number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-fill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Edited folder" }, @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Bin", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key mismatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not enabled" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration Date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organisation policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed Vault Timeout is $HOURS$ hour(s) and $MINUTES$ minute(s)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organisation: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organisation policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 572372bafc2..800f7baab0d 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copiar número de licencia" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autorrellenar" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Añadir elemento" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Pista de contraseña" }, @@ -462,6 +489,10 @@ "message": "Evitar caracteres ambiguos", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Buscar en caja fuerte" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Tiempo de sesión agotado" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Otras opciones" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Tiempo de espera de la caja fuerte" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Bloquear" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "La autenticación en dos pasos hace que tu cuenta sea mucho más segura, requiriendo que introduzcas un código de seguridad de una aplicación de autenticación cada vez que accedes. La autenticación en dos pasos puede ser habilitada en la caja fuerte web de bitwarden.com. ¿Quieres visitar ahora el sitio web?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Carpeta editada" }, @@ -892,7 +938,7 @@ "message": "Listar los elementos de tarjetas en la página para facilitar el auto-rellenado." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Mostrar las identidades en la página" @@ -1097,6 +1143,9 @@ "file": { "message": "Archivo" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Selecciona un archivo." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Desbloquear con PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Establece tu código PIN para desbloquear Bitwarden. Tus ajustes de PIN se reiniciarán si alguna vez cierras tu sesión completamente de la aplicación." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Código PIN requerido." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Bloquear con contraseña maestra al reiniciar el navegador" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Debes seleccionar al menos una colección." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Acción de tiempo de espera de la caja fuerte" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Bloquear", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Papelera", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Las cuentas son distintas" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometría deshabilitada" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Buscar Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Texto" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Archivo" }, @@ -2232,6 +2320,9 @@ "message": "Todos los Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Número máximo de accesos alcanzado", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "El Send se eliminará permanentemente en la fecha y hora especificadas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Fecha de caducidad" }, @@ -2338,6 +2433,10 @@ "message": "Opcionalmente se requiere una contraseña para que los usuarios accedan a este Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Notas privadas sobre este Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ocultar mi dirección de correo electrónico a los destinatarios." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Una o más políticas de organización están afectando sus opciones del Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutos" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Las políticas de tu organización están afectando al tiempo de espera de tu caja fuerte. El tiempo máximo de espera de la caja fuerte es de $HOURS$ hora(s) y $MINUTES$ minuto(s)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Las políticas de su organización están afectando al tiempo de espera de tu caja fuerte. El tiempo de espera de tu caja fuerte máximo permitido es de $HOURS$ hora(s) y $MINUTES$ minuto(s). La acción de tiempo de espera de tu caja fuerte está establecida en $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 947b9b0966c..d9f64ecc041 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kopeeri litsentsi number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Automaatne täitmine" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Lisa ese" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Parooli vihje" }, @@ -462,6 +489,10 @@ "message": "Väldi raskesti eristatavaid tähti ja sümboleid", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Otsi hoidlast" }, @@ -504,6 +535,9 @@ "notes": { "message": "Märkmed" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Märkus" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Sessiooni ajalõpp" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Muud valikud" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Hoidla ajalõpp" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lukusta paroolihoidla" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Kaheastmeline kinnitamine aitab konto turvalisust tõsta. Lisaks paroolile pead kontole ligipääsemiseks kinnitama sisselogimise päringu SMS-ga, telefonikõnega, autentimise rakendusega või e-postiga. Kaheastmelist kinnitust saab sisse lülitada bitwarden.com veebihoidlas. Soovid seda kohe avada?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Kaust on muudetud" }, @@ -892,7 +938,7 @@ "message": "Kuvab \"Kaart\" vaates kaardiandmeid, et neid saaks kiiresti sisestada" }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Kuva \"Kaart\" vaates identiteete" @@ -1097,6 +1143,9 @@ "file": { "message": "Fail" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Vali fail." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Ava PIN-iga" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Määra Bitwardeni lahtilukustamiseks PIN kood. Rakendusest täielikult välja logides nullitakse ka PIN koodi seaded." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Nõutakse PIN koodi." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Nõua ülemparooli, kui brauser taaskäivitatakse" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Pead valima vähemalt ühe kogumiku." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Hoidla ajalõpu tegevus" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lukusta", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Prügikast", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Kontod ei ühti" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biomeetria ei ole sisse lülitatud" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Otsi Sende", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fail" }, @@ -2232,6 +2320,9 @@ "message": "Kõik Sendid", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Maksimaalne ligipääsude arv on saavutatud", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send kustutatakse määratud kuupäeval ja kellaajal jäädavalt.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Aegumiskuupäev" }, @@ -2338,6 +2433,10 @@ "message": "Soovi korral nõua parooli, millega Sendile ligi pääseb.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Privaatne märkus selle Sendi kohta.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ära näita saajatele minu e-posti aadressi." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Organisatsiooni seaded mõjutavad sinu Sendi sätteid." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutit" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Organisatsiooni poliitikad mõjutavad sinu hoidla ajalõppu. Maksimaalne lubatud hoidla ajalõpp on $HOURS$ tund(i) ja $MINUTES$ minut(it)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Organisatsiooni poliitikad mõjutavad sinu hoidla ajalõppu. Maksimaalne lubatud hoidla ajalõpp on $HOURS$ tund(i) ja $MINUTES$ minut(it). Sinu hoidla ajalõpu tegevus on $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 1cbb17bcf61..88f2348d5ff 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-betetzea" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Gehitu elementua" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Pasahitza gogoratzeko pista" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Bilatu kutxa gotorrean" }, @@ -504,6 +535,9 @@ "notes": { "message": "Oharrak" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Oharra" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Kutxa gotorraren itxaronaldia" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Blokeatu orain" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Bi urratseko saio hasiera dela eta, zure kontua seguruagoa da, beste aplikazio/gailu batekin saioa hastea eskatzen baitizu; adibidez, segurtasun-gako, autentifikazio-aplikazio, SMS, telefono dei edo email bidez. Bi urratseko saio hasiera bitwarden.com webgunean aktibatu daiteke. Orain joan nahi duzu webgunera?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Karpeta editatuta" }, @@ -892,7 +938,7 @@ "message": "Erakutsi elementuen txartelak fitxa orrian, erraz auto-betetzeko." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Erakutsi identitateak fitxa orrian" @@ -1097,6 +1143,9 @@ "file": { "message": "Fitxategia" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Hautatu fitxategia." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "PIN-arekin desblokeatu" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Ezarri zure PIN kodea Bitwarden desblokeatzeko. Zure PIN-aren konfigurazioa berrezarriko da, noizbait aplikaziotik erabat saioa ixten baduzu." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN-a beharrezkoa da." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Nabigatzailea berrabiaraztean pasahitz nagusiarekin blokeatu" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Gutxienez bilduma bat aukeratu behar duzu." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Kutxa gotorraren itxaronaldiaren ekintza" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Blokeatu", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Zakarrontzia", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Kontu ezberdinak dira" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometria desgaitua" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Send-ak bilatu", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Testua" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fitxategia" }, @@ -2232,6 +2320,9 @@ "message": "Send guztiak", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Sarbide kopuru maximoa gaindituta", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send-a betiko ezabatuko da zehaztutako datan eta orduan.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Iraungitze data" }, @@ -2338,6 +2433,10 @@ "message": "Nahi izanez gero, pasahitza eskatu erabiltzaileak Send honetara sar daitezen.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Send honi buruzko ohar pribatuak.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ezkutatu nire emaila hartzaileei." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Erakundeko politika batek edo gehiagok Send-eko aukerei eragiten diote." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutu" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Zure erakundearen politikek zure itxaronaldiari eragiten diote. Itxaronaldiak gehienez ere $HOURS$ ordu eta $MINUTES$ minutu izango ditu", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 224fa273005..a152c8edd53 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "پر کردن خودکار" }, @@ -179,6 +194,18 @@ "addItem": { "message": "افزودن مورد" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "یادآور کلمه عبور" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "جستجوی گاوصندوق" }, @@ -504,6 +535,9 @@ "notes": { "message": "یادداشت‌ها" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "یادداشت" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "سایر گزینه‌ها" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "متوقف شدن گاو‌صندوق" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "الان قفل شود" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "ورود دو مرحله ای باعث می‌شود که حساب کاربری شما با استفاده از یک دستگاه دیگر مانند کلید امنیتی، برنامه احراز هویت، پیامک، تماس تلفنی و یا ایمیل، اعتبار خود را با ایمنی بیشتر اثبات کند. ورود دو مرحله ای می تواند در bitwarden.com فعال شود. آیا می‌خواهید از سایت بازدید کنید؟" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "پوشه ذخیره شد" }, @@ -892,7 +938,7 @@ "message": "برای پر کردن خودکار آسان، موارد کارت را در صفحه برگه فهرست کن." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "نشان دادن هویت در صفحه برگه" @@ -1097,6 +1143,9 @@ "file": { "message": "پرونده" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "ﺍﻧﺘﺨﺎﺏ یک ﭘﺮﻭﻧﺪﻩ" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "باز کردن با پین" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "کد پین خود را برای باز کردن Bitwarden تنظیم کنید. اگر به طور کامل از برنامه خارج شوید، تنظیمات پین شما از بین می‌رود." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "کد پین الزامیست." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "در زمان شروع مجدد، با کلمه عبور اصلی قفل کن" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "شما باید حداقل یک مجموعه را انتخاب کنید." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "عمل متوقف شدن گاو‌صندوق" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "قفل", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "زباله‌ها", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "عدم مطابقت حساب کاربری" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "بیومتریک برپا نشده" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "ارسال", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "جستجوی ارسال‌ها", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "متن" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "پرونده" }, @@ -2232,6 +2320,9 @@ "message": "همه ارسال ها", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "به حداکثر تعداد دسترسی رسیده است", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "ارسال در تاریخ و ساعت مشخص شده برای همیشه حذف خواهد شد.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "تاريخ انقضاء" }, @@ -2338,6 +2433,10 @@ "message": "به صورت اختیاری برای دسترسی کاربران به این ارسال به یک کلمه عبور نیاز دارید.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "یادداشت های خصوصی در مورد این ارسال.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "نشانی ایمیلم را از گیرندگان مخفی کن." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "یک یا چند سیاست سازمان بر گزینه های ارسال شما تأثیر می‌گذارد." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "دقیقه" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "سیاست‌های سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق $HOURS$ ساعت و $MINUTES$ دقیقه است", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "سیاست‌های سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق $HOURS$ ساعت و $MINUTES$ دقیقه است. عملگر مهلت زمانی گاوصندوق شما روی $ACTION$ تنظیم شده است.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 927225fce52..9d152bc53a3 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kopioi ajokortin numero" }, + "copyCustomField": { + "message": "Kopioi $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Kopioi verkkosivusto" + }, + "copyNotes": { + "message": "Kopioi merkinnät" + }, "autoFill": { "message": "Automaattitäyttö" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Lisää kohde" }, + "accountEmail": { + "message": "Tilin sähköpostiosoite" + }, + "requestHint": { + "message": "Pyydä vihje" + }, + "requestPasswordHint": { + "message": "Pyydä pääsalasanan vihje" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Syötä tilisi sähköpostiosoite, niin salasanavihjeesi lähetetään sinulle sähköpostitse" + }, "passwordHint": { "message": "Salasanavihje" }, @@ -462,6 +489,10 @@ "message": "Vältä epäselviä merkkejä", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Etsi holvista" }, @@ -504,6 +535,9 @@ "notes": { "message": "Merkinnät" }, + "privateNote": { + "message": "Yksityinen muistiinpano" + }, "note": { "message": "Merkintä" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Istunnon aikakatkaisu" }, + "vaultTimeoutHeader": { + "message": "Holvin aikakatkaisu" + }, "otherOptions": { "message": "Muut asetukset" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Holvin aikakatkaisu" }, + "vaultTimeout1": { + "message": "Aikakatkaisu" + }, "lockNow": { "message": "Lukitse nyt" }, @@ -647,7 +687,7 @@ "message": "Pääsalasana" }, "masterPassImportant": { - "message": "Pääsalasanasi palauttaminen ei ole mahdollista, jos unohdat sen!" + "message": "Pääsalasanaasi ei ole mahdollista palauttaa, jos unohdat sen!" }, "masterPassHintLabel": { "message": "Pääsalasanan vihje" @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Kaksivaiheinen kirjautuminen parantaa tilisi suojausta vaatimalla kirjautumisen vahvistuksen salasanan lisäksi suojausavaimen, ‑sovelluksen, tekstiviestin, puhelun tai sähköpostin avulla. Voit ottaa kaksivaiheisen kirjautumisen käyttöön bitwarden.com‑verkkoholvissa. Haluatko avata sen nyt?" }, + "twoStepLoginConfirmationContent": { + "message": "Paranna tilisi suojausta määrittämällä kaksivaiheinen kirjautuminen Bitwardenin verkkosovelluksessa." + }, + "twoStepLoginConfirmationTitle": { + "message": "Avataanko verkkosovellus?" + }, "editedFolder": { "message": "Kansio tallennettiin" }, @@ -889,16 +935,16 @@ "message": "Näytä kortit välilehtiosiossa" }, "showCardsCurrentTabDesc": { - "message": "Kortit näytetään laajennuksen välilehtisivulla niiden automaattisen täytön helpottamiseksi." + "message": "Näytä kortit Välilehti-sivulla automaattitäytön helpottamiseksi." }, "showIdentitiesInVaultView": { - "message": "Näytä henkilöllisyydet automaattitäytön ehdotuksina Holvi-näkymässä" + "message": "Näytä henkilöllisyydet automaattitäytön ehdotuksina Holvi-sivulla." }, "showIdentitiesCurrentTab": { "message": "Näytä henkilöllisyydet välilehtiosiossa" }, "showIdentitiesCurrentTabDesc": { - "message": "Henkilöllisyydet näytetään laajennuksen Välilehti-sivulla niiden automaattisen täytön helpottamiseksi." + "message": "Näytä henkilöllisyydet Välilehti-sivulla automaattitäytön helpottamiseksi." }, "clearClipboard": { "message": "Tyhjennä leikepöytä", @@ -936,7 +982,7 @@ "message": "Päivitä" }, "notificationUnlockDesc": { - "message": "Viimeistele automaattisen täytön pyyntö avaamalla Bitwarden-holvisi lukitus." + "message": "Viimeistele automaattitäyttö avaamalla Bitwarden-holvisi lukitus." }, "notificationUnlock": { "message": "Avaa" @@ -1097,6 +1143,9 @@ "file": { "message": "Tiedosto" }, + "fileToShare": { + "message": "Jaettava tiedosto" + }, "selectFile": { "message": "Valitse tiedosto." }, @@ -1164,7 +1213,7 @@ "message": "Kiitos kun tuet Bitwardenia." }, "premiumFeatures": { - "message": "Päivitä premium-tilaukseen ja saat:" + "message": "Päivitä Premiumiin niin saat:" }, "premiumPrice": { "message": "Kaikki tämä vain $PRICE$/vuosi!", @@ -1371,7 +1420,7 @@ "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { - "message": "Kun automaattitäytön kuvaketta painetaan", + "message": "Kun automaattitäytön kuvake valitaan", "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { @@ -1430,13 +1479,13 @@ "message": "Avaa holvi sivupalkissa" }, "commandAutofillLoginDesc": { - "message": "Automaattitäytä tällä sivustolla viimeksi käytetty kirjautumistieto." + "message": "Automaattitäytä edellinen tälle sivustolle täytetty kirjautumistieto" }, "commandAutofillCardDesc": { - "message": "Automaattitäytä tällä sivustolla viimeksi käytetty kortti." + "message": "Automaattitäytä edellinen tälle sivustolle täytetty kortti" }, "commandAutofillIdentityDesc": { - "message": "Automaattitäytä tällä sivustolla viimeksi käytetty henkilöllisyys." + "message": "Automaattitäytä edellinen tälle sivustolle täytetty henkilöllisyys" }, "commandGeneratePasswordDesc": { "message": "Luo uusi satunnainen salasana ja kopioi se leikepöydälle." @@ -1663,7 +1712,7 @@ } }, "editItemHeader": { - "message": "Muokkaa: $TYPE$", + "message": "Muokkaa tyyppiä $TYPE$", "placeholders": { "type": { "content": "$1", @@ -1797,13 +1846,13 @@ "message": "Ei näytettäviä salasanoja." }, "clearHistory": { - "message": "Clear history" + "message": "Tyhjennä historia" }, "noPasswordsToShow": { - "message": "No passwords to show" + "message": "Näytettäviä salasanoja ei ole" }, "noRecentlyGeneratedPassword": { - "message": "You haven't generated a password recently" + "message": "Et ole luonut salasanoja hiljattain" }, "remove": { "message": "Poista" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Avaa PIN-koodilla" }, + "setYourPinTitle": { + "message": "Aseta PIN-koodi" + }, + "setYourPinButton": { + "message": "Aseta PIN" + }, "setYourPinCode": { "message": "Aseta PIN-koodi Bitwardenin avaukselle. PIN-asetukset tyhjentyvät, jos kirjaudut laajennuksesta kokonaan ulos." }, + "setYourPinCode1": { + "message": "PIN-koodia käytetään pääsalasanasi sijasta Bitwarenin avaukseen. Määritetty PIN-koodi tyhjennetään, jos kirjaudut kokonaan ulos Bitwardenista." + }, "pinRequired": { "message": "PIN-koodi vaaditaan." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lukitse pääsalasanalla kun selain käynnistetään uudelleen" }, + "lockWithMasterPassOnRestart1": { + "message": "Vaadi pääsalasana selaimen uudelleenkäynnistyksen yhteydessä" + }, "selectOneCollection": { "message": "Valitse ainakin yksi kokoelma." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Holvin aikakatkaisutoiminto" }, + "vaultTimeoutAction1": { + "message": "Aikakatkaisutoiminto" + }, "lock": { "message": "Lukitse", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Roskakori", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Tili ei täsmää" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrinen avaus epäonnistui. Biometrinen salainen avain ei voinut avata holvia. Yritä määrittää biometria uudelleen." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometrinen avain ei täsmää" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrinen avaus epäonnistui. Biometrinen salainen avain ei voinut avata holvia. Yritä määrittää biometria uudelleen." + }, "biometricsNotEnabledTitle": { "message": "Biometriaa ei ole määritetty" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Rajoitettujen verkkotunnusten muutokset tallennettiin" }, + "limitSendViews": { + "message": "Rajoita avauksia" + }, + "limitSendViewsHint": { + "message": "Kukaan ei voi avata Sendiä rajoituksen täytyttyä.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ avausta jäljellä", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Sendin tiedot", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Etsi Sendeistä", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Teksti" }, + "sendTypeTextToShare": { + "message": "Jaettava teksti" + }, "sendTypeFile": { "message": "Tiedosto" }, @@ -2232,6 +2320,9 @@ "message": "Kaikki Sendit", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Piilota teksti oletuksena" + }, "maxAccessCountReached": { "message": "Käyttökertojen enimmäismäärä saavutettu", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send poistuu pysyvästi määritettynä ajankohtana.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send poistuu pysyvästi tänä päivänä.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Erääntymisajankohta" }, @@ -2338,6 +2433,10 @@ "message": "Halutessasi, vaadi käyttäjiä syöttämään salasana Sendin avaamiseksi.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Vaadi tämä salasana Sendin avaukseen.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Yksityisiä merkintöjä tästä Sendistä.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Piilota sähköpostiosoitteeni vastaanottajilta." }, + "hideYourEmail": { + "message": "Piilota sähköpostiosoitteeni avaajilta." + }, "sendOptionsPolicyInEffect": { "message": "Yksi tai useampi organisaatiokäytäntö vaikuttaa Send-asetuksiisi." }, @@ -2510,8 +2612,37 @@ "minutes": { "message": "Minuuttia" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Yrityskäytännön säännöt vaikuttavat aikakatkaisuasetuksiisi" + }, "vaultTimeoutPolicyInEffect": { - "message": "Organisaatiokäytännöt ovat määrittäneet holvisi aikakatkaisun enimmäisajaksi $HOURS$ tunti(a) $MINUTES$ minuutti(a).", + "message": "Organisaatiokäytännöt ovat määrittäneet holvisi aikakatkaisun enimmäisajaksi $HOURS$ tuntia $MINUTES$ minuuttia.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyInEffect1": { + "message": "Enintään $HOURS$ tuntia $MINUTES$ minuuttia.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Aikakatkaisu ylittää organisaatiosi määrittämän rajoituksen: Enintään $HOURS$ tuntia $MINUTES$ minuuttia.", "placeholders": { "hours": { "content": "$1", @@ -2524,7 +2655,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "Organisaatiokäytännöt vaikuttavat holvisi aikakatkaisuun. Suurin sallittu aika on $HOURS$ tunti(a) $MINUTES$ minuutti(a). Holvillesi määritetty aikakatkaisutoiminto on $ACTION$.", + "message": "Organisaatiokäytännöt vaikuttavat holvisi aikakatkaisuun. Suurin sallittu aika on $HOURS$ tuntia $MINUTES$ minuuttia. Holvillesi määritetty aikakatkaisutoiminto on $ACTION$.", "placeholders": { "hours": { "content": "$1", @@ -2894,7 +3025,7 @@ "message": "Tärkeää:" }, "masterPasswordHint": { - "message": "Pääsalasanasi palauttaminen ei ole mahdollista, jos unohdat sen!" + "message": "Pääsalasanaasi ei ole mahdollista palauttaa, jos unohdat sen!" }, "characterMinimum": { "message": "Vähintään $LENGTH$ merkkiä", @@ -3207,7 +3338,7 @@ "message": "Aliaksen verkkotunnus" }, "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Kohteille, joille on määritetty pääsalasanan uudelleenkysely, ei voida suorittaa automaattista täyttöä sivun avautuessa. Automaattitäyttö sivun avautuessa poistettiin käytöstä. avautuessa suoritettavan", + "message": "Pääsalasanan vahvistuksen vaativia kohteita ei voida automaattitäyttää sivun avautuessa. Automaattitäyttö sivun avautuessa poistettiin käytöstä.", "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." }, "autofillOnPageLoadSetToDefault": { @@ -3297,7 +3428,7 @@ "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { - "message": "Bitwardenin automaattisen täytön valikko on käytettävissä. Valitse painamalla alas-nuolinäppäintä.", + "message": "Bitwardenin automaattitäytön valikko on käytettävissä. Avaa se painamalla alas-nuolinäppäintä.", "description": "Screen reader text for announcing when the overlay opens on the page" }, "turnOn": { @@ -3499,7 +3630,7 @@ "message": "Holvissasi ei ole tälle sivustolle sopivaa kirjautumistietoa." }, "noMatchingLoginsForSite": { - "message": "Ei tälle sivustolle sopivia kirjautumistietoja" + "message": "Tälle sivustolle sopivia kirjautumistietoja ei ole" }, "confirm": { "message": "Vahvista" @@ -3668,19 +3799,19 @@ "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Muuta selaimesi automaattisen täytön ja salasanojen hallinnan asetuksia.", + "message": "Muuta selaimesi automaattitäytön ja salasanahallinnan asetuksia.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { - "message": "Voit tarkastella ja asettaa laajennusten pikavalintoja selaimesi asetuksissa.", + "message": "Voit tarkastella ja määrittää laajennuksen pikanäppäimiä selaimesi asetuksista.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Muuta selaimesi automaattisen täytön ja salasanojen hallinnan asetuksia.", + "message": "Muuta selaimesi automaattitäytön ja salasanahallinnan asetuksia.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { - "message": "Voit tarkastella ja asettaa laajennusten pikavalintoja selaimesi asetuksissa.", + "message": "Voit tarkastella ja määrittää laajennuksen pikanäppäimiä selaimesi asetuksista.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { @@ -3688,7 +3819,7 @@ "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutofillDescription": { - "message": "Tämän huomiotta jättäminen voi aiheuttaa ongelmia Bitwardenin automaattitäytön valikon ja selaimen välisessä toiminnassa.", + "message": "Tämän asetuksen ohituksesta voi seurata ongelmia Bitwardenin ja selaimen automaattitäytön välillä.", "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutoFillSettings": { @@ -3887,7 +4018,7 @@ "message": "Kohteen nimi" }, "cannotRemoveViewOnlyCollections": { - "message": "Et voi poistaa kokoelmia Vain katselu -oikeuksilla: $COLLECTIONS$", + "message": "Et voi poistaa kokoelmia, joihin sinulla on vain tarkasteluoikeus: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -4053,7 +4184,7 @@ "message": "Kortti on vanhentunut" }, "cardExpiredMessage": { - "message": "Jos olet uusinut sen, päivitä kortin tiedot" + "message": "Jos olet uudistanut kortin, päivitä sen tiedot" }, "cardDetails": { "message": "Kortin tiedot" @@ -4295,28 +4426,37 @@ "message": "Bitwardenilla on uusi ulkoasu!" }, "bitwardenNewLookDesc": { - "message": "Automaattitäyttäminen ja hakujen tekeminen Holvi-välilehdeltä on entistä helpompaa ja intuitiivisempaa. Kokeile nyt!" + "message": "Automaattitäyttäminen ja hakujen tekeminen Holvi-välilehdeltä on entistä helpompaa ja luontevampaa. Kokeile nyt!" }, "accountActions": { "message": "Tilitoiminnot" }, "showNumberOfAutofillSuggestions": { - "message": "Näytä automaattitäytön kirjautumistietoehdotusten määrä laajennuksen kuvakkeessa" + "message": "Näytä automaattitäytön ehdotusten määrä laajennuksen kuvakkeessa" }, "systemDefault": { "message": "Järjestelmän oletus" }, "enterprisePolicyRequirementsApplied": { - "message": "Yrityskäytännön vaatimuksia on sovellettu tähän asetukseen" + "message": "Yrityskäytännön vaatimukset vaikuttavat tähän asetukseen" + }, + "retry": { + "message": "Yritä uudelleen" + }, + "vaultCustomTimeoutMinimum": { + "message": "Mukautetun aikakatkaisun vähimmäisaika on yksi minuutti." + }, + "additionalContentAvailable": { + "message": "Lisäsisältöä on käytettävissä" }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Tiedosto tallennettiin laitteelle. Hallitse sitä laitteesi latauksista." }, "showCharacterCount": { - "message": "Show character count" + "message": "Näytä merkkimäärä" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Piilota merkkimäärä" }, "itemsInTrash": { "message": "Roskakorin kohteet" diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 6a8288365e0..f69cbf71977 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-fill sa Filipino ay Awtomatikong Pagpuno" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Magdagdag ng Item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Mungkahi sa Password" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Hanapin ang vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Mga nota" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Ang paalala" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Mag-kandado Na" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Ang two-step login ay nagpapagaan sa iyong account sa pamamagitan ng pag-verify sa iyong login sa isa pang device tulad ng security key, authenticator app, SMS, tawag sa telepono o email. Ang two-step login ay maaaring magawa sa bitwarden.com web vault. Gusto mo bang bisitahin ang website ngayon?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Nai-save na folder" }, @@ -892,7 +938,7 @@ "message": "Itala ang mga item ng card sa Tab page para sa madaling auto-fill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Ipakita ang mga pagkatao sa Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "Mag-file" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Pumili ng File" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock sa pamamagitan ng PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Itakda ang iyong PIN code para sa pag-unlock ng Bitwarden. Ang iyong mga setting ng PIN ay ma-reset kung kailanman ay lubusang lumabas ka mula sa application." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Kinakailangan ang PIN code." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "I-lock sa master password sa restart ng browser" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Kailangan mong piliin ang hindi bababa sa isang koleksyon." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Aksyon sa Vault timeout" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "I-lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Basurahan", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Mismatch sa Account" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Hindi naka-setup ang biometrics" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Ipadala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Maghanap ng Mga Padala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Teksto" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Mag-file" }, @@ -2232,6 +2320,9 @@ "message": "Lahat ng Mga Padala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Ang pinaka-access count ay nakaabot na", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Ang Ipadala ay tatanggalin nang permanente sa tinukoy na petsa at oras.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Petsa ng pag-expire" }, @@ -2338,6 +2433,10 @@ "message": "Maipapayo na mag-require ng password para sa mga user na ma-access ang Send na ito.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Pribadong mga tala tungkol sa Send na ito.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Itago ang aking email address mula sa mga tatanggap." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Isang o higit pang mga patakaran ng organisasyon ay nakaapekto sa iyong mga pagpipilian sa Pagpadala." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuto" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Nakakaapekto ang mga patakaran ng iyong organisasyon sa iyong vault timeout. Ang pinakamataas na pinapayagang Vault Timeout ay $HOURS$ oras at $MINUTES$ minuto", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index f80a5959ef3..42b60a5f43a 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copier la plaque d'immatriculation" }, + "copyCustomField": { + "message": "Copier $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copier le site web" + }, + "copyNotes": { + "message": "Copier les notes" + }, "autoFill": { "message": "Saisie automatique" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Ajouter un élément" }, + "accountEmail": { + "message": "Courriel du compte" + }, + "requestHint": { + "message": "Demander l'indice" + }, + "requestPasswordHint": { + "message": "Obtenir l'indice du mot de passe" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Saisissez l'adresse courriel de votre compte et votre indice de mot de passe vous sera envoyé" + }, "passwordHint": { "message": "Indice de mot de passe" }, @@ -462,6 +489,10 @@ "message": "Éviter les caractères ambigus", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Rechercher dans le coffre" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Expiration de la session" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Autres options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Délai d'expiration du coffre" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Verrouiller maintenant" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "L'authentification à deux facteurs rend votre compte plus sûr en vous demandant de vérifier votre connexion avec un autre dispositif tel qu'une clé de sécurité, une application d'authentification, un SMS, un appel téléphonique ou un courriel. L'authentification à deux facteurs peut être configurée dans le coffre web de bitwarden.com. Voulez-vous visiter le site web maintenant ?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Poursuivre vers l'application web ?" + }, "editedFolder": { "message": "Dossier sauvegardé" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Fichier" }, + "fileToShare": { + "message": "Fichier à partager" + }, "selectFile": { "message": "Sélectionnez un fichier." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Déverrouiller avec un code PIN" }, + "setYourPinTitle": { + "message": "Définir PIN" + }, + "setYourPinButton": { + "message": "Définir PIN" + }, "setYourPinCode": { "message": "Définissez votre code PIN pour déverrouiller Bitwarden. Les paramètres relatifs à votre code PIN seront réinitialisés si vous vous déconnectez complètement de l'application." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Le code PIN est requis." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Verrouiller avec le mot de passe principal au redémarrage du navigateur" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Vous devez sélectionner au moins une collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Action après délai d'expiration du coffre" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Verrouiller", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Corbeille", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Erreur de correspondance entre les comptes" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Le déverrouillage biométrique a échoué. La clé secrète biométrique n'a pas réussi à déverrouiller le coffre. Veuillez essayer de configurer à nouveau la biométrie." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Non-concordance des clés biométriques" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Le déverrouillage biométrique a échoué. La clé secrète biométrique n'a pas réussi à déverrouiller le coffre. Veuillez essayer de configurer à nouveau la biométrie." + }, "biometricsNotEnabledTitle": { "message": "Le déverrouillage biométrique n'est pas activé" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Changements de domaines exclus enregistrés" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Détails du Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Rechercher dans les Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Texte" }, + "sendTypeTextToShare": { + "message": "Texte à partager" + }, "sendTypeFile": { "message": "Fichier" }, @@ -2232,6 +2320,9 @@ "message": "Tous les Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Masquer le texte par défaut" + }, "maxAccessCountReached": { "message": "Nombre maximum d'accès atteint", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Le Send sera définitivement supprimé à la date et heure spécifiées.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Le Send sera définitivement supprimé à la date spécifiée.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Date d'expiration" }, @@ -2338,6 +2433,10 @@ "message": "Vous pouvez, si vous le souhaitez, exiger un mot de passe pour accéder à ce Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Notes privées à propos de ce Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Masquer mon adresse électronique aux destinataires." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Une ou plusieurs politiques de sécurité de l'organisation affectent vos options Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Les politiques de sécurité de votre organisation ont défini le délai d'expiration de votre coffre à $HOURS$ heure(s) et $MINUTES$ minute(s) maximum.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Les politiques de sécurité de votre organisation affectent le délai d'expiration de votre coffre. Le délai autorisé d'expiration du coffre est de $HOURS$ heure(s) et $MINUTES$ minute(s) maximum. L'action après délai d'expiration de votre coffre est fixée à $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Les exigences de la politique d'entreprise ont été appliquées à ce paramètre" }, + "retry": { + "message": "Réessayer" + }, + "vaultCustomTimeoutMinimum": { + "message": "Le délai d'expiration personnalisé minimum est de 1 minute." + }, + "additionalContentAvailable": { + "message": "Du contenu supplémentaire est disponible" + }, "fileSavedToDevice": { "message": "Fichier enregistré sur l'appareil. Gérez à partir des téléchargements de votre appareil." }, diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index 247542ec192..93b63919311 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-encher" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Engadir elemento" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Pista do contrasinal" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Buscar na caixa forte" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Tempo de sesión esgotado" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Outras opcións" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Tempo de espera da caixa forte" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Bloquear agora" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Cartafol gardado" }, @@ -892,7 +938,7 @@ "message": "Lista os elementos de tarxeta no separador para fácil auto-completado." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Mostrar identidades no separador" @@ -1097,6 +1143,9 @@ "file": { "message": "Ficheiro" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Selecciona un ficheiro" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Bloquear", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Lixo", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Buscar Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Texto" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Ficheiro" }, @@ -2232,6 +2320,9 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutos" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 02a6842efa2..9b5ce585e41 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "השלמה אוטומטית" }, @@ -179,6 +194,18 @@ "addItem": { "message": "הוסף פריט" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "רמז לסיסמה" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "חיפוש בכספת" }, @@ -504,6 +535,9 @@ "notes": { "message": "הערות" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "הערה" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "משך זמן מירבי עבור חיבור לכספת" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "נעל עכשיו" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "התחברות בשני-שלבים הופכת את החשבון שלך למאובטח יותר בכך שאתה נדרש לוודא בכל כניסה בעזרת מכשיר אחר כדוגמת מפתח אבטחה, תוכנת אימות, SMS, שיחת טלפון, או אימייל. ניתן להפעיל את \"התחברות בשני-שלבים\" בכספת שבאתר bitwarden.com. האם ברצונך לפתוח את האתר כעת?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "תיקייה שנערכה" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "קובץ" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "בחר קובץ." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "בטל נעילה עם קוד PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "קבע קוד PIN לביטול נעילת Bitwarden. הגדרות הPIN יאופסו אם תבצע יציאה מהתוכנה." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "נדרש קוד PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "נעל בעזרת הסיסמה הראשית בהפעלת הדפדפן מחדש" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "עליך לבחור לפחות אוסף אחד." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "פעולה לביצוע בכספת בתום זמן החיבור" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "נעילה", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "סל המחזור", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "חוסר התאמה בין חשבונות" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "אמצעי זיהוי ביומטרים לא מאופשרים" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "תאריך תפוגה" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 6b4d3922ff2..3e00e16273e 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "स्वत:भरण" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add Item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password Hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "वॉल्ट खोजे" }, @@ -504,6 +535,9 @@ "notes": { "message": "नोट्स" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "नोट:" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "तिजोरी टाइमआउट" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "वॉल्ट मध्यांतर" }, + "vaultTimeout1": { + "message": "टाइमआउट" + }, "lockNow": { "message": "Lock Now" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Two-step login makes your account more secure by requiring you to enter a security code from an authenticator app whenever you log in. Two-step login can be enabled on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "बिटवर्डन वेब ऐप में दो-चरणीय लॉगिन सेट करके अपने खाते को अधिक सुरक्षित बनाएं।" + }, + "twoStepLoginConfirmationTitle": { + "message": "वेब ऐप पर जाएं?" + }, "editedFolder": { "message": "Edited Folder" }, @@ -892,7 +938,7 @@ "message": "आसान ऑटो-फिल के लिए टैब पेज पर कार्ड आइटम सूचीबद्ध करें।" }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "टैब पेज पर पहचान दिखाएं" @@ -1097,6 +1143,9 @@ "file": { "message": "फ़ाइल" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "फ़ाइल का चयन करें।" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "पिन से अनलॉक करें " }, + "setYourPinTitle": { + "message": "पिन सेट करें" + }, + "setYourPinButton": { + "message": "पिन सेट करें" + }, "setYourPinCode": { "message": "बिटवर्डन को अनलॉक करने के लिए अपना पिन कोड सेट करें यदि आप कभी भी आवेदन से पूरी तरह लॉग आउट करते हैं तो आपकी पिन सेटिंग्स रीसेट हो जाएंगी।" }, + "setYourPinCode1": { + "message": "बिटवर्डन को अनलॉक करने के लिए आपके मास्टर पासवर्ड के बजाय आपके पिन का उपयोग किया जाएगा। यदि आप कभी भी बिटवर्डन से पूरी तरह लॉग आउट हो जाते हैं तो आपका पिन रीसेट हो जाएगा।" + }, "pinRequired": { "message": "पिन-कोड आवश्यक है |" }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "ब्राउज़र पुनः आरंभ करने पर मास्टर पासवर्ड के साथ लॉक करें" }, + "lockWithMasterPassOnRestart1": { + "message": "ब्राउज़र पुनरारंभ पर मास्टर पासवर्ड की आवश्यकता है" + }, "selectOneCollection": { "message": "आपको कम से कम एक संग्रह का चयन करना होगा।" }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "वॉल्ट मध्यांतर कार्रवाई" }, + "vaultTimeoutAction1": { + "message": "टाइमआउट कार्रवाई" + }, "lock": { "message": "लॉक", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "थ्रैश", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "खाता गलत मैच" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "बायोमेट्रिक अनलॉक विफल रहा. बायोमेट्रिक गुप्त कुंजी वॉल्ट को अनलॉक करने में विफल रही. कृपया बायोमेट्रिक्स को फिर से सेट करने का प्रयास करें." - }, "nativeMessagingWrongUserKeyTitle": { "message": "बेमेल बायोमेट्रिक कुंजी" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "बायोमेट्रिक अनलॉक विफल रहा. बायोमेट्रिक गुप्त कुंजी वॉल्ट को अनलॉक करने में विफल रही. कृपया बायोमेट्रिक्स को फिर से सेट करने का प्रयास करें." + }, "biometricsNotEnabledTitle": { "message": "बॉयोमीट्रिक्स सक्षम नहीं है" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "भेजें", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Sends मे खोजे", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "शब्द" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "फ़ाइल" }, @@ -2232,6 +2320,9 @@ "message": "सभी Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "मैक्स एक्सेस काउंट पहुंच गया है", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": " यह सेंड निर्धारित तिथि और समय पर स्थायी रूप से हटा दिया जाएगा।", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "समाप्ति तिथि" }, @@ -2338,6 +2433,10 @@ "message": "वैकल्पिक रूप से उपयोगकर्ताओं को इस सेंड तक पहुंचने के लिए पासवर्ड की आवश्यकता होगी।", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "इस सेंड के बारे में निजी नोट्स।", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "प्राप्तकर्ताओं से मेरा ईमेल पता छिपाएं।" }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "एक या एक से अधिक संगठन नीतियां आपके सेंड विकल्पों को प्रभावित कर रही हैं।" }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "मिनट" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "एंटरप्राइज़ नीति आवश्यकताएँ आपके टाइमआउट विकल्पों पर लागू की गई हैं" + }, "vaultTimeoutPolicyInEffect": { "message": "आपकी संगठन नीतियां आपके तिजोरी टाइमआउट को प्रभावित कर रही हैं। अधिकतम अनुमत तिजोरी टाइमआउट $HOURS$ घंटे और $MINUTES$ मिनट है", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "अधिकतम $HOURS$ घंटे और $MINUTES$ मिनट)।", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "टाइमआउट आपके संगठन द्वारा निर्धारित प्रतिबंध से अधिक है: अधिकतम $HOURS$ घंटे और $MINUTES$ मिनट", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "इस सेटिंग पर एंटरप्राइज़ नीति आवश्यकताएँ लागू की गई हैं" }, + "retry": { + "message": "पुन: प्रयास करें" + }, + "vaultCustomTimeoutMinimum": { + "message": "न्यूनतम कस्टम टाइमआउट 1 मिनट है." + }, + "additionalContentAvailable": { + "message": "अतिरिक्त सामग्री उपलब्ध है" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 88a1f158b3a..1d999a0f9b2 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kopiraj OIB" }, + "copyCustomField": { + "message": "Kopiraj $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Kopiraj web stranicu" + }, + "copyNotes": { + "message": "Kopiraj bilješke" + }, "autoFill": { "message": "Auto-ispuna" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Dodaj stavku" }, + "accountEmail": { + "message": "e-pošta računa" + }, + "requestHint": { + "message": "Zatraži podsjetnik" + }, + "requestPasswordHint": { + "message": "Zatraži podsjetnik lozinke" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Unesi svoju adresu e-pošte računa i poslat ćemo ti tvoj podsjetnik" + }, "passwordHint": { "message": "Podsjetnik za lozinku" }, @@ -462,6 +489,10 @@ "message": "Izbjegavaj dvosmislene znakove", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Pretraži trezor" }, @@ -504,6 +535,9 @@ "notes": { "message": "Bilješke" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Bilješka" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Istek sesije" }, + "vaultTimeoutHeader": { + "message": "Istek trezora" + }, "otherOptions": { "message": "Ostale postavke" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Istek trezora" }, + "vaultTimeout1": { + "message": "Vrijeme isteka" + }, "lockNow": { "message": "Zaključaj sada" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Prijava dvostrukom autentifikacijom čini tvoj račun još sigurnijim tako što će zahtijevati da potvrdiš prijavu putem drugog uređaja pomoću sigurnosnog koda, autentifikatorske aplikacije, SMS-om, pozivom ili e-poštom. Prijavu dvostrukom autentifikacijom možeš omogućiti na web trezoru. Želiš li sada posjetiti bitwarden.com?" }, + "twoStepLoginConfirmationContent": { + "message": "Učini svoj račun sigurnijim uključivanjem prijave dvofaktorskom autentifikacijom u Bitwarden web aplikaciji." + }, + "twoStepLoginConfirmationTitle": { + "message": "Nastavi na web aplikaciju?" + }, "editedFolder": { "message": "Mapa spremljena" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Datoteka" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Odaberi datoteku." }, @@ -1797,13 +1846,13 @@ "message": "Nema lozinki na popisu." }, "clearHistory": { - "message": "Clear history" + "message": "Očisti povijest" }, "noPasswordsToShow": { - "message": "No passwords to show" + "message": "Nema lozinki za prikaz" }, "noRecentlyGeneratedPassword": { - "message": "You haven't generated a password recently" + "message": "Nema nedavno generiranih lozinki" }, "remove": { "message": "Ukloni" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Otključaj PIN-om" }, + "setYourPinTitle": { + "message": "Postavi PIN" + }, + "setYourPinButton": { + "message": "Postavi PIN" + }, "setYourPinCode": { "message": "Postavi svoj PIN kôd za otključavanje Bitwardena. Postavke PIN-a se resetiraju ako se potpuno odjaviš iz aplikacije." }, + "setYourPinCode1": { + "message": "Tvoj PIN će se koristiti za otključavanje Bitwardena umjesto glavne lozinke. PIN će se restirati ukoliko se odjaviš iz Bitwardena. " + }, "pinRequired": { "message": "Potreban je PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Zaključaj glavnom lozinkom kod svakog pokretanja preglednika" }, + "lockWithMasterPassOnRestart1": { + "message": "Zaključaj glavnom lozinkom kod svakog pokretanja preglednika" + }, "selectOneCollection": { "message": "Moraš odabrati barem jednu zbirku." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Nakon isteka trezora" }, + "vaultTimeoutAction1": { + "message": "Radnja nakon isteka " + }, "lock": { "message": "Zaključaj", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Smeće", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Pogrešan korisnički račun" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrijsko otključavanje nije uspjelo. Biometrijski tajni ključ nije uspio otključati trezor. Pokušaj ponovo postaviti biometriju." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Neusklađenost biometrijskog ključa" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrijsko otključavanje nije uspjelo. Biometrijski tajni ključ nije uspio otključati trezor. Pokušaj ponovo postaviti biometriju." + }, "biometricsNotEnabledTitle": { "message": "Biometrija nije omogućena" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Spremljene promjene izuzete domene" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Detalji Senda", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Pretraži Sendove", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Dijeljeni tekst" + }, "sendTypeFile": { "message": "Datoteka" }, @@ -2232,6 +2320,9 @@ "message": "Svi Sendovi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Zadano sakrij tekst" + }, "maxAccessCountReached": { "message": "Dostignut najveći broj pristupanja", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send će nakon navedenog vremena biti trajno izbrisan.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send će na ovaj datum biti trajno izbrisan.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Vremenski ograničeni pristup" }, @@ -2338,6 +2433,10 @@ "message": "Neobavezno zahtijevaj korisnika lozinku za pristup ovom Sendu.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Privatne bilješke o Sendu.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Sakrij moju adresu e-pošte od primatelja." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Jedno ili više pravila organizacije utječe na postavke Senda." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "minuta" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Pravila tvrtke primijenjena su na vrijeme isteka" + }, "vaultTimeoutPolicyInEffect": { "message": "Pravilo tvoje organizacije podesilo je najveće dozvoljeno vrijeme isteka trezora na $HOURS$:$MINUTES$ h.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Pravila tvrtke primijenjena su na vrijeme isteka", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Tvoja organizacija je zadano postavila kraće vrijeme isteka. Najviše: $HOURS$:$MINUTES$", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Pravilo tvoje organizacije utječe na istek trezora. Najveće dozvoljeno vrijeme isteka je $HOURS$:$MINUTES$ h. Tvoja radnja nakon isteka trezora je: $ACTION$.", "placeholders": { @@ -4309,14 +4440,23 @@ "enterprisePolicyRequirementsApplied": { "message": "Pravila tvrtke primijenjena su na ovu postavku" }, + "retry": { + "message": "Pokušaj ponovo" + }, + "vaultCustomTimeoutMinimum": { + "message": "Najmanje prilagođeno vrijeme je 1 minuta." + }, + "additionalContentAvailable": { + "message": "Dostupan je dodatni sadržaj" + }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Datoteka spremljena na uređaj. Upravljaj u preuzimanjima svog uređaja." }, "showCharacterCount": { - "message": "Show character count" + "message": "Prikaži broj znakova" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Sakrij broj znakova" }, "itemsInTrash": { "message": "Stavke u smeću" diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index ba551e0fa3b..41da93a06cf 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Licensz szám másolása" }, + "copyCustomField": { + "message": "$FIELD$ másolása", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Webhely másolása" + }, + "copyNotes": { + "message": "Jegyzet másolása" + }, "autoFill": { "message": "Automatikus kitöltés" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Elem hozzáadása" }, + "accountEmail": { + "message": "Fiók email cím" + }, + "requestHint": { + "message": "Tipp kérése" + }, + "requestPasswordHint": { + "message": "Jelszó emlékeztető kérése" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Adjuk meg fiók email címét és elküldésre kerül a jelszóra vonatkozó tipp." + }, "passwordHint": { "message": "Jelszó emlékeztető" }, @@ -462,6 +489,10 @@ "message": "Félreérthető karakterek mellőzése", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Keresés a széfben" }, @@ -504,6 +535,9 @@ "notes": { "message": "Jegyzetek" }, + "privateNote": { + "message": "Személyes jegyzet" + }, "note": { "message": "Jegyzet" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Munkamenet időkifutás" }, + "vaultTimeoutHeader": { + "message": "Széf időkifutás" + }, "otherOptions": { "message": "Egyéb opciók" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Széf időkifutás" }, + "vaultTimeout1": { + "message": "Időkifutás" + }, "lockNow": { "message": "Zárolás most" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "A kétlépcsős bejelentkezés biztonságosabbá teszi a fiókot azáltal, hogy ellenőrizni kell a bejelentkezést egy másik olyan eszközzel mint például biztonsági kulcs, hitelesítő alkalmazás, SMS, telefon hívás vagy email. A kétlépcsős bejelentkezést a bitwarden.com webes széfben lehet engedélyezni. Felkeressük a webhelyet most?" }, + "twoStepLoginConfirmationContent": { + "message": "Tegyük biztonságosabbá a fiókot a kétlépcsős bejelentkezés beállításával a Bitwarden webalkalmazásban." + }, + "twoStepLoginConfirmationTitle": { + "message": "Tovább a webes alkalmazáshoz?" + }, "editedFolder": { "message": "A mappa mentésre került." }, @@ -892,7 +938,7 @@ "message": "Kártyaelemek listázása a Fül oldalon a könnyű automatikus kitöltéshez." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Azonosítások megjelenítése a Fül oldalon" @@ -1097,6 +1143,9 @@ "file": { "message": "Fájl" }, + "fileToShare": { + "message": "Megosztandó fájl" + }, "selectFile": { "message": "Válasszunk egy fájlt." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Felnyitás pinkóddal" }, + "setYourPinTitle": { + "message": "PIN kód beállítása" + }, + "setYourPinButton": { + "message": "PIN kód beállítása" + }, "setYourPinCode": { "message": "A pinkód beállítása a Bitwarden feloldásához. A pinkód beállítás alaphelyzetbe kerül, ha teljesen kijelentkezünk az alkalmazásból." }, + "setYourPinCode1": { + "message": "A Bitwarden feloldásához a PIN kódot használjuk a mesterjelszó helyett. A PIN kód alaphelyzetbe kerül, ha teljesen kijelentkezünk a Bitwardenből." + }, "pinRequired": { "message": "A pinkód szükséges." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lezárás mesterjelszóval a böngésző újraindításakor" }, + "lockWithMasterPassOnRestart1": { + "message": "Lezárás mesterjelszóval a böngésző újraindításakor" + }, "selectOneCollection": { "message": "Legalább egy gyűjteményt ki kell választani." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Széf időkifutás művelet" }, + "vaultTimeoutAction1": { + "message": "Időkifutási művelet" + }, "lock": { "message": "Lezárás", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Lomtár", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "A fiók nem egyezik." }, - "nativeMessagingWrongUserKeyDesc": { - "message": "A biometrikus feloldás nem sikerült. A biometrikus titkos kulcs nem tudta feloldani a széfet. Próbáljuk újra beállítani a biometrikus adatokat." - }, "nativeMessagingWrongUserKeyTitle": { "message": "A biometrikus kulcs nem egyezik." }, + "nativeMessagingWrongUserKeyDesc": { + "message": "A biometrikus feloldás nem sikerült. A biometrikus titkos kulcs nem tudta feloldani a széfet. Próbáljuk újra beállítani a biometrikus adatokat." + }, "biometricsNotEnabledTitle": { "message": "A biometrikus adatok nincsenek beüzemelve." }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "A kizárt tartomány módosítások mentésre kerültek." }, + "limitSendViews": { + "message": "Megtekintések korlátozása" + }, + "limitSendViewsHint": { + "message": "Senki sem tudja megtekinteni ezt a Send elemet a korlát elérése után.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ megtekintés maradt", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send részletek", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Send keresése", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Szöveg" }, + "sendTypeTextToShare": { + "message": "Megosztandó szöveg" + }, "sendTypeFile": { "message": "Fájl" }, @@ -2232,6 +2320,9 @@ "message": "Összes Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Szöveg elrejtése alapértelmezetten" + }, "maxAccessCountReached": { "message": "A maximális hozzáférések száma elérésre került.", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "A Send véglegesen törölve lesz a meghatározott időpontban.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "A Send véglegesen törölve lesz ebben az időpontban.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Lejárati dátum" }, @@ -2338,6 +2433,10 @@ "message": "Opcionálisan megadhatunk egy jelszót a felhasználók számára a Küldés eléréséhez. ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Jelszó szükséges a Send elem megtekintéséhez.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Személyes megjegyzések erről a Küldésről.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Saját email cím elrejtése a címzettek elől." }, + "hideYourEmail": { + "message": "Saját email cím elrejtése a megtekintések elől." + }, "sendOptionsPolicyInEffect": { "message": "Egy vagy több szervezeti szabály érinti a Send opciókat." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Perc" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Erre a beállításra a vállalkozás rendszabály követelmények lettek alkalmazva." + }, "vaultTimeoutPolicyInEffect": { "message": "A szervezeti szabályzata $HOURS$ órára és $MINUTES$ percre állította be a maximálisan megengedett széf időtúllépést.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ óra és $MINUTES$ perc maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Az időkifutás meghaladja a szervezet által beállított korlátozást: $HOURS$ óra és $MINUTES$ perc maxximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "A szervezeti házirendek hatással vannak a széf időkorlátjára. A széf időkorlátja legfeljebb $HOURS$ óra és $MINUTES$ perc lehet. A széf időkifutási művelete $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Erre a beállításra a vállalkozás rendszabály követelmények lettek alkalmazva." }, + "retry": { + "message": "Újra" + }, + "vaultCustomTimeoutMinimum": { + "message": "A minimális egyedi időkifutás 1 perc." + }, + "additionalContentAvailable": { + "message": "Kiegészítő tartalom érhető el." + }, "fileSavedToDevice": { "message": "A fájl mentésre került az eszközre. Kezeljük az eszközről a letöltéseket." }, diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index b43eddb3fdc..a5aa720c0b5 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Isi otomatis" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Tambah Item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Petunjuk Kata Sandi" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Cari brankas" }, @@ -504,6 +535,9 @@ "notes": { "message": "Catatan" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Catatan" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Batas waktu sesi" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Opsi lainnya" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Batas Waktu Brankas" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Kunci Sekarang" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Info masuk dua langkah membuat akun Anda lebih aman dengan mengharuskan Anda memverifikasi info masuk Anda dengan peranti lain seperti kode keamanan, aplikasi autentikasi, SMK, panggilan telepon, atau email. Info masuk dua langkah dapat diaktifkan di brankas web bitwarden.com. Anda ingin mengunjungi situs web sekarang?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder yang disunting" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "Berkas" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Pilih berkas." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Buka kunci dengan PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Setel kode PIN Anda untuk membuka kunci Bitwarden. Pengaturan PIN Anda akan diatur ulang jika Anda pernah keluar sepenuhnya dari aplikasi." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Membutuhkan kode PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Kunci dengan kata sandi utama saat peramban dimulai ulang" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Anda harus memilih setidaknya satu koleksi." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Tindakan Batas Waktu Brankas" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Kunci", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Sampah", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Akun tidak cocok" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrik tidak diaktifkan" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Pencarian Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Teks" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Berkas" }, @@ -2232,6 +2320,9 @@ "message": "Semua Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Jumlah akses maksimum tercapai", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send akan dihapus secara permanen pada tanggal dan waktu yang ditentukan.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Tanggal habis tempo" }, @@ -2338,6 +2433,10 @@ "message": "Secara opsional, minta kata sandi bagi pengguna untuk mengakses Send ini.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Catatan pribadi tentang Send ini.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Sembunyikan alamat surel dari penerima." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Satu atau lebih kebijakan organisasi mempengaruhi pengaturan feature Send anda." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Menit" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Kebijakan organisasi Anda memengaruhi waktu tunggu brankas Anda. Batas maksimal Waktu Tunggu Brankas yang diizinkan adalah $HOURS$ jam dan $MINUTES$ menit", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 79c4d3cff74..46bf1fe6c9b 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copia numero licenza" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Riempimento automatico" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Aggiungi elemento" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Suggerimento password" }, @@ -462,6 +489,10 @@ "message": "Evita caratteri ambigui", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Cerca nella cassaforte" }, @@ -504,6 +535,9 @@ "notes": { "message": "Note" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Timeout della sessione" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Altre opzioni" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Timeout cassaforte" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Blocca ora" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "La verifica in due passaggi rende il tuo account più sicuro richiedendoti di verificare il tuo login usando un altro dispositivo come una chiave di sicurezza, app di autenticazione, SMS, telefonata, o email. Può essere abilitata nella cassaforte web su bitwarden.com. Vuoi visitare il sito?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Cartella salvata" }, @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Seleziona un file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Sblocca con PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Imposta il tuo codice PIN per sbloccare Bitwarden. Le tue impostazioni PIN saranno resettate se esci completamente dall'app." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Codice PIN obbligatorio." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Blocca con la password principale al riavvio del browser" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Devi selezionare almeno una raccolta." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Azione timeout cassaforte" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Blocca", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Cestino", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account non corrispondono" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Sblocco biometrico non riuscito. La chiave segreta biometrica non è riuscita a sbloccare la cassaforte. Riprova a configurare nuovamente la biometria." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Chiave biometrica non corrispondente" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Sblocco biometrico non riuscito. La chiave segreta biometrica non è riuscita a sbloccare la cassaforte. Riprova a configurare nuovamente la biometria." + }, "biometricsNotEnabledTitle": { "message": "Autenticazione biometrica non abilitata" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Modifiche del dominio escluso salvate" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Cerca Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Testo" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "Tutti i Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Numero massimo di accessi raggiunto", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Il Send sarà eliminato definitivamente alla data e ora specificate.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Data di scadenza" }, @@ -2338,6 +2433,10 @@ "message": "Richiedi una password agli utenti per accedere a questo Send (facoltativo).", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Note private sul Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Nascondi il mio indirizzo email dai destinatari." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Una o più politiche dell'organizzazione stanno influenzando le tue opzioni di Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuti" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Le politiche della tua organizzazione hanno impostato il timeout massimo consentito della tua cassaforte su $HOURS$ ore e $MINUTES$ minuti.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Le politiche della tua organizzazione stanno influenzando il timeout della tua cassaforte. Il tempo massimo consentito è di $HOURS$ ore e $MINUTES$ minuti. La tua azione di timeout della cassaforte è impostata su $ACTION$.", "placeholders": { @@ -3924,7 +4055,7 @@ "message": "Collegato" }, "copySuccessful": { - "message": "Copia Riuscita" + "message": "Copia riuscita" }, "upload": { "message": "Carica" @@ -4309,14 +4440,23 @@ "enterprisePolicyRequirementsApplied": { "message": "I requisiti della policy aziendale sono stati applicati a questa impostazione" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File salvato sul dispositivo. Gestisci dai download del dispositivo." }, "showCharacterCount": { - "message": "Show character count" + "message": "Mostra conteggio caratteri" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Nascondi conteggio caratteri" }, "itemsInTrash": { "message": "Elementi nel cestino" diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 393a8311779..adc9242050e 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "免許証番号をコピー" }, + "copyCustomField": { + "message": "$FIELD$ をコピー", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "ウェブサイトをコピー" + }, + "copyNotes": { + "message": "メモをコピー" + }, "autoFill": { "message": "自動入力" }, @@ -179,6 +194,18 @@ "addItem": { "message": "アイテムの追加" }, + "accountEmail": { + "message": "アカウントのメールアドレス" + }, + "requestHint": { + "message": "ヒントを要求" + }, + "requestPasswordHint": { + "message": "パスワードのヒントを要求する" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "アカウントのメールアドレスを入力すると、パスワードのヒントが送信されます" + }, "passwordHint": { "message": "パスワードのヒント" }, @@ -462,6 +489,10 @@ "message": "あいまいな文字を避ける", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "保管庫を検索" }, @@ -504,6 +535,9 @@ "notes": { "message": "メモ" }, + "privateNote": { + "message": "非公開メモ" + }, "note": { "message": "メモ" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "セッションタイムアウト" }, + "vaultTimeoutHeader": { + "message": "保管庫のタイムアウト" + }, "otherOptions": { "message": "その他のオプション" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "保管庫のタイムアウト" }, + "vaultTimeout1": { + "message": "タイムアウト" + }, "lockNow": { "message": "今すぐロック" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "2段階認証を使うと、ログイン時にセキュリティキーや認証アプリ、SMS、電話やメールでの認証を必要にすることでアカウントをさらに安全に出来ます。2段階認証は bitwarden.com ウェブ保管庫で有効化できます。ウェブサイトを開きますか?" }, + "twoStepLoginConfirmationContent": { + "message": "Bitwarden ウェブアプリで2段階認証を設定すると、アカウントがより安全になります。" + }, + "twoStepLoginConfirmationTitle": { + "message": "ウェブアプリに進みますか?" + }, "editedFolder": { "message": "フォルダーを編集しました" }, @@ -1097,6 +1143,9 @@ "file": { "message": "ファイル" }, + "fileToShare": { + "message": "共有するファイル" + }, "selectFile": { "message": "ファイルを選択してください。" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "PIN でロック解除" }, + "setYourPinTitle": { + "message": "PIN を設定" + }, + "setYourPinButton": { + "message": "PIN を設定" + }, "setYourPinCode": { "message": "Bitwarden のロックを解除するための PIN コードを設定します。アプリから完全にログアウトすると、PIN 設定はリセットされます。" }, + "setYourPinCode1": { + "message": "あなたの PIN はマスターパスワードの代わりに Bitwarden のロックを解除するために使用されます。Bitwarden から完全にログアウトすると PIN がリセットされます。" + }, "pinRequired": { "message": "PIN コードが必要です。" }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "ブラウザー再起動時にマスターパスワードでロック" }, + "lockWithMasterPassOnRestart1": { + "message": "ブラウザの再起動時にマスターパスワードを要求" + }, "selectOneCollection": { "message": "最低でも一つのコレクションを選んでください。" }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "保管庫タイムアウト時のアクション" }, + "vaultTimeoutAction1": { + "message": "タイムアウト時のアクション" + }, "lock": { "message": "ロック", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "ごみ箱", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "アカウントが一致しません" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "生体認証のロック解除に失敗しました。生体認証キーでの保管庫のロック解除に失敗しました。生体認証を再度設定してください。" - }, "nativeMessagingWrongUserKeyTitle": { "message": "生体認証キーが一致しません" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "生体認証のロック解除に失敗しました。生体認証キーでの保管庫のロック解除に失敗しました。生体認証を再度設定してください。" + }, "biometricsNotEnabledTitle": { "message": "生体認証が有効になっていません" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "除外ドメインの変更を保存しました" }, + "limitSendViews": { + "message": "表示の制限" + }, + "limitSendViewsHint": { + "message": "上限に達した後、誰もこの Send を表示できなくなります。", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "残り $ACCESSCOUNT$ 回", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send の詳細", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Send を検索", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "テキスト" }, + "sendTypeTextToShare": { + "message": "共有するテキスト" + }, "sendTypeFile": { "message": "ファイル" }, @@ -2232,6 +2320,9 @@ "message": "すべての Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "デフォルトでテキストを隠す" + }, "maxAccessCountReached": { "message": "最大アクセス数に達しました", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send は指定された日時に完全に削除されます。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send はこの日付で完全に削除されます。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "有効期限" }, @@ -2338,6 +2433,10 @@ "message": "必要に応じて、ユーザーがこの Send にアクセスするためのパスワードを要求します。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Send を表示するにはこのパスワードが必要になります。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "この Send に関するプライベートメモ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "メールアドレスを受信者に表示しない" }, + "hideYourEmail": { + "message": "閲覧者にメールアドレスを見せないようにします。" + }, "sendOptionsPolicyInEffect": { "message": "一つ以上の組織ポリシーが Send の設定に影響しています。" }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "分" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "タイムアウトオプションにエンタープライズポリシー要件を適用しました" + }, "vaultTimeoutPolicyInEffect": { "message": "あなたの組織ポリシーは保管庫のタイムアウトに影響を与えています。最大保管庫のタイムアウト時間は $HOURS$ 時間 $MINUTES$ 分です。", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ 時間と $MINUTES$ 分が最大です。", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "タイムアウトが組織によって設定された制限を超えています: 上限 $HOURS$ 時間と $MINUTES$ 分間", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "組織のポリシーがあなたの保管庫のタイムアウトに影響しす。保管庫の最大許容タイムアウトは$HOURS$時間$MINUTES$分です。保管庫のタイムアウト設定は$ACTION$にあります。", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "エンタープライズポリシー要件がこの設定に適用されました" }, + "retry": { + "message": "再試行" + }, + "vaultCustomTimeoutMinimum": { + "message": "カスタムタイムアウトの最小値は1分です。" + }, + "additionalContentAvailable": { + "message": "追加コンテンツが利用可能です" + }, "fileSavedToDevice": { "message": "ファイルをデバイスに保存しました。デバイスのダウンロードで管理できます。" }, diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 5e3809e00df..6525dcc9c06 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "თვითშევსება" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 338d70eaf58..8eae45e6b38 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index aa902ec5d7e..c022c77288d 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "ಸ್ವಯಂ ಭರ್ತಿ" }, @@ -179,6 +194,18 @@ "addItem": { "message": "ಐಟಂ ಸೇರಿಸಿ" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "ಪಾಸ್ವರ್ಡ್ ಸುಳಿವು" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "ವಾಲ್ಟ್ ಹುಡುಕಿ" }, @@ -504,6 +535,9 @@ "notes": { "message": "ಟಿಪ್ಪಣಿಗಳು" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "ಟಿಪ್ಪಣಿ" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "ವಾಲ್ಟ್ ಕಾಲಾವಧಿ" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "ಈಗ ಲಾಕ್ ಮಾಡಿ" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "ಭದ್ರತಾ ಕೀ, ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್, ಎಸ್‌ಎಂಎಸ್, ಫೋನ್ ಕರೆ ಅಥವಾ ಇಮೇಲ್‌ನಂತಹ ಮತ್ತೊಂದು ಸಾಧನದೊಂದಿಗೆ ನಿಮ್ಮ ಲಾಗಿನ್ ಅನ್ನು ಪರಿಶೀಲಿಸುವ ಅಗತ್ಯವಿರುವ ಎರಡು ಹಂತದ ಲಾಗಿನ್ ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಹೆಚ್ಚು ಸುರಕ್ಷಿತಗೊಳಿಸುತ್ತದೆ. ಬಿಟ್ವಾರ್ಡೆನ್.ಕಾಮ್ ವೆಬ್ ವಾಲ್ಟ್ನಲ್ಲಿ ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು. ನೀವು ಈಗ ವೆಬ್‌ಸೈಟ್‌ಗೆ ಭೇಟಿ ನೀಡಲು ಬಯಸುವಿರಾ?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "ಫೋಲ್ಡರ್ ತಿದ್ದಲಾಗಿದೆ" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "ಫೈಲ್" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "ಕಡತವನ್ನು ಆಯ್ಕೆಮಾಡು." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "ಪಿನ್‌ನೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಿ" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "ಬಿಟ್‌ವಾರ್ಡೆನ್ ಅನ್ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮ ಪಿನ್ ಕೋಡ್ ಅನ್ನು ಹೊಂದಿಸಿ. ನೀವು ಎಂದಾದರೂ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಸಂಪೂರ್ಣವಾಗಿ ಲಾಗ್ out ಟ್ ಆಗಿದ್ದರೆ ನಿಮ್ಮ ಪಿನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗುತ್ತದೆ." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "ಪಿನ್ ಕೋಡ್ ಅಗತ್ಯವಿದೆ." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "ಬ್ರೌಸರ್ ಮರುಪ್ರಾರಂಭದಲ್ಲಿ ಮಾಸ್ಟರ್ ಪಾಸ್‌ವರ್ಡ್‌ನೊಂದಿಗೆ ಲಾಕ್ ಮಾಡಿ" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "ನೀವು ಕನಿಷ್ಠ ಒಂದು ಸಂಗ್ರಹವನ್ನು ಆರಿಸಬೇಕು." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "ವಾಲ್ಟ್ ಸಮಯ ಮೀರುವ ಕ್ರಿಯೆ" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "ಲಾಕ್‌", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "ಅನುಪಯುಕ್ತ", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "ಖಾತೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "ಬಯೊಮಿಟ್ರಿಕ್ಸ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿಲ್ಲ" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "ಕಳುಹಿಸಿ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "ಹುಡುಕಾಟ ಕಳುಹಿಸುತ್ತದೆ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "ಪಠ್ಯ" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ಫೈಲ್" }, @@ -2232,6 +2320,9 @@ "message": "ಎಲ್ಲಾ ಕಳುಹಿಸುತ್ತದೆ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "ಗರಿಷ್ಠ ಪ್ರವೇಶ ಎಣಿಕೆ ತಲುಪಿದೆ", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "ಕಳುಹಿಸಿದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯದ ಮೇಲೆ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "ಮುಕ್ತಾಯ ದಿನಾಂಕ" }, @@ -2338,6 +2433,10 @@ "message": "ಈ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಪ್ರವೇಶಿಸಲು ಬಳಕೆದಾರರಿಗೆ ಪಾಸ್‌ವರ್ಡ್ ಐಚ್ ಗತ್ಯವಿದೆ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "ಈ ಕಳುಹಿಸುವ ಬಗ್ಗೆ ಖಾಸಗಿ ಟಿಪ್ಪಣಿಗಳು.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "ಸ್ವೀಕರಿಸುವವರಿಂದ ನನ್ನ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಮರೆಮಾಡಿ." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಸಂಸ್ಥೆಯ ನೀತಿಗಳು ನಿಮ್ಮ ಕಳುಹಿಸುವ ಆಯ್ಕೆಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತವೆ." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index cd2fff44a41..138a4548f88 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -14,16 +14,16 @@ "message": "안전 보관함에 접근하려면 로그인하거나 새 계정을 만드세요." }, "inviteAccepted": { - "message": "Invitation accepted" + "message": "초대 승낙" }, "createAccount": { "message": "계정 만들기" }, "setAStrongPassword": { - "message": "Set a strong password" + "message": "비밀번호 설정" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Finish creating your account by setting a password" + "message": "비밀번호를 설정하여 계정 생성을 완료합니다." }, "enterpriseSingleSignOn": { "message": "엔터프라이즈 통합 인증 (SSO)" @@ -50,7 +50,7 @@ "message": "마스터 비밀번호 힌트는 마스터 비밀번호를 잊었을 때 도움이 될 수 있습니다." }, "masterPassHintText": { - "message": "If you forget your password, the password hint can be sent to your email. $CURRENT$/$MAXIMUM$ character maximum.", + "message": "비밀번호를 잊어버린 경우 비밀번호 힌트가 이메일로 전송됩니다. 최대 길이: $CURRENT$/$MAXIMUM$", "placeholders": { "current": { "content": "$1", @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "운전면허 번호 복사" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "자동 완성" }, @@ -179,6 +194,18 @@ "addItem": { "message": "항목 추가" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "비밀번호 힌트" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "보관함 검색" }, @@ -504,6 +535,9 @@ "notes": { "message": "메모" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "메모" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "세션 만료" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "기타 옵션" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "보관함 시간 제한" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "지금 잠그기" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "2단계 인증은 보안 키, 인증 앱, SMS, 전화 통화 등의 다른 기기로 사용자의 로그인 시도를 검증하여 사용자의 계정을 더욱 안전하게 만듭니다. 2단계 인증은 bitwarden.com 웹 보관함에서 활성화할 수 있습니다. 지금 웹 사이트를 방문하시겠습니까?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "폴더 편집함" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "파일" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "파일을 선택하세요." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "PIN 코드를 사용하여 잠금 해제" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Bitwarden 잠금해제에 사용될 PIN 코드를 설정합니다. 이 애플리케이션에서 완전히 로그아웃할 경우 PIN 설정이 초기화됩니다." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN 코드가 필요합니다." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "브라우저 다시 시작 시 마스터 비밀번호로 잠금" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "반드시 하나 이상의 컬렉션을 선택해야 합니다." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "보관함 시간 제한 초과시 동작" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "잠금", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "휴지통", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "계정이 일치하지 않음" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "생체 인식이 활성화되지 않음" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Send 검색", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "텍스트" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "파일" }, @@ -2232,6 +2320,9 @@ "message": "모든 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "최대 접근 횟수 도달", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "이 Send가 정해진 일시에 영구적으로 삭제됩니다.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "만료 날짜" }, @@ -2338,6 +2433,10 @@ "message": "이 Send에 접근하기 위해 암호를 입력하도록 선택적으로 요구합니다.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "이 Send에 대한 비공개 메모", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "받는 사람으로부터 나의 이메일 주소 숨기기" }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "하나 이상의 단체 정책이 Send 설정에 영향을 미치고 있습니다." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "분" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "조직 정책이 보관함 제한 시간에 영향을 미치고 있습니다. 최대 허용 보관함 제한 시간은 $HOURS$시간 $MINUTES$분입니다", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index c60b8b7b211..6e583c88c13 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Automatinis užpildymas" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Pridėti elementą" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Slaptažodžio užuomina" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Ieškoti saugykloje" }, @@ -504,6 +535,9 @@ "notes": { "message": "Pastabos" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Pastaba" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Baigėsi seanso laikas" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Kitos parinktys" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Atsijungta nuo saugyklos" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Užrakinti dabar" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Prisijungus dviem veiksmais, jūsų paskyra tampa saugesnė, reikalaujant patvirtinti prisijungimą naudojant kitą įrenginį, pvz., saugos raktą, autentifikavimo programėlę, SMS, telefono skambutį ar el. paštą. Dviejų žingsnių prisijungimą galima įjungti „bitwarden.com“ interneto saugykloje. Ar norite dabar apsilankyti svetainėje?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Katalogas atnaujintas" }, @@ -892,7 +938,7 @@ "message": "Pateikti kortelių elementų skirtuko puslapyje sąrašą, kad būtų lengva automatiškai užpildyti." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Rodyti tapatybes skirtuko puslapyje" @@ -1097,6 +1143,9 @@ "file": { "message": "Failas" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Pasirinkite failą." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Atrakinti PIN kodu" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Nustatykite savo PIN kodą, kad atrakintumėte „Bitwarden“. Jūsų PIN nustatymai bus nustatyti iš naujo, jei kada nors visiškai atsijungsite nuo programos." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN kodas yra privalomas." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Užrakinkite pagrindiniu slaptažodžiu paleidus naršyklę iš naujo" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Turite pasirinkti bent vieną kategoriją." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault skirtojo laiko veiksmas" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Užrakinti", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Šiukšliadėžė", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Paskyros neatitikimas" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Trūksta biometrinių duomenų nustatymų" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Siųsti", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Ieškoti „Sends“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekstas" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Byla" }, @@ -2232,6 +2320,9 @@ "message": "Visi siuntimai", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Pasiektas maksimalus prisijungimų skaičius", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Nurodytos datos ir laiko metu „Send“ bus bus ištrinta visam laikui.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Galiojimo data" }, @@ -2338,6 +2433,10 @@ "message": "Pasirinktinai reikalauti slaptažodžio, kad vartotojai galėtų pasiekti šį „Send“.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Asmeninės pastabos apie šį „Send“.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Slėpti mano el. pašto adresą nuo gavėjų." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Viena ar daugiau organizacijos politikų turi įtakos Jūsų „Send“ nustatymams." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minučių" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Jūsų organizacijos politika nustatė Jūsų didžiausią leidžiamą saugyklos laiko limitą į $HOURS$ valandas(-ų) ir $MINUTES$ minutes(-čių).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Jūsų organizacijos politika apriboja Jūsų saugyklos neaktyvumo laiko nustatymus. Maksimalus leidžiamas saugyklos neaktyvumo laikas yra $HOURS$ valanda(-os) ir $MINUTES$ minutė(s). Jūsų saugyklos neaktyvumo laiko veiksmas yra nustatytas $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 2f1f123020d..8382fdcdc73 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Ievietot licences numuru starpliktuvē" }, + "copyCustomField": { + "message": "Ievietot $FIELD$ starpliktuvē", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Ievietot tīmekļvietni starpliktuvē" + }, + "copyNotes": { + "message": "Ievietot piezīmes starpliktuvē" + }, "autoFill": { "message": "Automātiskā aizpilde" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Pievienot vienumu" }, + "accountEmail": { + "message": "Konta e-pasta adrese" + }, + "requestHint": { + "message": "Pieprasīt norādi" + }, + "requestPasswordHint": { + "message": "Pieprasīt paroles norādi" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Jāievada sava konta e-pasta adrese, un paroles norāde tiks nosūtīta" + }, "passwordHint": { "message": "Paroles norāde" }, @@ -462,6 +489,10 @@ "message": "Izvairīties no viegli sajaucamām rakstzīmēm", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Meklēt glabātavā" }, @@ -504,6 +535,9 @@ "notes": { "message": "Piezīmes" }, + "privateNote": { + "message": "Personiska piezīme" + }, "note": { "message": "Piezīme" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Sesijas noildze" }, + "vaultTimeoutHeader": { + "message": "Glabātavas noildze" + }, "otherOptions": { "message": "Citas iespējas" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Glabātavas noildze" }, + "vaultTimeout1": { + "message": "Noildze" + }, "lockNow": { "message": "Aizslēgt" }, @@ -730,13 +770,13 @@ "message": "Nolasīt autentificētāja kvadrātkodu pašreizējā tīmekļa lapā" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "Padarīt divpakāpju apliecināšanu plūdenu" }, "totpHelper": { - "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." + "message": "Bitwarden var glabāt un aizpildīt divpakāpju apliecināšanas kodus. Atslēga jāievieto starpliktuvē un jāielīmē šajā laukā." }, "totpHelperWithCapture": { - "message": "Bitwarden can store and fill 2-step verification codes. Select the camera icon to take a screenshot of this website's authenticator QR code, or copy and paste the key into this field." + "message": "Bitwarden var glabāt un aizpildīt divpakāpju apliecināšanas kodus. Jāizvēlas kameras ikona, lai veiktu tīmekļvietnes autentificētāja kvadrātkoda ekrānuzņēmumu, vai jāievieto starpliktuvē atslēga un jāielīmē šajā laukā." }, "learnMoreAboutAuthenticators": { "message": "Uzzināt vairāk par autentificētājiem" @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Divpakāpju pieteikšanās padara kontu krietni drošāku, pieprasot apstiprināt pieteikšanos ar tādu citu ierīču vai pakalpojumu starpniecību kā drošības atslēga, autentificētāja lietotne, īsziņa, tālruņa zvans vai e-pasts. Divpakāpju pieteikšanos var iespējot bitwarden.com tīmekļa glabātavā. Vai tagad apmeklēt tīmekļvietni?" }, + "twoStepLoginConfirmationContent": { + "message": "Savu kontu var padarīt drošāku ar divpakāpju pieteikšanās uzstādīšanu Bitwarden tīmekļa lietotnē." + }, + "twoStepLoginConfirmationTitle": { + "message": "Pāriet uz tīmekļa lietotni?" + }, "editedFolder": { "message": "Mape labota" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Datne" }, + "fileToShare": { + "message": "Datne, ko kopīgot" + }, "selectFile": { "message": "Atlasīt datni" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Atslēgt ar PIN" }, + "setYourPinTitle": { + "message": "Iestatīt PIN" + }, + "setYourPinButton": { + "message": "Iestatīt PIN" + }, "setYourPinCode": { "message": "Iestatīt PIN kodu Bitwarden atslēgšanai. PIN iestatījumi tiks atiestatīti pēc pilnīgas izrakstīšanās no lietotnes." }, + "setYourPinCode1": { + "message": "PIN būs izmantojams galvenās paroles vietā, lai atslēgtu Bitwarden. PIN tiks atiestatīts, ja kādreiz notiks pilnīga izrakstīšanās no Bitwarden." + }, "pinRequired": { "message": "Ir nepieciešams PIN kods." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Aizslēgt ar galveno paroli pēc pārlūka atsāknēšanas" }, + "lockWithMasterPassOnRestart1": { + "message": "Pieprasīt galveno paroli pēc pārlūka pārsāknēšanas" + }, "selectOneCollection": { "message": "Ir jāizvēlas vismaz viens krājums." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Glabātavas noildzes darbība" }, + "vaultTimeoutAction1": { + "message": "Noildzes darbība" + }, "lock": { "message": "Slēgt", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Atkritne", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Konta nesaderība" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometriskā atslēgšana neizdevās. Biometriskā slepenā atslēgai neizdevās atslēgt glabātavu. Lūgums vēlreiz mēģināt iestatīt biometriju." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometriskās atslēgas neatbilstība" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometriskā atslēgšana neizdevās. Biometriskā slepenā atslēgai neizdevās atslēgt glabātavu. Lūgums vēlreiz mēģināt iestatīt biometriju." + }, "biometricsNotEnabledTitle": { "message": "Biometrija nav iespējota" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Saglabātas vērā neņemto domēna vārdu izmaiņas" }, + "limitSendViews": { + "message": "Ierobežot skatījumus" + }, + "limitSendViewsHint": { + "message": "Neviens nevar apskatīt šo Send pēc tam, kad ir sasniegts ierobežojums.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Atlikuši $ACCESSCOUNT$ skatījumi", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Informācija par Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Meklēt Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Teksts" }, + "sendTypeTextToShare": { + "message": "Kopīgojamais teksts" + }, "sendTypeFile": { "message": "Datne" }, @@ -2232,6 +2320,9 @@ "message": "Visi Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Pēc noklusējuma paslēpt tekstu" + }, "maxAccessCountReached": { "message": "Sasniegts lielākais pieļaujamais piekļuves reižu skaits", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send tiks neatgriezeniski izdzēsts norādītajā datumā un laikā.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send šajā datumā tiks neatgriezeniski izdzēsts.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Derīguma beigu datums" }, @@ -2338,6 +2433,10 @@ "message": "Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Pieprasīt šo paroli, lai apskatītu Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Personīgas piezīmes par šo Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Slēpt e-pasta adresi no saņēmējiem." }, + "hideYourEmail": { + "message": "Paslēpt e-pasta adresi no apskatītājiem." + }, "sendOptionsPolicyInEffect": { "message": "Viens vai vairāki apvienības nosacījumi ietekmē Send iespējas." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minūtes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Noildzes iespējām tika piemērotas uzņēmējdarbības nosacījumu prasības" + }, "vaultTimeoutPolicyInEffect": { "message": "Apvienības nosacījumi ietekmē glabātavas noildzi. Lielākā atļautā glabātavas noildze ir $HOURS$ stunda(s) un $MINUTES$ minūte(s)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Ne vairāk kā $HOURS$ stunda(s) un $MINUTES$ minūte(s).", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Noildze pārsniedz apvienības iestatīto ierobežojumu: ne vairāk kā $HOURS$ stunda(s) un $MINUTES$ minūte(s)", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Apvienības nosacījumi ietekmē glabātavas noildzi. Lielākā atļautā glabātavas noildze ir $HOURS$ stunda(s) un $MINUTES$ minūte(s). Kā glabātavas noildzes darbība ir uzstādīta $ACTION$.", "placeholders": { @@ -3383,7 +3514,7 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Kļūda savienojuma izveidošanā ar Duo pakalpojumu. Jāizmanto cits divpakāpju pieteikšanāš veids vai jāvēršas pie Duo pēc palīdzības." + "message": "Kļūda savienojuma izveidošanā ar Duo pakalpojumu. Jāizmanto cits divpakāpju pieteikšanās veids vai jāvēršas pie Duo pēc palīdzības." }, "launchDuoAndFollowStepsToFinishLoggingIn": { "message": "Jāpalaiž DUO un jāseko soļiem, lai pabeigtu pieteikšanos." @@ -3988,10 +4119,10 @@ "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher." }, "loginCredentials": { - "message": "Login credentials" + "message": "Pieteikšanās dati" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "Autentificētāja atslēga" }, "autofillOptions": { "message": "Automātiskās aizpildes iespējas" @@ -4092,7 +4223,7 @@ "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { - "message": "Assign" + "message": "Piešķirt" }, "bulkCollectionAssignmentDialogDescriptionSingular": { "message": "Vienumu varēs redzēt tikai apvnienības dalībnieki ar piekļuvi šiem krājumiem." @@ -4101,7 +4232,7 @@ "message": "Vienumus varēs redzēt tikai apvnienības dalībnieki ar piekļuvi šiem krājumiem." }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "Ir atlasīti $TOTAL_COUNT$ vienumi. Nevar atjaunināt $READONLY_COUNT$ no vienumiem, jo trūkst labošanas atļaujas.", "placeholders": { "total_count": { "content": "$1", @@ -4196,7 +4327,7 @@ } }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "Atlasīt krājumus, lai piešķirtu" }, "personalItemTransferWarningSingular": { "message": "1 vienums tiks neatgriezeniski nodots atlasītajai apvienībai. Šis vienums Tev vairs nepiederēs." @@ -4233,13 +4364,13 @@ } }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "Krājumi veiksmīgi piešķirti" }, "nothingSelected": { - "message": "You have not selected anything." + "message": "Nekas nav atlasīts." }, "movedItemsToOrg": { - "message": "Selected items moved to $ORGNAME$", + "message": "Atzīmētie vienumi pārvietoti uz $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Šim iestatījumam tika piemērotas uzņēmējdarbības nosacījumu prasības" }, + "retry": { + "message": "Mēģināt vēlreiz" + }, + "vaultCustomTimeoutMinimum": { + "message": "Mazākā pieļaujamā pielāgotā noildze ir 1 minūte." + }, + "additionalContentAvailable": { + "message": "Ir pieejams papildu saturs" + }, "fileSavedToDevice": { "message": "Datne saglabāta ierīcē. Tā ir atrodama ierīces lejupielāžu mapē." }, diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index bcec218774d..e78edf841ea 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "ഓട്ടോഫിൽ" }, @@ -179,6 +194,18 @@ "addItem": { "message": " ഇനം ചേർക്കുക" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "പാസ്സ്‌വേഡ് സൂചനാ" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "വാൾട് തിരയുക" }, @@ -504,6 +535,9 @@ "notes": { "message": "കുറിപ്പുകൾ" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "കുറിപ്പ്" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "വാൾട് ടൈംഔട്ട്" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "ഇപ്പോൾ ലോക്കുചെയ്യുക" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "സുരക്ഷാ കീ, ഓതന്റിക്കേറ്റർ അപ്ലിക്കേഷൻ, SMS, ഫോൺ കോൾ അല്ലെങ്കിൽ ഇമെയിൽ പോലുള്ള മറ്റൊരു ഉപകരണം ഉപയോഗിച്ച് തങ്ങളുടെ ലോഗിൻ സ്ഥിരീകരിക്കാൻ ആവശ്യപ്പെടുന്നതിലൂടെ രണ്ട്-ഘട്ട ലോഗിൻ തങ്ങളുടെ അക്കൗണ്ടിനെ കൂടുതൽ സുരക്ഷിതമാക്കുന്നു. bitwarden.com വെബ് വാൾട്ടിൽ രണ്ട്-ഘട്ട ലോഗിൻ പ്രവർത്തനക്ഷമമാക്കാനാകും.തങ്ങള്ക്കു ഇപ്പോൾ വെബ്സൈറ്റ് സന്ദർശിക്കാൻ ആഗ്രഹമുണ്ടോ?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "തിരുത്തിയ ഫോൾഡർ" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "ഫയൽ" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "ഒരു ഫയൽ തിരഞ്ഞെടുക്കുക" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "പിൻ ഉപയോഗിച്ച് അൺലോക്കുചെയ്യുക" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Bitwarden അൺലോക്കുചെയ്യുന്നതിന് തങ്ങളുടെ പിൻ കോഡ് സജ്ജമാക്കുക. തങ്ങൾ എപ്പോഴെങ്കിലും അപ്ലിക്കേഷനിൽ നിന്ന് പൂർണ്ണമായി ലോഗ് ഔട്ട് ചെയ്യുകയാണെങ്കിൽ, പിൻ ക്രമീകരണങ്ങൾ പുനസജ്ജമാക്കും." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "പിൻ കോഡ് നിർബന്ധമാണ്." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "ബ്രൌസർ പുനരാരംഭത്തിൽ പ്രാഥമിക പാസ്‌വേഡ് ഉപയോഗിച്ച് ലോക്ക് ചെയ്യുക" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "നിങ്ങൾ ഒരു കളക്ഷനെങ്കിലും തിരഞ്ഞെടുക്കണം." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "വാൾട് ടൈം ഔട്ട് ആക്ഷൻ" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "പൂട്ടുക", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "ട്രാഷ്", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 0ecb9907504..36010477889 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "स्वयंभरण" }, @@ -179,6 +194,18 @@ "addItem": { "message": "वस्तू जोडा" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "पासवर्ड संकेत" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "तिजोरीत शोधा" }, @@ -504,6 +535,9 @@ "notes": { "message": "टिप" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 338d70eaf58..8eae45e6b38 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 37486833e94..75188875b59 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-utfylling" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Legg til en gjenstand" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Passordhint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Søk i hvelvet" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notater" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Notat" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Tidsavbrudd i hvelvet" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lås nå" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "2-trinnsinnlogging gjør kontoen din mer sikker, ved å kreve at du verifiserer din innlogging med en annen enhet, f.eks. en autentiseringsapp, SMS, e-post, telefonsamtale, eller sikkerhetsnøkkel. 2-trinnsinnlogging kan aktiveres i netthvelvet ditt på bitwarden.com. Vil du besøke bitwarden.com nå?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Redigerte mappen" }, @@ -892,7 +938,7 @@ "message": "Vis kortelementer på fanesiden for lett auto-utfylling." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Vis identiteter på fanesiden" @@ -1097,6 +1143,9 @@ "file": { "message": "Fil" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Velg en fil." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Lås opp med PIN-kode" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Angi PIN-koden din for å låse opp Bitwarden. PIN-innstillingene tilbakestilles hvis du logger deg helt ut av programmet." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN-kode er påkrevd." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lås med hovedpassordet når du starter nettleseren på nytt" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Du må velge minst én samling." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Handling ved tidsavbrudd i hvelvet" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lås", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Papirkurv", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Kontoen eksisterer ikke" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometri ikke aktivert" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Søk i Send-ene", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fil" }, @@ -2232,6 +2320,9 @@ "message": "Alle Send-er", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Maksimalt antall tilganger nådd", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send-en vil bli slettet permanent på den angitte dato og klokkeslett.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Utløpsdato" }, @@ -2338,6 +2433,10 @@ "message": "Eventuelt krever et passord for brukere å få tilgang til denne Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notater om denne Send-en.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Skjul min e-postadresse fra mottakere." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "En eller flere av virksomhetens regler påvirker generatorinnstillingene dine." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutter" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Din virksomhets regler påvirker tidsavbruddet for hvelvet ditt. Maksimalt tillatt tidsavbrudd for hvelv er $HOURS$ time(r) og $MINUTES$ minutt(er)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 338d70eaf58..8eae45e6b38 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 435df8ecb4e..3426fa1c62d 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kenteken kopiëren" }, + "copyCustomField": { + "message": "$FIELD$ kopiëren", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Website kopiëren" + }, + "copyNotes": { + "message": "Notities kopiëren" + }, "autoFill": { "message": "Auto-invullen" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Item toevoegen" }, + "accountEmail": { + "message": "E-mailadres van account" + }, + "requestHint": { + "message": "Hint vragen" + }, + "requestPasswordHint": { + "message": "Hoofdwachtwoordhint vragen" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Als je het e-mailadres van je account invult, versturen we je je wachtwoordhint" + }, "passwordHint": { "message": "Wachtwoordhint" }, @@ -462,6 +489,10 @@ "message": "Dubbelzinnige tekens vermijden", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Kluis doorzoeken" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notities" }, + "privateNote": { + "message": "Privénotitie" + }, "note": { "message": "Notitie" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Sessietime-out" }, + "vaultTimeoutHeader": { + "message": "Time-out van de kluis" + }, "otherOptions": { "message": "Andere opties" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Time-out van de kluis" }, + "vaultTimeout1": { + "message": "Time-out" + }, "lockNow": { "message": "Nu vergrendelen" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Tweestapsaanmelding beschermt je account door je inlogpoging te bevestigen met een ander apparaat zoals een beveiligingscode, authenticatie-app, SMS, spraakoproep of e-mail. Je kunt Tweestapsaanmelding inschakelen in de webkluis op bitwarden.com. Wil je de website nu bezoeken?" }, + "twoStepLoginConfirmationContent": { + "message": "Maak je account veiliger met het instellen van tweestapsaanmelding in de Bitwarden-webapp." + }, + "twoStepLoginConfirmationTitle": { + "message": "Doorgaan naar web-app?" + }, "editedFolder": { "message": "Map is bewerkt" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Bestand" }, + "fileToShare": { + "message": "Bestand om te delen" + }, "selectFile": { "message": "Selecteer een bestand." }, @@ -1654,7 +1703,7 @@ "message": "Identiteit" }, "newItemHeader": { - "message": "Nieuw $TYPE$", + "message": "Nieuwe $TYPE$", "placeholders": { "type": { "content": "$1", @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Ontgrendelen met PIN" }, + "setYourPinTitle": { + "message": "PIN-code instellen" + }, + "setYourPinButton": { + "message": "PIN-code instellen" + }, "setYourPinCode": { "message": "Stel je PIN-code in voor het ontgrendelen van Bitwarden. Je PIN-code wordt opnieuw ingesteld als je je ooit volledig afmeldt bij de applicatie." }, + "setYourPinCode1": { + "message": "Je pincode wordt gebruikt om Bitwarden te ontgrendelen in plaats van je hoofdwachtwoord. Je pincode wordt opnieuw ingesteld als je ooit volledig uitlogt op Bitwarden." + }, "pinRequired": { "message": "PIN-code is vereist." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Vergrendelen met hoofdwachtwoord bij herstart browser" }, + "lockWithMasterPassOnRestart1": { + "message": "Hoofdwachtwoord vereisen bij herstart van browser" + }, "selectOneCollection": { "message": "Je moet tenminste één verzameling selecteren." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Actie bij time-out" }, + "vaultTimeoutAction1": { + "message": "Time-out actie" + }, "lock": { "message": "Vergrendelen", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Prullenbak", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Accounts komt niet overeen" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometrische ontgrendelen mislukt. De biometrische geheime sleutel kon de kluis niet ontgrendelen. Probeer biometrische gegevens opnieuw in te stellen." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometrische sleutel discrepantie" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometrische ontgrendelen mislukt. De biometrische geheime sleutel kon de kluis niet ontgrendelen. Probeer biometrische gegevens opnieuw in te stellen." + }, "biometricsNotEnabledTitle": { "message": "Biometrie niet ingeschakeld" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Uitgesloten domeinwijzigingen opgeslagen" }, + "limitSendViews": { + "message": "Weergaven limiteren" + }, + "limitSendViewsHint": { + "message": "Niemand kan deze Send weergeven als de limiet is bereikt.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ weergaven over", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send-details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Sends zoeken", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Te delen tekst" + }, "sendTypeFile": { "message": "Bestand" }, @@ -2232,6 +2320,9 @@ "message": "Alle Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Tekst standaard verbergen" + }, "maxAccessCountReached": { "message": "Maximum aantal keren benaderd", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Deze Send wordt op de aangegeven datum en tijd definitief verwijderd.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Op deze datum wordt de Send definitief verwijderd.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Vervaldatum" }, @@ -2338,6 +2433,10 @@ "message": "Vereis optioneel een wachtwoord voor gebruikers om toegang te krijgen tot deze Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Dit wachtwoord vereisen voor het weergeven van de Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Privénotities over deze Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Verberg mijn e-mailadres voor ontvangers." }, + "hideYourEmail": { + "message": "Je e-mailadres voor ontvangers verbergen." + }, "sendOptionsPolicyInEffect": { "message": "Een of meer organisatiebeleidseisen heeft invloed op de mogelijkheden van je Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuten" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Bedrijfsbeleidseisen zijn toegepast op je time-out instellingen" + }, "vaultTimeoutPolicyInEffect": { "message": "Het beleid van je organisatie heeft invloed op de time-out van je kluis. De maximaal toegestane kluis time-out is $HOURS$ uur en $MINUTES$ minuten.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ uur en $MINUTES$ minu(u)t(en) maximaal.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Time-out overschrijdt de beperking van je organisatie: $HOURS$ uur en $MINUTES$ minu(u) t(en) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "De beleidsinstellingen van je organisatie hebben invloed op de time-out van je kluis. De maximale toegestane kluis time-out is $HOURS$ uur en $MINUTES$ minuten. Jouw time-out is ingesteld op $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Bedrijfsbeleidseisen zijn op deze instelling toegepast" }, + "retry": { + "message": "Opnieuw proberen" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimale aangepaste time-out is 1 minuut." + }, + "additionalContentAvailable": { + "message": "Extra inhoud beschikbaar" + }, "fileSavedToDevice": { "message": "Bestand op apparaat opgeslagen. Beheer vanaf de downloads op je apparaat." }, diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 338d70eaf58..8eae45e6b38 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 338d70eaf58..8eae45e6b38 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index a99655378e5..0452d2d5db3 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kopiuj numer licencji" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autouzupełnianie" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Dodaj element" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Podpowiedź do hasła" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Szukaj w sejfie" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notatki" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Notatka" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Limit czasu sesji" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Pozostałe opcje" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Blokowanie sejfu" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Zablokuj" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Logowanie dwustopniowe sprawia, że konto jest bardziej bezpieczne poprzez wymuszenie potwierdzenia logowania z innego urządzenia, takiego jak z klucza bezpieczeństwa, aplikacji uwierzytelniającej, wiadomości SMS, telefonu lub adresu e-mail. Logowanie dwustopniowe możesz włączyć w sejfie internetowym bitwarden.com. Czy chcesz przejść do tej strony?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder został zapisany" }, @@ -892,7 +938,7 @@ "message": "Pokaż elementy karty na stronie głównej, aby ułatwić autouzupełnianie." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Pokaż tożsamości na stronie głównej" @@ -1097,6 +1143,9 @@ "file": { "message": "Plik" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Wybierz plik" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Odblokuj kodem PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Ustaw kod PIN do odblokowywania aplikacji Bitwarden. Ustawienia odblokowywania kodem PIN zostaną zresetowane po wylogowaniu." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Kod PIN jest wymagany." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Zablokuj hasłem głównym po uruchomieniu przeglądarki" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Musisz wybrać co najmniej jedną kolekcję." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Sposób blokowania sejfu" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Zablokuj", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Kosz", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Konto jest niezgodne" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Odblokowanie biometryczne nie powiodło się. Sekretny klucz biometryczny nie odblokował sejfu. Spróbuj skonfigurować biometrię ponownie." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Klucz biometryczny jest niepoprawny" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Odblokowanie biometryczne nie powiodło się. Sekretny klucz biometryczny nie odblokował sejfu. Spróbuj skonfigurować biometrię ponownie." + }, "biometricsNotEnabledTitle": { "message": "Dane biometryczne są wyłączone" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Zmiany w wykluczonych domenach zapisane" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Wyślij", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Szukaj w wysyłkach", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Tekst" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Plik" }, @@ -2232,6 +2320,9 @@ "message": "Wszystkie wysyłki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Maksymalna liczba dostępów została osiągnięta", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Wysyłka zostanie trwale usunięta w określonym czasie.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Data wygaśnięcia" }, @@ -2338,6 +2433,10 @@ "message": "Opcjonalne hasło dla użytkownika, aby uzyskać dostęp do wysyłki.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Prywatne notatki o tej wysyłce.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ukryj mój adres e-mail przed odbiorcami." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Co najmniej jedna zasada organizacji wpływa na ustawienia wysyłek." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuty" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Zasady organizacji mają wpływ czas blokowania sejfu. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Zasady organizacji mają wpływ na czas blokowania sejfu. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min. Twój czas blokowania sejfu to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index a88aae11814..27f41c9ef29 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copiar número da CNH" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autopreencher" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Adicionar Item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Dica da Senha" }, @@ -462,6 +489,10 @@ "message": "Evitar Caracteres Ambíguos", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Pesquisar no Cofre" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Tempo limite da sessão" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Outras opções" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Cofre - tempo esgotado" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Bloquear Agora" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "O login de duas etapas torna a sua conta mais segura ao exigir que digite um código de segurança de um aplicativo de autenticação quando for iniciar a sessão. O login de duas etapas pode ser ativado no cofre web bitwarden.com. Deseja visitar o site agora?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Pasta Editada" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Arquivo" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Selecione um arquivo." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Desbloquear com o PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Defina o seu código PIN para desbloquear o Bitwarden. Suas configurações de PIN serão redefinidas se alguma vez você encerrar completamente toda a sessão do aplicativo." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "O código PIN é necessário." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Bloquear com senha mestra ao reiniciar o navegador" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Você deve selecionar pelo menos uma coleção." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Ação de Tempo Limite do Cofre" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Bloquear", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Lixeira", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "A conta não confere" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "O desbloqueio biométrico falhou. A chave secreta biométrica não conseguiu desbloquear o cofre. Tente configurar os dados biométricos novamente." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Falta de chave biométrica" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "O desbloqueio biométrico falhou. A chave secreta biométrica não conseguiu desbloquear o cofre. Tente configurar os dados biométricos novamente." + }, "biometricsNotEnabledTitle": { "message": "Biometria não ativada" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Mudanças de domínios excluídos salvas" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Pesquisar Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Texto" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Arquivo" }, @@ -2232,6 +2320,9 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Número máximo de acessos atingido", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "O Send será eliminado permanentemente na data e hora especificadas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Data de Validade" }, @@ -2338,6 +2433,10 @@ "message": "Exigir opcionalmente uma senha para os usuários acessarem este Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Notas privadas sobre esse Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ocultar meu endereço de e-mail dos destinatários." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Uma ou mais políticas da organização estão afetando as suas opções de Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutos" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "As políticas da sua organização estão afetando o tempo limite do seu cofre. O Tempo Limite Máximo permitido do Cofre é $HOURS$ hora(s) e $MINUTES$ minuto(s)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "As políticas da sua organização estão afetando seu cofre tempo limite. Tempo limite máximo permitido para cofre é $HOURS$ hora(s) e $MINUTES$ minuto(s). A ação de tempo limite do seu cofre é definida como $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Os requisitos de política empresarial foram aplicados nesta configuração" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 75026c9d3e0..4c5c63a343c 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copiar número da carta de condução" }, + "copyCustomField": { + "message": "Copiar $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copiar site" + }, + "copyNotes": { + "message": "Copiar notas" + }, "autoFill": { "message": "Preencher automaticamente" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Adicionar item" }, + "accountEmail": { + "message": "E-mail da conta" + }, + "requestHint": { + "message": "Pedir dica" + }, + "requestPasswordHint": { + "message": "Pedir dica da palavra-passe" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Introduza o endereço de e-mail da sua conta e ser-lhe-á enviada a sua dica da palavra-passe" + }, "passwordHint": { "message": "Dica da palavra-passe" }, @@ -462,6 +489,10 @@ "message": "Evitar caracteres ambíguos", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Procurar no cofre" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Nota privada" + }, "note": { "message": "Nota" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Tempo limite da sessão" }, + "vaultTimeoutHeader": { + "message": "Tempo limite do cofre" + }, "otherOptions": { "message": "Outras opções" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Tempo limite do cofre" }, + "vaultTimeout1": { + "message": "Tempo limite" + }, "lockNow": { "message": "Bloquear agora" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "A verificação de dois passos torna a sua conta mais segura, exigindo que verifique o seu início de sessão com outro dispositivo, como uma chave de segurança, aplicação de autenticação, SMS, chamada telefónica ou e-mail. A verificação de dois passos pode ser configurada em bitwarden.com. Pretende visitar o site agora?" }, + "twoStepLoginConfirmationContent": { + "message": "Torne a sua conta mais segura configurando a verificação de dois passos na aplicação Web Bitwarden." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continuar para a aplicação Web?" + }, "editedFolder": { "message": "Pasta guardada" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Ficheiro" }, + "fileToShare": { + "message": "Ficheiro a partilhar" + }, "selectFile": { "message": "Selecionar um ficheiro" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Desbloquear com PIN" }, + "setYourPinTitle": { + "message": "Definir PIN" + }, + "setYourPinButton": { + "message": "Definir PIN" + }, "setYourPinCode": { "message": "Defina o seu código PIN para desbloquear o Bitwarden. As suas definições de PIN serão redefinidas se alguma vez terminar sessão por completo da aplicação." }, + "setYourPinCode1": { + "message": "O seu PIN será utilizado para desbloquear o Bitwarden em vez da sua palavra-passe mestra. O seu PIN será reposto se alguma vez terminar totalmente a sessão no Bitwarden." + }, "pinRequired": { "message": "É necessário o código PIN." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Bloquear com a palavra-passe mestra ao reiniciar o navegador" }, + "lockWithMasterPassOnRestart1": { + "message": "Exigir a palavra-passe mestra ao reiniciar o navegador" + }, "selectOneCollection": { "message": "Deve selecionar pelo menos uma coleção." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Ação de tempo limite do cofre" }, + "vaultTimeoutAction1": { + "message": "Ação de tempo limite" + }, "lock": { "message": "Bloquear", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Lixo", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Incompatibilidade de contas" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "O desbloqueio biométrico falhou. A chave secreta biométrica não conseguiu desbloquear o cofre. Por favor, tente configurar a biometria novamente." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Incompatibilidade da chave biométrica" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "O desbloqueio biométrico falhou. A chave secreta biométrica não conseguiu desbloquear o cofre. Por favor, tente configurar a biometria novamente." + }, "biometricsNotEnabledTitle": { "message": "Biometria não configurada" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Alterações do domínio excluído guardadas" }, + "limitSendViews": { + "message": "Limitar visualizações" + }, + "limitSendViewsHint": { + "message": "Ninguém poderá ver este Send depois de o limite ser atingido.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ visualizações restantes", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Detalhes do Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Procurar Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Texto" }, + "sendTypeTextToShare": { + "message": "Texto a partilhar" + }, "sendTypeFile": { "message": "Ficheiro" }, @@ -2232,6 +2320,9 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Ocultar texto por predefinição" + }, "maxAccessCountReached": { "message": "Número máximo de acessos atingido", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "O Send será permanentemente eliminado na data e hora especificadas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "O Send será permanentemente eliminado nesta data.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Prazo de validade" }, @@ -2338,6 +2433,10 @@ "message": "Opcionalmente, exigir uma palavra-passe para os utilizadores acederem a este Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Esta palavra-passe é necessária para visualizar o Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Notas privadas sobre este Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ocultar o meu endereço de e-mail dos destinatários." }, + "hideYourEmail": { + "message": "Oculte o seu endereço de e-mail dos visualizadores." + }, "sendOptionsPolicyInEffect": { "message": "Uma ou mais políticas da organização estão a afetar as suas opções do Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutos" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Os requisitos da política empresarial foram aplicados às suas opções de tempo limite" + }, "vaultTimeoutPolicyInEffect": { "message": "As políticas da sua organização definiram o tempo limite máximo permitido do cofre de $HOURS$ hora(s) e $MINUTES$ minuto(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hora(s) e $MINUTES$ minuto(s) no máximo.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "O tempo limite excede a restrição definida pela sua organização: $HOURS$ hora(s) e $MINUTES$ minuto(s) no máximo", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "As políticas da sua organização estão a afetar o tempo limite do cofre. O tempo limite máximo permitido do cofre é de $HOURS$ hora(s) e $MINUTES$ minuto(s). A sua ação de tempo limite do cofre está definida para $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Os requisitos da política empresarial foram aplicados a esta definição" }, + "retry": { + "message": "Tentar novamente" + }, + "vaultCustomTimeoutMinimum": { + "message": "O tempo limite mínimo personalizado é de 1 minuto." + }, + "additionalContentAvailable": { + "message": "Estão disponíveis conteúdos adicionais" + }, "fileSavedToDevice": { "message": "Ficheiro guardado no dispositivo. Gira-o a partir das transferências do seu dispositivo." }, diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 989f5e1b2ee..6d5dfa9e24c 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copiați numărul de licență" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Auto-completare" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Adăugare articol" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Indiciu parolă" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Căutare în seif" }, @@ -504,6 +535,9 @@ "notes": { "message": "Note" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Notă" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Expirarea sesiunii" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Alte opțiuni" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Expirare seif" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Blocare imediată" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Autentificarea în două etape vă face contul mai sigur, prin solicitarea unei verifică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 configurată în seiful web bitwarden.com. Doriți să vizitați site-ul web acum?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Dosar salvat" }, @@ -892,7 +938,7 @@ "message": "Listați elementele cardului pe pagina Filă pentru a facilita completarea automată." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Afișați identitățile pe pagina Filă" @@ -1097,6 +1143,9 @@ "file": { "message": "Fișier" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Selectare fișier" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Deblocare cu codul PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Stabiliți codul PIN de deblocare Bitwarden. Setările codului PIN vor fi reinițializate dacă vă deconectați vreodată din aplicație." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Codul PIN este necesar." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Blocare cu parola principală la repornirea browserului" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Trebuie să selectați cel puțin o colecție." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Acțiune la expirarea seifului" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Blocare", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Coș de reciclare", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Eroare de cont" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Datele biometrice nu sunt configurate" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Căutare Send-uri", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fișier" }, @@ -2232,6 +2320,9 @@ "message": "Toate Send-urile", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "S-a atins numărul maxim de accesări", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send-ul va fi șters definitiv la data și ora specificate.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Data expirării" }, @@ -2338,6 +2433,10 @@ "message": "Opțional, este necesară o parolă pentru ca utilizatorii să acceseze acest Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Note private despre acest Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ascundeți adresa mea de e-mail de la destinatari." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Una sau mai multe politici organizaționale vă afectează opțiunile Send-ului." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minute" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Politicile organizației dvs. au stabilit timpul maxim de expirare permis pentru seif la $HOURS$ oră/ore și $MINUTES$ de minut(e).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Politicile organizației dvs. afectează timpul de expirare al seifului. Timpul maxim de așteptare permis pentru seif este de $HOURS$ oră(e) și $MINUTES$ minut(e). Acțiunea de temporizare a seifului este setată la $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index 31d419aea60..829cd56b6f5 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Скопировать номер лицензии" }, + "copyCustomField": { + "message": "Скопировать $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Скопировать сайт" + }, + "copyNotes": { + "message": "Скопировать заметки" + }, "autoFill": { "message": "Автозаполнение" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Добавить элемент" }, + "accountEmail": { + "message": "Email аккаунта" + }, + "requestHint": { + "message": "Запросить подсказку" + }, + "requestPasswordHint": { + "message": "Запросить подсказку к паролю" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Введите email вашего аккаунта, и вам будет отправлена подсказка для пароля" + }, "passwordHint": { "message": "Подсказка к паролю" }, @@ -462,6 +489,10 @@ "message": "Избегать неоднозначных символов", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Поиск в хранилище" }, @@ -504,6 +535,9 @@ "notes": { "message": "Заметки" }, + "privateNote": { + "message": "Приватная заметка" + }, "note": { "message": "Заметка" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Тайм-аут сессии" }, + "vaultTimeoutHeader": { + "message": "Тайм-аут хранилища" + }, "otherOptions": { "message": "Прочие настройки" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Тайм-аут хранилища" }, + "vaultTimeout1": { + "message": "Тайм-аут" + }, "lockNow": { "message": "Заблокировать" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Двухэтапная аутентификация делает аккаунт более защищенным, поскольку требуется подтверждение входа при помощи другого устройства, например, ключа безопасности, приложения-аутентификатора, SMS, телефонного звонка или электронной почты. Двухэтапная аутентификация включается на bitwarden.com. Перейти на сайт сейчас?" }, + "twoStepLoginConfirmationContent": { + "message": "Сделайте ваш аккаунт более защищенным, настроив двухэтапную аутентификацию в веб-приложении Bitwarden." + }, + "twoStepLoginConfirmationTitle": { + "message": "Перейти к веб-приложению?" + }, "editedFolder": { "message": "Папка сохранена" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Файл" }, + "fileToShare": { + "message": "Файл для отправки" + }, "selectFile": { "message": "Выбрать файл" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Разблокировать с помощью PIN-кода" }, + "setYourPinTitle": { + "message": "Установка PIN" + }, + "setYourPinButton": { + "message": "Задать PIN-код" + }, "setYourPinCode": { "message": "Установите PIN-код для разблокировки Bitwarden. Настройки PIN-кода будут сброшены, если вы когда-либо полностью выйдете из приложения." }, + "setYourPinCode1": { + "message": "Ваш PIN-код будет использоваться для разблокировки Bitwarden вместо мастер-пароля. PIN-код будет сброшен, если вы выйдете из Bitwarden." + }, "pinRequired": { "message": "Необходим PIN-код." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Блокировать мастер-паролем при перезапуске браузера" }, + "lockWithMasterPassOnRestart1": { + "message": "Требовать мастер-пароль при перезапуске браузера" + }, "selectOneCollection": { "message": "Необходимо выбрать хотя бы одну коллекцию." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Действие по тайм-ауту хранилища" }, + "vaultTimeoutAction1": { + "message": "Тайм-аут действия" + }, "lock": { "message": "Блокировка", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Корзина", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Несоответствие аккаунта" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Биометрическая разблокировка не удалась. Биометрический секретный ключ не смог разблокировать хранилище. Пожалуйста, попробуйте настроить биометрию еще раз." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Несовпадение биометрического ключа" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Биометрическая разблокировка не удалась. Биометрический секретный ключ не смог разблокировать хранилище. Пожалуйста, попробуйте настроить биометрию еще раз." + }, "biometricsNotEnabledTitle": { "message": "Биометрия не настроена" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Изменения в исключенном домене сохранены" }, + "limitSendViews": { + "message": "Лимит просмотров" + }, + "limitSendViewsHint": { + "message": "Никто не сможет просмотреть эту Send после лимита просмотров.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Осталось просмотров: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Информация о Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Поиск Send’ов", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Текст" }, + "sendTypeTextToShare": { + "message": "Текст для отправки" + }, "sendTypeFile": { "message": "Файл" }, @@ -2232,6 +2320,9 @@ "message": "Все Send’ы", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Скрыть текст по умолчанию" + }, "maxAccessCountReached": { "message": "Достигнут максимум обращений", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Эта Send будет окончательно удалена в указанные дату и время.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "С этой даты Send будет удалена навсегда.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Дата истечения" }, @@ -2338,6 +2433,10 @@ "message": "По возможности запрашивать у пользователей пароль для доступа к этой Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Требовать этот пароль для просмотра Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Личные заметки об этой Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Скрыть мой адрес email от получателей." }, + "hideYourEmail": { + "message": "Скрыть ваш email от просматривающих." + }, "sendOptionsPolicyInEffect": { "message": "На параметры Send влияют одна или несколько политик организации." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Мин." }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "К настройкам тайм-аута были применены требования корпоративной политики" + }, "vaultTimeoutPolicyInEffect": { "message": "В соответствии с политиками вашей организации максимально допустимый тайм-аут хранилища составляет $HOURS$ час. и $MINUTES$ мин.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Максимум $HOURS$ час. $MINUTES$ мин.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Время ожидания превышает установленное организацией максимальное ограничение: $HOURS$ час. $MINUTES$ мин.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Политики вашей организации влияют на тайм-аут хранилища. Максимально допустимый тайм-аут хранилища составляет $HOURS$ час. и $MINUTES$ мин. Для вашего хранилища задан тайм-аут $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "К этой настройке были применены требования корпоративной политики" }, + "retry": { + "message": "Повторить" + }, + "vaultCustomTimeoutMinimum": { + "message": "Минимальный пользовательский тайм-аут составляет 1 минуту." + }, + "additionalContentAvailable": { + "message": "Дополнительный контент доступен" + }, "fileSavedToDevice": { "message": "Файл сохранен на устройстве. Управляйте им из загрузок устройства." }, diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 3b47e77a5bd..36094f55103 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "ස්වයං-පිරවීම" }, @@ -179,6 +194,18 @@ "addItem": { "message": "අයිතමය එකතු කරන්න" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "මුරපදය ඉඟිය" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "සුරක්ෂිතාගාරය සොයන්න" }, @@ -504,6 +535,9 @@ "notes": { "message": "සටහන්" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "සටහන" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "සුරක්ෂිතාගාරය වේලාව" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "දැන් අගුලුදමන්න" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "ආරක්ෂක යතුරක්, සත්යාපන යෙදුම, කෙටි පණිවුඩ, දුරකථන ඇමතුමක් හෝ විද්යුත් තැපෑල වැනි වෙනත් උපාංගයක් සමඟ ඔබේ පිවිසුම සත්යාපනය කිරීමට ඔබට අවශ්ය වීමෙන් ද්වි-පියවර පිවිසුම ඔබගේ ගිණුම වඩාත් සුරක්ෂිත කරයි. බිට්වොන්.com වෙබ් සුරක්ෂිතාගාරයේ ද්වි-පියවර පිවිසුම සක්රීය කළ හැකිය. ඔබට දැන් වෙබ් අඩවියට පිවිසීමට අවශ්යද?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "සංස්කරණය ෆෝල්ඩරය" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "ගොනුව" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "ගොනුවක් තෝරන්න." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "PIN අංකය සමඟ විවෘත" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "බිට්වර්ඩන් අගුළු ඇරීමට ඔබේ PIN අංකය කේතය සකසන්න. ඔබ කවදා හෝ යෙදුමෙන් සම්පූර්ණයෙන්ම පුරනය වී ඇත්නම් ඔබගේ PIN සැකසුම් නැවත සකසනු ඇත." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN කේතය අවශ්ය වේ." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "බ්රව්සරය නැවත ආරම්භ මත ප්රධාන මුරපදය සමග අගුළු" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "ඔබ අවම වශයෙන් එක් එකතුවක්වත් තෝරා ගත යුතුය." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "සුරක්ෂිතාගාරය කාලය ක්රියාකාරී" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "අගුල", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "කුණු කූඩයට", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "ගිණුම මිස්ගැලච්" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "ජීව විද්යාව සක්රීය කර නැත" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "යවන්න", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "සෙවුම් යවයි", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "පෙළ" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ගොනුව" }, @@ -2232,6 +2320,9 @@ "message": "සියලු යවයි", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "මැක්ස් ප්රවේශ ගණන ළඟා", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "නියම කරන ලද දිනය හා වේලාව මත Send ස්ථිරවම මකා දමනු ලැබේ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "කල් ඉකුත්වන දිනය" }, @@ -2338,6 +2433,10 @@ "message": "විකල්පයක් ලෙස පරිශීලකයින්ට මෙම යවන්න වෙත ප්රවේශ වීමට මුරපදයක් අවශ්ය වේ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "මේ ගැන පෞද්ගලික සටහන් යවන්න.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "ලබන්නන්ගෙන් මගේ විද්යුත් තැපැල් ලිපිනය සඟවන්න." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "සංවිධාන ප්රතිපත්ති එකක් හෝ කිහිපයක් ඔබගේ Send විකල්පයන්ට බලපායි." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "විනාඩි" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "ඔබේ සංවිධාන ප්රතිපත්ති ඔබගේ සුරක්ෂිතාගාරය කාලය කෙරෙහි බලපායි. උපරිම අවසර ලත් සුරක්ෂිතාගාරය කාලය පැය $HOURS$ (ය) සහ විනාඩි $MINUTES$ (ය)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index c3135bb9fec..3faaa066934 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -50,7 +50,7 @@ "message": "Nápoveda k hlavnému heslu vám môže pomôcť spomenúť si na heslo, ak ho zabudnete." }, "masterPassHintText": { - "message": "Ak zabudnete heslo, na váš e-mail vám môže zaslať pomôcku k heslu. Zadaných $CURRENT$ znakov, limit je $MAXIMUM$.", + "message": "Ak zabudnete heslo, na váš e-mail vám môže zaslať nápoveď k heslu. Zadaných $CURRENT$ znakov, limit je $MAXIMUM$.", "placeholders": { "current": { "content": "$1", @@ -66,7 +66,7 @@ "message": "Znovu zadajte hlavné heslo" }, "masterPassHint": { - "message": "Nápoveda k hlavnému heslu (voliteľné)" + "message": "Nápoveď k hlavnému heslu (voliteľné)" }, "joinOrganization": { "message": "Pripojte sa k organizácii" @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Kopírovať číslo licencie" }, + "copyCustomField": { + "message": "Kopírovať $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Kopírovať webstránku" + }, + "copyNotes": { + "message": "Kopírovať poznámky" + }, "autoFill": { "message": "Automatické vypĺňanie" }, @@ -179,14 +194,26 @@ "addItem": { "message": "Pridať položku" }, + "accountEmail": { + "message": "E-mail účtu" + }, + "requestHint": { + "message": "Požiadať o nápoveď" + }, + "requestPasswordHint": { + "message": "Požiadať o nápoveď k heslu" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Zadajte e-mailovú adresu účtu a zašleme vám nápoveď k heslu" + }, "passwordHint": { - "message": "Pomôcka pre heslo" + "message": "Nápoveď k heslu" }, "enterEmailToGetHint": { - "message": "Zadajte emailovú adresu na zaslanie nápovedy pre vaše hlavné heslo." + "message": "Zadajte emailovú adresu na zaslanie nápovede pre vaše hlavné heslo." }, "getMasterPasswordHint": { - "message": "Získať pomôcku pre hlavné heslo" + "message": "Získať nápoveď k hlavnému heslu" }, "continue": { "message": "Pokračovať" @@ -462,6 +489,10 @@ "message": "Vyhnúť sa zameniteľným znakom", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Prehľadávať trezor" }, @@ -504,6 +535,9 @@ "notes": { "message": "Poznámky" }, + "privateNote": { + "message": "Súkromná poznámka" + }, "note": { "message": "Poznámka" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Časový limit relácie" }, + "vaultTimeoutHeader": { + "message": "Časový limit pre trezor" + }, "otherOptions": { "message": "Ďalšie možnosti" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Časový limit pre trezor" }, + "vaultTimeout1": { + "message": "Časový limit" + }, "lockNow": { "message": "Uzamknúť teraz" }, @@ -650,7 +690,7 @@ "message": "Vaše hlavné heslo sa nebude dať obnoviť, ak ho zabudnete!" }, "masterPassHintLabel": { - "message": "Nápoveda pre hlavné heslo" + "message": "Nápoveď k hlavnému heslu" }, "errorOccurred": { "message": "Vyskytla sa chyba" @@ -696,7 +736,7 @@ "message": "Toto okno môžete zavrieť" }, "masterPassSent": { - "message": "Poslali sme vám email s nápovedou k hlavnému heslu." + "message": "Poslali sme vám email s nápoveďou k hlavnému heslu." }, "verificationCodeRequired": { "message": "Overovací kód je povinný." @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Dvojstupňové prihlasovanie robí váš účet bezpečnejším vďaka vyžadovaniu bezpečnostného kódu z overovacej aplikácie vždy, keď sa prihlásite. Dvojstupňové prihlasovanie môžete povoliť vo webovom trezore bitwarden.com. Chcete navštíviť túto stránku teraz?" }, + "twoStepLoginConfirmationContent": { + "message": "Zabezpečte svoj účet nastavením dvojstupňového prihlasovania vo webovej aplikácii Bitwarden." + }, + "twoStepLoginConfirmationTitle": { + "message": "Pokračovať vo webovej aplikácii?" + }, "editedFolder": { "message": "Priečinok upravený" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Súbor" }, + "fileToShare": { + "message": "Súbor, ktorý chcete zdieľať" + }, "selectFile": { "message": "Vyberte súbor" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Odomknúť s PIN" }, + "setYourPinTitle": { + "message": "Nastaviť PIN" + }, + "setYourPinButton": { + "message": "Nastaviť PIN" + }, "setYourPinCode": { "message": "Nastaviť kód PIN na odomykanie Bitwardenu. Nastavenie PIN sa vynuluje, ak sa úplne odhlásite z aplikácie." }, + "setYourPinCode1": { + "message": "Na odomknutie Bitwardenu sa namiesto hlavného hesla použije váš PIN. Váš PIN sa resetuje, ak sa niekedy úplne odhlásite zo Bitwardenu." + }, "pinRequired": { "message": "Kód PIN je povinný." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Pri reštarte prehliadača zamknúť s hlavným heslom" }, + "lockWithMasterPassOnRestart1": { + "message": "Pri reštarte prehliadača vyžadovať hlavné heslo" + }, "selectOneCollection": { "message": "Musíte vybrať aspoň jednu zbierku." }, @@ -1923,11 +1984,14 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultTimeoutAction": { - "message": "Akcia pri vypršaní času pre trezor" + "message": "Akcia pri vypršaní časového limitu pre trezor" + }, + "vaultTimeoutAction1": { + "message": "Akcia pri vypršaní časového limitu" }, "lock": { "message": "Uzamknúť", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Kôš", @@ -1958,7 +2022,7 @@ "message": "Odhlásenie bude vyžadovať online prihlásenie po vypršaní časového limitu. Naozaj chcete použiť toto nastavenie?" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Potvrdenie akcie pre vypršaný časový limit" + "message": "Potvrdenie akcie pri vypršaní časového limitu" }, "autoFillAndSave": { "message": "Auto-vyplniť a Uložiť" @@ -2072,7 +2136,7 @@ "message": "Zásady ochrany osobných údajov" }, "hintEqualsPassword": { - "message": "Nápoveda pre heslo nemôže byť rovnaká ako heslo." + "message": "Nápoveď k heslu nemôže byť rovnaká ako heslo." }, "ok": { "message": "Ok" @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Nezhoda účtu" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Odomknutie biometrickými údajmi zlyhalo. Tajný kľúč biometrických údajov nedokázal odomknúť trezor. Skúste biometrické údaje nastaviť znova." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Kľúč biometrických údajov sa nezhoduje" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Odomknutie biometrickými údajmi zlyhalo. Tajný kľúč biometrických údajov nedokázal odomknúť trezor. Skúste biometrické údaje nastaviť znova." + }, "biometricsNotEnabledTitle": { "message": "Biometria nie je povolená" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Uložené zmeny vylúčenej domény" }, + "limitSendViews": { + "message": "Obmedziť zobrazenia" + }, + "limitSendViewsHint": { + "message": "Po dosiahnutí limitu si tento Send nemôže nikto zobraziť.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Zostávajúci počet zobrazení: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Podrobnosti o Sende", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Hľadať Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text, ktorý chcete zdieľať" + }, "sendTypeFile": { "message": "Súbor" }, @@ -2232,6 +2320,9 @@ "message": "Všetky Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "V predvolenom nastavení skryť text" + }, "maxAccessCountReached": { "message": "Bol dosiahnutý maximálny počet prístupov", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Send bude natrvalo odstránený v zadaný dátum a čas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send bude natrvalo odstránený v tento deň.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Dátum exspirácie" }, @@ -2338,6 +2433,10 @@ "message": "Voliteľne môžete vyžadovať heslo pre používateľov na prístup k tomuto Sendu.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Na zobrazenie tohto Sendu vyžadovať toto heslo.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Zabezpečená poznámka o tomto Sende.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Skryť moju emailovú adresu pred príjemcami." }, + "hideYourEmail": { + "message": "Skryť moju e-mailovú adresu pri zobrazení." + }, "sendOptionsPolicyInEffect": { "message": "Jedno alebo viac pravidiel organizácie ovplyvňujú vaše možnosti funkcie Send." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minúty" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Na možnosti pri vypršaní časového limitu boli uplatnené požiadavky pravidiel spoločnosti" + }, "vaultTimeoutPolicyInEffect": { "message": "Zásady vašej organizácie ovplyvňujú časový limit trezoru. Maximálny povolený časový limit trezoru je $HOURS$ h a $MINUTES$ m", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Maximálne $HOURS$ hod. a $MINUTES$ min.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Časový limit prekračuje obmedzenie nastavené vašou organizáciou: maximálne $HOURS$ hod. a $MINUTES$ min.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Zásady vašej organizácie ovplyvňujú časový limit trezoru. Maximálny povolený časový limit trezoru je $HOURS$ h a $MINUTES$ min. Nastavenie akcie pri vypršaní časového limitu je $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Na toto nastavenie boli uplatnené požiadavky pravidiel spoločnosti" }, + "retry": { + "message": "Znova" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimálny vlastný časový limit je 1 minúta." + }, + "additionalContentAvailable": { + "message": "K dispozícii je ďalší obsah" + }, "fileSavedToDevice": { "message": "Súbor sa uložil do zariadenia. Spravujte stiahnuté súbory zo zariadenia." }, diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index a9665d631af..11205385d2b 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Samodejno izpolnjevanje" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Dodaj element" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Namig za geslo" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Išči v trezorju" }, @@ -504,6 +535,9 @@ "notes": { "message": "Opombe" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Opomba" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Zakleni trezor, ko preteče toliko časa:" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Zakleni zdaj" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Avtentikacija v dveh korakih dodatno varuje vaš račun, saj zahteva, da vsakokratno prijavo potrdite z drugo napravo, kot je varnostni ključ, aplikacija za preverjanje pristnosti, SMS, telefonski klic ali e-pošta. Avtentikacijo v dveh korakih lahko omogočite v spletnem trezorju bitwarden.com. Ali želite spletno stran obiskati sedaj?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Mapa shranjena" }, @@ -892,7 +938,7 @@ "message": "Na strani Zavihek prikaži kartice za lažje samodejno izpoljnjevanje." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Prikaži identitete na strani Zavihek" @@ -1097,6 +1143,9 @@ "file": { "message": "Datoteka" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Izberite datoteko." }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Odkleni s PIN-kodo" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Za odklep Bitwardna si nastavite PIN-kodo. PIN-koda bo ponastavljena, če se boste popolnoma odjavili iz aplikacije." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Potrebna je PIN-koda." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Zakleni z glavnim geslom ob ponovnem zagonu brskalnika" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Izbrati morate vsaj eno zbirko." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Dejanje ob poteku roka" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Zaklepanje", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Koš", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Pošiljke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Išči pošiljke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Besedilo" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Datoteka" }, @@ -2232,6 +2320,9 @@ "message": "Vse pošiljke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Pošiljka bo trajno izbrisana ob izbranem času.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Datum poteka" }, @@ -2338,6 +2433,10 @@ "message": "Za dostop do te pošiljke lahko nastavite geslo.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Zasebni zapiski o tej pošiljki.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Skrij moj e-naslov pred prejemniki." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Nekatere nastavitve organizacije vplivajo na možnosti, ki jih imate v zvezi s pošiljkami." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minut" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index c9d37830153..f36038e0518 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Копирај број лиценце" }, + "copyCustomField": { + "message": "Копирати $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Копирати вебсајт" + }, + "copyNotes": { + "message": "Копирати белешке" + }, "autoFill": { "message": "Аутоматско допуњавање" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Додај ставку" }, + "accountEmail": { + "message": "Имејл налога" + }, + "requestHint": { + "message": "Захтевај савет" + }, + "requestPasswordHint": { + "message": "Затражити савет лозинке" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Унесите имејл свог налога и биће вам послат савет за лозинку" + }, "passwordHint": { "message": "Савет лозинке" }, @@ -462,6 +489,10 @@ "message": "Избегавај двосмислене карактере", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Претражи сеф" }, @@ -504,6 +535,9 @@ "notes": { "message": "Белешке" }, + "privateNote": { + "message": "Приватна белешка" + }, "note": { "message": "Белешка" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Истек сесије" }, + "vaultTimeoutHeader": { + "message": "Тајмаут сефа" + }, "otherOptions": { "message": "Остале опције" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Тајмаут сефа" }, + "vaultTimeout1": { + "message": "Тајмаут" + }, "lockNow": { "message": "Закључај одмах" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Пријава у два корака чини ваш налог сигурнијим захтевом да верификујете своје податке помоћу другог уређаја, као што су безбедносни кључ, апликација, СМС-а, телефонски позив или имејл. Пријављивање у два корака може се омогућити на веб сефу. Да ли желите да посетите веб страницу сада?" }, + "twoStepLoginConfirmationContent": { + "message": "Учините свој налог сигурнијим подешавањем пријаве у два корака у Bitwarden веб апликацији." + }, + "twoStepLoginConfirmationTitle": { + "message": "Ићи на веб апликацију?" + }, "editedFolder": { "message": "Фасцикла измењена" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Датотека" }, + "fileToShare": { + "message": "Датотека за дељење" + }, "selectFile": { "message": "Изабери датотеку." }, @@ -1797,13 +1846,13 @@ "message": "Нема лозинки у листи." }, "clearHistory": { - "message": "Clear history" + "message": "Обриши историју" }, "noPasswordsToShow": { - "message": "No passwords to show" + "message": "Нема лозинке за приказ" }, "noRecentlyGeneratedPassword": { - "message": "You haven't generated a password recently" + "message": "Нисте недавно генерисали лозинку" }, "remove": { "message": "Уклони" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Откључај са ПИН" }, + "setYourPinTitle": { + "message": "Поставите PIN" + }, + "setYourPinButton": { + "message": "Поставите PIN" + }, "setYourPinCode": { "message": "Поставите свој ПИН код за откључавање Bitwarden-а. Поставке ПИН-а ће се ресетовати ако се икада потпуно одјавите из апликације." }, + "setYourPinCode1": { + "message": "Ваш ПИН ће се користити за откључавање Bitwarden-а уместо ваше главне лозинке. Ваш ПИН ће се ресетовати ако се икада потпуно одјавите са Bitwarden-а." + }, "pinRequired": { "message": "ПИН је обавезан." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Закључајте са главном лозинком при поновном покретању прегледача" }, + "lockWithMasterPassOnRestart1": { + "message": "Потражити главну лозинку при поновном покретању прегледача" + }, "selectOneCollection": { "message": "Морате одабрати макар једну колекцију." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Акција на тајмаут сефа" }, + "vaultTimeoutAction1": { + "message": "Акција тајмаута" + }, "lock": { "message": "Закључај", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Отпад", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Неподударање налога" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Биометријско откључавање није успело. Биометријски тајни кључ није успео да откључа сеф. Покушајте поново да подесите биометрију." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Неподударање биометријског кључа" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Биометријско откључавање није успело. Биометријски тајни кључ није успео да откључа сеф. Покушајте поново да подесите биометрију." + }, "biometricsNotEnabledTitle": { "message": "Биометрија није омогућена" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Изузете промене домена су сачуване" }, + "limitSendViews": { + "message": "Ограничити приказе" + }, + "limitSendViewsHint": { + "message": "Нико не може да види ово Send након што се достигне ограничење.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Осталих прегледа: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Детаљи Send-а", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Тражи „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Текст" }, + "sendTypeTextToShare": { + "message": "Текст за дељење" + }, "sendTypeFile": { "message": "Датотека" }, @@ -2232,6 +2320,9 @@ "message": "Све „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Сакриј текст подразумевано" + }, "maxAccessCountReached": { "message": "Достигнут максималан број приступа", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "„Send“ ће бити трајно избрисан наведеног датума и времена.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Send ће бити трајно обрисано у наведени датум.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Рок употребе" }, @@ -2338,6 +2433,10 @@ "message": "Опционално захтевајте лозинку за приступ корисницима „Send“-у.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Захтева ову лозинку за преглед Send-а.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Приватне белешке о овом „Send“.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Сакриј моју е-адресу од примаоца." }, + "hideYourEmail": { + "message": "Сакријте свој имејл од гледалаца." + }, "sendOptionsPolicyInEffect": { "message": "Једна или више смерница организације утичу на опције „Send“-а." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Минута" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Захтеви политике предузећа су примењени на опције тајмаута" + }, "vaultTimeoutPolicyInEffect": { "message": "Полиса ваше организације утиче на време истека сефа. Максимално дозвољено време истека је $HOURS$ сат(и) и $MINUTES$ minut(а)", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "Макимум $HOURS$ сат(а) и $MINUTES$ минут(а).", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Тајмаут је већи него што је решила организација: макимум $HOURS$ сат(а) и $MINUTES$ минут(а)", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Смернице ваше организације утичу на временско ограничење сефа. Максимално дозвољено ограничење сефа је $HOURS$ сат(и) и $MINUTES$ минут(а). Ваша радња временског ограничења сефа је подешена на $ACTION$.", "placeholders": { @@ -4309,14 +4440,23 @@ "enterprisePolicyRequirementsApplied": { "message": "Захтеви политике предузећа су примењени на ово подешавање" }, + "retry": { + "message": "Пробај поново" + }, + "vaultCustomTimeoutMinimum": { + "message": "Минимално прилагођено временско ограничење је 1 минут." + }, + "additionalContentAvailable": { + "message": "Додатни садржај је доступан" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, "showCharacterCount": { - "message": "Show character count" + "message": "Прикажи бројање слова" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Сакриј бројање слова" }, "itemsInTrash": { "message": "Ставке у смећу" diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 8f8d34f8bad..4f0a1cb1ffb 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Kopiera $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Kopiera webbplats" + }, + "copyNotes": { + "message": "Kopiera anteckningar" + }, "autoFill": { "message": "Fyll i automatiskt" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Lägg till objekt" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Begär ledtråd" + }, + "requestPasswordHint": { + "message": "Begär lösenordsledtråd" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Lösenordsledtråd" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Sök i valvet" }, @@ -504,6 +535,9 @@ "notes": { "message": "Anteckningar" }, + "privateNote": { + "message": "Privat anteckning" + }, "note": { "message": "Anteckning" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Andra alternativ" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Valvets tidsgräns" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lås nu" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Tvåstegsverifiering gör ditt konto säkrare genom att kräva att du verifierar din inloggning med en annan enhet, t.ex. en säkerhetsnyckel, autentiseringsapp, SMS, telefonsamtal eller e-post. Tvåstegsverifiering kan aktiveras i Bitwardens webbvalv. Vill du besöka webbplatsen nu?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Mapp sparad" }, @@ -892,7 +938,7 @@ "message": "Lista kortobjekt på fliksidan för enkel automatisk fyllning." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Visa identiteter på fliksidan" @@ -1097,6 +1143,9 @@ "file": { "message": "Fil" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Välj en fil" }, @@ -1131,7 +1180,7 @@ "message": "1 GB lagring av krypterade filer." }, "premiumSignUpEmergency": { - "message": "Nödåtkomst" + "message": "Nödåtkomst." }, "premiumSignUpTwoStepOptions": { "message": "Premium-alternativ för tvåstegsverifiering, såsom YubiKey och Duo." @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Lås upp med PIN-kod" }, + "setYourPinTitle": { + "message": "Ställ in PIN-kod" + }, + "setYourPinButton": { + "message": "Ställ in PIN-kod" + }, "setYourPinCode": { "message": "Ange en PIN-kod för att låsa upp Bitwarden. Dina PIN-inställningar återställs om du någonsin loggar ut helt från programmet." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN-kod krävs." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lås med huvudlösenordet vid omstart av webbläsaren" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Du måste markera minst en samling." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Åtgärd när valvets tidsgräns överskrids" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lås", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Papperskorg", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Kontoavvikelse" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometri är inte aktiverat" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Sök bland Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fil" }, @@ -2232,6 +2320,9 @@ "message": "Alla Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Det maximala antalet åtkomster har uppnåtts", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Denna Send kommer att raderas permanent på angivet datum och klockslag.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Utgångsdatum" }, @@ -2338,6 +2433,10 @@ "message": "Kräv valfritt ett lösenord för att användare ska komma åt denna Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Privata anteckningar om denna Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Dölj min e-postadress för mottagare." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "En eller flera organisationsriktlinjer påverkar dina Send-inställningar." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minuter" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Dina organisationsprinciper påverkar ditt valvs tid för timeout. Maximal tillåten tid innan timeout är $HOURS$ timmar och $MINUTES$ minuter", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -3273,7 +3404,7 @@ "description": "Screen reader text (aria-label) for new item button in overlay" }, "newLogin": { - "message": "New login", + "message": "Ny inloggning", "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { @@ -3281,7 +3412,7 @@ "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { - "message": "New card", + "message": "Nytt kort", "description": "Button text to display within inline menu when there are no matching items on a credit card field" }, "addNewCardItemAria": { @@ -3289,7 +3420,7 @@ "description": "Screen reader text (aria-label) for new card button within inline menu" }, "newIdentity": { - "message": "New identity", + "message": "Ny identitet", "description": "Button text to display within inline menu when there are no matching items on an identity field" }, "addNewIdentityItemAria": { @@ -3475,7 +3606,7 @@ "message": "Vault data exported" }, "typePasskey": { - "message": "Lösennyckel" + "message": "Nyckel" }, "passkeyNotCopied": { "message": "Lösennyckeln kommer inte kopieras" @@ -3487,7 +3618,7 @@ "message": "Verifiering krävs av den initierande webbplatsen. Denna funktion är ännu inte implementerad för konton utan huvudlösenord." }, "logInWithPasskeyQuestion": { - "message": "Log in with passkey?" + "message": "Logga in med nyckel?" }, "passkeyAlreadyExists": { "message": "En lösennyckel finns redan för detta program." @@ -3505,10 +3636,10 @@ "message": "Bekräfta" }, "savePasskey": { - "message": "Spara lösennyckel" + "message": "Spara nyckel" }, "savePasskeyNewLogin": { - "message": "Spara lösennyckel som ny inloggning" + "message": "Spara nyckel som ny inloggning" }, "chooseCipherForPasskeySave": { "message": "Choose a login to save this passkey to" @@ -3912,7 +4043,7 @@ "message": "Ytterligare information" }, "itemHistory": { - "message": "Item history" + "message": "Objekthistorik" }, "lastEdited": { "message": "Last edited" @@ -4080,7 +4211,7 @@ "message": "Data" }, "passkeys": { - "message": "Passkeys", + "message": "Nycklar", "description": "A section header for a list of passkeys." }, "passwords": { @@ -4088,7 +4219,7 @@ "description": "A section header for a list of passwords." }, "logInWithPasskeyAriaLabel": { - "message": "Log in with passkey", + "message": "Logga in med nyckel", "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { @@ -4304,11 +4435,20 @@ "message": "Show number of login autofill suggestions on extension icon" }, "systemDefault": { - "message": "System default" + "message": "Systemstandard" }, "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Försök igen" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 338d70eaf58..8eae45e6b38 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Autofill" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Add item" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Password hint" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Search vault" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Vault timeout" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock now" }, @@ -789,6 +829,12 @@ "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 set up on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Folder saved" }, @@ -892,7 +938,7 @@ "message": "List card items on the Tab page for easy autofill." }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "Show identities on Tab page" @@ -1097,6 +1143,9 @@ "file": { "message": "File" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Select a file" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Unlock with PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set 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." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "PIN code is required." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Lock with master password on browser restart" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "You must select at least one collection." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Vault timeout action" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Lock", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Trash", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Search Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Text" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, @@ -2232,6 +2320,9 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index 0edcb1c9f81..baa8babb5ef 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "กรอกข้อมูลอัตโนมัติ" }, @@ -179,6 +194,18 @@ "addItem": { "message": "เพิ่มรายการ" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "คำใบ้รหัสผ่าน" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "ค้นหาในตู้นิรภัย" }, @@ -504,6 +535,9 @@ "notes": { "message": "โน้ต" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "โน้ต" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "ระยะเวลาล็อกตู้เซฟ" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Lock Now" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Two-step login makes your account more secure by requiring you to enter a security code from an authenticator app whenever you log in. Two-step login can be enabled on the bitwarden.com web vault. Do you want to visit the website now?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Edited Folder" }, @@ -892,7 +938,7 @@ "message": "บัตรรายการในหน้าแท็บเพื่อให้ป้อนอัตโนมัติได้ง่าย" }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "แสดงตัวตนบนหน้าแท็บ" @@ -1097,6 +1143,9 @@ "file": { "message": "ไฟล์" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "เลือกไฟล์" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "ปลดล็อกด้วย PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "ตั้ง PIN เพื่อใช้ปลดล็อก Bitwarden ทั้งนี้ หากคุณล็อกเอาต์ออกจากแอปโดยสมบูรณ์จะเป็นการลบการตั้งค่า PIN ของคุณด้วย" }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "ต้องระบุ PIN" }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "ล็อคด้วยรหัสผ่านหลักเมื่อรีสตาร์ทเบราว์เซอร์" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "คุณต้องเลือกอย่างน้อยหนึ่งคอลเลกชัน" }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "การดำเนินการหลังหมดเวลาล็อคตู้เซฟ" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "ล็อก", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "ถังขยะ", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Account missmatch" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Biometrics not set up" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "ค้นหาใน Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "ข้อความ" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ไฟล์" }, @@ -2232,6 +2320,9 @@ "message": "Send ทั้งหมด", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Max access count reached", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "The Send will be permanently deleted on the specified date and time.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Expiration date" }, @@ -2338,6 +2433,10 @@ "message": "Optionally require a password for users to access this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Private notes about this Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Hide my email address from recipients." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "One or more organization policies are affecting your Send options." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Minutes" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 02f67a672bc..55286fccc93 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Ruhsat numarasını kopyala" }, + "copyCustomField": { + "message": "$FIELD$ alanını kopyala", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Web sitesini kopyala" + }, + "copyNotes": { + "message": "Notları kopyala" + }, "autoFill": { "message": "Otomatik doldur" }, @@ -171,7 +186,7 @@ "message": "Kasanıza giriş yapın" }, "autoFillInfo": { - "message": "Mevcut sekme için otomatik doldurulacak giriş bilgisi bulunmuyor." + "message": "Mevcut sekme için otomatik doldurulabilecek hesap yok." }, "addLogin": { "message": "Hesap ekle" @@ -179,6 +194,18 @@ "addItem": { "message": "Kayıt ekle" }, + "accountEmail": { + "message": "Hesap e-posta adresi" + }, + "requestHint": { + "message": "İpucunu iste" + }, + "requestPasswordHint": { + "message": "Parola ipucunu iste" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Hesabınızın e-posta adresini girdiğinizde parola ipucunuz size gönderilecektir" + }, "passwordHint": { "message": "Parola ipucu" }, @@ -462,6 +489,10 @@ "message": "Okurken karışabilecek karakterleri kullanma", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Kasada ara" }, @@ -504,6 +535,9 @@ "notes": { "message": "Notlar" }, + "privateNote": { + "message": "Özel not" + }, "note": { "message": "Not" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Oturum zaman aşımı" }, + "vaultTimeoutHeader": { + "message": "Kasa zaman aşımı" + }, "otherOptions": { "message": "Diğer seçenekler" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Kasa zaman aşımı" }, + "vaultTimeout1": { + "message": "Zaman aşımı" + }, "lockNow": { "message": "Şimdi kilitle" }, @@ -718,7 +758,7 @@ } }, "autofillError": { - "message": "Seçilen hesap bu sayfada otomatik olarak doldurulamadı. Lütfen bilgileri elle kopyalayıp yapıştırın." + "message": "Seçilen kayıt bu sayfada otomatik olarak doldurulamadı. Lütfen bilgileri elle kopyalayıp yapıştırın." }, "totpCaptureError": { "message": "Mevcut web sayfasındaki QR kodu taranamıyor" @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "İki aşamalı giriş, hesabınıza girererken işlemi bir güvenlik anahtarı, şifrematik uygulaması, SMS, telefon araması veya e-posta gibi ek bir yöntemle doğrulamanızı isteyerek hesabınızın güvenliğini artırır. İki aşamalı giriş özelliğini bitwarden.com web kasası üzerinden etkinleştirebilirsiniz. Şimdi siteye gitmek ister misiniz?" }, + "twoStepLoginConfirmationContent": { + "message": "Bitwarden web uygulamasında iki aşamalı girişi ayarlayarak hesabınızın güvenliğini artırabilirsiniz." + }, + "twoStepLoginConfirmationTitle": { + "message": "Web uygulamasına devam edilsin mi?" + }, "editedFolder": { "message": "Klasör kaydedildi" }, @@ -889,7 +935,7 @@ "message": "Sekme sayfasında kartları göster" }, "showCardsCurrentTabDesc": { - "message": "Kolay otomatik doldurma için sekme sayfasında kart öğelerini listele" + "message": "Kolay otomatik doldurma için sekme sayfasında kartları listele." }, "showIdentitiesInVaultView": { "message": "Kasa görünümünde kimlikleri otomatik doldurma önerisi olarak göster" @@ -898,7 +944,7 @@ "message": "Sekme sayfasında kimlikleri göster" }, "showIdentitiesCurrentTabDesc": { - "message": "Kolay otomatik doldurma için sekme sayfasında kimlik öğelerini listele" + "message": "Kolay otomatik doldurma için sekme sayfasında kimlikleri listele." }, "clearClipboard": { "message": "Panoyu temizle", @@ -1097,6 +1143,9 @@ "file": { "message": "Dosya" }, + "fileToShare": { + "message": "Paylaşılacak dosya" + }, "selectFile": { "message": "Bir dosya seçin" }, @@ -1131,7 +1180,7 @@ "message": "Dosya ekleri için 1 GB şifrelenmiş depolama." }, "premiumSignUpEmergency": { - "message": "Acil durum erişimi" + "message": "Acil durum erişimi." }, "premiumSignUpTwoStepOptions": { "message": "YubiKey ve Duo gibi marka bazlı iki aşamalı giriş seçenekleri." @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Kilidi PIN koduyla aç" }, + "setYourPinTitle": { + "message": "PIN belirle" + }, + "setYourPinButton": { + "message": "PIN belirle" + }, "setYourPinCode": { "message": "Bitwarden'ı açarken kullanacağınız PIN kodunu belirleyin. Uygulamadan tamamen çıkış yaparsanız PIN ayarlarınız sıfırlanacaktır." }, + "setYourPinCode1": { + "message": "Bitwarden'ın kilidini açmak için ana parolanız yerine PIN'iniz kullanılacaktır. Bitwarden'dan tamamen çıkış yaparsanız PIN'iniz sıfırlanır." + }, "pinRequired": { "message": "PIN kodu gerekli." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Tarayıcı yeniden başlatıldığında ana parola ile kilitle" }, + "lockWithMasterPassOnRestart1": { + "message": "Tarayıcı yeniden başlatıldığında ana parolayı sor" + }, "selectOneCollection": { "message": "En az bir koleksiyon seçmelisiniz." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Kasa zaman aşımı eylemi" }, + "vaultTimeoutAction1": { + "message": "Zaman aşımı eylemi" + }, "lock": { "message": "Kilitle", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Çöp kutusu", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Hesap uyuşmazlığı" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biyometrik kilit açma başarısız oldu. Biyometrik gizli anahtarınız kasanın kilidini açamadı. Lütfen biyometriyi yeniden ayarlamayı deneyin." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biyometrik anahtar eşleşmedi" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biyometrik kilit açma başarısız oldu. Biyometrik gizli anahtarınız kasanın kilidini açamadı. Lütfen biyometriyi yeniden ayarlamayı deneyin." + }, "biometricsNotEnabledTitle": { "message": "Biyometri ayarlanmamış" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Alan adı istisnası değişiklikleri kaydedildi" }, + "limitSendViews": { + "message": "Gösterimi sınırla" + }, + "limitSendViewsHint": { + "message": "Bu sınıra ulaşıldıktan sonra bu Send'i kimse göremez.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ gösterim kaldı", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send ayrıntıları", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Send'lerde ara", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Metin" }, + "sendTypeTextToShare": { + "message": "Paylaşılacak metin" + }, "sendTypeFile": { "message": "Dosya" }, @@ -2232,6 +2320,9 @@ "message": "Tüm Send'ler", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Metni varsayılan olarak gizle" + }, "maxAccessCountReached": { "message": "Maksimum erişim sayısına ulaşıldı", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Bu Send belirtilen tarih ve saatte kalıcı olacak silinecek.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Bu Send belirtilen tarihte kalıcı olacak silinecek.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Son kullanma tarihi" }, @@ -2338,6 +2433,10 @@ "message": "Kullanıcıların bu Send'e erişmek için parola girmelerini isteyebilirsiniz.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Send'i görüntülemek için bu parolayı iste.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Bu Send ile ilgili özel notlar.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "E-posta adresimi alıcılardan gizle." }, + "hideYourEmail": { + "message": "E-posta adresimi Send'i görüntüleyenlerden gizle." + }, "sendOptionsPolicyInEffect": { "message": "Bir veya daha fazla kuruluş ilkesi Send seçeneklerinizi etkiliyor." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Dakika" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Zaman aşımı ayarlarınıza kurumsal ilke gereksinimleri uygulandı" + }, "vaultTimeoutPolicyInEffect": { "message": "Kuruluş ilkeleriniz izin verilen maksimum kasa zaman aşımını $HOURS$ saat $MINUTES$ dakika olarak belirlemiş.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "En fazla $HOURS$ saat $MINUTES$ dakika.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Zaman aşımınız kuruluşunuzun belirlediği maksimum süreyi aşıyor: Maksimum $HOURS$ saat $MINUTES$ dakika", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Kuruluş ilkeleriniz kasa zaman aşımınızı etkiliyor. İzin verilen maksimum kasa zaman aşımı $HOURS$ saat $MINUTES$ dakikadır. Kasa zaman aşımı eyleminiz $ACTION$ olarak ayarlanmış.", "placeholders": { @@ -4029,7 +4160,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "$WEBSITE$ eşleşme tespitini göster", "placeholders": { "website": { "content": "$1", @@ -4038,7 +4169,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "$WEBSITE$ eşleşme tespitini gizle", "placeholders": { "website": { "content": "$1", @@ -4125,13 +4256,13 @@ "message": "Alan etiketi" }, "textHelpText": { - "message": "Use text fields for data like security questions" + "message": "Güvenlik sorusu gibi veriler için metin alanlarını kullanın" }, "hiddenHelpText": { - "message": "Use hidden fields for sensitive data like a password" + "message": "Parola gibi hassas verileri için gizli alanları kullanın" }, "checkBoxHelpText": { - "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email" + "message": "Formlardaki onay kutularını (örn. \"e-posta adresimi hatırla\") otomatik doldurmak isterseniz onay kutularını kullanın" }, "linkedHelpText": { "message": "Use a linked field when you are experiencing autofill issues for a specific website." @@ -4152,7 +4283,7 @@ } }, "deleteCustomField": { - "message": "Delete $LABEL$", + "message": "$LABEL$ etiketini sil", "placeholders": { "label": { "content": "$1", @@ -4298,7 +4429,7 @@ "message": "Otomatik doldurma ve kasanızda arama yapma artık eskisinden daha kolay. Yeni tasarıma göz atmayı unutmayın!" }, "accountActions": { - "message": "Account actions" + "message": "Hesap işlemleri" }, "showNumberOfAutofillSuggestions": { "message": "Otomatik öneri sayısını uzantı simgesinde göster" @@ -4309,14 +4440,23 @@ "enterprisePolicyRequirementsApplied": { "message": "Bu ayara kurumsal ilke gereksinimleri uygulandı" }, + "retry": { + "message": "Yeniden dene" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum özel zaman aşımı 1 dakikadır." + }, + "additionalContentAvailable": { + "message": "Ek içerikler mevcut" + }, "fileSavedToDevice": { "message": "Dosya cihaza kaydedildi. Cihazınızın indirilenler klasöründen yönetebilirsiniz." }, "showCharacterCount": { - "message": "Show character count" + "message": "Karakter sayacını göster" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Karakter sayacını gizle" }, "itemsInTrash": { "message": "Çöp kutusundaki kayıtlar" diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index eb7affa78c7..e063af8c7fa 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Копіювати номер ліцензії" }, + "copyCustomField": { + "message": "Копіювати $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Копіювати вебсайт" + }, + "copyNotes": { + "message": "Копіювати нотатки" + }, "autoFill": { "message": "Автозаповнення" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Додати запис" }, + "accountEmail": { + "message": "Е-пошта облікового запису" + }, + "requestHint": { + "message": "Підказка для запиту" + }, + "requestPasswordHint": { + "message": "Підказка для запиту пароля" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Введіть адресу е-пошти свого облікового запису і вам буде надіслано підказку для пароля" + }, "passwordHint": { "message": "Підказка для пароля" }, @@ -462,6 +489,10 @@ "message": "Уникати неоднозначних символів", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Пошук" }, @@ -504,6 +535,9 @@ "notes": { "message": "Нотатки" }, + "privateNote": { + "message": "Приватна нотатка" + }, "note": { "message": "Нотатка" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Час очікування сеансу" }, + "vaultTimeoutHeader": { + "message": "Час очікування сховища" + }, "otherOptions": { "message": "Інші налаштування" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Час очікування сховища" }, + "vaultTimeout1": { + "message": "Час очікування" + }, "lockNow": { "message": "Блокувати зараз" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Двоетапна перевірка дає змогу надійніше захистити ваш обліковий запис, вимагаючи підтвердження входу з використанням іншого пристрою, наприклад, за допомогою ключа безпеки, програми автентифікації, SMS, телефонного виклику, або е-пошти. Ви можете налаштувати двоетапну перевірку в сховищі на bitwarden.com. Хочете перейти на вебсайт зараз?" }, + "twoStepLoginConfirmationContent": { + "message": "Додайте вищий рівень захисту облікового запису, налаштувавши двоетапну перевірку у вебпрограмі Bitwarden." + }, + "twoStepLoginConfirmationTitle": { + "message": "Продовжити у вебпрограмі?" + }, "editedFolder": { "message": "Теку збережено" }, @@ -892,7 +938,7 @@ "message": "Показувати список карток на сторінці вкладки для легкого автозаповнення." }, "showIdentitiesInVaultView": { - "message": "Показувати особисті дані як пропозиції автозаповнення в режимі перегляду сховища" + "message": "Показувати посвідчення як пропозиції автозаповнення в режимі перегляду сховища" }, "showIdentitiesCurrentTab": { "message": "Показувати посвідчення на вкладці" @@ -1097,6 +1143,9 @@ "file": { "message": "Файл" }, + "fileToShare": { + "message": "Файл для поширення" + }, "selectFile": { "message": "Оберіть файл" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Розблокування з PIN-кодом" }, + "setYourPinTitle": { + "message": "Встановлення PIN-коду" + }, + "setYourPinButton": { + "message": "Встановити PIN-код" + }, "setYourPinCode": { "message": "Встановіть PIN-код для розблокування Bitwarden. Налаштування PIN-коду будуть скинуті, якщо ви коли-небудь повністю вийдете з програми." }, + "setYourPinCode1": { + "message": "PIN-код буде використовуватися для розблокування Bitwarden замість головного пароля. У разі повного виходу з Bitwarden, ваш PIN-код буде скинуто." + }, "pinRequired": { "message": "Необхідний PIN-код." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Блокувати головним паролем при перезапуску браузера" }, + "lockWithMasterPassOnRestart1": { + "message": "Вимагати головний пароль після перезапуску браузера" + }, "selectOneCollection": { "message": "Необхідно вибрати принаймні одну збірку." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Дія після часу очікування сховища" }, + "vaultTimeoutAction1": { + "message": "Дія після часу очікування" + }, "lock": { "message": "Блокувати", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Смітник", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Невідповідність облікових записів" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Збій біометричного розблокування. Біометричний секретний ключ не зміг розблокувати сховище. Спробуйте налаштувати біометрію знову." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Біометричний ключ відрізняється" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Збій біометричного розблокування. Біометричний секретний ключ не зміг розблокувати сховище. Спробуйте налаштувати біометрію знову." + }, "biometricsNotEnabledTitle": { "message": "Біометрію не налаштовано" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Виняток для домену збережено" }, + "limitSendViews": { + "message": "Ліміт переглядів" + }, + "limitSendViewsHint": { + "message": "Ніхто не може переглянути це відправлення після досягнення ліміту.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Залишок переглядів: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Надіслати подробиці", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Шукати відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Текст" }, + "sendTypeTextToShare": { + "message": "Текст для поширення" + }, "sendTypeFile": { "message": "Файл" }, @@ -2232,6 +2320,9 @@ "message": "Усі відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Типово приховувати текст" + }, "maxAccessCountReached": { "message": "Досягнуто максимальної кількості доступів", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Відправлення буде остаточно видалено у вказаний час.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "Відправлення буде остаточно видалено у вказану дату.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Дата завершення" }, @@ -2338,6 +2433,10 @@ "message": "Ви можете встановити пароль для доступу до цього відправлення.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Вимагати цей пароль для перегляду відправлення.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Особисті нотатки про це відправлення.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Приховувати мою адресу електронної пошти від отримувачів." }, + "hideYourEmail": { + "message": "Приховати адресу е-пошти від отримувачів." + }, "sendOptionsPolicyInEffect": { "message": "На параметри відправлень впливають одна чи декілька політик організації." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Хвилин" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "До налаштувань часу очікування застосовано вимоги політики компанії" + }, "vaultTimeoutPolicyInEffect": { "message": "Політикою вашої організації встановлено максимальний дозволений час очікування сховища $HOURS$ годин, $MINUTES$ хвилин.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ год і $MINUTES$ хв максимум.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Час очікування перевищує обмеження, встановлене вашою організацією: $HOURS$ год і $MINUTES$ хв максимум", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Політики вашої організації впливають на час очікування сховища. Максимальний дозволений час очікування сховища $HOURS$ годин, $MINUTES$ хвилин. Для часу очікування вашого сховища встановлена дія $ACTION$.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "До цього налаштування застосовано вимоги політики компанії" }, + "retry": { + "message": "Повторити спробу" + }, + "vaultCustomTimeoutMinimum": { + "message": "Мінімальний власний час очікування – 1 хвилина." + }, + "additionalContentAvailable": { + "message": "Доступний додатковий вміст" + }, "fileSavedToDevice": { "message": "Файл збережено на пристрої. Ви можете його знайти у теці завантажень." }, diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 1b059e1b9cc..363065e4429 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Sao chép số giấy phép" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "Tự động điền" }, @@ -179,6 +194,18 @@ "addItem": { "message": "Thêm mục" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "Gợi ý mật khẩu" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "Tìm kiếm trong kho lưu trữ" }, @@ -504,6 +535,9 @@ "notes": { "message": "Ghi chú" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Ghi chú" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Thời gian chờ của phiên" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Tùy chọn khác" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "Thời gian chờ của kho" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "Khóa ngay" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "Xác thực hai lớp giúp cho tài khoản của bạn an toàn hơn bằng cách yêu cầu bạn xác minh thông tin đăng nhập của bạn bằng một thiết bị khác như khóa bảo mật, ứng dụng xác thực, SMS, cuộc gọi điện thoại hoặc email. Bạn có thể bật xác thực hai lớp trong kho bitwarden nền web. Bạn có muốn ghé thăm trang web bây giờ?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "Đã lưu thư mục" }, @@ -1097,6 +1143,9 @@ "file": { "message": "Tập tin" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "Chọn tập tin" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "Mở khóa bằng mã PIN" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "Đặt mã PIN của bạn để mở khóa Bitwarden. Cài đặt mã PIN của bạn sẽ bị xóa nếu bạn hoàn toàn đăng xuất khỏi ứng dụng." }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "Mã PIN là bắt buộc." }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "Khóa với mật khẩu chính khi trình duyệt khởi động lại" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "Bạn phải chọn ít nhất một bộ sưu tập." }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "Hành động khi hết thời gian chờ của kho lưu trữ" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "Khóa", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "Thùng rác", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "Tài khoản không đúng" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "Sinh trắc học chưa được cài đặt" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Các thay đổi tên miền loại trừ đã được lưu" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Gửi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "Tìm kiếm mục Gửi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "Văn bản" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Tập tin" }, @@ -2232,6 +2320,9 @@ "message": "Tất cả mục Gửi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "Đã vượt số lần truy cập tối đa", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "Mục Gửi sẽ được xóa vĩnh viễn vào ngày và giờ chỉ định.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "Ngày hết hạn" }, @@ -2338,6 +2433,10 @@ "message": "Yêu cầu nhập mật khẩu khi người dùng truy cập vào phần Gửi này.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "Ghi chú riêng tư về Send này.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "Ẩn địa chỉ email của tôi khỏi người nhận." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "Các chính sách của tổ chức đang ảnh hưởng đến tùy chọn Gửi của bạn." }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "Phút" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { "message": "Tổ chức của bạn đã đặt thời gian mở kho tối đa là $HOURS$ giờ và $MINUTES$ phút.", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "Tổ chức của bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa là $HOURS$ giờ và $MINUTES$ phút. Kho sẽ $ACTION$ sau khi hết thời gian mở kho.", "placeholders": { @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 04db7f8f6ec..e86e14c1a6a 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "复制许可证号码" }, + "copyCustomField": { + "message": "复制 $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "复制网站" + }, + "copyNotes": { + "message": "复制备注" + }, "autoFill": { "message": "自动填充" }, @@ -179,6 +194,18 @@ "addItem": { "message": "添加项目" }, + "accountEmail": { + "message": "账户邮件地址" + }, + "requestHint": { + "message": "请求提示" + }, + "requestPasswordHint": { + "message": "请求密码提示" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "输入您的账户电子邮件地址,您的密码提示将发送给您" + }, "passwordHint": { "message": "密码提示" }, @@ -462,6 +489,10 @@ "message": "避免易混淆的字符", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "搜索密码库" }, @@ -504,6 +535,9 @@ "notes": { "message": "备注" }, + "privateNote": { + "message": "私密备注" + }, "note": { "message": "备注" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "会话超时" }, + "vaultTimeoutHeader": { + "message": "密码库超时时间" + }, "otherOptions": { "message": "其他选项" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "密码库超时时间" }, + "vaultTimeout1": { + "message": "超时" + }, "lockNow": { "message": "立即锁定" }, @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "两步登录要求您从其他设备(例如安全钥匙、验证器 App、短信、电话或者电子邮件)来验证您的登录,这能使您的账户更加安全。两步登录需要在 bitwarden.com 网页版密码库中设置。现在访问此网站吗?" }, + "twoStepLoginConfirmationContent": { + "message": "通过在 Bitwarden 网页 App 中设置两步登录,可以使您的账户更加安全。" + }, + "twoStepLoginConfirmationTitle": { + "message": "前往网页 App 吗?" + }, "editedFolder": { "message": "文件夹已保存" }, @@ -1097,6 +1143,9 @@ "file": { "message": "文件" }, + "fileToShare": { + "message": "要分享的文件" + }, "selectFile": { "message": "选择一个文件" }, @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "使用 PIN 码解锁" }, + "setYourPinTitle": { + "message": "设置 PIN 码" + }, + "setYourPinButton": { + "message": "设置 PIN 码" + }, "setYourPinCode": { "message": "设定您用来解锁 Bitwarden 的 PIN 码。您的 PIN 设置将在您完全注销此应用程序时被重置。" }, + "setYourPinCode1": { + "message": "您的 PIN 码将代替主密码用于解锁 Bitwarden。如果您完全注销 Bitwarden,PIN 码将被重置。" + }, "pinRequired": { "message": "需要 PIN 码。" }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "浏览器重启后使用主密码锁定" }, + "lockWithMasterPassOnRestart1": { + "message": "浏览器重启时需要主密码" + }, "selectOneCollection": { "message": "您必须至少选择一个集合。" }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "密码库超时动作" }, + "vaultTimeoutAction1": { + "message": "超时动作" + }, "lock": { "message": "锁定", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "回收站", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "账户不匹配" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "生物识别解锁失败。生物识别安全钥匙解锁密码库失败。请尝试重新设置生物识别。" - }, "nativeMessagingWrongUserKeyTitle": { "message": "生物识别密钥不匹配" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "生物识别解锁失败。生物识别安全钥匙解锁密码库失败。请尝试重新设置生物识别。" + }, "biometricsNotEnabledTitle": { "message": "生物识别未设置" }, @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "排除域名更改已保存" }, + "limitSendViews": { + "message": "限制查看" + }, + "limitSendViewsHint": { + "message": "在达到限额后,任何人无法查看此 Send。", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "剩余 $ACCESSCOUNT$ 次查看次数", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send 详细信息", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "搜索 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "文本" }, + "sendTypeTextToShare": { + "message": "要分享的文本" + }, "sendTypeFile": { "message": "文件" }, @@ -2232,6 +2320,9 @@ "message": "所有 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "默认隐藏文本" + }, "maxAccessCountReached": { "message": "已达最大访问次数", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "此 Send 将在指定的日期和时间后被永久删除。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "此 Send 将在此日期后被永久删除。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "过期日期" }, @@ -2338,6 +2433,10 @@ "message": "可选,用户需要提供密码才能访问此 Send。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "需要此密码才能查看此 Send。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "关于此 Send 的私密备注。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "对收件人隐藏我的电子邮件地址。" }, + "hideYourEmail": { + "message": "对查看者隐藏您的电子邮件地址。" + }, "sendOptionsPolicyInEffect": { "message": "一个或多个组织策略正在影响您的 Send 选项。" }, @@ -2510,6 +2612,9 @@ "minutes": { "message": "分钟" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "企业策略要求已应用到您的超时选项" + }, "vaultTimeoutPolicyInEffect": { "message": "您的组织策略已将您最大允许的密码库超时时间设置为 $HOURS$ 小时 $MINUTES$ 分钟。", "placeholders": { @@ -2523,6 +2628,32 @@ } } }, + "vaultTimeoutPolicyInEffect1": { + "message": "最多 $HOURS$ 小时 $MINUTES$ 分钟", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "超时时间超出了您组织设置的此限制:最多 $HOURS$ 小时 $MINUTES$ 分钟", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, "vaultTimeoutPolicyWithActionInEffect": { "message": "您的组织策略正在影响您的密码库超时时间。最大允许的密码库超时时间是 $HOURS$ 小时 $MINUTES$ 分钟。您的密码库超时动作被设置为 $ACTION$。", "placeholders": { @@ -3881,7 +4012,7 @@ "message": "无文件夹的项目" }, "itemDetails": { - "message": "项目详情" + "message": "项目详细信息" }, "itemName": { "message": "项目名称" @@ -3966,7 +4097,7 @@ "message": "筛选" }, "personalDetails": { - "message": "个人信息" + "message": "个人详细信息" }, "identification": { "message": "身份" @@ -4056,10 +4187,10 @@ "message": "如果您的支付卡已续期,请更新该卡的信息。" }, "cardDetails": { - "message": "支付卡详情" + "message": "支付卡详细信息" }, "cardBrandDetails": { - "message": "$BRAND$ 详情", + "message": "$BRAND$ 详细信息", "placeholders": { "brand": { "content": "$1", @@ -4309,8 +4440,17 @@ "enterprisePolicyRequirementsApplied": { "message": "企业策略要求已应用于此设置" }, + "retry": { + "message": "重试" + }, + "vaultCustomTimeoutMinimum": { + "message": "自定义超时时间最小为 1 分钟。" + }, + "additionalContentAvailable": { + "message": "其他内容可用" + }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "文件已保存到设备。可以在设备下载中进行管理。" }, "showCharacterCount": { "message": "显示字符计数" diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index d61e831d738..49a407d51d5 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -3,11 +3,11 @@ "message": "Bitwarden" }, "extName": { - "message": "Bitwarden Password Manager", + "message": "Bitwarden - 免費密碼管理工具", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "At home, at work, or on the go, Bitwarden easily secures all your passwords, passkeys, and sensitive information", + "message": "Bitwarden 是一款安全、免費、跨平台的密碼管理工具。", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { @@ -128,6 +128,21 @@ "copyLicenseNumber": { "message": "Copy license number" }, + "copyCustomField": { + "message": "Copy $FIELD$", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "Copy website" + }, + "copyNotes": { + "message": "Copy notes" + }, "autoFill": { "message": "自動填入" }, @@ -171,7 +186,7 @@ "message": "登入您的密碼庫" }, "autoFillInfo": { - "message": "沒有可以自動填入目前瀏覽器分頁的登入資訊。" + "message": "沒有可以在目前瀏覽器分頁自動填入的登入資訊。" }, "addLogin": { "message": "新增登入資料" @@ -179,6 +194,18 @@ "addItem": { "message": "新增項目" }, + "accountEmail": { + "message": "Account email" + }, + "requestHint": { + "message": "Request hint" + }, + "requestPasswordHint": { + "message": "Request password hint" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "Enter your account email address and your password hint will be sent to you" + }, "passwordHint": { "message": "密碼提示" }, @@ -462,6 +489,10 @@ "message": "Avoid ambiguous characters", "description": "Label for the avoid ambiguous characters checkbox." }, + "generatorPolicyInEffect": { + "message": "Enterprise policy requirements have been applied to your generator options.", + "description": "Indicates that a policy limits the credential generator screen." + }, "searchVault": { "message": "搜尋密碼庫" }, @@ -504,6 +535,9 @@ "notes": { "message": "備註" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "備註" }, @@ -549,6 +583,9 @@ "sessionTimeoutHeader": { "message": "Session timeout" }, + "vaultTimeoutHeader": { + "message": "Vault timeout" + }, "otherOptions": { "message": "Other options" }, @@ -589,6 +626,9 @@ "vaultTimeout": { "message": "密碼庫逾時時間" }, + "vaultTimeout1": { + "message": "Timeout" + }, "lockNow": { "message": "立即鎖定" }, @@ -718,7 +758,7 @@ } }, "autofillError": { - "message": "無法在此頁面自動填入所選項目。請手動複製並貼上。" + "message": "無法在此頁面自動填入所選項目,請手動複製貼上。" }, "totpCaptureError": { "message": "無法掃描此網頁的二維碼" @@ -789,6 +829,12 @@ "twoStepLoginConfirmation": { "message": "兩步驟登入需要您從其他裝置(例如安全鑰匙、驗證器程式、SMS、手機或電子郵件)來驗證您的登入,這使您的帳戶更加安全。兩步驟登入可以在 bitwarden.com 網頁版密碼庫啟用。現在要前往嗎?" }, + "twoStepLoginConfirmationContent": { + "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + }, + "twoStepLoginConfirmationTitle": { + "message": "Continue to web app?" + }, "editedFolder": { "message": "資料夾已儲存" }, @@ -892,7 +938,7 @@ "message": "於分頁頁面顯示信用卡以便於自動填入。" }, "showIdentitiesInVaultView": { - "message": "Show identifies as Autofill suggestions on Vault view" + "message": "Show identities as Autofill suggestions on Vault view" }, "showIdentitiesCurrentTab": { "message": "於分頁頁面顯示身分" @@ -958,7 +1004,7 @@ "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "選擇在執行自動填入等動作時對登入資料進行 URI 一致性偵測的預設方式。" + "message": "選擇在執行自動填入等動作時,登入資訊的預設統一資源標識符(URI)比對方式。" }, "theme": { "message": "主題" @@ -1097,6 +1143,9 @@ "file": { "message": "檔案" }, + "fileToShare": { + "message": "File to share" + }, "selectFile": { "message": "選取檔案" }, @@ -1191,7 +1240,7 @@ "message": "自動複製 TOTP" }, "disableAutoTotpCopyDesc": { - "message": "若登入資料已包含驗證器金鑰,在自動填入此登入資料時,TOTP 驗證碼將複製至您的剪貼簿。" + "message": "若登入資訊已包含驗證器金鑰,在自動填入登入資訊時,也會同步為您複製 TOTP 驗證碼。" }, "enableAutoBiometricsPrompt": { "message": "啟動時要求生物特徵辨識" @@ -1397,7 +1446,7 @@ } }, "experimentalFeature": { - "message": "被入侵或不可信任的網站可不當利用頁面載入時的自動填入功能。" + "message": "被入侵或不被信任的網站,可能會濫用頁面載入的自動填入功能。" }, "learnMoreAboutAutofillOnPageLoadLinkText": { "message": "Learn more about risks" @@ -1412,7 +1461,7 @@ "message": "您可以從項目的編輯檢視中為單個登入項目關閉頁面載入時自動填入。" }, "itemAutoFillOnPageLoad": { - "message": "頁面載入時自動填入(如果選項中已設定)" + "message": "頁面載入時自動填入(如果已在選項中設定)" }, "autoFillOnPageLoadUseDefault": { "message": "使用預設設定" @@ -1863,9 +1912,18 @@ "unlockWithPin": { "message": "使用 PIN 碼解鎖" }, + "setYourPinTitle": { + "message": "Set PIN" + }, + "setYourPinButton": { + "message": "Set PIN" + }, "setYourPinCode": { "message": "設定您用來解鎖 Bitwarden 的 PIN 碼。您的 PIN 設定將在您完全登出本應用程式時被重設。" }, + "setYourPinCode1": { + "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + }, "pinRequired": { "message": "必須填入 PIN 碼。" }, @@ -1887,6 +1945,9 @@ "lockWithMasterPassOnRestart": { "message": "瀏覽器重啟後使用主密碼鎖定" }, + "lockWithMasterPassOnRestart1": { + "message": "Require master password on browser restart" + }, "selectOneCollection": { "message": "您必須至少選擇一個集合。" }, @@ -1925,9 +1986,12 @@ "vaultTimeoutAction": { "message": "密碼庫逾時動作" }, + "vaultTimeoutAction1": { + "message": "Timeout action" + }, "lock": { "message": "鎖定", - "description": "Verb form: to make secure or inaccesible by" + "description": "Verb form: to make secure or inaccessible by" }, "trash": { "message": "垃圾桶", @@ -1967,10 +2031,10 @@ "message": "Fill and save" }, "autoFillSuccessAndSavedUri": { - "message": "項目已自動填入並且 URL 已儲存" + "message": "項目已自動填入並且已儲存統一資源標識符(URI)" }, "autoFillSuccess": { - "message": "項目已自動填入" + "message": "項目已自動填入 " }, "insecurePageWarning": { "message": "警告:這是不安全的 HTTP 頁面,任何您送出的資訊均可能被其他人看見和更改。此登入資訊原先是在安全的 (HTTPS) 頁面儲存的。" @@ -1979,10 +2043,10 @@ "message": "您仍要填入此登入資訊嗎?" }, "autofillIframeWarning": { - "message": "這個表單寄放在不同的網域,而非您儲存登入資訊的 URI。選擇「確認」則依然自動填入,「取消」則停止本動作。" + "message": "這個表單存放在不同的網域,而非儲存您登入資訊的統一資源標識符(URI)。選擇「確認」則依然自動填入,「取消」則停止本動作。" }, "autofillIframeWarningTip": { - "message": "若以後不想再跳出這個警告,請將這個網站的 URI「$HOSTNAME$」儲存到您的 Bitwarden 登入項目。", + "message": "若以後不想再跳出這個警告,請將這個網站的統一資源標識符(URI)「$HOSTNAME$」儲存到您的 Bitwarden 登入項目。", "placeholders": { "hostname": { "content": "$1", @@ -2119,12 +2183,12 @@ "nativeMessagingWrongUserTitle": { "message": "帳戶不相符" }, - "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." - }, "nativeMessagingWrongUserKeyTitle": { "message": "Biometric key missmatch" }, + "nativeMessagingWrongUserKeyDesc": { + "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + }, "biometricsNotEnabledTitle": { "message": "生物特徵辨識未設定" }, @@ -2187,7 +2251,7 @@ "message": "Bitwarden 不會要求儲存這些網域的詳細登入資訊。必須重新整理頁面才能使變更生效。" }, "excludedDomainsDescAlt": { - "message": "對於所有已登入的帳戶,Bitwarden 不會詢問是否儲存這些網域的登入資訊。您必須重新整理頁面以使變更生效。" + "message": "對於所有已登入的帳戶,Bitwarden 不會詢問是否儲存這些網域的登入資訊。您必須重新整理頁面變更才會生效。" }, "websiteItemLabel": { "message": "Website $number$ (URI)", @@ -2210,10 +2274,31 @@ "excludedDomainsSavedSuccess": { "message": "Excluded domain changes saved" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "searchSends": { "message": "搜尋 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2225,6 +2310,9 @@ "sendTypeText": { "message": "文字" }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "檔案" }, @@ -2232,6 +2320,9 @@ "message": "所有 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "maxAccessCountReached": { "message": "已達最大存取次數", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." @@ -2305,6 +2396,10 @@ "message": "此 Send 將在指定的日期和時間後被永久刪除。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "expirationDate": { "message": "逾期日期" }, @@ -2338,6 +2433,10 @@ "message": "選用功能。使用者需提供密碼才能存取此 Send。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "sendPasswordDescV2": { + "message": "Require this password to view the Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "sendNotesDesc": { "message": "關於此 Send 的私人備註。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -2443,6 +2542,9 @@ "hideEmail": { "message": "對收件人隱藏我的電子郵件地址。" }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "sendOptionsPolicyInEffect": { "message": "一個或多個組織原則正影響您的 Send 選項。" }, @@ -2474,7 +2576,7 @@ "message": "您的主密碼最近被您的組織管理者變更過。若要存取密碼庫,您必須立即更新主密碼。繼續操作會登出目前的登入階段,並要求您重新登入。其他裝置上的活動登入階段最多會保持一個小時。" }, "updateWeakMasterPasswordWarning": { - "message": "您的主密碼不符合一個或多個組織原則要求。您必須立即更新您的主密碼才能存取密碼庫。進行此動作將登出您目前的工作階段,需要您重新登入。其他裝置上的工作階段可能繼續長達一小時。" + "message": "您的主密碼不符合一個或多個組織政策規定。您必須立即更新您的主密碼才能存取密碼庫。進行此動作將登出您目前的工作階段,需要您重新登入。其他裝置上的工作階段可能持續長達一小時。" }, "tdeDisabledMasterPasswordRequired": { "message": "Your organization has disabled trusted device encryption. Please set a master password to access your vault." @@ -2510,8 +2612,37 @@ "minutes": { "message": "分鐘" }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "Enterprise policy requirements have been applied to your timeout options" + }, "vaultTimeoutPolicyInEffect": { - "message": "您的組織原則正在影響您的密碼庫逾時時間。密碼庫逾時時間最多可以設定到 $HOURS$ 小時 $MINUTES$ 分鐘。", + "message": "您的組織政策已限定您密碼庫逾時的時間長度。密碼庫逾時時間最高可以設定到 $HOURS$ 小時 $MINUTES$ 分鐘。", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", "placeholders": { "hours": { "content": "$1", @@ -2813,7 +2944,7 @@ "message": "伺服器版本" }, "selfHostedServer": { - "message": "自我裝載" + "message": "自架" }, "thirdParty": { "message": "第三方" @@ -2861,7 +2992,7 @@ "message": "指紋短語" }, "fingerprintMatchInfo": { - "message": "請確保您的密碼庫已解鎖,並且指紋短語與其他裝置的一致。" + "message": "請確保您的密碼庫已解鎖,並且指紋短語與其他裝置一致。" }, "resendNotification": { "message": "重新傳送通知" @@ -2873,22 +3004,22 @@ "message": "已傳送通知至您的裝置。" }, "loginInitiated": { - "message": "登入已發起" + "message": "登入已啟動" }, "exposedMasterPassword": { - "message": "已暴露的主密碼" + "message": "已洩露的主密碼" }, "exposedMasterPasswordDesc": { - "message": "在資料外洩事件中找到了密碼。我們建議您使用一個獨特的密碼來保護您的帳戶,您確定要使用已暴露的密碼嗎?" + "message": "該密碼已洩露。建議您使用一個獨特的密碼來保護您的帳戶,您確定要使用已洩露的密碼嗎?" }, "weakAndExposedMasterPassword": { - "message": "強度不足且已暴露的主密碼" + "message": "強度不足且已洩露的主密碼" }, "weakAndBreachedMasterPasswordDesc": { - "message": "密碼強度不足,且在資料外洩事件中找到了這個密碼。使用一個強度足夠和獨特的密碼來保護您的帳戶。您確定要使用這個密碼嗎?" + "message": "密碼強度不足,且該密碼已洩露。請使用一個強度足夠和獨特的密碼來保護您的帳戶。您確定要使用這個密碼嗎?" }, "checkForBreaches": { - "message": "檢查外洩密碼資料庫中是否有此密碼" + "message": "檢查外洩的密碼資料庫中是否包含此密碼" }, "important": { "message": "重要:" @@ -2897,7 +3028,7 @@ "message": "若您忘記主密碼,將會無法找回!" }, "characterMinimum": { - "message": "$LENGTH$ 個字元以上", + "message": "最少 $LENGTH$ 個字元以上", "placeholders": { "length": { "content": "$1", @@ -2906,13 +3037,13 @@ } }, "autofillPageLoadPolicyActivated": { - "message": "您的組織原則已啟用頁面載入時自動填入的功能。" + "message": "您的組織政策已啟用頁面載入時的自動填入功能。" }, "howToAutofill": { - "message": "如何自動填入" + "message": "如何使用自動填入功能" }, "autofillSelectInfoWithCommand": { - "message": "從此畫面中選擇一個項目;使用捷徑 $COMMAND$,或在設定中探索其他選項。", + "message": "從本畫面選擇一個項目,然後使用 $COMMAND$ 快速鍵,或是瞭解設定當中的其他選項。", "placeholders": { "command": { "content": "$1", @@ -2921,7 +3052,7 @@ } }, "autofillSelectInfoWithoutCommand": { - "message": "從此畫面中選擇一個項目,或在設定中探索其他選項。" + "message": "從本畫面選擇一個項目,或是瞭解設定當中的其他選項。" }, "gotIt": { "message": "我知道了" @@ -2954,7 +3085,7 @@ } }, "autofillShortcutTextSafari": { - "message": "預設自動填入快速鍵:$COMMAND$", + "message": "預設自動填入快速鍵:$COMMAND$。", "placeholders": { "command": { "content": "$1", @@ -2969,7 +3100,7 @@ "message": "在新視窗開啟" }, "deviceApprovalRequired": { - "message": "裝置核准已要求。請在下面選擇一個核准選項:" + "message": "裝置需要取得核准。請在下面選擇一個核准選項:" }, "rememberThisDevice": { "message": "記住這個裝置" @@ -2978,13 +3109,13 @@ "message": "若使用公用裝置,請勿勾選" }, "approveFromYourOtherDevice": { - "message": "從其他裝置核准" + "message": "使用其他裝置核准" }, "requestAdminApproval": { "message": "要求管理員核准" }, "approveWithMasterPassword": { - "message": "使用主密碼批准" + "message": "使用主密碼核准" }, "ssoIdentifierRequired": { "message": "需要組織 SSO 識別碼。" @@ -3011,7 +3142,7 @@ "message": "to edit your email address." }, "eu": { - "message": "EU", + "message": "歐盟", "description": "European Union" }, "accessDenied": { @@ -3024,7 +3155,7 @@ "message": "顯示" }, "accountSuccessfullyCreated": { - "message": "已成功建立帳戶!" + "message": "帳戶已成功建立!" }, "adminApprovalRequested": { "message": "已要求管理員核准" @@ -3042,7 +3173,7 @@ "message": "登入已核准" }, "userEmailMissing": { - "message": "缺少使用者電子郵件" + "message": "缺少使用者電子郵件地址" }, "deviceTrusted": { "message": "裝置已信任" @@ -3156,7 +3287,7 @@ "message": "全部清除" }, "plusNMore": { - "message": "+ $QUANTITY$ more", + "message": "再加上 $QUANTITY$ 個", "placeholders": { "quantity": { "content": "$1", @@ -3168,7 +3299,7 @@ "message": "子選單" }, "toggleCollapse": { - "message": "切換折疊", + "message": "切換至折疊狀態", "description": "Toggling an expand/collapse state." }, "filelessImport": { @@ -3207,11 +3338,11 @@ "message": "別名網域" }, "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "使用主密碼重新提示的項目無法在頁面載入時自動填寫。已關閉頁面載入時的自動填入。", + "message": "使用主密碼重新提示的項目無法在頁面載入時使用自動填入功能。已關閉頁面載入時的自動填入功能。", "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." }, "autofillOnPageLoadSetToDefault": { - "message": "將頁面載入時的自動填入設定為使用預設設定。", + "message": "將頁面載入時使用自動填入功能設定為預設。", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, "turnOffMasterPasswordPromptToEditField": { @@ -3297,7 +3428,7 @@ "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { - "message": "Bitwarden 自動填入選單可用。按下箭頭鍵來選擇。", + "message": "您可以使用 Bitwarden 自動填入選單。請按向下鍵來選擇。", "description": "Screen reader text for announcing when the overlay opens on the page" }, "turnOn": { @@ -3314,7 +3445,7 @@ "message": "匯入時發生錯誤" }, "importErrorDesc": { - "message": "您嘗試匯入的資料有問題,請處理下方列出的來源檔案中的錯誤然後再試一次。" + "message": "您嘗試匯入的資料有問題,請解決下列來源檔案中的錯誤然後再試一次。" }, "resolveTheErrorsBelowAndTryAgain": { "message": "請解決下面的錯誤然後再試一次。" @@ -3326,7 +3457,7 @@ "message": "資料匯入成功" }, "importSuccessNumberOfItems": { - "message": "一共匯入了 $AMOUNT$ 個項目。", + "message": "一共匯入 $AMOUNT$ 個項目。", "placeholders": { "amount": { "content": "$1", @@ -3401,10 +3532,10 @@ "message": "開啟Duo" }, "importFormatError": { - "message": "資料格式不正確。請檢查您匯入的檔案後再試一次。" + "message": "資料格式不正確。請檢查匯入檔案後再試一次。" }, "importNothingError": { - "message": "沒有匯入任何內容。" + "message": "未匯入任何內容。" }, "importEncKeyError": { "message": "解密匯出的檔案時發生錯誤,您的加密金鑰與匯出資料時使用的金鑰不同。" @@ -3422,7 +3553,7 @@ "message": "選擇一個資料夾" }, "selectImportCollection": { - "message": "選擇一個集合" + "message": "選擇一個分類" }, "importTargetHint": { "message": "如果您要將匯入檔案的內容移動到 $DESTINATION$,請選擇此選項", @@ -3435,7 +3566,7 @@ } }, "importUnassignedItemsError": { - "message": "檔案包含未指派的項目。" + "message": "檔案包含未指派項目。" }, "selectFormat": { "message": "選擇匯入檔案的格式" @@ -3481,10 +3612,10 @@ "message": "密碼金鑰不會被複製" }, "passkeyNotCopiedAlert": { - "message": "密碼金鑰不會被複製到新複製的項目。 您想繼續複製此項目嗎?" + "message": "不會將密碼金鑰複製到拓製的項目中。您想繼續拓製該項目嗎?" }, "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "發起站點需要驗證。對於沒有主密碼的帳戶,此功能尚未實現。" + "message": "發起站點需要驗證。沒有主密碼的帳戶尚未開通此功能。" }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" @@ -3496,7 +3627,7 @@ "message": "未發現用於這個應用程式的密碼金鑰。" }, "noMatchingPasskeyLogin": { - "message": "您沒有適用於此網站的登入項目。" + "message": "您沒有符合該網站的登入資訊。" }, "noMatchingLoginsForSite": { "message": "No matching logins for this site" @@ -3508,7 +3639,7 @@ "message": "儲存密碼金鑰" }, "savePasskeyNewLogin": { - "message": "儲存密碼金鑰為新登入項目" + "message": "將密碼金鑰儲存為新的登入資訊" }, "chooseCipherForPasskeySave": { "message": "Choose a login to save this passkey to" @@ -3526,7 +3657,7 @@ "message": "該項目已包含密碼金鑰。您確定要覆寫目前的密碼金鑰嗎?" }, "featureNotSupported": { - "message": "功能尚不受支援" + "message": "尚未支援此功能" }, "yourPasskeyIsLocked": { "message": "使用密碼金鑰需要身分驗證。請驗證您的身份以繼續。" @@ -3556,28 +3687,28 @@ "message": "包含共用的資料夾" }, "lastPassEmail": { - "message": "LastPass Email" + "message": "LastPass 電子郵件" }, "importingYourAccount": { "message": "正在匯入您的帳戶..." }, "lastPassMFARequired": { - "message": "要求 LastPass 多因素驗證" + "message": "需要進行 LastPass 多因素驗證" }, "lastPassMFADesc": { - "message": "輸入來自身分驗證 App 的一次性通行代碼" + "message": "輸入來自驗證程式的單次使用通行碼" }, "lastPassOOBDesc": { - "message": "在身分驗證 App 中核准登入請求或輸入一次性通行代碼。" + "message": "在驗證程式中核准登入請求或輸入單次使用通行碼。" }, "passcode": { - "message": "繞行代碼" + "message": "密碼" }, "lastPassMasterPassword": { "message": "LastPass 主密碼" }, "lastPassAuthRequired": { - "message": "要求 LastPass 驗證" + "message": "需要 LastPass 驗證" }, "awaitingSSO": { "message": "等待 SSO 驗證" @@ -3586,7 +3717,7 @@ "message": "請使用您的公司憑證繼續登入。" }, "seeDetailedInstructions": { - "message": "請參閱我們的幫助網站上的詳細說明:", + "message": "請參閱我們說明網站上的詳細說明於", "description": "This is followed a by a hyperlink to the help website." }, "importDirectlyFromLastPass": { @@ -3596,13 +3727,13 @@ "message": "從 CSV 匯入" }, "lastPassTryAgainCheckEmail": { - "message": "請再嘗試一次,或檢查您的電子郵件以確認 LastPass 的驗證信。" + "message": "請再嘗試一次,或檢查電子郵件信箱中來自 LastPass 的驗證信。" }, "collection": { - "message": "收藏" + "message": "分類" }, "lastPassYubikeyDesc": { - "message": "將與您的 LastPass 帳戶關聯的 YubiKey 插入電腦的 USB 連接埠,然後觸摸其按鈕。" + "message": "將與您的 LastPass 帳戶連結的 YubiKey 插入電腦的 USB 連接埠,然後按下按鈕。" }, "switchAccount": { "message": "切換帳戶" @@ -4309,6 +4440,15 @@ "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" }, + "retry": { + "message": "Retry" + }, + "vaultCustomTimeoutMinimum": { + "message": "Minimum custom timeout is 1 minute." + }, + "additionalContentAvailable": { + "message": "Additional content is available" + }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, diff --git a/apps/browser/src/autofill/background/overlay.background.ts b/apps/browser/src/autofill/background/overlay.background.ts index 0047d1de28e..c8d250df509 100644 --- a/apps/browser/src/autofill/background/overlay.background.ts +++ b/apps/browser/src/autofill/background/overlay.background.ts @@ -20,6 +20,7 @@ import { import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; import { InlineMenuVisibilitySetting } from "@bitwarden/common/autofill/types"; +import { parseYearMonthExpiry } from "@bitwarden/common/autofill/utils"; import { NeverDomains } from "@bitwarden/common/models/domain/domain-service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { @@ -1898,11 +1899,21 @@ export class OverlayBackground implements OverlayBackgroundInterface { const cardView = new CardView(); cardView.cardholderName = card.cardholderName || ""; cardView.number = card.number || ""; - cardView.expMonth = card.expirationMonth || ""; - cardView.expYear = card.expirationYear || ""; cardView.code = card.cvv || ""; cardView.brand = card.number ? CardView.getCardBrandByPatterns(card.number) : ""; + // If there's a combined expiration date value and no individual month or year values, + // try to parse them from the combined value + if (card.expirationDate && !card.expirationMonth && !card.expirationYear) { + const [parsedYear, parsedMonth] = parseYearMonthExpiry(card.expirationDate); + + cardView.expMonth = parsedMonth || ""; + cardView.expYear = parsedYear || ""; + } else { + cardView.expMonth = card.expirationMonth || ""; + cardView.expYear = card.expirationYear || ""; + } + const cipherView = new CipherView(); cipherView.name = ""; cipherView.folderId = null; diff --git a/apps/browser/src/autofill/services/autofill-constants.ts b/apps/browser/src/autofill/services/autofill-constants.ts index 9cf2b6848c6..c379daaf2d8 100644 --- a/apps/browser/src/autofill/services/autofill-constants.ts +++ b/apps/browser/src/autofill/services/autofill-constants.ts @@ -300,8 +300,6 @@ export class CreditCardAutoFillConstants { "cb-type", ]; - static readonly CardExpiryDateDelimiters: string[] = ["/", "-", ".", " "]; - // Note, these are expressions of user-guidance for the expected expiry date format to be used static readonly CardExpiryDateFormats: CardExpiryDateFormat[] = [ // English diff --git a/apps/browser/src/autofill/services/autofill.service.ts b/apps/browser/src/autofill/services/autofill.service.ts index 49d00624f34..5d9bfa9f9d4 100644 --- a/apps/browser/src/autofill/services/autofill.service.ts +++ b/apps/browser/src/autofill/services/autofill.service.ts @@ -6,11 +6,15 @@ import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { AutofillOverlayVisibility } from "@bitwarden/common/autofill/constants"; +import { + AutofillOverlayVisibility, + CardExpiryDateDelimiters, +} from "@bitwarden/common/autofill/constants"; import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; import { UserNotificationSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/user-notification-settings.service"; import { InlineMenuVisibilitySetting } from "@bitwarden/common/autofill/types"; +import { normalizeExpiryYearFormat } from "@bitwarden/common/autofill/utils"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { EventType } from "@bitwarden/common/enums"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; @@ -30,7 +34,6 @@ import { CardView } from "@bitwarden/common/vault/models/view/card.view"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FieldView } from "@bitwarden/common/vault/models/view/field.view"; import { IdentityView } from "@bitwarden/common/vault/models/view/identity.view"; -import { normalizeExpiryYearFormat } from "@bitwarden/common/vault/utils"; import { BrowserApi } from "../../platform/browser/browser-api"; import { ScriptInjectorService } from "../../platform/services/abstractions/script-injector.service"; @@ -1397,8 +1400,7 @@ export default class AutofillService implements AutofillServiceInterface { if (expectedExpiryDateFormat) { const { Month, MonthShort, Year } = expiryDateFormatPatterns; - const expiryDateDelimitersPattern = - "\\" + CreditCardAutoFillConstants.CardExpiryDateDelimiters.join("\\"); + const expiryDateDelimitersPattern = "\\" + CardExpiryDateDelimiters.join("\\"); // assign the delimiter from the expected format string delimiter = @@ -1450,8 +1452,7 @@ export default class AutofillService implements AutofillServiceInterface { let expectedDateFormat = null; let dateFormatPatterns = null; - const expiryDateDelimitersPattern = - "\\" + CreditCardAutoFillConstants.CardExpiryDateDelimiters.join("\\"); + const expiryDateDelimitersPattern = "\\" + CardExpiryDateDelimiters.join("\\"); CreditCardAutoFillConstants.CardExpiryDateFormats.find((dateFormat) => { dateFormatPatterns = dateFormat; @@ -1489,6 +1490,8 @@ export default class AutofillService implements AutofillServiceInterface { return false; }); }); + // @TODO if expectedDateFormat is still null, and there is a `pattern` attribute, cycle + // through generated formatted values, checking against the provided regex pattern return [expectedDateFormat, dateFormatPatterns]; } diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 18883a5fe5e..43a6d5968e9 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -419,7 +419,7 @@ export default class MainBackground { this.logService = new ConsoleLogService(isDev); this.cryptoFunctionService = new WebCryptoFunctionService(self); this.keyGenerationService = new KeyGenerationService(this.cryptoFunctionService); - this.storageService = new BrowserLocalStorageService(); + this.storageService = new BrowserLocalStorageService(this.logService); this.intraprocessMessagingSubject = new Subject>>(); @@ -693,6 +693,7 @@ export default class MainBackground { this.collectionService = new CollectionService( this.cryptoService, + this.encryptService, this.i18nService, this.stateProvider, ); @@ -803,9 +804,11 @@ export default class MainBackground { this.cipherFileUploadService, this.configService, this.stateProvider, + this.accountService, ); this.folderService = new FolderService( this.cryptoService, + this.encryptService, this.i18nService, this.cipherService, this.stateProvider, @@ -977,6 +980,7 @@ export default class MainBackground { this.i18nService, this.collectionService, this.cryptoService, + this.encryptService, this.pinService, this.accountService, ); @@ -986,8 +990,10 @@ export default class MainBackground { this.cipherService, this.pinService, this.cryptoService, + this.encryptService, this.cryptoFunctionService, this.kdfConfigService, + this.accountService, ); this.organizationVaultExportService = new OrganizationVaultExportService( @@ -995,6 +1001,7 @@ export default class MainBackground { this.apiService, this.pinService, this.cryptoService, + this.encryptService, this.cryptoFunctionService, this.collectionService, this.kdfConfigService, @@ -1098,6 +1105,7 @@ export default class MainBackground { ); this.nativeMessagingBackground = new NativeMessagingBackground( this.cryptoService, + this.encryptService, this.cryptoFunctionService, this.runtimeBackground, this.messagingService, diff --git a/apps/browser/src/background/nativeMessaging.background.ts b/apps/browser/src/background/nativeMessaging.background.ts index 8f2cac7915c..68a43fbdfe3 100644 --- a/apps/browser/src/background/nativeMessaging.background.ts +++ b/apps/browser/src/background/nativeMessaging.background.ts @@ -6,6 +6,7 @@ import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authenticatio import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -73,6 +74,7 @@ export class NativeMessagingBackground { constructor( private cryptoService: CryptoService, + private encryptService: EncryptService, private cryptoFunctionService: CryptoFunctionService, private runtimeBackground: RuntimeBackground, private messagingService: MessagingService, @@ -227,7 +229,7 @@ export class NativeMessagingBackground { await this.secureCommunication(); } - return await this.cryptoService.encrypt(JSON.stringify(message), this.sharedSecret); + return await this.encryptService.encrypt(JSON.stringify(message), this.sharedSecret); } getResponse(): Promise { @@ -273,7 +275,7 @@ export class NativeMessagingBackground { let message = rawMessage as ReceiveMessage; if (!this.platformUtilsService.isSafari()) { message = JSON.parse( - await this.cryptoService.decryptToUtf8(rawMessage as EncString, this.sharedSecret), + await this.encryptService.decryptToUtf8(rawMessage as EncString, this.sharedSecret), ); } diff --git a/apps/browser/src/manifest.json b/apps/browser/src/manifest.json index 2d7f46fa59a..35692dd5674 100644 --- a/apps/browser/src/manifest.json +++ b/apps/browser/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2024.9.1", + "version": "2024.9.2", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", diff --git a/apps/browser/src/manifest.v3.json b/apps/browser/src/manifest.v3.json index 5e132774e6e..7bd40691768 100644 --- a/apps/browser/src/manifest.v3.json +++ b/apps/browser/src/manifest.v3.json @@ -3,7 +3,7 @@ "minimum_chrome_version": "102.0", "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2024.9.1", + "version": "2024.9.2", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", diff --git a/apps/browser/src/platform/services/browser-local-storage.service.ts b/apps/browser/src/platform/services/browser-local-storage.service.ts index 61a2653f137..9c315b7f6f4 100644 --- a/apps/browser/src/platform/services/browser-local-storage.service.ts +++ b/apps/browser/src/platform/services/browser-local-storage.service.ts @@ -1,10 +1,67 @@ -import AbstractChromeStorageService from "./abstractions/abstract-chrome-storage-api.service"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; + +import AbstractChromeStorageService, { + SerializedValue, +} from "./abstractions/abstract-chrome-storage-api.service"; export default class BrowserLocalStorageService extends AbstractChromeStorageService { - constructor() { + constructor(private readonly logService: LogService) { super(chrome.storage.local); } + override async get(key: string): Promise { + return await this.getWithRetries(key, 0); + } + + private async getWithRetries(key: string, retryNum: number): Promise { + // See: https://github.com/EFForg/privacybadger/pull/2980 + const MAX_RETRIES = 5; + const WAIT_TIME = 200; + + const store = await this.getStore(key); + + if (store == null) { + if (retryNum >= MAX_RETRIES) { + throw new Error(`Failed to get a value for key '${key}', see logs for more details.`); + } + + retryNum++; + this.logService.warning(`Retrying attempt to get value for key '${key}' in ${WAIT_TIME}ms`); + await new Promise((resolve) => setTimeout(resolve, WAIT_TIME)); + return await this.getWithRetries(key, retryNum); + } + + // We have a store + return this.processGetObject(store[key] as T | SerializedValue); + } + + private async getStore(key: string) { + if (this.chromeStorageApi == null) { + this.logService.warning( + `chrome.storage.local was not initialized while retrieving key '${key}'.`, + ); + return null; + } + + return new Promise<{ [key: string]: unknown }>((resolve) => { + this.chromeStorageApi.get(key, (store) => { + if (chrome.runtime.lastError) { + this.logService.warning(`Failed to get value for key '${key}'`, chrome.runtime.lastError); + resolve(null); + return; + } + + if (store == null) { + this.logService.warning(`Store was empty while retrieving value for key '${key}'`); + resolve(null); + return; + } + + resolve(store); + }); + }); + } + async fillBuffer() { // Write 4MB of data in chrome.storage.local, log files will hold 4MB of data (by default) // before forcing a compaction. To force a compaction and have it remove previously saved data, diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts index efbe9ce6bf5..129744fd3bc 100644 --- a/apps/browser/src/popup/services/services.module.ts +++ b/apps/browser/src/popup/services/services.module.ts @@ -304,7 +304,7 @@ const safeProviders: SafeProvider[] = [ safeProvider({ provide: AbstractStorageService, useClass: BrowserLocalStorageService, - deps: [], + deps: [LogService], }), safeProvider({ provide: AutofillServiceAbstraction, diff --git a/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.html b/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.html index 3e9a8d7c50d..7f723cc7364 100644 --- a/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.html +++ b/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.html @@ -13,5 +13,14 @@ + diff --git a/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.ts b/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.ts index 49526bb032b..91311ab7e7a 100644 --- a/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.ts +++ b/apps/browser/src/tools/popup/send-v2/add-edit/send-add-edit.component.ts @@ -8,8 +8,16 @@ import { map, switchMap } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { SendType } from "@bitwarden/common/tools/send/enums/send-type"; +import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction"; import { SendId } from "@bitwarden/common/types/guid"; -import { AsyncActionsModule, ButtonModule, SearchModule } from "@bitwarden/components"; +import { + AsyncActionsModule, + ButtonModule, + DialogService, + IconButtonModule, + SearchModule, + ToastService, +} from "@bitwarden/components"; import { DefaultSendFormConfigService, SendFormConfig, @@ -58,6 +66,7 @@ export type AddEditQueryParams = Partial>; JslibModule, FormsModule, ButtonModule, + IconButtonModule, PopupPageComponent, PopupHeaderComponent, PopupFooterComponent, @@ -81,6 +90,9 @@ export class SendAddEditComponent { private location: Location, private i18nService: I18nService, private addEditFormConfigService: SendFormConfigService, + private sendApiService: SendApiService, + private toastService: ToastService, + private dialogService: DialogService, ) { this.subscribeToParams(); } @@ -92,6 +104,37 @@ export class SendAddEditComponent { this.location.back(); } + deleteSend = async () => { + const confirmed = await this.dialogService.openSimpleDialog({ + title: { key: "deleteSend" }, + content: { key: "deleteSendPermanentConfirmation" }, + type: "warning", + }); + + if (!confirmed) { + return; + } + + try { + await this.sendApiService.delete(this.config.originalSend?.id); + } catch (e) { + this.toastService.showToast({ + variant: "error", + title: null, + message: e.message, + }); + return; + } + + this.location.back(); + + this.toastService.showToast({ + variant: "success", + title: null, + message: this.i18nService.t("deletedSend"), + }); + }; + /** * Subscribes to the route query parameters and builds the configuration based on the parameters. */ diff --git a/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.spec.ts b/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.spec.ts index 8453b4cc63e..156cc9d8195 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.spec.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.spec.ts @@ -1,9 +1,13 @@ import { DIALOG_DATA, DialogRef } from "@angular/cdk/dialog"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; +import { BehaviorSubject } from "rxjs"; +import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { UserId } from "@bitwarden/common/types/guid"; import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { Folder } from "@bitwarden/common/vault/models/domain/folder"; @@ -25,6 +29,7 @@ describe("AddEditFolderDialogComponent", () => { const save = jest.fn().mockResolvedValue(null); const deleteFolder = jest.fn().mockResolvedValue(null); const openSimpleDialog = jest.fn().mockResolvedValue(true); + const getUserKeyWithLegacySupport = jest.fn().mockResolvedValue(""); const error = jest.fn(); const close = jest.fn(); const showToast = jest.fn(); @@ -41,12 +46,29 @@ describe("AddEditFolderDialogComponent", () => { close.mockClear(); showToast.mockClear(); + const userId = "" as UserId; + const accountInfo: AccountInfo = { + email: "", + emailVerified: true, + name: undefined, + }; + await TestBed.configureTestingModule({ imports: [AddEditFolderDialogComponent, NoopAnimationsModule], providers: [ { provide: I18nService, useValue: { t: (key: string) => key } }, { provide: FolderService, useValue: { encrypt } }, { provide: FolderApiServiceAbstraction, useValue: { save, delete: deleteFolder } }, + { + provide: AccountService, + useValue: { activeAccount$: new BehaviorSubject({ id: userId, ...accountInfo }) }, + }, + { + provide: CryptoService, + useValue: { + getUserKeyWithLegacySupport, + }, + }, { provide: LogService, useValue: { error } }, { provide: ToastService, useValue: { showToast } }, { provide: DIALOG_DATA, useValue: dialogData }, @@ -82,7 +104,7 @@ describe("AddEditFolderDialogComponent", () => { const newFolder = new FolderView(); newFolder.name = "New Folder"; - expect(encrypt).toHaveBeenCalledWith(newFolder); + expect(encrypt).toHaveBeenCalledWith(newFolder, ""); expect(save).toHaveBeenCalled(); }); @@ -137,10 +159,13 @@ describe("AddEditFolderDialogComponent", () => { component.folderForm.controls.name.setValue("Edited Folder"); await component.submit(); - expect(encrypt).toHaveBeenCalledWith({ - ...dialogData.editFolderConfig.folder, - name: "Edited Folder", - }); + expect(encrypt).toHaveBeenCalledWith( + { + ...dialogData.editFolderConfig.folder, + name: "Edited Folder", + }, + "", + ); }); it("deletes the folder", async () => { diff --git a/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.ts b/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.ts index 33263533990..4f793abb6a0 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/add-edit-folder-dialog/add-edit-folder-dialog.component.ts @@ -11,8 +11,11 @@ import { } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { FormBuilder, ReactiveFormsModule, Validators } from "@angular/forms"; +import { firstValueFrom } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction"; @@ -68,6 +71,8 @@ export class AddEditFolderDialogComponent implements AfterViewInit, OnInit { private formBuilder: FormBuilder, private folderService: FolderService, private folderApiService: FolderApiServiceAbstraction, + private accountService: AccountService, + private cryptoService: CryptoService, private toastService: ToastService, private i18nService: I18nService, private logService: LogService, @@ -107,7 +112,9 @@ export class AddEditFolderDialogComponent implements AfterViewInit, OnInit { this.folder.name = this.folderForm.controls.name.value; try { - const folder = await this.folderService.encrypt(this.folder); + const activeUserId = await firstValueFrom(this.accountService.activeAccount$); + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeUserId.id); + const folder = await this.folderService.encrypt(this.folder, userKey); await this.folderApiService.save(folder); this.toastService.showToast({ diff --git a/apps/browser/src/vault/popup/components/vault/add-edit.component.ts b/apps/browser/src/vault/popup/components/vault/add-edit.component.ts index 02654f37efe..de8e5615e2f 100644 --- a/apps/browser/src/vault/popup/components/vault/add-edit.component.ts +++ b/apps/browser/src/vault/popup/components/vault/add-edit.component.ts @@ -12,6 +12,7 @@ import { OrganizationService } from "@bitwarden/common/admin-console/abstraction import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service"; +import { normalizeExpiryYearFormat } from "@bitwarden/common/autofill/utils"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -23,7 +24,6 @@ import { CollectionService } from "@bitwarden/common/vault/abstractions/collecti import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/vault/enums"; import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view"; -import { normalizeExpiryYearFormat } from "@bitwarden/common/vault/utils"; import { DialogService } from "@bitwarden/components"; import { PasswordRepromptService } from "@bitwarden/vault"; diff --git a/apps/browser/src/vault/popup/components/vault/attachments.component.ts b/apps/browser/src/vault/popup/components/vault/attachments.component.ts index 75819689b44..1ab1ff428b2 100644 --- a/apps/browser/src/vault/popup/components/vault/attachments.component.ts +++ b/apps/browser/src/vault/popup/components/vault/attachments.component.ts @@ -8,6 +8,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -28,6 +29,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On cipherService: CipherService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, platformUtilsService: PlatformUtilsService, apiService: ApiService, private location: Location, @@ -44,6 +46,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On cipherService, i18nService, cryptoService, + encryptService, platformUtilsService, apiService, window, diff --git a/apps/browser/src/vault/popup/components/vault/view.component.ts b/apps/browser/src/vault/popup/components/vault/view.component.ts index f8e7de21dc8..a77a27046af 100644 --- a/apps/browser/src/vault/popup/components/vault/view.component.ts +++ b/apps/browser/src/vault/popup/components/vault/view.component.ts @@ -13,6 +13,7 @@ import { TokenService } from "@bitwarden/common/auth/abstractions/token.service" import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -80,6 +81,7 @@ export class ViewComponent extends BaseViewComponent implements OnInit, OnDestro tokenService: TokenService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, platformUtilsService: PlatformUtilsService, auditService: AuditService, private route: ActivatedRoute, @@ -108,6 +110,7 @@ export class ViewComponent extends BaseViewComponent implements OnInit, OnDestro tokenService, i18nService, cryptoService, + encryptService, platformUtilsService, auditService, window, diff --git a/apps/browser/src/vault/popup/settings/appearance-v2.component.html b/apps/browser/src/vault/popup/settings/appearance-v2.component.html index 565699a6f5b..b267e1c5cb2 100644 --- a/apps/browser/src/vault/popup/settings/appearance-v2.component.html +++ b/apps/browser/src/vault/popup/settings/appearance-v2.component.html @@ -1,4 +1,4 @@ - + @@ -23,10 +23,15 @@ {{ "showNumberOfAutofillSuggestions" | i18n }} - + {{ "enableFavicon" | i18n }} + + + + {{ "showAnimations" | i18n }} + diff --git a/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts b/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts index 69186359e2b..bbd210b65a3 100644 --- a/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts +++ b/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts @@ -5,6 +5,7 @@ import { BehaviorSubject } from "rxjs"; import { BadgeSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/badge-settings.service"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; +import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; @@ -41,14 +42,17 @@ describe("AppearanceV2Component", () => { const showFavicons$ = new BehaviorSubject(true); const enableBadgeCounter$ = new BehaviorSubject(true); const selectedTheme$ = new BehaviorSubject(ThemeType.Nord); + const enableRoutingAnimation$ = new BehaviorSubject(true); const setSelectedTheme = jest.fn().mockResolvedValue(undefined); const setShowFavicons = jest.fn().mockResolvedValue(undefined); const setEnableBadgeCounter = jest.fn().mockResolvedValue(undefined); + const setEnableRoutingAnimation = jest.fn().mockResolvedValue(undefined); beforeEach(async () => { setSelectedTheme.mockClear(); setShowFavicons.mockClear(); setEnableBadgeCounter.mockClear(); + setEnableRoutingAnimation.mockClear(); await TestBed.configureTestingModule({ imports: [AppearanceV2Component], @@ -58,11 +62,15 @@ describe("AppearanceV2Component", () => { { provide: MessagingService, useValue: mock() }, { provide: I18nService, useValue: { t: (key: string) => key } }, { provide: DomainSettingsService, useValue: { showFavicons$, setShowFavicons } }, + { provide: ThemeStateService, useValue: { selectedTheme$, setSelectedTheme } }, + { + provide: AnimationControlService, + useValue: { enableRoutingAnimation$, setEnableRoutingAnimation }, + }, { provide: BadgeSettingsServiceAbstraction, useValue: { enableBadgeCounter$, setEnableBadgeCounter }, }, - { provide: ThemeStateService, useValue: { selectedTheme$, setSelectedTheme } }, ], }) .overrideComponent(AppearanceV2Component, { @@ -82,6 +90,7 @@ describe("AppearanceV2Component", () => { it("populates the form with the user's current settings", () => { expect(component.appearanceForm.value).toEqual({ + enableAnimations: true, enableFavicon: true, enableBadgeCounter: true, theme: ThemeType.Nord, @@ -106,5 +115,11 @@ describe("AppearanceV2Component", () => { expect(setEnableBadgeCounter).toHaveBeenCalledWith(false); }); + + it("updates the animation setting", () => { + component.appearanceForm.controls.enableAnimations.setValue(false); + + expect(setEnableRoutingAnimation).toHaveBeenCalledWith(false); + }); }); }); diff --git a/apps/browser/src/vault/popup/settings/appearance-v2.component.ts b/apps/browser/src/vault/popup/settings/appearance-v2.component.ts index 12f5c540409..9d600ec83e8 100644 --- a/apps/browser/src/vault/popup/settings/appearance-v2.component.ts +++ b/apps/browser/src/vault/popup/settings/appearance-v2.component.ts @@ -7,6 +7,7 @@ import { firstValueFrom } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { BadgeSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/badge-settings.service"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; +import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { ThemeType } from "@bitwarden/common/platform/enums"; @@ -41,8 +42,12 @@ export class AppearanceV2Component implements OnInit { enableFavicon: false, enableBadgeCounter: true, theme: ThemeType.System, + enableAnimations: true, }); + /** To avoid flashes of inaccurate values, only show the form after the entire form is populated. */ + formLoading = true; + /** Available theme options */ themeOptions: { name: string; value: ThemeType }[]; @@ -53,6 +58,7 @@ export class AppearanceV2Component implements OnInit { private themeStateService: ThemeStateService, private formBuilder: FormBuilder, private destroyRef: DestroyRef, + private animationControlService: AnimationControlService, i18nService: I18nService, ) { this.themeOptions = [ @@ -66,14 +72,20 @@ export class AppearanceV2Component implements OnInit { const enableFavicon = await firstValueFrom(this.domainSettingsService.showFavicons$); const enableBadgeCounter = await firstValueFrom(this.badgeSettingsService.enableBadgeCounter$); const theme = await firstValueFrom(this.themeStateService.selectedTheme$); + const enableAnimations = await firstValueFrom( + this.animationControlService.enableRoutingAnimation$, + ); // Set initial values for the form this.appearanceForm.setValue({ enableFavicon, enableBadgeCounter, theme, + enableAnimations, }); + this.formLoading = false; + this.appearanceForm.controls.theme.valueChanges .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((newTheme) => { @@ -91,6 +103,12 @@ export class AppearanceV2Component implements OnInit { .subscribe((enableBadgeCounter) => { void this.updateBadgeCounter(enableBadgeCounter); }); + + this.appearanceForm.controls.enableAnimations.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((enableBadgeCounter) => { + void this.updateAnimations(enableBadgeCounter); + }); } async updateFavicon(enableFavicon: boolean) { @@ -105,4 +123,8 @@ export class AppearanceV2Component implements OnInit { async saveTheme(newTheme: ThemeType) { await this.themeStateService.setSelectedTheme(newTheme); } + + async updateAnimations(enableAnimations: boolean) { + await this.animationControlService.setEnableRoutingAnimation(enableAnimations); + } } diff --git a/apps/browser/src/vault/popup/settings/folder-add-edit.component.ts b/apps/browser/src/vault/popup/settings/folder-add-edit.component.ts index b873735b460..3ef5fc73aa9 100644 --- a/apps/browser/src/vault/popup/settings/folder-add-edit.component.ts +++ b/apps/browser/src/vault/popup/settings/folder-add-edit.component.ts @@ -4,6 +4,8 @@ import { ActivatedRoute, Router } from "@angular/router"; import { first } from "rxjs/operators"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/vault/components/folder-add-edit.component"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -20,6 +22,8 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent implement constructor( folderService: FolderService, folderApiService: FolderApiServiceAbstraction, + accountService: AccountService, + cryptoService: CryptoService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, private router: Router, @@ -31,6 +35,8 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent implement super( folderService, folderApiService, + accountService, + cryptoService, i18nService, platformUtilsService, logService, diff --git a/apps/cli/package.json b/apps/cli/package.json index b5317794c35..8ab2afc4129 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,7 +1,7 @@ { "name": "@bitwarden/cli", "description": "A secure and free password manager for all of your devices.", - "version": "2024.9.0", + "version": "2024.9.1", "keywords": [ "bitwarden", "password", diff --git a/apps/cli/src/commands/download.command.ts b/apps/cli/src/commands/download.command.ts index e417b7c3b88..f819875063d 100644 --- a/apps/cli/src/commands/download.command.ts +++ b/apps/cli/src/commands/download.command.ts @@ -1,6 +1,6 @@ import * as fet from "node-fetch"; -import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { EncArrayBuffer } from "@bitwarden/common/platform/models/domain/enc-array-buffer"; import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; @@ -9,7 +9,7 @@ import { FileResponse } from "../models/response/file.response"; import { CliUtils } from "../utils"; export abstract class DownloadCommand { - constructor(protected cryptoService: CryptoService) {} + constructor(protected encryptService: EncryptService) {} protected async saveAttachmentToFile( url: string, @@ -26,7 +26,7 @@ export abstract class DownloadCommand { try { const encBuf = await EncArrayBuffer.fromResponse(response); - const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key); + const decBuf = await this.encryptService.decryptToBytes(encBuf, key); if (process.env.BW_SERVE === "true") { const res = new FileResponse(Buffer.from(decBuf), fileName); return Response.success(res); diff --git a/apps/cli/src/commands/edit.command.ts b/apps/cli/src/commands/edit.command.ts index bac1cce7c75..84ed7190a54 100644 --- a/apps/cli/src/commands/edit.command.ts +++ b/apps/cli/src/commands/edit.command.ts @@ -7,6 +7,7 @@ import { CipherExport } from "@bitwarden/common/models/export/cipher.export"; import { CollectionExport } from "@bitwarden/common/models/export/collection.export"; import { FolderExport } from "@bitwarden/common/models/export/folder.export"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction"; @@ -25,6 +26,7 @@ export class EditCommand { private cipherService: CipherService, private folderService: FolderService, private cryptoService: CryptoService, + private encryptService: EncryptService, private apiService: ApiService, private folderApiService: FolderApiServiceAbstraction, private accountService: AccountService, @@ -139,7 +141,10 @@ export class EditCommand { let folderView = await folder.decrypt(); folderView = FolderExport.toView(req, folderView); - const encFolder = await this.folderService.encrypt(folderView); + + const activeUserId = await firstValueFrom(this.accountService.activeAccount$); + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeUserId.id); + const encFolder = await this.folderService.encrypt(folderView, userKey); try { await this.folderApiService.save(encFolder); const updatedFolder = await this.folderService.get(folder.id); @@ -187,7 +192,7 @@ export class EditCommand { (u) => new SelectionReadOnlyRequest(u.id, u.readOnly, u.hidePasswords, u.manage), ); const request = new CollectionRequest(); - request.name = (await this.cryptoService.encrypt(req.name, orgKey)).encryptedString; + request.name = (await this.encryptService.encrypt(req.name, orgKey)).encryptedString; request.externalId = req.externalId; request.groups = groups; request.users = users; diff --git a/apps/cli/src/commands/get.command.ts b/apps/cli/src/commands/get.command.ts index 923187bfcd0..3b2b18c66e3 100644 --- a/apps/cli/src/commands/get.command.ts +++ b/apps/cli/src/commands/get.command.ts @@ -20,6 +20,7 @@ import { LoginExport } from "@bitwarden/common/models/export/login.export"; import { SecureNoteExport } from "@bitwarden/common/models/export/secure-note.export"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; @@ -56,7 +57,8 @@ export class GetCommand extends DownloadCommand { private collectionService: CollectionService, private totpService: TotpService, private auditService: AuditService, - cryptoService: CryptoService, + private cryptoService: CryptoService, + encryptService: EncryptService, private stateService: StateService, private searchService: SearchService, private apiService: ApiService, @@ -65,7 +67,7 @@ export class GetCommand extends DownloadCommand { private accountProfileService: BillingAccountProfileStateService, private accountService: AccountService, ) { - super(cryptoService); + super(encryptService); } async run(object: string, id: string, cmdOptions: Record): Promise { @@ -451,7 +453,7 @@ export class GetCommand extends DownloadCommand { const response = await this.apiService.getCollectionAccessDetails(options.organizationId, id); const decCollection = new CollectionView(response); - decCollection.name = await this.cryptoService.decryptToUtf8( + decCollection.name = await this.encryptService.decryptToUtf8( new EncString(response.name), orgKey, ); diff --git a/apps/cli/src/oss-serve-configurator.ts b/apps/cli/src/oss-serve-configurator.ts index d7ef9ac871d..fd2a10975f3 100644 --- a/apps/cli/src/oss-serve-configurator.ts +++ b/apps/cli/src/oss-serve-configurator.ts @@ -57,6 +57,7 @@ export class OssServeConfigurator { this.serviceContainer.totpService, this.serviceContainer.auditService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.stateService, this.serviceContainer.searchService, this.serviceContainer.apiService, @@ -79,6 +80,7 @@ export class OssServeConfigurator { this.serviceContainer.cipherService, this.serviceContainer.folderService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.apiService, this.serviceContainer.folderApiService, this.serviceContainer.billingAccountProfileStateService, @@ -89,6 +91,7 @@ export class OssServeConfigurator { this.serviceContainer.cipherService, this.serviceContainer.folderService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.apiService, this.serviceContainer.folderApiService, this.serviceContainer.accountService, @@ -150,7 +153,7 @@ export class OssServeConfigurator { this.serviceContainer.sendService, this.serviceContainer.environmentService, this.serviceContainer.searchService, - this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, ); this.sendEditCommand = new SendEditCommand( this.serviceContainer.sendService, diff --git a/apps/cli/src/service-container/service-container.ts b/apps/cli/src/service-container/service-container.ts index b9225fec43d..98c5fc86b52 100644 --- a/apps/cli/src/service-container/service-container.ts +++ b/apps/cli/src/service-container/service-container.ts @@ -494,6 +494,7 @@ export class ServiceContainer { this.collectionService = new CollectionService( this.cryptoService, + this.encryptService, this.i18nService, this.stateProvider, ); @@ -631,10 +632,12 @@ export class ServiceContainer { this.cipherFileUploadService, this.configService, this.stateProvider, + this.accountService, ); this.folderService = new FolderService( this.cryptoService, + this.encryptService, this.i18nService, this.cipherService, this.stateProvider, @@ -721,6 +724,7 @@ export class ServiceContainer { this.i18nService, this.collectionService, this.cryptoService, + this.encryptService, this.pinService, this.accountService, ); @@ -730,8 +734,10 @@ export class ServiceContainer { this.cipherService, this.pinService, this.cryptoService, + this.encryptService, this.cryptoFunctionService, this.kdfConfigService, + this.accountService, ); this.organizationExportService = new OrganizationVaultExportService( @@ -739,6 +745,7 @@ export class ServiceContainer { this.apiService, this.pinService, this.cryptoService, + this.encryptService, this.cryptoFunctionService, this.collectionService, this.kdfConfigService, diff --git a/apps/cli/src/tools/send/commands/get.command.ts b/apps/cli/src/tools/send/commands/get.command.ts index 2ffe2423174..057a1c27f33 100644 --- a/apps/cli/src/tools/send/commands/get.command.ts +++ b/apps/cli/src/tools/send/commands/get.command.ts @@ -2,7 +2,7 @@ import { OptionValues } from "commander"; import { firstValueFrom } from "rxjs"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; -import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { SendView } from "@bitwarden/common/tools/send/models/view/send.view"; @@ -17,9 +17,9 @@ export class SendGetCommand extends DownloadCommand { private sendService: SendService, private environmentService: EnvironmentService, private searchService: SearchService, - cryptoService: CryptoService, + encryptService: EncryptService, ) { - super(cryptoService); + super(encryptService); } async run(id: string, options: OptionValues) { diff --git a/apps/cli/src/tools/send/commands/receive.command.ts b/apps/cli/src/tools/send/commands/receive.command.ts index dc662f02727..a8740992f72 100644 --- a/apps/cli/src/tools/send/commands/receive.command.ts +++ b/apps/cli/src/tools/send/commands/receive.command.ts @@ -2,10 +2,10 @@ import { OptionValues } from "commander"; import * as inquirer from "inquirer"; import { firstValueFrom } from "rxjs"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -27,14 +27,14 @@ export class SendReceiveCommand extends DownloadCommand { private sendAccessRequest: SendAccessRequest; constructor( - private apiService: ApiService, - cryptoService: CryptoService, + private cryptoService: CryptoService, + encryptService: EncryptService, private cryptoFunctionService: CryptoFunctionService, private platformUtilsService: PlatformUtilsService, private environmentService: EnvironmentService, private sendApiService: SendApiService, ) { - super(cryptoService); + super(encryptService); } async run(url: string, options: OptionValues): Promise { diff --git a/apps/cli/src/tools/send/send.program.ts b/apps/cli/src/tools/send/send.program.ts index 05e7e7d22d7..878eaa52b24 100644 --- a/apps/cli/src/tools/send/send.program.ts +++ b/apps/cli/src/tools/send/send.program.ts @@ -100,8 +100,8 @@ export class SendProgram extends BaseProgram { }) .action(async (url: string, options: OptionValues) => { const cmd = new SendReceiveCommand( - this.serviceContainer.apiService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.cryptoFunctionService, this.serviceContainer.platformUtilsService, this.serviceContainer.environmentService, @@ -143,6 +143,7 @@ export class SendProgram extends BaseProgram { this.serviceContainer.totpService, this.serviceContainer.auditService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.stateService, this.serviceContainer.searchService, this.serviceContainer.apiService, @@ -187,7 +188,7 @@ export class SendProgram extends BaseProgram { this.serviceContainer.sendService, this.serviceContainer.environmentService, this.serviceContainer.searchService, - this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, ); const response = await cmd.run(id, options); this.processResponse(response); @@ -246,7 +247,7 @@ export class SendProgram extends BaseProgram { this.serviceContainer.sendService, this.serviceContainer.environmentService, this.serviceContainer.searchService, - this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, ); const cmd = new SendEditCommand( this.serviceContainer.sendService, diff --git a/apps/cli/src/vault.program.ts b/apps/cli/src/vault.program.ts index 2dad9a7c68a..11876ef6ece 100644 --- a/apps/cli/src/vault.program.ts +++ b/apps/cli/src/vault.program.ts @@ -178,6 +178,7 @@ export class VaultProgram extends BaseProgram { this.serviceContainer.totpService, this.serviceContainer.auditService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.stateService, this.serviceContainer.searchService, this.serviceContainer.apiService, @@ -224,6 +225,7 @@ export class VaultProgram extends BaseProgram { this.serviceContainer.cipherService, this.serviceContainer.folderService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.apiService, this.serviceContainer.folderApiService, this.serviceContainer.billingAccountProfileStateService, @@ -272,6 +274,7 @@ export class VaultProgram extends BaseProgram { this.serviceContainer.cipherService, this.serviceContainer.folderService, this.serviceContainer.cryptoService, + this.serviceContainer.encryptService, this.serviceContainer.apiService, this.serviceContainer.folderApiService, this.serviceContainer.accountService, diff --git a/apps/cli/src/vault/create.command.ts b/apps/cli/src/vault/create.command.ts index 0284ccc37bd..fc52720f77d 100644 --- a/apps/cli/src/vault/create.command.ts +++ b/apps/cli/src/vault/create.command.ts @@ -12,6 +12,7 @@ import { CipherExport } from "@bitwarden/common/models/export/cipher.export"; import { CollectionExport } from "@bitwarden/common/models/export/collection.export"; import { FolderExport } from "@bitwarden/common/models/export/folder.export"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction"; @@ -31,6 +32,7 @@ export class CreateCommand { private cipherService: CipherService, private folderService: FolderService, private cryptoService: CryptoService, + private encryptService: EncryptService, private apiService: ApiService, private folderApiService: FolderApiServiceAbstraction, private accountProfileService: BillingAccountProfileStateService, @@ -167,7 +169,9 @@ export class CreateCommand { } private async createFolder(req: FolderExport) { - const folder = await this.folderService.encrypt(FolderExport.toView(req)); + const activeAccountId = await firstValueFrom(this.accountService.activeAccount$); + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeAccountId.id); + const folder = await this.folderService.encrypt(FolderExport.toView(req), userKey); try { await this.folderApiService.save(folder); const newFolder = await this.folderService.get(folder.id); @@ -210,7 +214,7 @@ export class CreateCommand { (u) => new SelectionReadOnlyRequest(u.id, u.readOnly, u.hidePasswords, u.manage), ); const request = new CollectionRequest(); - request.name = (await this.cryptoService.encrypt(req.name, orgKey)).encryptedString; + request.name = (await this.encryptService.encrypt(req.name, orgKey)).encryptedString; request.externalId = req.externalId; request.groups = groups; request.users = users; diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 40ce2fec5d9..c50e7ccbac4 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@bitwarden/desktop", "description": "A secure and free password manager for all of your devices.", - "version": "2024.9.1", + "version": "2024.9.2", "keywords": [ "bitwarden", "password", diff --git a/apps/desktop/src/app/services/services.module.ts b/apps/desktop/src/app/services/services.module.ts index d5672f54c0f..a6db7fe5db4 100644 --- a/apps/desktop/src/app/services/services.module.ts +++ b/apps/desktop/src/app/services/services.module.ts @@ -234,7 +234,7 @@ const safeProviders: SafeProvider[] = [ provide: NativeMessageHandlerService, deps: [ StateServiceAbstraction, - CryptoServiceAbstraction, + EncryptService, CryptoFunctionServiceAbstraction, MessagingServiceAbstraction, EncryptedMessageHandlerService, diff --git a/apps/desktop/src/package-lock.json b/apps/desktop/src/package-lock.json index ce08dfde2cd..3bd771c66af 100644 --- a/apps/desktop/src/package-lock.json +++ b/apps/desktop/src/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bitwarden/desktop", - "version": "2024.9.1", + "version": "2024.9.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bitwarden/desktop", - "version": "2024.9.1", + "version": "2024.9.2", "license": "GPL-3.0", "dependencies": { "@bitwarden/desktop-napi": "file:../desktop_native/napi", diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json index e34641f1e09..29b3f8ed7d1 100644 --- a/apps/desktop/src/package.json +++ b/apps/desktop/src/package.json @@ -2,7 +2,7 @@ "name": "@bitwarden/desktop", "productName": "Bitwarden", "description": "A secure and free password manager for all of your devices.", - "version": "2024.9.1", + "version": "2024.9.2", "author": "Bitwarden Inc. (https://bitwarden.com)", "homepage": "https://bitwarden.com", "license": "GPL-3.0", diff --git a/apps/desktop/src/services/native-message-handler.service.ts b/apps/desktop/src/services/native-message-handler.service.ts index 065726559b1..106dc11e41b 100644 --- a/apps/desktop/src/services/native-message-handler.service.ts +++ b/apps/desktop/src/services/native-message-handler.service.ts @@ -3,7 +3,7 @@ import { firstValueFrom } from "rxjs"; import { NativeMessagingVersion } from "@bitwarden/common/enums"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; -import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -31,7 +31,7 @@ export class NativeMessageHandlerService { constructor( private stateService: StateService, - private cryptoService: CryptoService, + private encryptService: EncryptService, private cryptoFunctionService: CryptoFunctionService, private messagingService: MessagingService, private encryptedMessageHandlerService: EncryptedMessageHandlerService, @@ -162,7 +162,7 @@ export class NativeMessageHandlerService { payload: DecryptedCommandData, key: SymmetricCryptoKey, ): Promise { - return await this.cryptoService.encrypt(JSON.stringify(payload), key); + return await this.encryptService.encrypt(JSON.stringify(payload), key); } private async decryptPayload(message: EncryptedMessage): Promise { @@ -182,7 +182,7 @@ export class NativeMessageHandlerService { } try { - let decryptedResult = await this.cryptoService.decryptToUtf8( + let decryptedResult = await this.encryptService.decryptToUtf8( message.encryptedCommand as EncString, this.ddgSharedSecret, ); diff --git a/apps/desktop/src/services/native-messaging.service.ts b/apps/desktop/src/services/native-messaging.service.ts index f106d137b76..2b218001947 100644 --- a/apps/desktop/src/services/native-messaging.service.ts +++ b/apps/desktop/src/services/native-messaging.service.ts @@ -6,6 +6,7 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { BiometricStateService } from "@bitwarden/common/platform/biometrics/biometric-state.service"; @@ -33,6 +34,7 @@ export class NativeMessagingService { constructor( private cryptoFunctionService: CryptoFunctionService, private cryptoService: CryptoService, + private encryptService: EncryptService, private logService: LogService, private messagingService: MessagingService, private desktopSettingService: DesktopSettingsService, @@ -111,7 +113,7 @@ export class NativeMessagingService { } const message: LegacyMessage = JSON.parse( - await this.cryptoService.decryptToUtf8( + await this.encryptService.decryptToUtf8( rawMessage as EncString, SymmetricCryptoKey.fromString(await ipc.platform.ephemeralStore.getEphemeralValue(appId)), ), @@ -224,7 +226,7 @@ export class NativeMessagingService { private async send(message: any, appId: string) { message.timestamp = Date.now(); - const encrypted = await this.cryptoService.encrypt( + const encrypted = await this.encryptService.encrypt( JSON.stringify(message), SymmetricCryptoKey.fromString(await ipc.platform.ephemeralStore.getEphemeralValue(appId)), ); diff --git a/apps/desktop/src/vault/app/vault/attachments.component.ts b/apps/desktop/src/vault/app/vault/attachments.component.ts index 2e25d390872..47e08a13cde 100644 --- a/apps/desktop/src/vault/app/vault/attachments.component.ts +++ b/apps/desktop/src/vault/app/vault/attachments.component.ts @@ -5,6 +5,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -22,6 +23,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { cipherService: CipherService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, platformUtilsService: PlatformUtilsService, apiService: ApiService, logService: LogService, @@ -36,6 +38,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { cipherService, i18nService, cryptoService, + encryptService, platformUtilsService, apiService, window, diff --git a/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts b/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts index 3865ec4837c..0cc55d65f3e 100644 --- a/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts +++ b/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts @@ -2,6 +2,8 @@ import { Component } from "@angular/core"; import { FormBuilder } from "@angular/forms"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/vault/components/folder-add-edit.component"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -17,6 +19,8 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent { constructor( folderService: FolderService, folderApiService: FolderApiServiceAbstraction, + accountService: AccountService, + cryptoService: CryptoService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, logService: LogService, @@ -26,6 +30,8 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent { super( folderService, folderApiService, + accountService, + cryptoService, i18nService, platformUtilsService, logService, diff --git a/apps/desktop/src/vault/app/vault/view.component.ts b/apps/desktop/src/vault/app/vault/view.component.ts index 140e1e9ced6..7f2fb9ceae5 100644 --- a/apps/desktop/src/vault/app/vault/view.component.ts +++ b/apps/desktop/src/vault/app/vault/view.component.ts @@ -19,6 +19,7 @@ import { TokenService } from "@bitwarden/common/auth/abstractions/token.service" import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -48,6 +49,7 @@ export class ViewComponent extends BaseViewComponent implements OnInit, OnDestro tokenService: TokenService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, platformUtilsService: PlatformUtilsService, auditService: AuditService, broadcasterService: BroadcasterService, @@ -72,6 +74,7 @@ export class ViewComponent extends BaseViewComponent implements OnInit, OnDestro tokenService, i18nService, cryptoService, + encryptService, platformUtilsService, auditService, window, diff --git a/apps/web/package.json b/apps/web/package.json index 37deab411b9..520c096a50c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/web-vault", - "version": "2024.9.1", + "version": "2024.9.2", "scripts": { "build:oss": "webpack", "build:bit": "webpack -c ../../bitwarden_license/bit-web/webpack.config.js", diff --git a/apps/web/src/app/auth/settings/emergency-access/attachments/emergency-access-attachments.component.ts b/apps/web/src/app/auth/settings/emergency-access/attachments/emergency-access-attachments.component.ts index e0a6f6c53d5..4912a866fd1 100644 --- a/apps/web/src/app/auth/settings/emergency-access/attachments/emergency-access-attachments.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/attachments/emergency-access-attachments.component.ts @@ -5,6 +5,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -26,6 +27,7 @@ export class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponen cipherService: CipherService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, stateService: StateService, platformUtilsService: PlatformUtilsService, apiService: ApiService, @@ -40,6 +42,7 @@ export class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponen cipherService, i18nService, cryptoService, + encryptService, platformUtilsService, apiService, window, diff --git a/apps/web/src/app/auth/sso.component.ts b/apps/web/src/app/auth/sso.component.ts index f55152fed3b..e498384c278 100644 --- a/apps/web/src/app/auth/sso.component.ts +++ b/apps/web/src/app/auth/sso.component.ts @@ -110,7 +110,7 @@ export class SsoComponent extends BaseSsoComponent implements OnInit { const response: OrganizationDomainSsoDetailsResponse = await this.orgDomainApiService.getClaimedOrgDomainByEmail(qParams.email); - if (response?.ssoAvailable) { + if (response?.ssoAvailable && response?.verifiedDate) { this.identifierFormControl.setValue(response.organizationIdentifier); await this.submit(); return; diff --git a/apps/web/src/app/billing/organizations/change-plan-dialog.component.html b/apps/web/src/app/billing/organizations/change-plan-dialog.component.html index bd8ae20c92e..27d51af92b3 100644 --- a/apps/web/src/app/billing/organizations/change-plan-dialog.component.html +++ b/apps/web/src/app/billing/organizations/change-plan-dialog.component.html @@ -332,20 +332,16 @@

{{ "paymentMethod" | i18n }}

-

+

- {{ billing?.paymentSource?.description }} - {{ - "changePaymentMethod" | i18n - }} - -

-

- - {{ paymentSource?.description }} - {{ - "changePaymentMethod" | i18n - }} + {{ + deprecateStripeSourcesAPI + ? paymentSource?.description + : billing?.paymentSource?.description + }} + + {{ "changePaymentMethod" | i18n }} +

(); const key = orgKey[0].encryptedString; - const collection = await this.cryptoService.encrypt( + const collection = await this.encryptService.encrypt( this.i18nService.t("defaultCollection"), orgKey[1], ); @@ -658,21 +662,26 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { this.buildSecretsManagerRequest(request); if (this.upgradeRequiresPaymentMethod) { - let type: PaymentMethodType; - let token: string; - if (this.deprecateStripeSourcesAPI) { - ({ type, token } = await this.paymentV2Component.tokenize()); + const updatePaymentMethodRequest = new UpdatePaymentMethodRequest(); + updatePaymentMethodRequest.paymentSource = await this.paymentV2Component.tokenize(); + const expandedTaxInfoUpdateRequest = new ExpandedTaxInfoUpdateRequest(); + expandedTaxInfoUpdateRequest.country = this.taxComponent.country; + expandedTaxInfoUpdateRequest.postalCode = this.taxComponent.postalCode; + updatePaymentMethodRequest.taxInformation = expandedTaxInfoUpdateRequest; + await this.billingApiService.updateOrganizationPaymentMethod( + this.organizationId, + updatePaymentMethodRequest, + ); } else { - [token, type] = await this.paymentComponent.createPaymentToken(); + const [paymentToken, paymentMethodType] = await this.paymentComponent.createPaymentToken(); + const paymentRequest = new PaymentRequest(); + paymentRequest.paymentToken = paymentToken; + paymentRequest.paymentMethodType = paymentMethodType; + paymentRequest.country = this.taxComponent.taxFormGroup?.value.country; + paymentRequest.postalCode = this.taxComponent.taxFormGroup?.value.postalCode; + await this.organizationApiService.updatePayment(this.organizationId, paymentRequest); } - - const paymentRequest = new PaymentRequest(); - paymentRequest.paymentToken = token; - paymentRequest.paymentMethodType = type; - paymentRequest.country = this.taxComponent.taxFormGroup?.value.country; - paymentRequest.postalCode = this.taxComponent.taxFormGroup?.value.postalCode; - await this.organizationApiService.updatePayment(this.organizationId, paymentRequest); } // Backfill pub/priv key if necessary @@ -744,7 +753,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy { ); const providerKey = await this.cryptoService.getProviderKey(this.providerId); providerRequest.organizationCreateRequest.key = ( - await this.cryptoService.encrypt(orgKey.key, providerKey) + await this.encryptService.encrypt(orgKey.key, providerKey) ).encryptedString; const orgId = ( await this.apiService.postProviderCreateOrganization(this.providerId, providerRequest) diff --git a/apps/web/src/app/tools/send/send-access-file.component.ts b/apps/web/src/app/tools/send/send-access-file.component.ts index 8bb3558a69d..1efabb5fec7 100644 --- a/apps/web/src/app/tools/send/send-access-file.component.ts +++ b/apps/web/src/app/tools/send/send-access-file.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from "@angular/core"; -import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -26,7 +26,7 @@ export class SendAccessFileComponent { constructor( private i18nService: I18nService, private toastService: ToastService, - private cryptoService: CryptoService, + private encryptService: EncryptService, private fileDownloadService: FileDownloadService, private sendApiService: SendApiService, ) {} @@ -62,7 +62,7 @@ export class SendAccessFileComponent { try { const encBuf = await EncArrayBuffer.fromResponse(response); - const decBuf = await this.cryptoService.decryptFromBytes(encBuf, this.decKey); + const decBuf = await this.encryptService.decryptToBytes(encBuf, this.decKey); this.fileDownloadService.download({ fileName: this.send.file.fileName, blobData: decBuf, diff --git a/apps/web/src/app/vault/core/collection-admin.service.ts b/apps/web/src/app/vault/core/collection-admin.service.ts index b6ddd452a1d..e0c15e34047 100644 --- a/apps/web/src/app/vault/core/collection-admin.service.ts +++ b/apps/web/src/app/vault/core/collection-admin.service.ts @@ -3,6 +3,7 @@ import { Injectable } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { SelectionReadOnlyRequest } from "@bitwarden/common/admin-console/models/request/selection-read-only.request"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service"; import { CollectionData } from "@bitwarden/common/vault/models/data/collection.data"; @@ -23,6 +24,7 @@ export class CollectionAdminService { constructor( private apiService: ApiService, private cryptoService: CryptoService, + private encryptService: EncryptService, private collectionService: CollectionService, ) {} @@ -116,7 +118,7 @@ export class CollectionAdminService { const promises = collections.map(async (c) => { const view = new CollectionAdminView(); view.id = c.id; - view.name = await this.cryptoService.decryptToUtf8(new EncString(c.name), orgKey); + view.name = await this.encryptService.decryptToUtf8(new EncString(c.name), orgKey); view.externalId = c.externalId; view.organizationId = c.organizationId; @@ -146,7 +148,7 @@ export class CollectionAdminService { } const collection = new CollectionRequest(); collection.externalId = model.externalId; - collection.name = (await this.cryptoService.encrypt(model.name, key)).encryptedString; + collection.name = (await this.encryptService.encrypt(model.name, key)).encryptedString; collection.groups = model.groups.map( (group) => new SelectionReadOnlyRequest(group.id, group.readOnly, group.hidePasswords, group.manage), diff --git a/apps/web/src/app/vault/individual-vault/add-edit.component.ts b/apps/web/src/app/vault/individual-vault/add-edit.component.ts index d1b51b611f5..9826d9f2f5a 100644 --- a/apps/web/src/app/vault/individual-vault/add-edit.component.ts +++ b/apps/web/src/app/vault/individual-vault/add-edit.component.ts @@ -8,6 +8,7 @@ import { EventCollectionService } from "@bitwarden/common/abstractions/event/eve import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { isCardExpired } from "@bitwarden/common/autofill/utils"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { ProductTierType } from "@bitwarden/common/billing/enums"; import { EventType } from "@bitwarden/common/enums"; @@ -24,7 +25,6 @@ import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folde import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service"; import { CipherType } from "@bitwarden/common/vault/enums"; import { Launchable } from "@bitwarden/common/vault/interfaces/launchable"; -import { isCardExpired } from "@bitwarden/common/vault/utils"; import { DialogService } from "@bitwarden/components"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; import { PasswordRepromptService } from "@bitwarden/vault"; diff --git a/apps/web/src/app/vault/individual-vault/attachments.component.ts b/apps/web/src/app/vault/individual-vault/attachments.component.ts index b578efcae67..bb070ef6887 100644 --- a/apps/web/src/app/vault/individual-vault/attachments.component.ts +++ b/apps/web/src/app/vault/individual-vault/attachments.component.ts @@ -5,6 +5,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -25,6 +26,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { cipherService: CipherService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, stateService: StateService, platformUtilsService: PlatformUtilsService, apiService: ApiService, @@ -39,6 +41,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { cipherService, i18nService, cryptoService, + encryptService, platformUtilsService, apiService, window, diff --git a/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts b/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts index fe61d9b9a11..bc31cdc8cde 100644 --- a/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts +++ b/apps/web/src/app/vault/individual-vault/folder-add-edit.component.ts @@ -1,8 +1,11 @@ import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog"; import { Component, Inject } from "@angular/core"; import { FormBuilder } from "@angular/forms"; +import { firstValueFrom } from "rxjs"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/vault/components/folder-add-edit.component"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -19,6 +22,8 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent { constructor( folderService: FolderService, folderApiService: FolderApiServiceAbstraction, + protected accountSerivce: AccountService, + protected cryptoService: CryptoService, i18nService: I18nService, platformUtilsService: PlatformUtilsService, logService: LogService, @@ -31,6 +36,8 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent { super( folderService, folderApiService, + accountSerivce, + cryptoService, i18nService, platformUtilsService, logService, @@ -73,7 +80,9 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent { } try { - const folder = await this.folderService.encrypt(this.folder); + const activeAccountId = (await firstValueFrom(this.accountSerivce.activeAccount$)).id; + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeAccountId); + const folder = await this.folderService.encrypt(this.folder, userKey); this.formPromise = this.folderApiService.save(folder); await this.formPromise; this.platformUtilsService.showToast( diff --git a/apps/web/src/app/vault/org-vault/attachments.component.ts b/apps/web/src/app/vault/org-vault/attachments.component.ts index 2bba4d389c0..62e65ade5de 100644 --- a/apps/web/src/app/vault/org-vault/attachments.component.ts +++ b/apps/web/src/app/vault/org-vault/attachments.component.ts @@ -5,6 +5,7 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -31,6 +32,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On cipherService: CipherService, i18nService: I18nService, cryptoService: CryptoService, + encryptService: EncryptService, stateService: StateService, platformUtilsService: PlatformUtilsService, apiService: ApiService, @@ -45,6 +47,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent implements On cipherService, i18nService, cryptoService, + encryptService, stateService, platformUtilsService, apiService, diff --git a/apps/web/src/app/vault/org-vault/vault.component.ts b/apps/web/src/app/vault/org-vault/vault.component.ts index fce33a972bf..0a8e8769715 100644 --- a/apps/web/src/app/vault/org-vault/vault.component.ts +++ b/apps/web/src/app/vault/org-vault/vault.component.ts @@ -11,7 +11,6 @@ import { ActivatedRoute, Params, Router } from "@angular/router"; import { BehaviorSubject, combineLatest, - defer, firstValueFrom, lastValueFrom, Observable, @@ -283,27 +282,10 @@ export class VaultComponent implements OnInit, OnDestroy { this.currentSearchText$ = this.route.queryParams.pipe(map((queryParams) => queryParams.search)); - this.allCollectionsWithoutUnassigned$ = combineLatest([ - organizationId$.pipe(switchMap((orgId) => this.collectionAdminService.getAll(orgId))), - defer(() => this.collectionService.getAllDecrypted()), - ]).pipe( - map(([adminCollections, syncCollections]) => { - const syncCollectionDict = Object.fromEntries(syncCollections.map((c) => [c.id, c])); - - return adminCollections.map((collection) => { - const currentId: any = collection.id; - - const match = syncCollectionDict[currentId]; - - if (match) { - collection.manage = match.manage; - collection.readOnly = match.readOnly; - collection.hidePasswords = match.hidePasswords; - } - return collection; - }); - }), - shareReplay({ refCount: true, bufferSize: 1 }), + this.allCollectionsWithoutUnassigned$ = this.refresh$.pipe( + switchMap(() => organizationId$), + switchMap((orgId) => this.collectionAdminService.getAll(orgId)), + shareReplay({ refCount: false, bufferSize: 1 }), ); this.editableCollections$ = this.allCollectionsWithoutUnassigned$.pipe( @@ -367,7 +349,6 @@ export class VaultComponent implements OnInit, OnDestroy { map((ciphers) => { return Object.fromEntries(ciphers.map((c) => [c.id, c])); }), - shareReplay({ refCount: true, bufferSize: 1 }), ); const nestedCollections$ = allCollections$.pipe( diff --git a/bitwarden_license/bit-cli/src/service-container.ts b/bitwarden_license/bit-cli/src/service-container.ts index 716c045fd16..c624afd9460 100644 --- a/bitwarden_license/bit-cli/src/service-container.ts +++ b/bitwarden_license/bit-cli/src/service-container.ts @@ -18,6 +18,7 @@ export class ServiceContainer extends OssServiceContainer { this.organizationAuthRequestService = new OrganizationAuthRequestService( this.organizationAuthRequestApiService, this.cryptoService, + this.encryptService, this.organizationUserApiService, ); } diff --git a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts index a8e6445d331..3ee89cbda51 100644 --- a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts +++ b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.spec.ts @@ -6,6 +6,7 @@ import { } from "@bitwarden/admin-console/common"; import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { OrganizationAuthRequestApiService } from "./organization-auth-request-api.service"; @@ -16,16 +17,19 @@ import { PendingAuthRequestView } from "./pending-auth-request.view"; describe("OrganizationAuthRequestService", () => { let organizationAuthRequestApiService: MockProxy; let cryptoService: MockProxy; + let encryptService: MockProxy; let organizationUserApiService: MockProxy; let organizationAuthRequestService: OrganizationAuthRequestService; beforeEach(() => { organizationAuthRequestApiService = mock(); cryptoService = mock(); + encryptService = mock(); organizationUserApiService = mock(); organizationAuthRequestService = new OrganizationAuthRequestService( organizationAuthRequestApiService, cryptoService, + encryptService, organizationUserApiService, ); }); diff --git a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts index edba399b8b2..ad6e29c5834 100644 --- a/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts +++ b/bitwarden_license/bit-common/src/admin-console/auth-requests/organization-auth-request.service.ts @@ -3,6 +3,7 @@ import { OrganizationUserResetPasswordDetailsResponse, } from "@bitwarden/admin-console/common"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; @@ -15,6 +16,7 @@ export class OrganizationAuthRequestService { constructor( private organizationAuthRequestApiService: OrganizationAuthRequestApiService, private cryptoService: CryptoService, + private encryptService: EncryptService, private organizationUserApiService: OrganizationUserApiService, ) {} @@ -109,7 +111,7 @@ export class OrganizationAuthRequestService { // Decrypt Organization's encrypted Private Key with org key const orgSymKey = await this.cryptoService.getOrgKey(organizationId); - const decOrgPrivateKey = await this.cryptoService.decryptToBytes( + const decOrgPrivateKey = await this.encryptService.decryptToBytes( new EncString(encryptedOrgPrivateKey), orgSymKey, ); diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts index 34c7bba7d0c..e074e0dd315 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/device-approvals/device-approvals.component.ts @@ -10,6 +10,7 @@ import { PendingAuthRequestView } from "@bitwarden/bit-common/admin-console/auth import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -30,7 +31,12 @@ import { SharedModule } from "@bitwarden/web-vault/app/shared/shared.module"; }), safeProvider({ provide: OrganizationAuthRequestService, - deps: [OrganizationAuthRequestApiService, CryptoService, OrganizationUserApiService], + deps: [ + OrganizationAuthRequestApiService, + CryptoService, + EncryptService, + OrganizationUserApiService, + ], }), ] satisfies SafeProvider[], imports: [SharedModule, NoItemsModule, LooseComponentsModule], diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts index 76094646808..3a2c7b8b644 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/providers/services/web-provider.service.ts @@ -27,7 +27,7 @@ export class WebProviderService { const orgKey = await this.cryptoService.getOrgKey(organizationId); const providerKey = await this.cryptoService.getProviderKey(providerId); - const encryptedOrgKey = await this.cryptoService.encrypt(orgKey.key, providerKey); + const encryptedOrgKey = await this.encryptService.encrypt(orgKey.key, providerKey); const request = new ProviderAddOrganizationRequest(); request.organizationId = organizationId; diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 4cdf5be8651..734ae03d59b 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -449,6 +449,7 @@ const safeProviders: SafeProvider[] = [ fileUploadService: CipherFileUploadServiceAbstraction, configService: ConfigService, stateProvider: StateProvider, + accountService: AccountServiceAbstraction, ) => new CipherService( cryptoService, @@ -463,6 +464,7 @@ const safeProviders: SafeProvider[] = [ fileUploadService, configService, stateProvider, + accountService, ), deps: [ CryptoServiceAbstraction, @@ -477,6 +479,7 @@ const safeProviders: SafeProvider[] = [ CipherFileUploadServiceAbstraction, ConfigService, StateProvider, + AccountServiceAbstraction, ], }), safeProvider({ @@ -484,6 +487,7 @@ const safeProviders: SafeProvider[] = [ useClass: FolderService, deps: [ CryptoServiceAbstraction, + EncryptService, I18nServiceAbstraction, CipherServiceAbstraction, StateProvider, @@ -527,7 +531,7 @@ const safeProviders: SafeProvider[] = [ safeProvider({ provide: CollectionServiceAbstraction, useClass: CollectionService, - deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateProvider], + deps: [CryptoServiceAbstraction, EncryptService, I18nServiceAbstraction, StateProvider], }), safeProvider({ provide: EnvironmentService, @@ -785,6 +789,7 @@ const safeProviders: SafeProvider[] = [ I18nServiceAbstraction, CollectionServiceAbstraction, CryptoServiceAbstraction, + EncryptService, PinServiceAbstraction, AccountServiceAbstraction, ], @@ -797,8 +802,10 @@ const safeProviders: SafeProvider[] = [ CipherServiceAbstraction, PinServiceAbstraction, CryptoServiceAbstraction, + EncryptService, CryptoFunctionServiceAbstraction, KdfConfigServiceAbstraction, + AccountServiceAbstraction, ], }), safeProvider({ @@ -809,6 +816,7 @@ const safeProviders: SafeProvider[] = [ ApiServiceAbstraction, PinServiceAbstraction, CryptoServiceAbstraction, + EncryptService, CryptoFunctionServiceAbstraction, CollectionServiceAbstraction, KdfConfigServiceAbstraction, diff --git a/libs/angular/src/vault/components/add-edit.component.ts b/libs/angular/src/vault/components/add-edit.component.ts index 45475440d0a..21a7b35ac51 100644 --- a/libs/angular/src/vault/components/add-edit.component.ts +++ b/libs/angular/src/vault/components/add-edit.component.ts @@ -12,6 +12,7 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli import { OrganizationUserStatusType, PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { normalizeExpiryYearFormat } from "@bitwarden/common/autofill/utils"; import { EventType } from "@bitwarden/common/enums"; import { UriMatchStrategy } from "@bitwarden/common/models/domain/domain-service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; @@ -36,7 +37,6 @@ import { IdentityView } from "@bitwarden/common/vault/models/view/identity.view" import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view"; import { LoginView } from "@bitwarden/common/vault/models/view/login.view"; import { SecureNoteView } from "@bitwarden/common/vault/models/view/secure-note.view"; -import { normalizeExpiryYearFormat } from "@bitwarden/common/vault/utils"; import { DialogService } from "@bitwarden/components"; import { PasswordRepromptService } from "@bitwarden/vault"; @@ -329,6 +329,11 @@ export class AddEditComponent implements OnInit, OnDestroy { this.cipher.card.expYear = normalizeExpiryYearFormat(this.cipher.card.expYear); } + // trim whitespace from the TOTP field + if (this.cipher.type === this.cipherType.Login && this.cipher.login.totp) { + this.cipher.login.totp = this.cipher.login.totp.trim(); + } + if (this.cipher.name == null || this.cipher.name === "") { this.platformUtilsService.showToast( "error", diff --git a/libs/angular/src/vault/components/attachments.component.ts b/libs/angular/src/vault/components/attachments.component.ts index 4ae68c9ca9d..43c5a0d6d41 100644 --- a/libs/angular/src/vault/components/attachments.component.ts +++ b/libs/angular/src/vault/components/attachments.component.ts @@ -6,6 +6,7 @@ import { AccountService } from "@bitwarden/common/auth/abstractions/account.serv import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -40,6 +41,7 @@ export class AttachmentsComponent implements OnInit { protected cipherService: CipherService, protected i18nService: I18nService, protected cryptoService: CryptoService, + protected encryptService: EncryptService, protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService, protected win: Window, @@ -178,7 +180,7 @@ export class AttachmentsComponent implements OnInit { attachment.key != null ? attachment.key : await this.cryptoService.getOrgKey(this.cipher.organizationId); - const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key); + const decBuf = await this.encryptService.decryptToBytes(encBuf, key); this.fileDownloadService.download({ fileName: attachment.fileName, blobData: decBuf, @@ -249,7 +251,7 @@ export class AttachmentsComponent implements OnInit { attachment.key != null ? attachment.key : await this.cryptoService.getOrgKey(this.cipher.organizationId); - const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key); + const decBuf = await this.encryptService.decryptToBytes(encBuf, key); const activeUserId = await firstValueFrom( this.accountService.activeAccount$.pipe(map((a) => a?.id)), ); diff --git a/libs/angular/src/vault/components/folder-add-edit.component.ts b/libs/angular/src/vault/components/folder-add-edit.component.ts index 0f179ae012c..199feb599ff 100644 --- a/libs/angular/src/vault/components/folder-add-edit.component.ts +++ b/libs/angular/src/vault/components/folder-add-edit.component.ts @@ -1,6 +1,9 @@ import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; import { Validators, FormBuilder } from "@angular/forms"; +import { firstValueFrom } from "rxjs"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -29,6 +32,8 @@ export class FolderAddEditComponent implements OnInit { constructor( protected folderService: FolderService, protected folderApiService: FolderApiServiceAbstraction, + protected accountService: AccountService, + protected cryptoService: CryptoService, protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, protected logService: LogService, @@ -52,7 +57,9 @@ export class FolderAddEditComponent implements OnInit { } try { - const folder = await this.folderService.encrypt(this.folder); + const activeAccountId = await firstValueFrom(this.accountService.activeAccount$); + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeAccountId.id); + const folder = await this.folderService.encrypt(this.folder, userKey); this.formPromise = this.folderApiService.save(folder); await this.formPromise; this.platformUtilsService.showToast( diff --git a/libs/angular/src/vault/components/view.component.ts b/libs/angular/src/vault/components/view.component.ts index a6e96bc542a..ac644acf9e4 100644 --- a/libs/angular/src/vault/components/view.component.ts +++ b/libs/angular/src/vault/components/view.component.ts @@ -21,6 +21,7 @@ import { EventType } from "@bitwarden/common/enums"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -87,6 +88,7 @@ export class ViewComponent implements OnDestroy, OnInit { protected tokenService: TokenService, protected i18nService: I18nService, protected cryptoService: CryptoService, + protected encryptService: EncryptService, protected platformUtilsService: PlatformUtilsService, protected auditService: AuditService, protected win: Window, @@ -442,7 +444,7 @@ export class ViewComponent implements OnDestroy, OnInit { attachment.key != null ? attachment.key : await this.cryptoService.getOrgKey(this.cipher.organizationId); - const decBuf = await this.cryptoService.decryptFromBytes(encBuf, key); + const decBuf = await this.encryptService.decryptToBytes(encBuf, key); this.fileDownloadService.download({ fileName: attachment.fileName, blobData: decBuf, diff --git a/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts index b112e5aa2ab..efc6da51d9f 100644 --- a/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/auth-request-login.strategy.spec.ts @@ -12,6 +12,7 @@ import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abs import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -37,6 +38,7 @@ describe("AuthRequestLoginStrategy", () => { let cache: AuthRequestLoginStrategyData; let cryptoService: MockProxy; + let encryptService: MockProxy; let apiService: MockProxy; let tokenService: MockProxy; let appIdService: MockProxy; @@ -101,6 +103,7 @@ describe("AuthRequestLoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, diff --git a/libs/auth/src/common/login-strategies/login.strategy.spec.ts b/libs/auth/src/common/login-strategies/login.strategy.spec.ts index 665857c1f47..35d62ca76b3 100644 --- a/libs/auth/src/common/login-strategies/login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/login.strategy.spec.ts @@ -22,6 +22,7 @@ import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abs import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -104,6 +105,7 @@ describe("LoginStrategy", () => { let loginStrategyService: MockProxy; let cryptoService: MockProxy; + let encryptService: MockProxy; let apiService: MockProxy; let tokenService: MockProxy; let appIdService: MockProxy; @@ -128,6 +130,7 @@ describe("LoginStrategy", () => { loginStrategyService = mock(); cryptoService = mock(); + encryptService = mock(); apiService = mock(); tokenService = mock(); appIdService = mock(); @@ -156,6 +159,7 @@ describe("LoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, @@ -467,6 +471,7 @@ describe("LoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, diff --git a/libs/auth/src/common/login-strategies/login.strategy.ts b/libs/auth/src/common/login-strategies/login.strategy.ts index ff6bf07af7e..2e881f978dc 100644 --- a/libs/auth/src/common/login-strategies/login.strategy.ts +++ b/libs/auth/src/common/login-strategies/login.strategy.ts @@ -26,6 +26,7 @@ import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action import { KeysRequest } from "@bitwarden/common/models/request/keys.request"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -66,6 +67,7 @@ export abstract class LoginStrategy { protected accountService: AccountService, protected masterPasswordService: InternalMasterPasswordServiceAbstraction, protected cryptoService: CryptoService, + protected encryptService: EncryptService, protected apiService: ApiService, protected tokenService: TokenService, protected appIdService: AppIdService, diff --git a/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts index 7ba58e1443a..07cbf2424ab 100644 --- a/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/password-login.strategy.spec.ts @@ -16,6 +16,7 @@ import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abs import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -63,6 +64,7 @@ describe("PasswordLoginStrategy", () => { let loginStrategyService: MockProxy; let cryptoService: MockProxy; + let encryptService: MockProxy; let apiService: MockProxy; let tokenService: MockProxy; let appIdService: MockProxy; @@ -88,6 +90,7 @@ describe("PasswordLoginStrategy", () => { loginStrategyService = mock(); cryptoService = mock(); + encryptService = mock(); apiService = mock(); tokenService = mock(); appIdService = mock(); @@ -127,6 +130,7 @@ describe("PasswordLoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, diff --git a/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts index 8e28a2c0222..f5de10766c0 100644 --- a/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/sso-login.strategy.spec.ts @@ -17,6 +17,7 @@ import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; @@ -44,6 +45,7 @@ describe("SsoLoginStrategy", () => { let masterPasswordService: FakeMasterPasswordService; let cryptoService: MockProxy; + let encryptService: MockProxy; let apiService: MockProxy; let tokenService: MockProxy; let appIdService: MockProxy; @@ -78,6 +80,7 @@ describe("SsoLoginStrategy", () => { masterPasswordService = new FakeMasterPasswordService(); cryptoService = mock(); + encryptService = mock(); apiService = mock(); tokenService = mock(); appIdService = mock(); @@ -125,6 +128,7 @@ describe("SsoLoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, diff --git a/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts index 16614497964..d299a8e0ced 100644 --- a/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/user-api-login.strategy.spec.ts @@ -11,6 +11,7 @@ import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abs import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { Environment, EnvironmentService, @@ -39,6 +40,7 @@ describe("UserApiLoginStrategy", () => { let masterPasswordService: FakeMasterPasswordService; let cryptoService: MockProxy; + let encryptService: MockProxy; let apiService: MockProxy; let tokenService: MockProxy; let appIdService: MockProxy; @@ -99,6 +101,7 @@ describe("UserApiLoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, diff --git a/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts b/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts index 0db41c1e64f..b25022d25df 100644 --- a/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts +++ b/libs/auth/src/common/login-strategies/webauthn-login.strategy.spec.ts @@ -14,6 +14,7 @@ import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abs import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -37,6 +38,7 @@ describe("WebAuthnLoginStrategy", () => { let masterPasswordService: FakeMasterPasswordService; let cryptoService!: MockProxy; + let encryptService!: MockProxy; let apiService!: MockProxy; let tokenService!: MockProxy; let appIdService!: MockProxy; @@ -79,6 +81,7 @@ describe("WebAuthnLoginStrategy", () => { masterPasswordService = new FakeMasterPasswordService(); cryptoService = mock(); + encryptService = mock(); apiService = mock(); tokenService = mock(); appIdService = mock(); @@ -103,6 +106,7 @@ describe("WebAuthnLoginStrategy", () => { accountService, masterPasswordService, cryptoService, + encryptService, apiService, tokenService, appIdService, @@ -221,7 +225,7 @@ describe("WebAuthnLoginStrategy", () => { const mockUserKeyArray: Uint8Array = randomBytes(32); const mockUserKey = new SymmetricCryptoKey(mockUserKeyArray) as UserKey; - cryptoService.decryptToBytes.mockResolvedValue(mockPrfPrivateKey); + encryptService.decryptToBytes.mockResolvedValue(mockPrfPrivateKey); cryptoService.rsaDecrypt.mockResolvedValue(mockUserKeyArray); // Act @@ -235,8 +239,8 @@ describe("WebAuthnLoginStrategy", () => { userId, ); - expect(cryptoService.decryptToBytes).toHaveBeenCalledTimes(1); - expect(cryptoService.decryptToBytes).toHaveBeenCalledWith( + expect(encryptService.decryptToBytes).toHaveBeenCalledTimes(1); + expect(encryptService.decryptToBytes).toHaveBeenCalledWith( idTokenResponse.userDecryptionOptions.webAuthnPrfOption.encryptedPrivateKey, webAuthnCredentials.prfKey, ); @@ -268,7 +272,7 @@ describe("WebAuthnLoginStrategy", () => { await webAuthnLoginStrategy.logIn(webAuthnCredentials); // Assert - expect(cryptoService.decryptToBytes).not.toHaveBeenCalled(); + expect(encryptService.decryptToBytes).not.toHaveBeenCalled(); expect(cryptoService.rsaDecrypt).not.toHaveBeenCalled(); expect(cryptoService.setUserKey).not.toHaveBeenCalled(); }); @@ -303,7 +307,7 @@ describe("WebAuthnLoginStrategy", () => { apiService.postIdentityToken.mockResolvedValue(idTokenResponse); - cryptoService.decryptToBytes.mockResolvedValue(null); + encryptService.decryptToBytes.mockResolvedValue(null); // Act await webAuthnLoginStrategy.logIn(webAuthnCredentials); diff --git a/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts b/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts index d283d163da1..96f8bc7d633 100644 --- a/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts +++ b/libs/auth/src/common/login-strategies/webauthn-login.strategy.ts @@ -80,7 +80,7 @@ export class WebAuthnLoginStrategy extends LoginStrategy { } // decrypt prf encrypted private key - const privateKey = await this.cryptoService.decryptToBytes( + const privateKey = await this.encryptService.decryptToBytes( webAuthnPrfOption.encryptedPrivateKey, credentials.prfKey, ); diff --git a/libs/auth/src/common/services/login-strategies/login-strategy.service.ts b/libs/auth/src/common/services/login-strategies/login-strategy.service.ts index 67bcdc3658e..89c2bc01d94 100644 --- a/libs/auth/src/common/services/login-strategies/login-strategy.service.ts +++ b/libs/auth/src/common/services/login-strategies/login-strategy.service.ts @@ -317,6 +317,7 @@ export class LoginStrategyService implements LoginStrategyServiceAbstraction { this.accountService, this.masterPasswordService, this.cryptoService, + this.encryptService, this.apiService, this.tokenService, this.appIdService, diff --git a/libs/common/src/autofill/constants/index.ts b/libs/common/src/autofill/constants/index.ts index 15005691d29..4ccec81a447 100644 --- a/libs/common/src/autofill/constants/index.ts +++ b/libs/common/src/autofill/constants/index.ts @@ -109,3 +109,5 @@ export type ExtensionCommandType = (typeof ExtensionCommand)[keyof typeof Extens export const CLEAR_NOTIFICATION_LOGIN_DATA_DURATION = 60 * 1000; // 1 minute export const MAX_DEEP_QUERY_RECURSION_DEPTH = 4; + +export * from "./match-patterns"; diff --git a/libs/common/src/autofill/constants/match-patterns.ts b/libs/common/src/autofill/constants/match-patterns.ts new file mode 100644 index 00000000000..f756537d28d --- /dev/null +++ b/libs/common/src/autofill/constants/match-patterns.ts @@ -0,0 +1,26 @@ +export const CardExpiryDateDelimiters: string[] = ["/", "-", ".", " "]; + +// `CardExpiryDateDelimiters` is not intended solely for regex consumption, +// so we need to format it here +export const ExpiryDateDelimitersPattern = + "\\" + + CardExpiryDateDelimiters.join("\\") + // replace space character with the regex whitespace character class + .replace(" ", "s"); + +export const MonthPattern = "(([1]{1}[0-2]{1})|(0?[1-9]{1}))"; + +// Because we're dealing with expiry dates, we assume the year will be in current or next century (as of 2024) +export const ExpiryFullYearPattern = "2[0-1]{1}\\d{2}"; + +export const DelimiterPatternExpression = new RegExp(`[${ExpiryDateDelimitersPattern}]`, "g"); + +export const IrrelevantExpiryCharactersPatternExpression = new RegExp( + // "nor digits" to ensure numbers are removed from guidance pattern, which aren't covered by ^\w + `[^\\d${ExpiryDateDelimitersPattern}]`, + "g", +); + +export const MonthPatternExpression = new RegExp(`^${MonthPattern}$`); + +export const ExpiryFullYearPatternExpression = new RegExp(`^${ExpiryFullYearPattern}$`); diff --git a/libs/common/src/autofill/utils.spec.ts b/libs/common/src/autofill/utils.spec.ts new file mode 100644 index 00000000000..b09dc723b8e --- /dev/null +++ b/libs/common/src/autofill/utils.spec.ts @@ -0,0 +1,284 @@ +import { + normalizeExpiryYearFormat, + isCardExpired, + parseYearMonthExpiry, +} from "@bitwarden/common/autofill/utils"; +import { CardView } from "@bitwarden/common/vault/models/view/card.view"; + +function getExpiryYearValueFormats(currentCentury: string) { + return [ + [-12, `${currentCentury}12`], + [0, `${currentCentury}00`], + [2043, "2043"], // valid year with a length of four should be taken directly + [24, `${currentCentury}24`], + [3054, "3054"], // valid year with a length of four should be taken directly + [31423524543, `${currentCentury}43`], + [4, `${currentCentury}04`], + [null, null], + [undefined, null], + ["-12", `${currentCentury}12`], + ["", null], + ["0", `${currentCentury}00`], + ["00", `${currentCentury}00`], + ["000", `${currentCentury}00`], + ["0000", `${currentCentury}00`], + ["00000", `${currentCentury}00`], + ["0234234", `${currentCentury}34`], + ["04", `${currentCentury}04`], + ["2043", "2043"], // valid year with a length of four should be taken directly + ["24", `${currentCentury}24`], + ["3054", "3054"], // valid year with a length of four should be taken directly + ["31423524543", `${currentCentury}43`], + ["4", `${currentCentury}04`], + ["aaaa", null], + ["adgshsfhjsdrtyhsrth", null], + ["agdredg42grg35grrr. ea3534@#^145345ag$%^ -_#$rdg ", `${currentCentury}45`], + ]; +} + +describe("normalizeExpiryYearFormat", () => { + const currentCentury = `${new Date().getFullYear()}`.slice(0, 2); + + const expiryYearValueFormats = getExpiryYearValueFormats(currentCentury); + + expiryYearValueFormats.forEach(([inputValue, expectedValue]) => { + it(`should return '${expectedValue}' when '${inputValue}' is passed`, () => { + const formattedValue = normalizeExpiryYearFormat(inputValue); + + expect(formattedValue).toEqual(expectedValue); + }); + }); + + describe("in the year 3107", () => { + const theDistantFuture = new Date(Date.UTC(3107, 1, 1)); + jest.spyOn(Date, "now").mockReturnValue(theDistantFuture.valueOf()); + + beforeAll(() => { + jest.useFakeTimers({ advanceTimers: true }); + jest.setSystemTime(theDistantFuture); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + + const currentCentury = `${new Date(Date.now()).getFullYear()}`.slice(0, 2); + expect(currentCentury).toBe("31"); + + const expiryYearValueFormats = getExpiryYearValueFormats(currentCentury); + + expiryYearValueFormats.forEach(([inputValue, expectedValue]) => { + it(`should return '${expectedValue}' when '${inputValue}' is passed`, () => { + const formattedValue = normalizeExpiryYearFormat(inputValue); + + expect(formattedValue).toEqual(expectedValue); + }); + }); + jest.clearAllTimers(); + }); +}); + +function getCardExpiryDateValues() { + const currentDate = new Date(); + + const currentYear = currentDate.getFullYear(); + + // `Date` months are zero-indexed, our expiry date month inputs are one-indexed + const currentMonth = currentDate.getMonth() + 1; + + return [ + [null, null, false], // no month, no year + [undefined, undefined, false], // no month, no year, invalid values + ["", "", false], // no month, no year, invalid values + ["12", "agdredg42grg35grrr. ea3534@#^145345ag$%^ -_#$rdg ", false], // invalid values + ["0", `${currentYear}`, true], // invalid month + ["0", `${currentYear - 1}`, true], // invalid 0 month + ["00", `${currentYear + 1}`, false], // invalid 0 month + [`${currentMonth}`, "0000", true], // current month, in the year 2000 + [null, `${currentYear}`.slice(-2), false], // no month, this year + [null, `${currentYear - 1}`.slice(-2), true], // no month, last year + ["1", null, false], // no year, January + ["1", `${currentYear - 1}`, true], // January last year + ["13", `${currentYear}`, false], // 12 + 1 is Feb. in the next year (Date is zero-indexed) + [`${currentMonth + 36}`, `${currentYear - 1}`, true], // even though the month value would put the date 3 years into the future when calculated with `Date`, an explicit year in the past indicates the card is expired + [`${currentMonth}`, `${currentYear}`, false], // this year, this month (not expired until the month is over) + [`${currentMonth}`, `${currentYear}`.slice(-2), false], // This month, this year (not expired until the month is over) + [`${currentMonth - 1}`, `${currentYear}`, true], // last month + [`${currentMonth - 1}`, `${currentYear + 1}`, false], // 11 months from now + ]; +} + +describe("isCardExpired", () => { + const expiryYearValueFormats = getCardExpiryDateValues(); + + expiryYearValueFormats.forEach( + ([inputMonth, inputYear, expectedValue]: [string | null, string | null, boolean]) => { + it(`should return ${expectedValue} when the card expiry month is ${inputMonth} and the card expiry year is ${inputYear}`, () => { + const testCardView = new CardView(); + testCardView.expMonth = inputMonth; + testCardView.expYear = inputYear; + + const cardIsExpired = isCardExpired(testCardView); + + expect(cardIsExpired).toBe(expectedValue); + }); + }, + ); +}); + +const combinedDateTestValues = [ + " 2024 / 05 ", + "05 2024", + "05 2024", // Tab whitespace character + "05 2024", // Em Quad + "05 2024", // Em Space + "05 2024", // En Quad + "05 2024", // En Space + "05 2024", // Figure Space + "05 2024", // Four-Per-Em Space + "05 2024", // Hair Space + "05 2024", // Ideographic Space + "05 2024", // Medium Mathematical Space + "05 2024", // No-Break Space + "05 2024", // ogham space mark + "05 2024", // Punctuation Space + "05 2024", // Six-Per-Em Space + "05 2024", // Thin Space + "05 2024", // Three-Per-Em Space + "05 24", + "05-2024", + "05-24", + "05.2024", + "05.24", + "05/2024", + "05/24", + "052024", + "0524", + "2024 05", + "2024 5", + "2024-05", + "2024-5", + "2024.05", + "2024.5", + "2024/05", + "2024/5", + "202405", + "20245", + "24 05", + "24 5", + "24-05", + "24-5", + "24.05", + "24.5", + "24/05", + "24/5", + "2405", + "5 2024", + "5 24", + "5-2024", + "5-24", + "5.2024", + "5.24", + "5/2024", + "5/24", + "52024", +]; +const expectedParsedValue = ["2024", "5"]; +describe("parseYearMonthExpiry", () => { + it('returns "null" expiration year and month values when a value of "" is passed', () => { + expect(parseYearMonthExpiry("")).toStrictEqual([null, null]); + }); + + it('returns "null" expiration year and month values when a value of "/" is passed', () => { + expect(parseYearMonthExpiry("/")).toStrictEqual([null, null]); + }); + + combinedDateTestValues.forEach((combinedDate) => { + it(`returns an expiration year value of "${expectedParsedValue[0]}" and month value of "${expectedParsedValue[1]}" when a value of "${combinedDate}" is passed`, () => { + expect(parseYearMonthExpiry(combinedDate)).toStrictEqual(expectedParsedValue); + }); + }); + + it('returns an expiration year value of "2002" and month value of "2" when a value of "022" is passed', () => { + expect(parseYearMonthExpiry("022")).toStrictEqual(["2002", "2"]); + }); + + it('returns an expiration year value of "2002" and month value of "2" when a value of "202" is passed', () => { + expect(parseYearMonthExpiry("202")).toStrictEqual(["2002", "2"]); + }); + + it('returns an expiration year value of "2002" and month value of "1" when a value of "1/2/3/4" is passed', () => { + expect(parseYearMonthExpiry("1/2/3/4")).toStrictEqual(["2002", "1"]); + }); + + it('returns valid expiration year and month values when a value of "198" is passed', () => { + // This static value will cause the test to fail in 2098 + const testValue = "198"; + const parsedValue = parseYearMonthExpiry(testValue); + + expect(parsedValue[0]).toHaveLength(4); + expect(parsedValue[1]).toMatch(/^[\d]{1,2}$/); + + expect(parsedValue).toStrictEqual(["2098", "1"]); + }); + + // Ambiguous input cases: we use try/catch for these cases as a workaround to accept either + // outcome (both are valid interpretations) in the event of any future code changes. + describe("ambiguous input cases", () => { + it('returns valid expiration year and month values when a value of "111" is passed', () => { + const testValue = "111"; + const parsedValue = parseYearMonthExpiry(testValue); + + expect(parsedValue[0]).toHaveLength(4); + expect(parsedValue[1]).toMatch(/^[\d]{1,2}$/); + + try { + expect(parsedValue).toStrictEqual(["2011", "1"]); + } catch { + expect(parsedValue).toStrictEqual(["2001", "11"]); + } + }); + + it('returns valid expiration year and month values when a value of "212" is passed', () => { + const testValue = "212"; + const parsedValue = parseYearMonthExpiry(testValue); + + expect(parsedValue[0]).toHaveLength(4); + expect(parsedValue[1]).toMatch(/^[\d]{1,2}$/); + + try { + expect(parsedValue).toStrictEqual(["2012", "2"]); + } catch { + expect(parsedValue).toStrictEqual(["2021", "2"]); + } + }); + + it('returns valid expiration year and month values when a value of "245" is passed', () => { + const testValue = "245"; + const parsedValue = parseYearMonthExpiry(testValue); + + expect(parsedValue[0]).toHaveLength(4); + expect(parsedValue[1]).toMatch(/^[\d]{1,2}$/); + + try { + expect(parsedValue).toStrictEqual(["2045", "2"]); + } catch { + expect(parsedValue).toStrictEqual(["2024", "5"]); + } + }); + + it('returns valid expiration year and month values when a value of "524" is passed', () => { + const testValue = "524"; + const parsedValue = parseYearMonthExpiry(testValue); + + expect(parsedValue[0]).toHaveLength(4); + expect(parsedValue[1]).toMatch(/^[\d]{1,2}$/); + + try { + expect(parsedValue).toStrictEqual(["2024", "5"]); + } catch { + expect(parsedValue).toStrictEqual(["2052", "4"]); + } + }); + }); +}); diff --git a/libs/common/src/autofill/utils.ts b/libs/common/src/autofill/utils.ts new file mode 100644 index 00000000000..86411691ea2 --- /dev/null +++ b/libs/common/src/autofill/utils.ts @@ -0,0 +1,307 @@ +import { + DelimiterPatternExpression, + ExpiryFullYearPattern, + ExpiryFullYearPatternExpression, + IrrelevantExpiryCharactersPatternExpression, + MonthPatternExpression, +} from "@bitwarden/common/autofill/constants"; +import { CardView } from "@bitwarden/common/vault/models/view/card.view"; + +type NonZeroIntegers = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +type Year = `${NonZeroIntegers}${NonZeroIntegers}${0 | NonZeroIntegers}${0 | NonZeroIntegers}`; + +/** + * Takes a string or number value and returns a string value formatted as a valid 4-digit year + * + * @param {(string | number)} yearInput + * @return {*} {(Year | null)} + */ +export function normalizeExpiryYearFormat(yearInput: string | number): Year | null { + // The input[type="number"] is returning a number, convert it to a string + // An empty field returns null, avoid casting `"null"` to a string + const yearInputIsEmpty = yearInput == null || yearInput === ""; + let expirationYear = yearInputIsEmpty ? null : `${yearInput}`; + + // Exit early if year is already formatted correctly or empty + if (yearInputIsEmpty || /^[1-9]{1}\d{3}$/.test(expirationYear)) { + return expirationYear as Year; + } + + expirationYear = expirationYear + // For safety, because even input[type="number"] will allow decimals + .replace(/[^\d]/g, "") + // remove any leading zero padding (leave the last leading zero if it ends the string) + .replace(/^[0]+(?=.)/, ""); + + if (expirationYear === "") { + expirationYear = null; + } + + // given the context of payment card expiry, a year character length of 3, or over 4 + // is more likely to be a mistake than an intentional value for the far past or far future. + if (expirationYear && expirationYear.length !== 4) { + const paddedYear = ("00" + expirationYear).slice(-2); + const currentCentury = `${new Date().getFullYear()}`.slice(0, 2); + + expirationYear = currentCentury + paddedYear; + } + + return expirationYear as Year | null; +} + +/** + * Takes a cipher card view and returns "true" if the month and year affirmativey indicate + * the card is expired. + * + * @param {CardView} cipherCard + * @return {*} {boolean} + */ +export function isCardExpired(cipherCard: CardView): boolean { + if (cipherCard) { + const { expMonth = null, expYear = null } = cipherCard; + + const now = new Date(); + const normalizedYear = normalizeExpiryYearFormat(expYear); + + // If the card year is before the current year, don't bother checking the month + if (normalizedYear && parseInt(normalizedYear, 10) < now.getFullYear()) { + return true; + } + + if (normalizedYear && expMonth) { + const parsedMonthInteger = parseInt(expMonth, 10); + + const parsedMonth = isNaN(parsedMonthInteger) + ? 0 + : // Add a month floor of 0 to protect against an invalid low month value of "0" or negative integers + Math.max( + // `Date` months are zero-indexed + parsedMonthInteger - 1, + 0, + ); + + const parsedYear = parseInt(normalizedYear, 10); + + // First day of the next month minus one, to get last day of the card month + const cardExpiry = new Date(parsedYear, parsedMonth + 1, 0); + + return cardExpiry < now; + } + } + + return false; +} + +/** + * Attempt to split a string into date segments on the basis of expected formats and delimiter symbols. + * + * @param {string} combinedExpiryValue + * @return {*} {string[]} + */ +function splitCombinedDateValues(combinedExpiryValue: string): string[] { + let sanitizedValue = combinedExpiryValue + .replace(IrrelevantExpiryCharactersPatternExpression, "") + .trim(); + + // Do this after initial value replace to avoid identifying leading whitespace as delimiter + const parsedDelimiter = sanitizedValue.match(DelimiterPatternExpression)?.[0] || null; + + let dateParts = [sanitizedValue]; + + if (parsedDelimiter?.length) { + // If the parsed delimiter is a whitespace character, assign 's' (character class) instead + const delimiterPattern = /\s/.test(parsedDelimiter) ? "\\s" : "\\" + parsedDelimiter; + + sanitizedValue = sanitizedValue + // Remove all other delimiter characters not identified as the delimiter + .replace(new RegExp(`[^\\d${delimiterPattern}]`, "g"), "") + // Also de-dupe the delimiter character + .replace(new RegExp(`[${delimiterPattern}]{2,}`, "g"), parsedDelimiter); + + dateParts = sanitizedValue.split(parsedDelimiter); + } + + return ( + dateParts + // remove values that have no length + .filter((splitValue) => splitValue?.length) + ); +} + +/** + * Given an array of split card expiry date parts, + * returns an array of those values ordered by year then month + * + * @param {string[]} splitDateInput + * @return {*} {([string | null, string | null])} + */ +function parseDelimitedYearMonthExpiry([firstPart, secondPart]: string[]): [string, string] { + // Conditionals here are structured to avoid unnecessary evaluations and are ordered + // from more authoritative checks to checks yielding increasingly inferred conclusions + + // If a 4-digit value is found (when there are multiple parts), it can't be month + if (ExpiryFullYearPatternExpression.test(firstPart)) { + return [firstPart, secondPart]; + } + + // If a 4-digit value is found (when there are multiple parts), it can't be month + if (ExpiryFullYearPatternExpression.test(secondPart)) { + return [secondPart, firstPart]; + } + + // If it's a two digit value that doesn't match against month pattern, assume it's a year + if (/\d{2}/.test(firstPart) && !MonthPatternExpression.test(firstPart)) { + return [firstPart, secondPart]; + } + + // If it's a two digit value that doesn't match against month pattern, assume it's a year + if (/\d{2}/.test(secondPart) && !MonthPatternExpression.test(secondPart)) { + return [secondPart, firstPart]; + } + + // Values are too ambiguous (e.g. "12/09"). For the most part, + // a month-looking value likely is, at the time of writing (year 2024). + let parsedYear = firstPart; + let parsedMonth = secondPart; + + if (MonthPatternExpression.test(firstPart)) { + parsedYear = secondPart; + parsedMonth = firstPart; + } + + return [parsedYear, parsedMonth]; +} + +/** + * Given a single string of integers, attempts to identify card expiry date portions within + * and return values ordered by year then month + * + * @param {string} dateInput + * @return {*} {([string | null, string | null])} + */ +function parseNonDelimitedYearMonthExpiry(dateInput: string): [string | null, string | null] { + if (dateInput.length > 4) { + // e.g. + // "052024" + // "202405" + // "20245" + // "52024" + + // If the value is over 5-characters long, it likely has a full year format in it + const [parsedYear, parsedMonth] = dateInput + .split(new RegExp(`(?=${ExpiryFullYearPattern})|(?<=${ExpiryFullYearPattern})`, "g")) + .sort((current: string, next: string) => (current.length > next.length ? -1 : 1)); + + return [parsedYear, parsedMonth]; + } + + if (dateInput.length === 4) { + // e.g. + // "0524" + // "2405" + + // If the `sanitizedFirstPart` value is a length of 4, it must be split in half, since + // neither a year or month will be represented with three characters + const splitFirstPartFirstHalf = dateInput.slice(0, 2); + const splitFirstPartSecondHalf = dateInput.slice(-2); + + let parsedYear = splitFirstPartSecondHalf; + let parsedMonth = splitFirstPartFirstHalf; + + // If the first part doesn't match a month pattern, assume it's a year + if (!MonthPatternExpression.test(splitFirstPartFirstHalf)) { + parsedYear = splitFirstPartFirstHalf; + parsedMonth = splitFirstPartSecondHalf; + } + + return [parsedYear, parsedMonth]; + } + + // e.g. + // "245" + // "202" + // "212" + // "022" + // "111" + + // A valid year representation here must be two characters so try to find it first. + + let parsedYear = null; + let parsedMonth = null; + + // Split if there is a digit with a leading zero + const splitFirstPartOnLeadingZero = dateInput.split(/(?<=0[1-9]{1})|(?=0[1-9]{1})/); + + // Assume a leading zero indicates a month in ambiguous cases (e.g. "202"), since we're + // dealing with expiry dates and the next two-digit year with a leading zero will be 2100 + if (splitFirstPartOnLeadingZero.length > 1) { + parsedYear = splitFirstPartOnLeadingZero[0]; + parsedMonth = splitFirstPartOnLeadingZero[1]; + + if (splitFirstPartOnLeadingZero[0].startsWith("0")) { + parsedMonth = splitFirstPartOnLeadingZero[0]; + parsedYear = splitFirstPartOnLeadingZero[1]; + } + } else { + // Here, a year has to be two-digits, and a month can't be more than one, so assume the first two digits that are greater than the current year is the year representation. + parsedYear = dateInput.slice(0, 2); + parsedMonth = dateInput.slice(-1); + + const currentYear = new Date().getFullYear(); + const normalizedParsedYear = parseInt(normalizeExpiryYearFormat(parsedYear), 10); + const normalizedParsedYearAlternative = parseInt( + normalizeExpiryYearFormat(dateInput.slice(-2)), + 10, + ); + + if (normalizedParsedYear < currentYear && normalizedParsedYearAlternative >= currentYear) { + parsedYear = dateInput.slice(-2); + parsedMonth = dateInput.slice(0, 1); + } + } + + return [parsedYear, parsedMonth]; +} + +/** + * Attempt to parse year and month parts of a combined expiry date value. + * + * @param {string} combinedExpiryValue + * @return {*} {([string | null, string | null])} + */ +export function parseYearMonthExpiry(combinedExpiryValue: string): [Year | null, string | null] { + let parsedYear = null; + let parsedMonth = null; + + const dateParts = splitCombinedDateValues(combinedExpiryValue); + + if (dateParts.length < 1) { + return [null, null]; + } + + const sanitizedFirstPart = + dateParts[0]?.replace(IrrelevantExpiryCharactersPatternExpression, "") || ""; + const sanitizedSecondPart = + dateParts[1]?.replace(IrrelevantExpiryCharactersPatternExpression, "") || ""; + + // If there is only one date part, no delimiter was found in the passed value + if (dateParts.length === 1) { + [parsedYear, parsedMonth] = parseNonDelimitedYearMonthExpiry(sanitizedFirstPart); + } + // There are multiple date parts + else { + [parsedYear, parsedMonth] = parseDelimitedYearMonthExpiry([ + sanitizedFirstPart, + sanitizedSecondPart, + ]); + } + + const normalizedParsedYear = normalizeExpiryYearFormat(parsedYear); + const normalizedParsedMonth = parsedMonth?.replace(/^0+/, "").slice(0, 2); + + // Set "empty" values to null + parsedYear = normalizedParsedYear?.length ? normalizedParsedYear : null; + parsedMonth = normalizedParsedMonth?.length ? normalizedParsedMonth : null; + + return [parsedYear, parsedMonth]; +} diff --git a/libs/common/src/platform/abstractions/crypto.service.ts b/libs/common/src/platform/abstractions/crypto.service.ts index 1fe97e023f2..2a8e1ad6476 100644 --- a/libs/common/src/platform/abstractions/crypto.service.ts +++ b/libs/common/src/platform/abstractions/crypto.service.ts @@ -15,7 +15,6 @@ import { UserPublicKey, } from "../../types/key"; import { KeySuffixOptions, HashPurpose } from "../enums"; -import { EncArrayBuffer } from "../models/domain/enc-array-buffer"; import { EncString } from "../models/domain/enc-string"; import { SymmetricCryptoKey } from "../models/domain/symmetric-crypto-key"; @@ -373,37 +372,6 @@ export abstract class CryptoService { * @param userId The desired user */ abstract clearDeprecatedKeys(keySuffix: KeySuffixOptions, userId?: string): Promise; - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.encrypt - */ - abstract encrypt(plainValue: string | Uint8Array, key?: SymmetricCryptoKey): Promise; - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.encryptToBytes - */ - abstract encryptToBytes( - plainValue: Uint8Array, - key?: SymmetricCryptoKey, - ): Promise; - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.decryptToBytes - */ - abstract decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise; - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.decryptToUtf8 - */ - abstract decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise; - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.decryptToBytes - */ - abstract decryptFromBytes( - encBuffer: EncArrayBuffer, - key: SymmetricCryptoKey, - ): Promise; /** * Retrieves all the keys needed for decrypting Ciphers diff --git a/libs/common/src/platform/services/crypto.service.ts b/libs/common/src/platform/services/crypto.service.ts index 8ce2b5e1a0c..6a93ac7f3ff 100644 --- a/libs/common/src/platform/services/crypto.service.ts +++ b/libs/common/src/platform/services/crypto.service.ts @@ -48,7 +48,6 @@ import { StateService } from "../abstractions/state.service"; import { KeySuffixOptions, HashPurpose, EncryptionType } from "../enums"; import { convertValues } from "../misc/convert-values"; import { EFFLongWordList } from "../misc/wordlist"; -import { EncArrayBuffer } from "../models/domain/enc-array-buffer"; import { EncString, EncryptedString } from "../models/domain/enc-string"; import { SymmetricCryptoKey } from "../models/domain/symmetric-crypto-key"; import { ActiveUserState, StateProvider } from "../state"; @@ -859,58 +858,6 @@ export class CryptoService implements CryptoServiceAbstraction { } } - // --DEPRECATED METHODS-- - - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.encrypt - */ - async encrypt(plainValue: string | Uint8Array, key?: SymmetricCryptoKey): Promise { - key ||= await this.getUserKeyWithLegacySupport(); - return await this.encryptService.encrypt(plainValue, key); - } - - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.encryptToBytes - */ - async encryptToBytes(plainValue: Uint8Array, key?: SymmetricCryptoKey): Promise { - key ||= await this.getUserKeyWithLegacySupport(); - return this.encryptService.encryptToBytes(plainValue, key); - } - - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.decryptToBytes - */ - async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise { - key ||= await this.getUserKeyWithLegacySupport(); - return this.encryptService.decryptToBytes(encString, key); - } - - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.decryptToUtf8 - */ - async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise { - key ||= await this.getUserKeyWithLegacySupport(); - return await this.encryptService.decryptToUtf8(encString, key); - } - - /** - * @deprecated July 25 2022: Get the key you need from CryptoService (getKeyForUserEncryption or getOrgKey) - * and then call encryptService.decryptToBytes - */ - async decryptFromBytes(encBuffer: EncArrayBuffer, key: SymmetricCryptoKey): Promise { - if (encBuffer == null) { - throw new Error("No buffer provided for decryption."); - } - - key ||= await this.getUserKeyWithLegacySupport(); - - return this.encryptService.decryptToBytes(encBuffer, key); - } - userKey$(userId: UserId): Observable { return this.stateProvider.getUser(userId, USER_KEY).state$; } diff --git a/libs/common/src/tools/send/models/domain/send.spec.ts b/libs/common/src/tools/send/models/domain/send.spec.ts index bd42ab09cf9..5b1d7e73dae 100644 --- a/libs/common/src/tools/send/models/domain/send.spec.ts +++ b/libs/common/src/tools/send/models/domain/send.spec.ts @@ -1,5 +1,8 @@ import { mock } from "jest-mock-extended"; +import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { UserKey } from "@bitwarden/common/types/key"; + import { makeStaticByteArray, mockEnc } from "../../../../../spec"; import { CryptoService } from "../../../../platform/abstractions/crypto.service"; import { EncryptService } from "../../../../platform/abstractions/encrypt.service"; @@ -89,6 +92,7 @@ describe("Send", () => { it("Decrypt", async () => { const text = mock(); text.decrypt.mockResolvedValue("textView" as any); + const userKey = new SymmetricCryptoKey(new Uint8Array(32)) as UserKey; const send = new Send(); send.id = "id"; @@ -106,13 +110,13 @@ describe("Send", () => { send.disabled = false; send.hideEmail = true; + const encryptService = mock(); const cryptoService = mock(); - cryptoService.decryptToBytes - .calledWith(send.key, null) + encryptService.decryptToBytes + .calledWith(send.key, userKey) .mockResolvedValue(makeStaticByteArray(32)); cryptoService.makeSendKey.mockResolvedValue("cryptoKey" as any); - - const encryptService = mock(); + cryptoService.getUserKey.mockResolvedValue(userKey); (window as any).bitwardenContainerService = new ContainerService(cryptoService, encryptService); diff --git a/libs/common/src/tools/send/models/domain/send.ts b/libs/common/src/tools/send/models/domain/send.ts index 610980062b6..41d1fecc10b 100644 --- a/libs/common/src/tools/send/models/domain/send.ts +++ b/libs/common/src/tools/send/models/domain/send.ts @@ -73,9 +73,11 @@ export class Send extends Domain { const model = new SendView(this); const cryptoService = Utils.getContainerService().getCryptoService(); + const encryptService = Utils.getContainerService().getEncryptService(); try { - model.key = await cryptoService.decryptToBytes(this.key, null); + const sendKeyEncryptionKey = await cryptoService.getUserKey(); + model.key = await encryptService.decryptToBytes(this.key, sendKeyEncryptionKey); model.cryptoKey = await cryptoService.makeSendKey(model.key); } catch (e) { // TODO: error? diff --git a/libs/common/src/vault/abstractions/folder/folder.service.abstraction.ts b/libs/common/src/vault/abstractions/folder/folder.service.abstraction.ts index 3480a8aca03..857915ddb80 100644 --- a/libs/common/src/vault/abstractions/folder/folder.service.abstraction.ts +++ b/libs/common/src/vault/abstractions/folder/folder.service.abstraction.ts @@ -15,7 +15,7 @@ export abstract class FolderService implements UserKeyRotationDataProvider; clearCache: () => Promise; - encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise; + encrypt: (model: FolderView, key: SymmetricCryptoKey) => Promise; get: (id: string) => Promise; getDecrypted$: (id: string) => Observable; getAllFromState: () => Promise; diff --git a/libs/common/src/vault/models/view/card.view.ts b/libs/common/src/vault/models/view/card.view.ts index f3bf4e1fab2..fad10851e6a 100644 --- a/libs/common/src/vault/models/view/card.view.ts +++ b/libs/common/src/vault/models/view/card.view.ts @@ -1,8 +1,8 @@ import { Jsonify } from "type-fest"; +import { normalizeExpiryYearFormat } from "../../../autofill/utils"; import { CardLinkedId as LinkedId } from "../../enums"; import { linkedFieldOption } from "../../linked-field-option.decorator"; -import { normalizeExpiryYearFormat } from "../../utils"; import { ItemView } from "./item.view"; diff --git a/libs/common/src/vault/services/cipher.service.spec.ts b/libs/common/src/vault/services/cipher.service.spec.ts index b2712dee559..0873fa9d928 100644 --- a/libs/common/src/vault/services/cipher.service.spec.ts +++ b/libs/common/src/vault/services/cipher.service.spec.ts @@ -145,6 +145,7 @@ describe("Cipher Service", () => { cipherFileUploadService, configService, stateProvider, + accountService, ); cipherObj = new Cipher(cipherData); @@ -273,7 +274,7 @@ describe("Cipher Service", () => { cryptoService.makeCipherKey.mockReturnValue( Promise.resolve(new SymmetricCryptoKey(makeStaticByteArray(64)) as CipherKey), ); - cryptoService.encrypt.mockImplementation(encryptText); + encryptService.encrypt.mockImplementation(encryptText); jest.spyOn(cipherService as any, "getAutofillOnPageLoadDefault").mockResolvedValue(true); }); @@ -285,6 +286,10 @@ describe("Cipher Service", () => { { uri: "uri", match: UriMatchStrategy.RegularExpression } as LoginUriView, ]; + cryptoService.getOrgKey.mockReturnValue( + Promise.resolve(new SymmetricCryptoKey(new Uint8Array(32)) as OrgKey), + ); + const domain = await cipherService.encrypt(cipherView, userId); expect(domain.login.uris).toEqual([ @@ -301,6 +306,9 @@ describe("Cipher Service", () => { it("is null when feature flag is false", async () => { configService.getFeatureFlag.mockResolvedValue(false); + cryptoService.getOrgKey.mockReturnValue( + Promise.resolve(new SymmetricCryptoKey(new Uint8Array(32)) as OrgKey), + ); const cipher = await cipherService.encrypt(cipherView, userId); expect(cipher.key).toBeNull(); @@ -322,6 +330,9 @@ describe("Cipher Service", () => { it("is not called when feature flag is false", async () => { configService.getFeatureFlag.mockResolvedValue(false); + cryptoService.getOrgKey.mockReturnValue( + Promise.resolve(new SymmetricCryptoKey(new Uint8Array(32)) as OrgKey), + ); await cipherService.encrypt(cipherView, userId); @@ -330,6 +341,9 @@ describe("Cipher Service", () => { it("is called when feature flag is true", async () => { configService.getFeatureFlag.mockResolvedValue(true); + cryptoService.getOrgKey.mockReturnValue( + Promise.resolve(new SymmetricCryptoKey(new Uint8Array(32)) as OrgKey), + ); await cipherService.encrypt(cipherView, userId); diff --git a/libs/common/src/vault/services/cipher.service.ts b/libs/common/src/vault/services/cipher.service.ts index 70b7c77fc15..9761387284f 100644 --- a/libs/common/src/vault/services/cipher.service.ts +++ b/libs/common/src/vault/services/cipher.service.ts @@ -1,6 +1,7 @@ import { firstValueFrom, map, Observable, skipWhile, switchMap } from "rxjs"; import { SemVer } from "semver"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { BulkEncryptService } from "@bitwarden/common/platform/abstractions/bulk-encrypt.service"; @@ -108,6 +109,7 @@ export class CipherService implements CipherServiceAbstraction { private cipherFileUploadService: CipherFileUploadService, private configService: ConfigService, private stateProvider: StateProvider, + private accountService: AccountService, ) { this.localDataState = this.stateProvider.getActive(LOCAL_DATA_KEY); this.encryptedCiphersState = this.stateProvider.getActive(ENCRYPTED_CIPHERS); @@ -165,7 +167,7 @@ export class CipherService implements CipherServiceAbstraction { async encrypt( model: CipherView, userId: UserId, - keyForEncryption?: SymmetricCryptoKey, + keyForCipherEncryption?: SymmetricCryptoKey, keyForCipherKeyDecryption?: SymmetricCryptoKey, originalCipher: Cipher = null, ): Promise { @@ -195,26 +197,21 @@ export class CipherService implements CipherServiceAbstraction { const userOrOrgKey = await this.getKeyForCipherKeyDecryption(cipher, userId); // The keyForEncryption is only used for encrypting the cipher key, not the cipher itself, since cipher key encryption is enabled. // If the caller has provided a key for cipher key encryption, use it. Otherwise, use the user or org key. - keyForEncryption ||= userOrOrgKey; + keyForCipherEncryption ||= userOrOrgKey; // If the caller has provided a key for cipher key decryption, use it. Otherwise, use the user or org key. keyForCipherKeyDecryption ||= userOrOrgKey; return this.encryptCipherWithCipherKey( model, cipher, - keyForEncryption, + keyForCipherEncryption, keyForCipherKeyDecryption, ); } else { - if (keyForEncryption == null && cipher.organizationId != null) { - keyForEncryption = await this.cryptoService.getOrgKey(cipher.organizationId); - if (keyForEncryption == null) { - throw new Error("Cannot encrypt cipher for organization. No key."); - } - } + keyForCipherEncryption ||= await this.getKeyForCipherKeyDecryption(cipher, userId); // We want to ensure that the cipher key is null if cipher key encryption is disabled // so that decryption uses the proper key. cipher.key = null; - return this.encryptCipher(model, cipher, keyForEncryption); + return this.encryptCipher(model, cipher, keyForCipherEncryption); } } @@ -243,7 +240,7 @@ export class CipherService implements CipherServiceAbstraction { key, ).then(async () => { if (model.key != null) { - attachment.key = await this.cryptoService.encrypt(model.key.key, key); + attachment.key = await this.encryptService.encrypt(model.key.key, key); } encAttachments.push(attachment); }); @@ -1348,7 +1345,9 @@ export class CipherService implements CipherServiceAbstraction { } const encBuf = await EncArrayBuffer.fromResponse(attachmentResponse); - const decBuf = await this.cryptoService.decryptFromBytes(encBuf, null); + const activeUserId = await firstValueFrom(this.accountService.activeAccount$); + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeUserId.id); + const decBuf = await this.encryptService.decryptToBytes(encBuf, userKey); let encKey: UserKey | OrgKey; encKey = await this.cryptoService.getOrgKey(organizationId); @@ -1412,7 +1411,7 @@ export class CipherService implements CipherServiceAbstraction { .then(() => { const modelProp = (model as any)[map[theProp] || theProp]; if (modelProp && modelProp !== "") { - return self.cryptoService.encrypt(modelProp, key); + return self.encryptService.encrypt(modelProp, key); } return null; }) @@ -1458,7 +1457,7 @@ export class CipherService implements CipherServiceAbstraction { key, ); const uriHash = await this.encryptService.hash(model.login.uris[i].uri, "sha256"); - loginUri.uriChecksum = await this.cryptoService.encrypt(uriHash, key); + loginUri.uriChecksum = await this.encryptService.encrypt(uriHash, key); cipher.login.uris.push(loginUri); } } @@ -1485,8 +1484,8 @@ export class CipherService implements CipherServiceAbstraction { }, key, ); - domainKey.counter = await this.cryptoService.encrypt(String(viewKey.counter), key); - domainKey.discoverable = await this.cryptoService.encrypt( + domainKey.counter = await this.encryptService.encrypt(String(viewKey.counter), key); + domainKey.discoverable = await this.encryptService.encrypt( String(viewKey.discoverable), key, ); @@ -1605,11 +1604,23 @@ export class CipherService implements CipherServiceAbstraction { this.sortedCiphersCache.clear(); } + /** + * Encrypts a cipher object. + * @param model The cipher view model. + * @param cipher The cipher object. + * @param key The encryption key to encrypt with. This can be the org key, user key or cipher key, but must never be null + */ private async encryptCipher( model: CipherView, cipher: Cipher, key: SymmetricCryptoKey, ): Promise { + if (key == null) { + throw new Error( + "Key to encrypt cipher must not be null. Use the org key, user key or cipher key.", + ); + } + await Promise.all([ this.encryptObjProperty( model, diff --git a/libs/common/src/vault/services/collection.service.ts b/libs/common/src/vault/services/collection.service.ts index e9ad09a4831..09d21390aea 100644 --- a/libs/common/src/vault/services/collection.service.ts +++ b/libs/common/src/vault/services/collection.service.ts @@ -1,6 +1,8 @@ import { firstValueFrom, map, Observable } from "rxjs"; import { Jsonify } from "type-fest"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; + import { CryptoService } from "../../platform/abstractions/crypto.service"; import { I18nService } from "../../platform/abstractions/i18n.service"; import { Utils } from "../../platform/misc/utils"; @@ -61,6 +63,7 @@ export class CollectionService implements CollectionServiceAbstraction { constructor( private cryptoService: CryptoService, + private encryptService: EncryptService, private i18nService: I18nService, protected stateProvider: StateProvider, ) { @@ -101,7 +104,7 @@ export class CollectionService implements CollectionServiceAbstraction { collection.organizationId = model.organizationId; collection.readOnly = model.readOnly; collection.externalId = model.externalId; - collection.name = await this.cryptoService.encrypt(model.name, key); + collection.name = await this.encryptService.encrypt(model.name, key); return collection; } diff --git a/libs/common/src/vault/services/folder/folder.service.spec.ts b/libs/common/src/vault/services/folder/folder.service.spec.ts index c27ea7646b0..05e1cdebc93 100644 --- a/libs/common/src/vault/services/folder/folder.service.spec.ts +++ b/libs/common/src/vault/services/folder/folder.service.spec.ts @@ -49,7 +49,13 @@ describe("Folder Service", () => { ); encryptService.decryptToUtf8.mockResolvedValue("DEC"); - folderService = new FolderService(cryptoService, i18nService, cipherService, stateProvider); + folderService = new FolderService( + cryptoService, + encryptService, + i18nService, + cipherService, + stateProvider, + ); folderState = stateProvider.activeUser.getFake(FOLDER_ENCRYPTED_FOLDERS); @@ -62,9 +68,9 @@ describe("Folder Service", () => { model.id = "2"; model.name = "Test Folder"; - cryptoService.encrypt.mockResolvedValue(new EncString("ENC")); + encryptService.encrypt.mockResolvedValue(new EncString("ENC")); - const result = await folderService.encrypt(model); + const result = await folderService.encrypt(model, null); expect(result).toEqual({ id: "2", @@ -185,7 +191,7 @@ describe("Folder Service", () => { beforeEach(() => { encryptedKey = new EncString("Re-encrypted Folder"); - cryptoService.encrypt.mockResolvedValue(encryptedKey); + encryptService.encrypt.mockResolvedValue(encryptedKey); }); it("returns re-encrypted user folders", async () => { diff --git a/libs/common/src/vault/services/folder/folder.service.ts b/libs/common/src/vault/services/folder/folder.service.ts index 0c17d7178b2..2adbc8c6d0e 100644 --- a/libs/common/src/vault/services/folder/folder.service.ts +++ b/libs/common/src/vault/services/folder/folder.service.ts @@ -1,5 +1,7 @@ import { Observable, firstValueFrom, map, shareReplay } from "rxjs"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; + import { CryptoService } from "../../../platform/abstractions/crypto.service"; import { I18nService } from "../../../platform/abstractions/i18n.service"; import { Utils } from "../../../platform/misc/utils"; @@ -25,6 +27,7 @@ export class FolderService implements InternalFolderServiceAbstraction { constructor( private cryptoService: CryptoService, + private encryptService: EncryptService, private i18nService: I18nService, private cipherService: CipherService, private stateProvider: StateProvider, @@ -48,10 +51,10 @@ export class FolderService implements InternalFolderServiceAbstraction { } // TODO: This should be moved to EncryptService or something - async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise { + async encrypt(model: FolderView, key: SymmetricCryptoKey): Promise { const folder = new Folder(); folder.id = model.id; - folder.name = await this.cryptoService.encrypt(model.name, key); + folder.name = await this.encryptService.encrypt(model.name, key); return folder; } diff --git a/libs/common/src/vault/utils.spec.ts b/libs/common/src/vault/utils.spec.ts deleted file mode 100644 index 54ec66984e2..00000000000 --- a/libs/common/src/vault/utils.spec.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { CardView } from "@bitwarden/common/vault/models/view/card.view"; -import { normalizeExpiryYearFormat, isCardExpired } from "@bitwarden/common/vault/utils"; - -function getExpiryYearValueFormats(currentCentury: string) { - return [ - [-12, `${currentCentury}12`], - [0, `${currentCentury}00`], - [2043, "2043"], // valid year with a length of four should be taken directly - [24, `${currentCentury}24`], - [3054, "3054"], // valid year with a length of four should be taken directly - [31423524543, `${currentCentury}43`], - [4, `${currentCentury}04`], - [null, null], - [undefined, null], - ["-12", `${currentCentury}12`], - ["", null], - ["0", `${currentCentury}00`], - ["00", `${currentCentury}00`], - ["000", `${currentCentury}00`], - ["0000", `${currentCentury}00`], - ["00000", `${currentCentury}00`], - ["0234234", `${currentCentury}34`], - ["04", `${currentCentury}04`], - ["2043", "2043"], // valid year with a length of four should be taken directly - ["24", `${currentCentury}24`], - ["3054", "3054"], // valid year with a length of four should be taken directly - ["31423524543", `${currentCentury}43`], - ["4", `${currentCentury}04`], - ["aaaa", null], - ["adgshsfhjsdrtyhsrth", null], - ["agdredg42grg35grrr. ea3534@#^145345ag$%^ -_#$rdg ", `${currentCentury}45`], - ]; -} - -describe("normalizeExpiryYearFormat", () => { - const currentCentury = `${new Date().getFullYear()}`.slice(0, 2); - - const expiryYearValueFormats = getExpiryYearValueFormats(currentCentury); - - expiryYearValueFormats.forEach(([inputValue, expectedValue]) => { - it(`should return '${expectedValue}' when '${inputValue}' is passed`, () => { - const formattedValue = normalizeExpiryYearFormat(inputValue); - - expect(formattedValue).toEqual(expectedValue); - }); - }); - - describe("in the year 3107", () => { - const theDistantFuture = new Date(Date.UTC(3107, 1, 1)); - jest.spyOn(Date, "now").mockReturnValue(theDistantFuture.valueOf()); - - beforeAll(() => { - jest.useFakeTimers({ advanceTimers: true }); - jest.setSystemTime(theDistantFuture); - }); - - afterAll(() => { - jest.useRealTimers(); - }); - - const currentCentury = `${new Date(Date.now()).getFullYear()}`.slice(0, 2); - expect(currentCentury).toBe("31"); - - const expiryYearValueFormats = getExpiryYearValueFormats(currentCentury); - - expiryYearValueFormats.forEach(([inputValue, expectedValue]) => { - it(`should return '${expectedValue}' when '${inputValue}' is passed`, () => { - const formattedValue = normalizeExpiryYearFormat(inputValue); - - expect(formattedValue).toEqual(expectedValue); - }); - }); - jest.clearAllTimers(); - }); -}); - -function getCardExpiryDateValues() { - const currentDate = new Date(); - - const currentYear = currentDate.getFullYear(); - - // `Date` months are zero-indexed, our expiry date month inputs are one-indexed - const currentMonth = currentDate.getMonth() + 1; - - return [ - [null, null, false], // no month, no year - [undefined, undefined, false], // no month, no year, invalid values - ["", "", false], // no month, no year, invalid values - ["12", "agdredg42grg35grrr. ea3534@#^145345ag$%^ -_#$rdg ", false], // invalid values - ["0", `${currentYear - 1}`, true], // invalid 0 month - ["00", `${currentYear + 1}`, false], // invalid 0 month - [`${currentMonth}`, "0000", true], // current month, in the year 2000 - [null, `${currentYear}`.slice(-2), false], // no month, this year - [null, `${currentYear - 1}`.slice(-2), true], // no month, last year - ["1", null, false], // no year, January - ["1", `${currentYear - 1}`, true], // January last year - ["13", `${currentYear}`, false], // 12 + 1 is Feb. in the next year (Date is zero-indexed) - [`${currentMonth + 36}`, `${currentYear - 1}`, true], // even though the month value would put the date 3 years into the future when calculated with `Date`, an explicit year in the past indicates the card is expired - [`${currentMonth}`, `${currentYear}`, false], // this year, this month (not expired until the month is over) - [`${currentMonth}`, `${currentYear}`.slice(-2), false], // This month, this year (not expired until the month is over) - [`${currentMonth - 1}`, `${currentYear}`, true], // last month - [`${currentMonth - 1}`, `${currentYear + 1}`, false], // 11 months from now - ]; -} - -describe("isCardExpired", () => { - const expiryYearValueFormats = getCardExpiryDateValues(); - - expiryYearValueFormats.forEach( - ([inputMonth, inputYear, expectedValue]: [string | null, string | null, boolean]) => { - it(`should return ${expectedValue} when the card expiry month is ${inputMonth} and the card expiry year is ${inputYear}`, () => { - const testCardView = new CardView(); - testCardView.expMonth = inputMonth; - testCardView.expYear = inputYear; - - const cardIsExpired = isCardExpired(testCardView); - - expect(cardIsExpired).toBe(expectedValue); - }); - }, - ); -}); diff --git a/libs/common/src/vault/utils.ts b/libs/common/src/vault/utils.ts deleted file mode 100644 index 7d8784eda78..00000000000 --- a/libs/common/src/vault/utils.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { CardView } from "@bitwarden/common/vault/models/view/card.view"; - -type NonZeroIntegers = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; -type Year = `${NonZeroIntegers}${NonZeroIntegers}${0 | NonZeroIntegers}${0 | NonZeroIntegers}`; - -/** - * Takes a string or number value and returns a string value formatted as a valid 4-digit year - * - * @export - * @param {(string | number)} yearInput - * @return {*} {(Year | null)} - */ -export function normalizeExpiryYearFormat(yearInput: string | number): Year | null { - // The input[type="number"] is returning a number, convert it to a string - // An empty field returns null, avoid casting `"null"` to a string - const yearInputIsEmpty = yearInput == null || yearInput === ""; - let expirationYear = yearInputIsEmpty ? null : `${yearInput}`; - - // Exit early if year is already formatted correctly or empty - if (yearInputIsEmpty || /^[1-9]{1}\d{3}$/.test(expirationYear)) { - return expirationYear as Year; - } - - expirationYear = expirationYear - // For safety, because even input[type="number"] will allow decimals - .replace(/[^\d]/g, "") - // remove any leading zero padding (leave the last leading zero if it ends the string) - .replace(/^[0]+(?=.)/, ""); - - if (expirationYear === "") { - expirationYear = null; - } - - // given the context of payment card expiry, a year character length of 3, or over 4 - // is more likely to be a mistake than an intentional value for the far past or far future. - if (expirationYear && expirationYear.length !== 4) { - const paddedYear = ("00" + expirationYear).slice(-2); - const currentCentury = `${new Date().getFullYear()}`.slice(0, 2); - - expirationYear = currentCentury + paddedYear; - } - - return expirationYear as Year | null; -} - -/** - * Takes a cipher card view and returns "true" if the month and year affirmativey indicate - * the card is expired. - * - * @export - * @param {CardView} cipherCard - * @return {*} {boolean} - */ -export function isCardExpired(cipherCard: CardView): boolean { - if (cipherCard) { - const { expMonth = null, expYear = null } = cipherCard; - - const now = new Date(); - const normalizedYear = normalizeExpiryYearFormat(expYear); - - // If the card year is before the current year, don't bother checking the month - if (normalizedYear && parseInt(normalizedYear) < now.getFullYear()) { - return true; - } - - if (normalizedYear && expMonth) { - // `Date` months are zero-indexed - const parsedMonth = - parseInt(expMonth) - 1 || - // Add a month floor of 0 to protect against an invalid low month value of "0" - 0; - - const parsedYear = parseInt(normalizedYear); - - // First day of the next month minus one, to get last day of the card month - const cardExpiry = new Date(parsedYear, parsedMonth + 1, 0); - - return cardExpiry < now; - } - } - - return false; -} diff --git a/libs/importer/spec/bitwarden-password-protected-importer.spec.ts b/libs/importer/spec/bitwarden-password-protected-importer.spec.ts index d36ce8b9a64..e5100e49900 100644 --- a/libs/importer/spec/bitwarden-password-protected-importer.spec.ts +++ b/libs/importer/spec/bitwarden-password-protected-importer.spec.ts @@ -3,6 +3,7 @@ import { mock, MockProxy } from "jest-mock-extended"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { KdfType } from "@bitwarden/common/platform/enums"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -19,6 +20,7 @@ import { emptyUnencryptedExport } from "./test-data/bitwarden-json/unencrypted.j describe("BitwardenPasswordProtectedImporter", () => { let importer: BitwardenPasswordProtectedImporter; let cryptoService: MockProxy; + let encryptService: MockProxy; let i18nService: MockProxy; let cipherService: MockProxy; let pinService: MockProxy; @@ -30,6 +32,7 @@ describe("BitwardenPasswordProtectedImporter", () => { beforeEach(() => { cryptoService = mock(); + encryptService = mock(); i18nService = mock(); cipherService = mock(); pinService = mock(); @@ -37,6 +40,7 @@ describe("BitwardenPasswordProtectedImporter", () => { importer = new BitwardenPasswordProtectedImporter( cryptoService, + encryptService, i18nService, cipherService, pinService, @@ -91,7 +95,7 @@ describe("BitwardenPasswordProtectedImporter", () => { }); it("succeeds with default jdoc", async () => { - cryptoService.decryptToUtf8.mockReturnValue(Promise.resolve(emptyUnencryptedExport)); + encryptService.decryptToUtf8.mockReturnValue(Promise.resolve(emptyUnencryptedExport)); expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); }); diff --git a/libs/importer/src/components/import.component.ts b/libs/importer/src/components/import.component.ts index 8ee882734b3..10a3f5a89ab 100644 --- a/libs/importer/src/components/import.component.ts +++ b/libs/importer/src/components/import.component.ts @@ -30,6 +30,7 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { ClientType } from "@bitwarden/common/enums"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -89,6 +90,7 @@ const safeProviders: SafeProvider[] = [ I18nService, CollectionService, CryptoService, + EncryptService, PinServiceAbstraction, AccountService, ], diff --git a/libs/importer/src/importers/base-importer.ts b/libs/importer/src/importers/base-importer.ts index 215210eda14..9cba62c5faf 100644 --- a/libs/importer/src/importers/base-importer.ts +++ b/libs/importer/src/importers/base-importer.ts @@ -1,5 +1,6 @@ import * as papa from "papaparse"; +import { normalizeExpiryYearFormat } from "@bitwarden/common/autofill/utils"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { ConsoleLogService } from "@bitwarden/common/platform/services/console-log.service"; @@ -11,7 +12,6 @@ import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view"; import { LoginView } from "@bitwarden/common/vault/models/view/login.view"; import { SecureNoteView } from "@bitwarden/common/vault/models/view/secure-note.view"; -import { normalizeExpiryYearFormat } from "@bitwarden/common/vault/utils"; import { ImportResult } from "../models/import-result"; diff --git a/libs/importer/src/importers/bitwarden/bitwarden-json-importer.ts b/libs/importer/src/importers/bitwarden/bitwarden-json-importer.ts index 2248606814b..9adc8a97819 100644 --- a/libs/importer/src/importers/bitwarden/bitwarden-json-importer.ts +++ b/libs/importer/src/importers/bitwarden/bitwarden-json-importer.ts @@ -8,8 +8,10 @@ import { FolderWithIdExport, } from "@bitwarden/common/models/export"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; +import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { OrganizationId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view"; @@ -31,6 +33,7 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer { protected constructor( protected cryptoService: CryptoService, + protected encryptService: EncryptService, protected i18nService: I18nService, protected cipherService: CipherService, protected pinService: PinServiceAbstraction, @@ -60,11 +63,16 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer { results: BitwardenEncryptedIndividualJsonExport | BitwardenEncryptedOrgJsonExport, ) { if (results.encKeyValidation_DO_NOT_EDIT != null) { - const orgKey = await this.cryptoService.getOrgKey(this.organizationId); + let keyForDecryption: SymmetricCryptoKey = await this.cryptoService.getOrgKey( + this.organizationId, + ); + if (keyForDecryption == null) { + keyForDecryption = await this.cryptoService.getUserKeyWithLegacySupport(); + } const encKeyValidation = new EncString(results.encKeyValidation_DO_NOT_EDIT); - const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8( + const encKeyValidationDecrypt = await this.encryptService.decryptToUtf8( encKeyValidation, - orgKey, + keyForDecryption, ); if (encKeyValidationDecrypt === null) { this.result.success = false; diff --git a/libs/importer/src/importers/bitwarden/bitwarden-password-protected-importer.ts b/libs/importer/src/importers/bitwarden/bitwarden-password-protected-importer.ts index a854346bccb..35a0ec0f22c 100644 --- a/libs/importer/src/importers/bitwarden/bitwarden-password-protected-importer.ts +++ b/libs/importer/src/importers/bitwarden/bitwarden-password-protected-importer.ts @@ -6,6 +6,7 @@ import { PBKDF2KdfConfig, } from "@bitwarden/common/auth/models/domain/kdf-config"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { KdfType } from "@bitwarden/common/platform/enums"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; @@ -23,13 +24,14 @@ export class BitwardenPasswordProtectedImporter extends BitwardenJsonImporter im constructor( cryptoService: CryptoService, + encryptService: EncryptService, i18nService: I18nService, cipherService: CipherService, pinService: PinServiceAbstraction, accountService: AccountService, private promptForPassword_callback: () => Promise, ) { - super(cryptoService, i18nService, cipherService, pinService, accountService); + super(cryptoService, encryptService, i18nService, cipherService, pinService, accountService); } async parse(data: string): Promise { @@ -65,7 +67,7 @@ export class BitwardenPasswordProtectedImporter extends BitwardenJsonImporter im } const encData = new EncString(parsedData.data); - const clearTextData = await this.cryptoService.decryptToUtf8(encData, this.key); + const clearTextData = await this.encryptService.decryptToUtf8(encData, this.key); return await super.parse(clearTextData); } @@ -86,7 +88,7 @@ export class BitwardenPasswordProtectedImporter extends BitwardenJsonImporter im const encKeyValidation = new EncString(jdoc.encKeyValidation_DO_NOT_EDIT); - const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8( + const encKeyValidationDecrypt = await this.encryptService.decryptToUtf8( encKeyValidation, this.key, ); diff --git a/libs/importer/src/services/import.service.spec.ts b/libs/importer/src/services/import.service.spec.ts index e44c8f6aa98..ef605746e6e 100644 --- a/libs/importer/src/services/import.service.spec.ts +++ b/libs/importer/src/services/import.service.spec.ts @@ -3,6 +3,7 @@ import { mock, MockProxy } from "jest-mock-extended"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; @@ -27,6 +28,7 @@ describe("ImportService", () => { let i18nService: MockProxy; let collectionService: MockProxy; let cryptoService: MockProxy; + let encryptService: MockProxy; let pinService: MockProxy; let accountService: MockProxy; @@ -37,6 +39,7 @@ describe("ImportService", () => { i18nService = mock(); collectionService = mock(); cryptoService = mock(); + encryptService = mock(); pinService = mock(); importService = new ImportService( @@ -46,6 +49,7 @@ describe("ImportService", () => { i18nService, collectionService, cryptoService, + encryptService, pinService, accountService, ); diff --git a/libs/importer/src/services/import.service.ts b/libs/importer/src/services/import.service.ts index 13b77fb5b4e..2295f4f7041 100644 --- a/libs/importer/src/services/import.service.ts +++ b/libs/importer/src/services/import.service.ts @@ -7,6 +7,7 @@ import { ImportOrganizationCiphersRequest } from "@bitwarden/common/models/reque import { KvpRequest } from "@bitwarden/common/models/request/kvp.request"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; @@ -104,6 +105,7 @@ export class ImportService implements ImportServiceAbstraction { private i18nService: I18nService, private collectionService: CollectionService, private cryptoService: CryptoService, + private encryptService: EncryptService, private pinService: PinServiceAbstraction, private accountService: AccountService, ) {} @@ -207,6 +209,7 @@ export class ImportService implements ImportServiceAbstraction { case "bitwardenpasswordprotected": return new BitwardenPasswordProtectedImporter( this.cryptoService, + this.encryptService, this.i18nService, this.cipherService, this.pinService, @@ -344,9 +347,10 @@ export class ImportService implements ImportServiceAbstraction { const c = await this.cipherService.encrypt(importResult.ciphers[i], activeUserId); request.ciphers.push(new CipherRequest(c)); } + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeUserId); if (importResult.folders != null) { for (let i = 0; i < importResult.folders.length; i++) { - const f = await this.folderService.encrypt(importResult.folders[i]); + const f = await this.folderService.encrypt(importResult.folders[i], userKey); request.folders.push(new FolderWithIdRequest(f)); } } diff --git a/libs/tools/export/vault-export/vault-export-core/src/services/base-vault-export.service.ts b/libs/tools/export/vault-export/vault-export-core/src/services/base-vault-export.service.ts index a494885698e..76b008be620 100644 --- a/libs/tools/export/vault-export/vault-export-core/src/services/base-vault-export.service.ts +++ b/libs/tools/export/vault-export/vault-export-core/src/services/base-vault-export.service.ts @@ -2,7 +2,7 @@ import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service"; import { KdfConfig } from "@bitwarden/common/auth/models/domain/kdf-config"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; -import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { KdfType } from "@bitwarden/common/platform/enums"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherType } from "@bitwarden/common/vault/enums"; @@ -12,7 +12,7 @@ import { BitwardenCsvExportType, BitwardenPasswordProtectedFileFormat } from ".. export class BaseVaultExportService { constructor( protected pinService: PinServiceAbstraction, - protected cryptoService: CryptoService, + protected encryptService: EncryptService, private cryptoFunctionService: CryptoFunctionService, private kdfConfigService: KdfConfigService, ) {} @@ -23,8 +23,8 @@ export class BaseVaultExportService { const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16)); const key = await this.pinService.makePinKey(password, salt, kdfConfig); - const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), key); - const encText = await this.cryptoService.encrypt(clearText, key); + const encKeyValidation = await this.encryptService.encrypt(Utils.newGuid(), key); + const encText = await this.encryptService.encrypt(clearText, key); const jsonDoc: BitwardenPasswordProtectedFileFormat = { encrypted: true, diff --git a/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts b/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts index 44df18116de..1a66fe92256 100644 --- a/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts +++ b/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts @@ -1,6 +1,8 @@ import { mock, MockProxy } from "jest-mock-extended"; +import { BehaviorSubject } from "rxjs"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; +import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service"; import { DEFAULT_KDF_CONFIG, @@ -9,9 +11,11 @@ import { import { CipherWithIdExport } from "@bitwarden/common/models/export/cipher-with-ids.export"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { KdfType } from "@bitwarden/common/platform/enums"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncryptedString, EncString } from "@bitwarden/common/platform/models/domain/enc-string"; +import { UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/vault/enums"; @@ -149,7 +153,9 @@ describe("VaultExportService", () => { let pinService: MockProxy; let folderService: MockProxy; let cryptoService: MockProxy; + let encryptService: MockProxy; let kdfConfigService: MockProxy; + let accountService: MockProxy; beforeEach(() => { cryptoFunctionService = mock(); @@ -157,20 +163,35 @@ describe("VaultExportService", () => { pinService = mock(); folderService = mock(); cryptoService = mock(); + encryptService = mock(); kdfConfigService = mock(); + accountService = mock(); + + cryptoService.userKey$.mockReturnValue(new BehaviorSubject("mockOriginalUserKey" as any)); + + const userId = "" as UserId; + const accountInfo: AccountInfo = { + email: "", + emailVerified: true, + name: undefined, + }; + const activeAccount = { id: userId, ...accountInfo }; + accountService.activeAccount$ = new BehaviorSubject(activeAccount); folderService.getAllDecryptedFromState.mockResolvedValue(UserFolderViews); folderService.getAllFromState.mockResolvedValue(UserFolders); kdfConfigService.getKdfConfig.mockResolvedValue(DEFAULT_KDF_CONFIG); - cryptoService.encrypt.mockResolvedValue(new EncString("encrypted")); + encryptService.encrypt.mockResolvedValue(new EncString("encrypted")); exportService = new IndividualVaultExportService( folderService, cipherService, pinService, cryptoService, + encryptService, cryptoFunctionService, kdfConfigService, + accountService, ); }); @@ -250,7 +271,7 @@ describe("VaultExportService", () => { }); it("has a mac property", async () => { - cryptoService.encrypt.mockResolvedValue(mac); + encryptService.encrypt.mockResolvedValue(mac); exportString = await exportService.getPasswordProtectedExport(password); exportObject = JSON.parse(exportString); @@ -258,7 +279,7 @@ describe("VaultExportService", () => { }); it("has data property", async () => { - cryptoService.encrypt.mockResolvedValue(data); + encryptService.encrypt.mockResolvedValue(data); exportString = await exportService.getPasswordProtectedExport(password); exportObject = JSON.parse(exportString); diff --git a/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.ts b/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.ts index 3da92ef16b5..d6d37b28ac7 100644 --- a/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.ts +++ b/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.ts @@ -1,10 +1,13 @@ import * as papa from "papaparse"; +import { firstValueFrom, map } from "rxjs"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service"; import { CipherWithIdExport, FolderWithIdExport } from "@bitwarden/common/models/export"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; @@ -32,11 +35,13 @@ export class IndividualVaultExportService private folderService: FolderService, private cipherService: CipherService, pinService: PinServiceAbstraction, - cryptoService: CryptoService, + private cryptoService: CryptoService, + encryptService: EncryptService, cryptoFunctionService: CryptoFunctionService, kdfConfigService: KdfConfigService, + private accountService: AccountService, ) { - super(pinService, cryptoService, cryptoFunctionService, kdfConfigService); + super(pinService, encryptService, cryptoFunctionService, kdfConfigService); } async getExport(format: ExportFormat = "csv"): Promise { @@ -96,7 +101,11 @@ export class IndividualVaultExportService await Promise.all(promises); - const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid()); + const activeUserId = await firstValueFrom( + this.accountService.activeAccount$.pipe(map((a) => a?.id)), + ); + const userKey = await this.cryptoService.getUserKeyWithLegacySupport(activeUserId); + const encKeyValidation = await this.encryptService.encrypt(Utils.newGuid(), userKey); const jsonDoc: BitwardenEncryptedIndividualJsonExport = { encrypted: true, diff --git a/libs/tools/export/vault-export/vault-export-core/src/services/org-vault-export.service.ts b/libs/tools/export/vault-export/vault-export-core/src/services/org-vault-export.service.ts index 0c3e94178f6..9fc1f20b832 100644 --- a/libs/tools/export/vault-export/vault-export-core/src/services/org-vault-export.service.ts +++ b/libs/tools/export/vault-export/vault-export-core/src/services/org-vault-export.service.ts @@ -8,6 +8,7 @@ import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config import { CipherWithIdExport, CollectionWithIdExport } from "@bitwarden/common/models/export"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { OrganizationId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; @@ -39,13 +40,14 @@ export class OrganizationVaultExportService private cipherService: CipherService, private apiService: ApiService, pinService: PinServiceAbstraction, - cryptoService: CryptoService, + private cryptoService: CryptoService, + encryptService: EncryptService, cryptoFunctionService: CryptoFunctionService, private collectionService: CollectionService, kdfConfigService: KdfConfigService, private accountService: AccountService, ) { - super(pinService, cryptoService, cryptoFunctionService, kdfConfigService); + super(pinService, encryptService, cryptoFunctionService, kdfConfigService); } async getPasswordProtectedExport( @@ -242,7 +244,7 @@ export class OrganizationVaultExportService ciphers: Cipher[], ): Promise { const orgKey = await this.cryptoService.getOrgKey(organizationId); - const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey); + const encKeyValidation = await this.encryptService.encrypt(Utils.newGuid(), orgKey); const jsonDoc: BitwardenEncryptedOrgJsonExport = { encrypted: true, diff --git a/libs/tools/export/vault-export/vault-export-core/src/services/vault-export.service.spec.ts b/libs/tools/export/vault-export/vault-export-core/src/services/vault-export.service.spec.ts index 44df18116de..7e93c78fc51 100644 --- a/libs/tools/export/vault-export/vault-export-core/src/services/vault-export.service.spec.ts +++ b/libs/tools/export/vault-export/vault-export-core/src/services/vault-export.service.spec.ts @@ -1,6 +1,8 @@ import { mock, MockProxy } from "jest-mock-extended"; +import { BehaviorSubject } from "rxjs"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; +import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service"; import { DEFAULT_KDF_CONFIG, @@ -9,9 +11,11 @@ import { import { CipherWithIdExport } from "@bitwarden/common/models/export/cipher-with-ids.export"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { KdfType } from "@bitwarden/common/platform/enums"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncryptedString, EncString } from "@bitwarden/common/platform/models/domain/enc-string"; +import { UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/vault/enums"; @@ -149,6 +153,8 @@ describe("VaultExportService", () => { let pinService: MockProxy; let folderService: MockProxy; let cryptoService: MockProxy; + let encryptService: MockProxy; + let accountService: MockProxy; let kdfConfigService: MockProxy; beforeEach(() => { @@ -157,20 +163,34 @@ describe("VaultExportService", () => { pinService = mock(); folderService = mock(); cryptoService = mock(); + encryptService = mock(); + accountService = mock(); + kdfConfigService = mock(); folderService.getAllDecryptedFromState.mockResolvedValue(UserFolderViews); folderService.getAllFromState.mockResolvedValue(UserFolders); kdfConfigService.getKdfConfig.mockResolvedValue(DEFAULT_KDF_CONFIG); - cryptoService.encrypt.mockResolvedValue(new EncString("encrypted")); + encryptService.encrypt.mockResolvedValue(new EncString("encrypted")); + cryptoService.userKey$.mockReturnValue(new BehaviorSubject("mockOriginalUserKey" as any)); + const userId = "" as UserId; + const accountInfo: AccountInfo = { + email: "", + emailVerified: true, + name: undefined, + }; + const activeAccount = { id: userId, ...accountInfo }; + accountService.activeAccount$ = new BehaviorSubject(activeAccount); exportService = new IndividualVaultExportService( folderService, cipherService, pinService, cryptoService, + encryptService, cryptoFunctionService, kdfConfigService, + accountService, ); }); @@ -250,7 +270,7 @@ describe("VaultExportService", () => { }); it("has a mac property", async () => { - cryptoService.encrypt.mockResolvedValue(mac); + encryptService.encrypt.mockResolvedValue(mac); exportString = await exportService.getPasswordProtectedExport(password); exportObject = JSON.parse(exportString); @@ -258,7 +278,7 @@ describe("VaultExportService", () => { }); it("has data property", async () => { - cryptoService.encrypt.mockResolvedValue(data); + encryptService.encrypt.mockResolvedValue(data); exportString = await exportService.getPasswordProtectedExport(password); exportObject = JSON.parse(exportString); diff --git a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html index 9c5183aabd2..53483065b73 100644 --- a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html +++ b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.html @@ -1,6 +1,6 @@ -

{{ "additionalOptions" | i18n }}

+

{{ "additionalOptions" | i18n }}

@@ -16,16 +16,21 @@ {{ "newPassword" | i18n }} - + {{ "sendPasswordDescV2" | i18n }} {{ "hideYourEmail" | i18n }} - + {{ "privateNote" | i18n }} - +
diff --git a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts index ab4ffaa9dd0..89ab9d19ba2 100644 --- a/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts +++ b/libs/tools/send/send-ui/src/send-form/components/options/send-options.component.ts @@ -102,7 +102,7 @@ export class SendOptionsComponent implements OnInit { this.sendOptionsForm.patchValue({ maxAccessCount: this.sendFormContainer.originalSendView.maxAccessCount, accessCount: this.sendFormContainer.originalSendView.accessCount, - password: this.sendFormContainer.originalSendView.password, + password: null, hideEmail: this.sendFormContainer.originalSendView.hideEmail, notes: this.sendFormContainer.originalSendView.notes, }); diff --git a/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.html b/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.html index e5b99828fe4..98f399760be 100644 --- a/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.html +++ b/libs/tools/send/send-ui/src/send-form/components/send-details/send-details.component.html @@ -1,6 +1,6 @@ - -

{{ "sendDetails" | i18n }}

+ +

{{ "sendDetails" | i18n }}

@@ -34,7 +34,7 @@ > - + {{ "deletionDate" | i18n }}
-
{{ "file" | i18n }}
+
{{ "file" | i18n }}
{{ originalSendView.file.fileName }}
{{ originalSendView.file.sizeName }}
{{ "fileToShare" | i18n }} - - - {{ fileName || ("noFileChosen" | i18n) }} +
+ + + {{ fileName || ("noFileChosen" | i18n) }} +
{ const confirmed = await this.dialogService.openSimpleDialog({ title: { key: "deleteSend" }, - content: { key: "deleteSendConfirmation" }, + content: { key: "deleteSendPermanentConfirmation" }, type: "warning", }); diff --git a/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts b/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts index e1ef3dc0f37..bc4ff608805 100644 --- a/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts +++ b/libs/vault/src/cipher-form/components/card-details-section/card-details-section.component.ts @@ -5,11 +5,11 @@ import { FormBuilder, ReactiveFormsModule } from "@angular/forms"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; +import { normalizeExpiryYearFormat } from "@bitwarden/common/autofill/utils"; import { EventType } from "@bitwarden/common/enums"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CardView } from "@bitwarden/common/vault/models/view/card.view"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { normalizeExpiryYearFormat } from "@bitwarden/common/vault/utils"; import { CardComponent, FormFieldModule, diff --git a/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts b/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts index eb34f820df8..691b05be2b4 100644 --- a/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts +++ b/libs/vault/src/cipher-form/components/login-details-section/login-details-section.component.ts @@ -125,7 +125,7 @@ export class LoginDetailsSectionComponent implements OnInit { Object.assign(cipher.login, { username: value.username, password: value.password, - totp: value.totp, + totp: value.totp?.trim(), } as LoginView); return cipher; diff --git a/libs/vault/src/cipher-view/cipher-view.component.ts b/libs/vault/src/cipher-view/cipher-view.component.ts index cadf388e76d..e28f7f2a2bb 100644 --- a/libs/vault/src/cipher-view/cipher-view.component.ts +++ b/libs/vault/src/cipher-view/cipher-view.component.ts @@ -5,13 +5,13 @@ import { firstValueFrom, Observable, Subject, takeUntil } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { isCardExpired } from "@bitwarden/common/autofill/utils"; import { CollectionId } from "@bitwarden/common/types/guid"; import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; -import { isCardExpired } from "@bitwarden/common/vault/utils"; import { CalloutModule, SearchModule } from "@bitwarden/components"; import { AdditionalOptionsComponent } from "./additional-options/additional-options.component"; diff --git a/package-lock.json b/package-lock.json index bfc943b55b5..b2058de0dc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -192,11 +192,11 @@ }, "apps/browser": { "name": "@bitwarden/browser", - "version": "2024.9.1" + "version": "2024.9.2" }, "apps/cli": { "name": "@bitwarden/cli", - "version": "2024.9.0", + "version": "2024.9.1", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@koa/multer": "3.0.2", @@ -232,7 +232,7 @@ }, "apps/desktop": { "name": "@bitwarden/desktop", - "version": "2024.9.1", + "version": "2024.9.2", "hasInstallScript": true, "license": "GPL-3.0" }, @@ -246,7 +246,7 @@ }, "apps/web": { "name": "@bitwarden/web-vault", - "version": "2024.9.1" + "version": "2024.9.2" }, "libs/admin-console": { "name": "@bitwarden/admin-console",