1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-05 23:53:33 +00:00

Compare commits

..

3 Commits

Author SHA1 Message Date
larena1
95f5a1ce09 Remove 2023-03-06 20:29:28 +01:00
larena1
c4790eb78e Add TextVariationEmailAddress 2023-02-20 17:25:36 +01:00
larena1
8577765668 Finally stop filling password into username field
The logic in #2331 is unfortunately not very reliable as it'll only detect fields that have one of "email", "phone" or "username" in their id as username fields.
This commit ensures that additonally fields that have TextVariationWebEmailAddress are also detected as username fields.
2023-02-14 17:49:32 +01:00
233 changed files with 4247 additions and 17634 deletions

View File

@@ -1,8 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Customer Support
url: https://bitwarden.com/contact/
about: Please contact our customer support for account issues and general customer support.
- name: Report mobile autofill failure
url: https://docs.google.com/forms/d/e/1FAIpQLScMopHyN7KGJs8hW562VTzbIGL4KcFnx0wJcsW0GYE1BnPiGA/viewform
about: We are aware of some situations where the Bitwarden mobile app will not autofill information correctly. This is something the Bitwarden team is actively working on but need your help as a community and active Bitwarden users!
@@ -12,6 +9,9 @@ contact_links:
- name: Bitwarden Community Forums
url: https://community.bitwarden.com
about: Please visit the community forums for general community discussion, support and the development roadmap.
- name: Customer Support
url: https://bitwarden.com/contact/
about: Please contact our customer support for account issues and general customer support.
- name: Security Issues
url: https://hackerone.com/bitwarden
about: We use HackerOne to manage security disclosures.

19
.github/labeler.yml vendored
View File

@@ -1,19 +0,0 @@
android:
- src/App/*
- src/Core/*
- src/Android/*
iOS:
- src/App/*
- src/Core/*
- lib/ios/*
- src/iOS/*
- src/iOS.Autofill/*
- src/iOS.Core/*
- src/iOS.Extension/*
- src/iOS.ShareExtension/*
- src/iOS.Widget/*
- src/watchOS/*
watchOS:
- src/watchOS/*

View File

@@ -7,13 +7,13 @@
<key>provisioningProfiles</key>
<dict>
<key>com.8bit.bitwarden</key>
<string>Dist: Bitwarden</string>
<string>Dist: Bitwarden 2021</string>
<key>com.8bit.bitwarden.autofill</key>
<string>Dist: Autofill</string>
<string>Dist: Autofill 2021</string>
<key>com.8bit.bitwarden.find-login-action-extension</key>
<string>Dist: Extension</string>
<string>Dist: Extension 2021</string>
<key>com.8bit.bitwarden.share-extension</key>
<string>Dist: Share Extension</string>
<string>Dist: Share Extension 2021</string>
<key>com.8bit.bitwarden.watchkitapp</key>
<string>Dist: Bitwarden Watch App</string>
<key>com.8bit.bitwarden.watchkitapp.watchkitextension</key>

Binary file not shown.

Binary file not shown.

View File

@@ -37,8 +37,6 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
with:
submodules: 'true'
- name: Check if special branches exist
id: branch-check
@@ -516,18 +514,16 @@ jobs:
- name: Checkout repo
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
with:
submodules: 'true'
- name: Login to Azure - CI Subscription
- name: Login to Azure - Prod Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
env:
KEYVAULT: bitwarden-ci
KEYVAULT: bitwarden-prod-kv
SECRETS: |
appcenter-ios-token
run: |
@@ -773,15 +769,15 @@ jobs:
- name: Checkout repo
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
- name: Login to Azure - CI Subscription
- name: Login to Azure
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
env:
KEYVAULT: bitwarden-ci
KEYVAULT: bitwarden-prod-kv
SECRETS: |
crowdin-api-token
run: |
@@ -839,17 +835,17 @@ jobs:
exit 1
fi
- name: Login to Azure - CI Subscription
- name: Login to Azure - Prod Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
if: failure()
with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
if: failure()
env:
KEYVAULT: bitwarden-ci
KEYVAULT: bitwarden-prod-kv
SECRETS: |
devops-alerts-slack-webhook-url
run: |

View File

@@ -17,16 +17,16 @@ jobs:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4
- name: Login to Azure - CI Subscription
- name: Login to Azure
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@c3b3285993151c5af47cefcb3b9134c28ab479af
with:
keyvault: "bitwarden-ci"
keyvault: "bitwarden-prod-kv"
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"
- name: Download translations

View File

@@ -1,17 +0,0 @@
---
name: "Pull Request Labeler"
on:
pull_request_target: {}
jobs:
labeler:
name: "Pull Request Labeler"
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-20.04
steps:
- uses: actions/labeler@ba790c862c380240c6d5e7427be5ace9a05c754b # v4.0.3
with:
sync-labels: true

View File

@@ -93,8 +93,8 @@ jobs:
./com.x8bit.bitwarden.apk/com.x8bit.bitwarden.apk,
./com.x8bit.bitwarden-fdroid.apk/com.x8bit.bitwarden-fdroid.apk,
./Bitwarden iOS.zip,
./bw-android-apk-sha256.txt/bw-android-apk-sha256.txt,
./bw-fdroid-apk-sha256.txt/bw-fdroid-apk-sha256.txt"
./bw-android-apk-sha256.txt,
./bw-fdroid-apk-sha256.txt"
commit: ${{ github.sha }}
tag: v${{ steps.version.outputs.version }}
name: Version ${{ steps.version.outputs.version }}

View File

@@ -32,14 +32,32 @@ jobs:
echo "new-version=$NEW_VER" >> $GITHUB_OUTPUT
trigger_version_bump:
name: "Version bump"
name: "Trigger version bump workflow"
runs-on: ubuntu-22.04
needs:
- setup
steps:
- name: Bump version to ${{ needs.setup.outputs.version_number }}
uses: ./.github/workflows/version-bump.yml
secrets:
AZURE_PROD_KV_CREDENTIALS: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
- name: Login to Azure
uses: Azure/login@ec3c14589bd3e9312b3cc8c41e6860e258df9010
with:
version_number: ${{ needs.setup.outputs.version_number }}
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@c3b3285993151c5af47cefcb3b9134c28ab479af
with:
keyvault: "bitwarden-prod-kv"
secrets: "github-pat-bitwarden-devops-bot-repo-scope"
- name: Call GitHub API to trigger workflow bump
env:
TOKEN: ${{ steps.retrieve-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
VERSION: ${{ needs.setup.outputs.version_number}}
run: |
JSON_STRING=$(printf '{"ref":"master", "inputs": { "version_number":"%s"}}' "$VERSION")
curl \
-X POST \
-i -u bitwarden-devops-bot:$TOKEN \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/bitwarden/mobile/actions/workflows/version-bump.yml/dispatches \
-d $JSON_STRING

View File

@@ -7,14 +7,6 @@ on:
version_number:
description: "New Version"
required: true
workflow_call:
inputs:
version_number:
required: true
type: string
secrets:
AZURE_PROD_KV_CREDENTIALS:
required: true
jobs:
bump_version:
@@ -24,16 +16,16 @@ jobs:
- name: Checkout Branch
uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
- name: Login to Azure - CI Subscription
- name: Login to Azure - Prod Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
- name: Retrieve secrets
id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@c3b3285993151c5af47cefcb3b9134c28ab479af
with:
keyvault: "bitwarden-ci"
keyvault: "bitwarden-prod-kv"
secrets: "github-gpg-private-key, github-gpg-private-key-passphrase"
- name: Import GPG key

3
.gitmodules vendored
View File

@@ -1,3 +0,0 @@
[submodule "lib/MessagePack"]
path = lib/MessagePack
url = https://github.com/bitwarden/MessagePack.git

View File

@@ -23,3 +23,15 @@ Interested in contributing in a big way? Consider joining our team! We're hiring
Code contributions are welcome! Please commit any pull requests against the `master` branch. Learn more about how to contribute by reading the [Contributing Guidelines](https://contributing.bitwarden.com/contributing/). Check out the [Contributing Documentation](https://contributing.bitwarden.com/) for how to get started with your first contribution.
Security audits and feedback are welcome. Please open an issue or email us privately if the report is sensitive in nature. You can read our security policy in the [`SECURITY.md`](SECURITY.md) file.
### Dotnet-format
We recently migrated to using dotnet-format as code formatter. All previous branches will need to updated to avoid large merge conflicts using the following steps:
1. Check out your local Branch
2. Run `git merge e0efcfbe45b2a27c73e9593bfd7a71fad2aa7a35`
3. Resolve any merge conflicts, commit.
4. Run `dotnet tool run dotnet-format`
5. Commit
6. Run `git merge -Xours 04539af2a66668b6e85476d5cf318c9150ec4357`
7. Push

View File

@@ -1,11 +0,0 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_41_29)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M70.214 34C70.7096 34 71.1457 34.1883 71.5124 34.555C71.8791 34.9217 72.0674 35.3479 72.0971 35.8534V50.4336H71.0669V51.9453H72.0971V58.0938C72.0971 59.749 71.7701 61.3942 71.1258 63.0295C70.4816 64.6549 69.6788 66.1019 68.7274 67.3706C67.766 68.6293 66.6262 69.8582 65.308 71.0575C63.98 72.2567 62.7609 73.2478 61.6409 74.0407C60.521 74.8237 59.3515 75.5769 58.1324 76.2806C56.9134 76.9843 56.0511 77.4699 55.5357 77.7177C55.0303 77.9655 54.614 78.1538 54.3068 78.2926C54.0788 78.4115 53.8211 78.471 53.5535 78.471C53.2859 78.471 53.0282 78.4115 52.8003 78.2926C52.5297 78.1791 52.1822 78.0118 51.7511 77.8042C51.6927 77.7761 51.6328 77.7473 51.5713 77.7177C51.0559 77.46 50.1937 76.9843 48.9746 76.2806C47.7555 75.5769 46.586 74.8336 45.4661 74.0407C44.3461 73.2478 43.1172 72.2567 41.799 71.0575C40.4709 69.8682 39.3311 68.6392 38.3797 67.3706C37.4183 66.1119 36.6155 64.6648 35.9713 63.0295C35.3271 61.4041 35 59.749 35 58.0938V35.8534C35 35.3479 35.1883 34.9217 35.555 34.555C35.9217 34.1883 36.3479 34 36.8534 34H70.214ZM67.211 57.5H70.1118V59H67.177C66.4282 66.7468 53.5337 73.2875 53.5337 73.2875V38.7573H67.211V50.4336H70.1118V51.9219H67.211V53.8027H69.895V55.291H67.211V57.5Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M58 46C56.3431 46 55 47.3431 55 49V60C55 61.6569 56.3431 63 58 63H107C108.657 63 110 61.6569 110 60V49C110 47.3431 108.657 46 107 46H58ZM59.7817 50.4336H57.1157V59H60.3208C60.9692 59 61.5278 58.9023 61.9966 58.707C62.4692 58.5078 62.8325 58.2227 63.0864 57.8516C63.3403 57.4805 63.4673 57.0352 63.4673 56.5156C63.4673 56.0664 63.397 55.707 63.2563 55.4375C63.1196 55.1641 62.936 54.957 62.7056 54.8164C62.4751 54.6719 62.2173 54.5703 61.9321 54.5117V54.4531C62.2134 54.4023 62.4517 54.293 62.647 54.125C62.8423 53.957 62.9907 53.7422 63.0923 53.4805C63.1978 53.2188 63.2505 52.9258 63.2505 52.6016C63.2505 51.7969 62.9575 51.2344 62.3716 50.9141C61.7856 50.5938 60.9224 50.4336 59.7817 50.4336ZM59.9868 53.8262H58.9321V51.9219H59.8872C60.4067 51.9219 60.7856 51.9941 61.0239 52.1387C61.2661 52.2793 61.3872 52.5137 61.3872 52.8418C61.3872 53.166 61.2856 53.4121 61.0825 53.5801C60.8794 53.7441 60.5142 53.8262 59.9868 53.8262ZM58.9321 57.5V55.2676H60.0571C60.4438 55.2676 60.7466 55.3125 60.9653 55.4023C61.188 55.4922 61.3462 55.6172 61.4399 55.7773C61.5337 55.9375 61.5806 56.123 61.5806 56.334C61.5806 56.6895 61.4731 56.9727 61.2583 57.1836C61.0435 57.3945 60.6626 57.5 60.1157 57.5H58.9321ZM65.1782 59H70.1118V57.5H66.9946V55.291H69.895V53.8027H66.9946V51.9219H70.1118V50.4336H65.1782V59ZM73.3931 59H75.2095V51.9453H77.5356V50.4336H71.0669V51.9453H73.3931V59ZM83.4771 56.9609L84.0981 59H86.0552L83.02 50.3984H80.7993L77.7759 59H79.7329L80.354 56.9609H83.4771ZM82.4224 53.4453L83.0435 55.4375H80.811L81.4263 53.4453C81.4536 53.3555 81.4985 53.2051 81.561 52.9941C81.6235 52.7832 81.688 52.5605 81.7544 52.3262C81.8247 52.0879 81.8794 51.8887 81.9185 51.7285C81.9575 51.8887 82.0083 52.0781 82.0708 52.2969C82.1372 52.5117 82.2017 52.7246 82.2642 52.9355C82.3306 53.1426 82.3833 53.3125 82.4224 53.4453Z" fill="#6795E8"/>
</g>
<defs>
<clipPath id="clip0_41_29">
<rect width="108" height="108" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1,17 +0,0 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_36_10)">
<path d="M71.5717 34.6343L113 76.0625L89.709 119.077L40.6492 70.0168L53.5336 77.4501L70.8779 60.1057L71.5717 34.6343Z" fill="url(#paint0_linear_36_10)"/>
<path d="M71.5124 34.555C71.1457 34.1883 70.7096 34 70.214 34H36.8534C36.3479 34 35.9217 34.1883 35.555 34.555C35.1883 34.9217 35 35.3479 35 35.8534V58.0938C35 59.749 35.3271 61.4041 35.9713 63.0295C36.6155 64.6648 37.4183 66.1119 38.3797 67.3706C39.3311 68.6392 40.4709 69.8682 41.799 71.0575C43.1172 72.2567 44.3461 73.2478 45.4661 74.0407C46.586 74.8336 47.7555 75.5769 48.9746 76.2806C50.1937 76.9843 51.0559 77.46 51.5713 77.7177C52.0867 77.9655 52.493 78.1637 52.8003 78.2926C53.0282 78.4115 53.2859 78.471 53.5535 78.471C53.8211 78.471 54.0788 78.4115 54.3068 78.2926C54.614 78.1538 55.0303 77.9655 55.5357 77.7177C56.0511 77.4699 56.9134 76.9843 58.1324 76.2806C59.3515 75.5769 60.521 74.8237 61.6409 74.0407C62.7609 73.2478 63.98 72.2567 65.308 71.0575C66.6262 69.8582 67.766 68.6293 68.7274 67.3706C69.6788 66.1019 70.4816 64.6549 71.1258 63.0295C71.7701 61.3942 72.0971 59.749 72.0971 58.0938V35.8534C72.0674 35.3479 71.8791 34.9217 71.5124 34.555ZM67.211 58.3019C67.211 66.3497 53.5337 73.2875 53.5337 73.2875V38.7573H67.211C67.211 38.7573 67.211 50.2542 67.211 58.3019Z" fill="white"/>
<path d="M55 49C55 47.3431 56.3431 46 58 46H107C108.657 46 110 47.3431 110 49V60C110 61.6569 108.657 63 107 63H58C56.3431 63 55 61.6569 55 60V49Z" fill="#6795E8"/>
<path d="M57.116 50.4336H59.782C60.9226 50.4336 61.7859 50.5938 62.3718 50.9141C62.9578 51.2344 63.2507 51.7969 63.2507 52.6016C63.2507 52.9258 63.198 53.2188 63.0925 53.4805C62.991 53.7422 62.8425 53.957 62.6472 54.125C62.4519 54.293 62.2136 54.4023 61.9324 54.4531V54.5117C62.2175 54.5703 62.4753 54.6719 62.7058 54.8164C62.9363 54.957 63.1199 55.1641 63.2566 55.4375C63.3972 55.707 63.4675 56.0664 63.4675 56.5156C63.4675 57.0352 63.3406 57.4805 63.0867 57.8516C62.8328 58.2227 62.4695 58.5078 61.9968 58.707C61.5281 58.9023 60.9695 59 60.321 59H57.116V50.4336ZM58.9324 53.8262H59.9871C60.5144 53.8262 60.8796 53.7441 61.0828 53.5801C61.2859 53.4121 61.3875 53.166 61.3875 52.8418C61.3875 52.5137 61.2664 52.2793 61.0242 52.1387C60.7859 51.9941 60.407 51.9219 59.8875 51.9219H58.9324V53.8262ZM58.9324 55.2676V57.5H60.116C60.6628 57.5 61.0437 57.3945 61.2585 57.1836C61.4734 56.9727 61.5808 56.6895 61.5808 56.334C61.5808 56.123 61.5339 55.9375 61.4402 55.7773C61.3464 55.6172 61.1882 55.4922 60.9656 55.4023C60.7468 55.3125 60.4441 55.2676 60.0574 55.2676H58.9324ZM70.1121 59H65.1785V50.4336H70.1121V51.9219H66.9949V53.8027H69.8953V55.291H66.9949V57.5H70.1121V59ZM75.2097 59H73.3933V51.9453H71.0671V50.4336H77.5359V51.9453H75.2097V59ZM84.0984 59L83.4773 56.9609H80.3542L79.7332 59H77.7761L80.7996 50.3984H83.0203L86.0554 59H84.0984ZM83.0437 55.4375L82.4226 53.4453C82.3835 53.3125 82.3308 53.1426 82.2644 52.9355C82.2019 52.7246 82.1375 52.5117 82.071 52.2969C82.0085 52.0781 81.9578 51.8887 81.9187 51.7285C81.8796 51.8887 81.825 52.0879 81.7546 52.3262C81.6882 52.5605 81.6238 52.7832 81.5613 52.9941C81.4988 53.2051 81.4539 53.3555 81.4265 53.4453L80.8113 55.4375H83.0437Z" fill="#212529"/>
</g>
<defs>
<linearGradient id="paint0_linear_36_10" x1="37.8512" y1="38.8122" x2="89.011" y2="89.972" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.247059"/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_36_10">
<rect width="108" height="108" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,11 +0,0 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_41_21)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M70.214 34C70.7096 34 71.1457 34.1883 71.5124 34.555C71.8791 34.9217 72.0674 35.3479 72.0971 35.8534V50.4336H71.647L72.0971 51.7604V58.0938C72.0971 59.749 71.7701 61.3942 71.1258 63.0295C70.4816 64.6549 69.6788 66.1019 68.7274 67.3706C67.766 68.6293 66.6262 69.8582 65.308 71.0575C63.98 72.2567 62.7609 73.2478 61.6409 74.0407C60.521 74.8237 59.3515 75.5769 58.1324 76.2806C56.9134 76.9843 56.0511 77.4699 55.5357 77.7177C55.0303 77.9655 54.614 78.1538 54.3068 78.2926C54.0788 78.4115 53.8211 78.471 53.5535 78.471C53.2859 78.471 53.0282 78.4115 52.8003 78.2926C52.5297 78.1791 52.1822 78.0118 51.7511 77.8042C51.6927 77.7761 51.6328 77.7473 51.5713 77.7177C51.0559 77.46 50.1937 76.9843 48.9746 76.2806C47.7555 75.5769 46.586 74.8336 45.4661 74.0407C44.3461 73.2478 43.1172 72.2567 41.799 71.0575C40.4709 69.8682 39.3311 68.6392 38.3797 67.3706C37.4183 66.1119 36.6155 64.6648 35.9713 63.0295C35.3271 61.4041 35 59.749 35 58.0938V35.8534C35 35.3479 35.1883 34.9217 35.555 34.555C35.9217 34.1883 36.3479 34 36.8534 34H70.214ZM67.177 59C66.4282 66.7468 53.5337 73.2875 53.5337 73.2875V38.7573H67.211V50.4336H70.9321V51.9219H67.8149V53.8027H70.7153V55.291H67.8149V57.5H70.9321V59H67.177Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M58 46C56.3431 46 55 47.3431 55 49V60C55 61.6569 56.3431 63 58 63H107C108.657 63 110 61.6569 110 60V49C110 47.3431 108.657 46 107 46H58ZM63.6665 57.0547C64.0376 56.4062 64.2231 55.5996 64.2231 54.6348C64.2231 53.7168 64.0415 52.9473 63.6782 52.3262C63.3149 51.7012 62.8032 51.2305 62.1431 50.9141C61.4829 50.5938 60.7036 50.4336 59.8052 50.4336H57.1157V59H59.5415C60.5259 59 61.3677 58.8379 62.0669 58.5137C62.7661 58.1855 63.2993 57.6992 63.6665 57.0547ZM62.0552 53.123C62.2427 53.5293 62.3364 54.0488 62.3364 54.6816C62.3364 55.6152 62.1196 56.3184 61.686 56.791C61.2563 57.2637 60.5981 57.5 59.7114 57.5H58.9321V51.9219H59.8989C60.4302 51.9219 60.8755 52.0195 61.2349 52.2148C61.5981 52.4102 61.8716 52.7129 62.0552 53.123ZM65.9985 59H70.9321V57.5H67.8149V55.291H70.7153V53.8027H67.8149V51.9219H70.9321V50.4336H65.9985V59ZM76.5337 59L79.4458 50.4336H77.6118L75.9888 55.5312C75.9614 55.6211 75.9165 55.7852 75.854 56.0234C75.7954 56.2578 75.7349 56.5059 75.6724 56.7676C75.6138 57.0293 75.5728 57.2461 75.5493 57.418C75.5259 57.2461 75.481 57.0293 75.4146 56.7676C75.3521 56.502 75.2896 56.252 75.2271 56.0176C75.1646 55.7793 75.1196 55.6172 75.0923 55.5312L73.481 50.4336H71.647L74.5532 59H76.5337Z" fill="#2DA49D"/>
</g>
<defs>
<clipPath id="clip0_41_21">
<rect width="108" height="108" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,17 +0,0 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_36_2)">
<path d="M71.5717 34.6343L113 76.0625L89.709 119.077L40.6492 70.0168L53.5336 77.4501L70.8779 60.1057L71.5717 34.6343Z" fill="url(#paint0_linear_36_2)"/>
<path d="M71.5124 34.555C71.1457 34.1883 70.7096 34 70.214 34H36.8534C36.3479 34 35.9217 34.1883 35.555 34.555C35.1883 34.9217 35 35.3479 35 35.8534V58.0938C35 59.749 35.3271 61.4041 35.9713 63.0295C36.6155 64.6648 37.4183 66.1119 38.3797 67.3706C39.3311 68.6392 40.4709 69.8682 41.799 71.0575C43.1172 72.2567 44.3461 73.2478 45.4661 74.0407C46.586 74.8336 47.7555 75.5769 48.9746 76.2806C50.1937 76.9843 51.0559 77.46 51.5713 77.7177C52.0867 77.9655 52.493 78.1637 52.8003 78.2926C53.0282 78.4115 53.2859 78.471 53.5535 78.471C53.8211 78.471 54.0788 78.4115 54.3068 78.2926C54.614 78.1538 55.0303 77.9655 55.5357 77.7177C56.0511 77.4699 56.9134 76.9843 58.1324 76.2806C59.3515 75.5769 60.521 74.8237 61.6409 74.0407C62.7609 73.2478 63.98 72.2567 65.308 71.0575C66.6262 69.8582 67.766 68.6293 68.7274 67.3706C69.6788 66.1019 70.4816 64.6549 71.1258 63.0295C71.7701 61.3942 72.0971 59.749 72.0971 58.0938V35.8534C72.0674 35.3479 71.8791 34.9217 71.5124 34.555ZM67.211 58.3019C67.211 66.3497 53.5337 73.2875 53.5337 73.2875V38.7573H67.211C67.211 38.7573 67.211 50.2542 67.211 58.3019Z" fill="white"/>
<path d="M55 49C55 47.3431 56.3431 46 58 46H107C108.657 46 110 47.3431 110 49V60C110 61.6569 108.657 63 107 63H58C56.3431 63 55 61.6569 55 60V49Z" fill="#2DA49D"/>
<path d="M64.2234 54.6348C64.2234 55.5996 64.0378 56.4062 63.6667 57.0547C63.2996 57.6992 62.7664 58.1855 62.0671 58.5137C61.3679 58.8379 60.5261 59 59.5417 59H57.116V50.4336H59.8054C60.7039 50.4336 61.4832 50.5938 62.1433 50.9141C62.8035 51.2305 63.3152 51.7012 63.6785 52.3262C64.0417 52.9473 64.2234 53.7168 64.2234 54.6348ZM62.3367 54.6816C62.3367 54.0488 62.2429 53.5293 62.0554 53.123C61.8718 52.7129 61.5984 52.4102 61.2351 52.2148C60.8757 52.0195 60.4304 51.9219 59.8992 51.9219H58.9324V57.5H59.7117C60.5984 57.5 61.2566 57.2637 61.6863 56.791C62.1199 56.3184 62.3367 55.6152 62.3367 54.6816ZM70.9324 59H65.9988V50.4336H70.9324V51.9219H67.8152V53.8027H70.7156V55.291H67.8152V57.5H70.9324V59ZM79.446 50.4336L76.5339 59H74.5535L71.6472 50.4336H73.4812L75.0925 55.5312C75.1199 55.6172 75.1648 55.7793 75.2273 56.0176C75.2898 56.252 75.3523 56.502 75.4148 56.7676C75.4812 57.0293 75.5261 57.2461 75.5496 57.418C75.573 57.2461 75.614 57.0293 75.6726 56.7676C75.7351 56.5059 75.7957 56.2578 75.8542 56.0234C75.9167 55.7852 75.9617 55.6211 75.989 55.5312L77.6121 50.4336H79.446Z" fill="#212529"/>
</g>
<defs>
<linearGradient id="paint0_linear_36_2" x1="37.8512" y1="38.8122" x2="89.011" y2="89.972" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.247059"/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_36_2">
<rect width="108" height="108" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1,11 +0,0 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_41_13)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M70.214 34C70.7096 34 71.1457 34.1883 71.5124 34.555C71.8791 34.9217 72.0674 35.3479 72.0971 35.8534V52.9823L70.8325 49.3984H68.6118L67.211 53.3838V38.7573H53.5337V73.2875C53.5337 73.2875 67.211 66.3497 67.211 58.3019V58H67.5454L68.1665 55.9609H71.2896L71.9106 58H72.0971V58.0938C72.0971 59.749 71.7701 61.3942 71.1258 63.0295C70.4816 64.6549 69.6788 66.1019 68.7274 67.3706C67.766 68.6293 66.6262 69.8582 65.308 71.0575C63.98 72.2567 62.7609 73.2478 61.6409 74.0407C60.521 74.8237 59.3515 75.5769 58.1324 76.2806C56.9134 76.9843 56.0511 77.4699 55.5357 77.7177C55.0303 77.9655 54.614 78.1538 54.3068 78.2926C54.0788 78.4115 53.8211 78.471 53.5535 78.471C53.2859 78.471 53.0282 78.4115 52.8003 78.2926C52.5297 78.1791 52.1822 78.0118 51.7511 77.8042C51.6927 77.7761 51.6328 77.7473 51.5713 77.7177C51.0559 77.46 50.1937 76.9843 48.9746 76.2806C47.7555 75.5769 46.586 74.8336 45.4661 74.0407C44.3461 73.2478 43.1172 72.2567 41.799 71.0575C40.4709 69.8682 39.3311 68.6392 38.3797 67.3706C37.4183 66.1119 36.6155 64.6648 35.9713 63.0295C35.3271 61.4041 35 59.749 35 58.0938V35.8534C35 35.3479 35.1883 34.9217 35.555 34.555C35.9217 34.1883 36.3479 34 36.8534 34H70.214ZM70.2349 52.4453L70.856 54.4375H68.6235L69.2388 52.4453C69.2661 52.3555 69.311 52.2051 69.3735 51.9941C69.436 51.7832 69.5005 51.5605 69.5669 51.3262C69.6372 51.0879 69.6919 50.8887 69.731 50.7285C69.77 50.8887 69.8208 51.0781 69.8833 51.2969C69.9497 51.5117 70.0142 51.7246 70.0767 51.9355C70.1431 52.1426 70.1958 52.3125 70.2349 52.4453Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M58 46C56.3431 46 55 47.3431 55 49V60C55 61.6569 56.3431 63 58 63H107C108.657 63 110 61.6569 110 60V49C110 47.3431 108.657 46 107 46H58ZM64.6626 55.457C64.8149 54.9258 64.8911 54.3418 64.8911 53.7051C64.8911 52.8145 64.7446 52.0391 64.4517 51.3789C64.1626 50.7188 63.7173 50.207 63.1157 49.8438C62.5181 49.4805 61.7544 49.2988 60.8247 49.2988C59.8911 49.2988 59.1216 49.4805 58.5161 49.8438C57.9106 50.207 57.4614 50.7188 57.1685 51.3789C56.8794 52.0352 56.7349 52.8066 56.7349 53.6934C56.7349 54.3574 56.8169 54.9609 56.981 55.5039C57.145 56.0469 57.3931 56.5137 57.7251 56.9043C58.061 57.2949 58.4849 57.5957 58.9966 57.8066C59.5083 58.0137 60.1138 58.1172 60.813 58.1172H60.8774H60.9478L62.5181 60.0391H64.8442L62.7817 57.7363C63.2622 57.5176 63.6587 57.2148 63.9712 56.8281C64.2837 56.4414 64.5142 55.9844 64.6626 55.457ZM58.8618 55.252C58.7134 54.8184 58.6392 54.3027 58.6392 53.7051C58.6392 53.1035 58.7134 52.5879 58.8618 52.1582C59.0142 51.7246 59.2505 51.3926 59.5708 51.1621C59.895 50.9277 60.313 50.8105 60.8247 50.8105C61.5942 50.8105 62.147 51.0684 62.4829 51.584C62.8188 52.0996 62.9868 52.8066 62.9868 53.7051C62.9868 54.3027 62.9126 54.8184 62.7642 55.252C62.6196 55.6816 62.3872 56.0137 62.0669 56.248C61.7466 56.4785 61.3286 56.5938 60.813 56.5938C60.3052 56.5938 59.8911 56.4785 59.5708 56.248C59.2505 56.0137 59.0142 55.6816 58.8618 55.252ZM71.2896 55.9609L71.9106 58H73.8677L70.8325 49.3984H68.6118L65.5884 58H67.5454L68.1665 55.9609H71.2896ZM70.2349 52.4453L70.856 54.4375H68.6235L69.2388 52.4453C69.2661 52.3555 69.311 52.2051 69.3735 51.9941C69.436 51.7832 69.5005 51.5605 69.5669 51.3262C69.6372 51.0879 69.6919 50.8887 69.731 50.7285C69.77 50.8887 69.8208 51.0781 69.8833 51.2969C69.9497 51.5117 70.0142 51.7246 70.0767 51.9355C70.1431 52.1426 70.1958 52.3125 70.2349 52.4453Z" fill="#C32998"/>
</g>
<defs>
<clipPath id="clip0_41_13">
<rect width="108" height="108" rx="34" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,17 +0,0 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_34_2)">
<path d="M71.5717 34.6343L113 76.0625L89.709 119.077L40.6492 70.0168L53.5336 77.4501L70.8779 60.1057L71.5717 34.6343Z" fill="url(#paint0_linear_34_2)"/>
<path d="M71.5124 34.555C71.1457 34.1883 70.7096 34 70.214 34H36.8534C36.3479 34 35.9217 34.1883 35.555 34.555C35.1883 34.9217 35 35.3479 35 35.8534V58.0938C35 59.749 35.3271 61.4041 35.9713 63.0295C36.6155 64.6648 37.4183 66.1119 38.3797 67.3706C39.3311 68.6392 40.4709 69.8682 41.799 71.0575C43.1172 72.2567 44.3461 73.2478 45.4661 74.0407C46.586 74.8336 47.7555 75.5769 48.9746 76.2806C50.1937 76.9843 51.0559 77.46 51.5713 77.7177C52.0867 77.9655 52.493 78.1637 52.8003 78.2926C53.0282 78.4115 53.2859 78.471 53.5535 78.471C53.8211 78.471 54.0788 78.4115 54.3068 78.2926C54.614 78.1538 55.0303 77.9655 55.5357 77.7177C56.0511 77.4699 56.9134 76.9843 58.1324 76.2806C59.3515 75.5769 60.521 74.8237 61.6409 74.0407C62.7609 73.2478 63.98 72.2567 65.308 71.0575C66.6262 69.8582 67.766 68.6293 68.7274 67.3706C69.6788 66.1019 70.4816 64.6549 71.1258 63.0295C71.7701 61.3942 72.0971 59.749 72.0971 58.0938V35.8534C72.0674 35.3479 71.8791 34.9217 71.5124 34.555ZM67.211 58.3019C67.211 66.3497 53.5337 73.2875 53.5337 73.2875V38.7573H67.211C67.211 38.7573 67.211 50.2542 67.211 58.3019Z" fill="white"/>
<path d="M55 49C55 47.3431 56.3431 46 58 46H107C108.657 46 110 47.3431 110 49V60C110 61.6569 108.657 63 107 63H58C56.3431 63 55 61.6569 55 60V49Z" fill="#C32998"/>
<path d="M64.8914 53.7051C64.8914 54.3418 64.8152 54.9258 64.6628 55.457C64.5144 55.9844 64.2839 56.4414 63.9714 56.8281C63.6589 57.2148 63.2625 57.5176 62.782 57.7363L64.8445 60.0391H62.5183L60.948 58.1172C60.9207 58.1172 60.8972 58.1172 60.8777 58.1172C60.8582 58.1172 60.8367 58.1172 60.8132 58.1172C60.114 58.1172 59.5085 58.0137 58.9968 57.8066C58.4851 57.5957 58.0613 57.2949 57.7253 56.9043C57.3933 56.5137 57.1453 56.0469 56.9812 55.5039C56.8171 54.9609 56.7351 54.3574 56.7351 53.6934C56.7351 52.8066 56.8796 52.0352 57.1687 51.3789C57.4617 50.7188 57.9109 50.207 58.5164 49.8438C59.1218 49.4805 59.8914 49.2988 60.825 49.2988C61.7546 49.2988 62.5183 49.4805 63.116 49.8438C63.7175 50.207 64.1628 50.7188 64.4519 51.3789C64.7449 52.0391 64.8914 52.8145 64.8914 53.7051ZM58.6394 53.7051C58.6394 54.3027 58.7136 54.8184 58.8621 55.252C59.0144 55.6816 59.2507 56.0137 59.571 56.248C59.8914 56.4785 60.3054 56.5938 60.8132 56.5938C61.3289 56.5938 61.7468 56.4785 62.0671 56.248C62.3875 56.0137 62.6199 55.6816 62.7644 55.252C62.9128 54.8184 62.9871 54.3027 62.9871 53.7051C62.9871 52.8066 62.8191 52.0996 62.4832 51.584C62.1472 51.0684 61.5945 50.8105 60.825 50.8105C60.3132 50.8105 59.8953 50.9277 59.571 51.1621C59.2507 51.3926 59.0144 51.7246 58.8621 52.1582C58.7136 52.5879 58.6394 53.1035 58.6394 53.7051ZM71.9109 58L71.2898 55.9609H68.1667L67.5457 58H65.5886L68.6121 49.3984H70.8328L73.8679 58H71.9109ZM70.8562 54.4375L70.2351 52.4453C70.196 52.3125 70.1433 52.1426 70.0769 51.9355C70.0144 51.7246 69.95 51.5117 69.8835 51.2969C69.821 51.0781 69.7703 50.8887 69.7312 50.7285C69.6921 50.8887 69.6375 51.0879 69.5671 51.3262C69.5007 51.5605 69.4363 51.7832 69.3738 51.9941C69.3113 52.2051 69.2664 52.3555 69.239 52.4453L68.6238 54.4375H70.8562Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_34_2" x1="37.8512" y1="38.8122" x2="89.011" y2="89.972" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.247059"/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_34_2">
<rect width="108" height="108" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,136 +0,0 @@
#! /bin/sh
function print_example() {
echo "Example"
echo " icons ios ~/AppIcon.pdf ~/Icons/"
}
function print_usage() {
echo "Usage"
echo " icons <ios|watch|complication|macos> in-file.pdf (out-dir)"
}
function command_exists() {
if type "$1" >/dev/null 2>&1; then
return 1
else
return 0
fi
}
if command_exists "sips" == 0 ; then
echo "sips tool not found"
exit 1
fi
if [ "$1" = "--help" ] || [ "$1" = "-h" ] ; then
print_usage
exit 0
fi
PLATFORM="$1"
FILE="$2"
if [ -z "$PLATFORM" ] || [ -z "$FILE" ] ; then
echo "Error: missing arguments"
echo ""
print_usage
echo ""
print_example
exit 1
fi
DIR="$3"
if [ -z "$DIR" ] ; then
DIR=$(dirname $FILE)
fi
# Create directory if needed
mkdir -p "$DIR"
if [[ "$PLATFORM" == *"ios"* ]] ; then # iOS
sips -s format png -Z '180' "${FILE}" --out "${DIR}"/Icon-180.png
sips -s format png -Z '29' "${FILE}" --out "${DIR}"/Icon-29.png
sips -s format png -Z '58' "${FILE}" --out "${DIR}"/Icon-58.png
sips -s format png -Z '120' "${FILE}" --out "${DIR}"/Icon-120.png
sips -s format png -Z '87' "${FILE}" --out "${DIR}"/Icon-87.png
sips -s format png -Z '40' "${FILE}" --out "${DIR}"/Icon-40.png
sips -s format png -Z '80' "${FILE}" --out "${DIR}"/Icon-80.png
sips -s format png -Z '76' "${FILE}" --out "${DIR}"/Icon-76.png
sips -s format png -Z '152' "${FILE}" --out "${DIR}"/Icon-152.png
sips -s format png -Z '167' "${FILE}" --out "${DIR}"/Icon-167.png
sips -s format png -Z '60' "${FILE}" --out "${DIR}"/Icon-60.png
sips -s format png -Z '20' "${FILE}" --out "${DIR}"/Icon-20.png
sips -s format png -Z '1024' "${FILE}" --out "${DIR}"/Icon-1024.png
# https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html
contents_json='{"images":[{"size":"20x20","idiom":"iphone","filename":"iPhoneNotification@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"iPhoneNotification@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"iPhoneSettings@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"iPhoneSettings@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"iPhoneSpotlight@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"iPhoneSpotlight@3x.png","scale":"3x"},{"size":"60x60","idiom":"iphone","filename":"iPhone@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"iPhone@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"iPadNotification.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"iPadNotification@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"iPadSettings.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"iPadSettings@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"iPadSpotlight.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"iPadSpotlight@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"iPad.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"iPad@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"iPadPro@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppStoreMarketing.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}'
echo $contents_json > "${DIR}"/Contents.json
fi
if [[ "$PLATFORM" == *"watch"* ]] ; then # Apple Watch
sips -s format png -Z '48' "${FILE}" --out "${DIR}"/Watch38mmNotificationCenter.png
sips -s format png -Z '55' "${FILE}" --out "${DIR}"/Watch42mmNotificationCenter.png
sips -s format png -Z '66' "${FILE}" --out "${DIR}"/Watch66NotificationCenter.png
sips -s format png -Z '58' "${FILE}" --out "${DIR}"/WatchCompanionSettings@2x.png
sips -s format png -Z '87' "${FILE}" --out "${DIR}"/WatchCompanionSettings@3x.png
sips -s format png -Z '80' "${FILE}" --out "${DIR}"/Watch38MM42MMHomeScreen.png
sips -s format png -Z '88' "${FILE}" --out "${DIR}"/Watch40MMHomeScreen.png
sips -s format png -Z '92' "${FILE}" --out "${DIR}"/Watch41MMHomeScreen.png
sips -s format png -Z '100' "${FILE}" --out "${DIR}"/Watch44MMHomeScreen.png
sips -s format png -Z '102' "${FILE}" --out "${DIR}"/Watch45MMHomeScreen.png
sips -s format png -Z '108' "${FILE}" --out "${DIR}"/Watch49MMHomeScreen.png
sips -s format png -Z '172' "${FILE}" --out "${DIR}"/Watch38MMShortLook.png
sips -s format png -Z '196' "${FILE}" --out "${DIR}"/Watch40MM42MMShortLook.png
sips -s format png -Z '216' "${FILE}" --out "${DIR}"/Watch44MMShortLook.png
sips -s format png -Z '234' "${FILE}" --out "${DIR}"/Watch234ShortLook.png
sips -s format png -Z '258' "${FILE}" --out "${DIR}"/Watch258ShortLook.png
sips -s format png -Z '1024' "${FILE}" --out "${DIR}"/WatchAppStore.png
# https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_ref-Asset_Catalog_Format/AppIconType.html
contents_json='{"images":[{"size":"24x24","idiom":"watch","scale":"2x","filename":"Watch38mmNotificationCenter.png","role":"notificationCenter","subtype":"38mm"},{"size":"27.5x27.5","idiom":"watch","scale":"2x","filename":"Watch42mmNotificationCenter.png","role":"notificationCenter","subtype":"42mm"},{"size":"29x29","idiom":"watch","filename":"WatchCompanionSettings@2x.png","role":"companionSettings","scale":"2x"},{"size":"29x29","idiom":"watch","filename":"WatchCompanionSettings@3x.png","role":"companionSettings","scale":"3x"},{"size":"40x40","idiom":"watch","filename":"Watch38MM42MMHomeScreen.png","scale":"2x","role":"appLauncher","subtype":"38mm"},{"size":"44x44","idiom":"watch","scale":"2x","filename":"Watch40MMHomeScreen.png","role":"appLauncher","subtype":"40mm"},{"size":"50x50","idiom":"watch","scale":"2x","filename":"Watch44MMHomeScreen.png","role":"appLauncher","subtype":"44mm"},{"size":"86x86","idiom":"watch","scale":"2x","filename":"Watch38MMShortLook.png","role":"quickLook","subtype":"38mm"},{"size":"98x98","idiom":"watch","scale":"2x","filename":"Watch40MM42MMShortLook.png","role":"quickLook","subtype":"42mm"},{"size":"108x108","idiom":"watch","scale":"2x","filename":"Watch44MMShortLook.png","role":"quickLook","subtype":"44mm"},{"idiom":"watch-marketing","filename":"WatchAppStore.png","size":"1024x1024","scale":"1x"}],"info":{"version":1,"author":"xcode"}}'
echo $contents_json > "${DIR}"/Contents.json
fi
if [[ "$PLATFORM" == *"complication"* ]] ; then # Apple Watch
sips -s format png -Z '32' "${FILE}" --out "${DIR}"/Circular38mm2x.png
sips -s format png -Z '36' "${FILE}" --out "${DIR}"/Circular40mm2x.png
sips -s format png -Z '36' "${FILE}" --out "${DIR}"/Circular42mm2x.png
sips -s format png -Z '40' "${FILE}" --out "${DIR}"/Circular44mm2x.png
sips -s format png -Z '182' "${FILE}" --out "${DIR}"/ExtraLarge38mm2x.png
sips -s format png -Z '203' "${FILE}" --out "${DIR}"/ExtraLarge40mm2x.png
sips -s format png -Z '203' "${FILE}" --out "${DIR}"/ExtraLarge42mm2x.png
sips -s format png -Z '224' "${FILE}" --out "${DIR}"/ExtraLarge44mm2x.png
sips -s format png -Z '84' "${FILE}" --out "${DIR}"/GraphicBezel40mm2x.png
sips -s format png -Z '84' "${FILE}" --out "${DIR}"/GraphicBezel42mm2x.png
sips -s format png -Z '94' "${FILE}" --out "${DIR}"/GraphicBezel44mm2x.png
sips -s format png -Z '84' "${FILE}" --out "${DIR}"/GraphicCircular40mm2x.png
sips -s format png -Z '84' "${FILE}" --out "${DIR}"/GraphicCircular42mm2x.png
sips -s format png -Z '94' "${FILE}" --out "${DIR}"/GraphicCircular44mm2x.png
sips -s format png -Z '40' "${FILE}" --out "${DIR}"/GraphicCorner40mm2x.png
sips -s format png -Z '40' "${FILE}" --out "${DIR}"/GraphicCorner42mm2x.png
sips -s format png -Z '44' "${FILE}" --out "${DIR}"/GraphicCorner44mm2x.png
sips -s format png -Z '52' "${FILE}" --out "${DIR}"/GraphicModular38mm2x.png
sips -s format png -Z '58' "${FILE}" --out "${DIR}"/GraphicModular40mm2x.png
sips -s format png -Z '58' "${FILE}" --out "${DIR}"/GraphicModular42mm2x.png
sips -s format png -Z '64' "${FILE}" --out "${DIR}"/GraphicModular44mm2x.png
sips -s format png -Z '40' "${FILE}" --out "${DIR}"/GraphicUtilitarian38mm2x.png
sips -s format png -Z '44' "${FILE}" --out "${DIR}"/GraphicUtilitarian40mm2x.png
sips -s format png -Z '44' "${FILE}" --out "${DIR}"/GraphicUtilitarian42mm2x.png
sips -s format png -Z '50' "${FILE}" --out "${DIR}"/GraphicUtilitarian44mm2x.png
sips -s format png -Z '206' "${FILE}" --out "${DIR}"/GraphicExtraLarge38mm2x.png
sips -s format png -Z '264' "${FILE}" --out "${DIR}"/GraphicExtraLarge44mm2x.png
echo "NOTE: Graphic Extra Large is not generated since that is not rectangular"
fi
if [[ "$PLATFORM" == *"macos"* ]] ; then # macOS
sips -s format png -Z '1024' "${FILE}" --out "${DIR}"/icon_512x512@2x.png
sips -s format png -Z '512' "${FILE}" --out "${DIR}"/icon_512x512.png
sips -s format png -Z '512' "${FILE}" --out "${DIR}"/icon_256x256@2x.png
sips -s format png -Z '256' "${FILE}" --out "${DIR}"/icon_256x256.png
sips -s format png -Z '256' "${FILE}" --out "${DIR}"/icon_128x128@2x.png
sips -s format png -Z '128' "${FILE}" --out "${DIR}"/icon_128x128.png
sips -s format png -Z '64' "${FILE}" --out "${DIR}"/icon_32x32@2x.png
sips -s format png -Z '32' "${FILE}" --out "${DIR}"/icon_32x32.png
sips -s format png -Z '32' "${FILE}" --out "${DIR}"/icon_16x16@2x.png
sips -s format png -Z '16' "${FILE}" --out "${DIR}"/icon_16x16.png
fi

View File

@@ -4,7 +4,6 @@
#addin nuget:?package=Cake.Incubator&version=7.0.0
#tool dotnet:?package=GitVersion.Tool&version=5.10.3
using Path = System.IO.Path;
using System.Text.RegularExpressions;
var debugScript = Argument<bool>("debugScript", false);
var target = Argument("target", "Default");
@@ -36,7 +35,6 @@ VariantConfig GetVariant() => variant.ToLower() switch{
GitVersion _gitVersion; //will be set by GetGitInfo task
var _slnPath = Path.Combine(""); //base path used to access files. If build.cake file is moved, just update this
string _androidPackageName = string.Empty; //will be set by UpdateAndroidManifest task
string _iOSVersionName = string.Empty; //will be set by UpdateiOSPlist task
string CreateFeatureBranch(string prevVersionName, GitVersion git) => $"{prevVersionName}-{git.BranchName.Replace("/","-")}";
string GetVersionName(string prevVersionName, VariantConfig buildVariant, GitVersion git) => buildVariant is Prod? prevVersionName : CreateFeatureBranch(prevVersionName, git);
int CreateBuildNumber(int previousNumber) => ++previousNumber;
@@ -165,8 +163,7 @@ enum iOSProjectType
MainApp,
Autofill,
Extension,
ShareExtension,
WatchApp
ShareExtension
}
string GetiOSBundleId(VariantConfig buildVariant, iOSProjectType projectType) => projectType switch
@@ -174,7 +171,6 @@ string GetiOSBundleId(VariantConfig buildVariant, iOSProjectType projectType) =>
iOSProjectType.Autofill => $"{buildVariant.iOSBundleId}.autofill",
iOSProjectType.Extension => $"{buildVariant.iOSBundleId}.find-login-action-extension",
iOSProjectType.ShareExtension => $"{buildVariant.iOSBundleId}.share-extension",
iOSProjectType.WatchApp => $"{buildVariant.iOSBundleId}.watchkitapp",
_ => buildVariant.iOSBundleId
};
@@ -209,7 +205,6 @@ private void UpdateiOSInfoPlist(string plistPath, VariantConfig buildVariant, Gi
if(projectType == iOSProjectType.MainApp)
{
_iOSVersionName = newVersionName;
plist["CFBundleURLTypes"][0]["CFBundleURLName"] = $"{buildVariant.iOSBundleId}.url";
}
@@ -245,79 +240,10 @@ private void UpdateiOSEntitlementsPlist(string entitlementsPath, VariantConfig b
Information($"{entitlementsPath} updated with success!");
}
private void UpdateWatchKitAppInfoPlist(string plistPath, VariantConfig buildVariant)
{
var plistFile = File(plistPath);
dynamic plist = DeserializePlist(plistFile);
var prevBundleId = plist["NSExtension"]["NSExtensionAttributes"]["WKAppBundleIdentifier"];
var newBundleId = GetiOSBundleId(buildVariant, iOSProjectType.WatchApp);
plist["NSExtension"]["NSExtensionAttributes"]["WKAppBundleIdentifier"] = newBundleId;
SerializePlist(plistFile, plist);
Information($"Changed Bundle Identifier from {prevBundleId} to {newBundleId}");
Information($"{plistPath} updated with success!");
}
private void UpdateWatchPbxproj(string pbxprojPath, string newVersion)
{
var fileText = FileReadText(pbxprojPath);
if (string.IsNullOrEmpty(fileText))
{
throw new Exception($"Couldn't find {pbxprojPath}");
}
const string pattern = @"MARKETING_VERSION = [^;]*;";
fileText = Regex.Replace(fileText, pattern, $"MARKETING_VERSION = {newVersion};");
FileWriteText(pbxprojPath, fileText);
Information($"{pbxprojPath} modified successfully.");
}
/// <summary>
/// Updates the target icons on the given appiconset target
/// taking as source the icon in appIcons/iOS folder for the giving variant
/// </summary>
/// <param name="target">It can be <ios|watch|complication|macos></param>
/// <param name="appiconsetTarget">Folder to copy the generated icons to</param>
private void UpdateAppleIcons(string target, string appiconsetTarget)
{
Information($"Updating {target} App Icons");
var iconsTempDirPath = Path.Combine(_slnPath, "appIcons", "temp");
CreateDirectory(iconsTempDirPath);
var arguments = new ProcessArgumentBuilder();
arguments.Append(target);
arguments.Append(Path.Combine(_slnPath, "appIcons", "iOS", $"{variant}.png"));
arguments.Append(iconsTempDirPath);
using(var process = StartAndReturnProcess(Path.Combine(_slnPath, "appIcons", "icongen.sh"),
new ProcessSettings { Arguments = arguments }))
{
process.WaitForExit();
Information("Exit code: {0}", process.GetExitCode());
}
var generatedIconsPath = Path.Combine(iconsTempDirPath, "*.png");
CopyFiles(generatedIconsPath, appiconsetTarget);
DeleteDirectory(iconsTempDirPath, new DeleteDirectorySettings {
Recursive = true,
Force = true
});
Information($"{target} App Icons have been updated");
}
Task("UpdateiOSIcons")
Task("UpdateiOSIcon")
.Does(()=>{
UpdateAppleIcons("ios", Path.Combine(_slnPath, "src", "iOS", "Resources", "Assets.xcassets", "AppIcons.appiconset"));
UpdateAppleIcons("watch", Path.Combine(_slnPath, "src", "watchOS", "bitwarden", "bitwarden WatchKit App", "Assets.xcassets", "AppIcon.appiconset"));
// TODO: Update complication icons when they start working
//TODO we'll implement variant icons later
Information($"Updating IOS App Icon");
});
Task("UpdateiOSPlist")
@@ -370,10 +296,8 @@ Task("UpdateiOSCodeFiles")
var fileList = new string[] {
Path.Combine(_slnPath, "src", "iOS.Core", "Utilities", "iOSCoreHelpers.cs"),
Path.Combine(_slnPath, "src", "iOS.Core", "Constants.cs"),
Path.Combine(_slnPath, "src", "watchOS", "bitwarden", "bitwarden.xcodeproj", "project.pbxproj"),
Path.Combine(_slnPath, "src", "watchOS", "bitwarden", "bitwarden WatchKit Extension", "Helpers", "KeychainHelper.swift"),
Path.Combine(".github", "resources", "export-options-ad-hoc.plist"),
Path.Combine(".github", "resources", "export-options-app-store.plist")
Path.Combine(".github", "resources", "export-options-app-store.plist"),
};
foreach(string path in fileList)
@@ -381,22 +305,6 @@ Task("UpdateiOSCodeFiles")
ReplaceInFile(path, "com.8bit.bitwarden", buildVariant.iOSBundleId);
}
});
Task("UpdateWatchProject")
.IsDependentOn("UpdateiOSPlist")
.WithCriteria(() => !string.IsNullOrEmpty(_iOSVersionName))
.Does(()=> {
var watchProjectPath = Path.Combine(_slnPath, "src", "watchOS", "bitwarden", "bitwarden.xcodeproj", "project.pbxproj");
UpdateWatchPbxproj(watchProjectPath, _iOSVersionName);
});
Task("UpdateWatchKitAppInfoPlist")
.Does(()=> {
var buildVariant = GetVariant();
var infoPath = Path.Combine(_slnPath, "src", "watchOS", "bitwarden", "bitwarden WatchKit Extension", "Info.plist");
UpdateWatchKitAppInfoPlist(infoPath, buildVariant);
});
#endregion iOS
#region Main Tasks
@@ -410,14 +318,12 @@ Task("Android")
});
Task("iOS")
.IsDependentOn("UpdateiOSIcons")
//.IsDependentOn("UpdateiOSIcon")
.IsDependentOn("UpdateiOSPlist")
.IsDependentOn("UpdateiOSAutofillPlist")
.IsDependentOn("UpdateiOSExtensionPlist")
.IsDependentOn("UpdateiOSShareExtensionPlist")
.IsDependentOn("UpdateiOSCodeFiles")
.IsDependentOn("UpdateWatchProject")
.IsDependentOn("UpdateWatchKitAppInfoPlist")
.Does(()=>
{
Information("iOS app updated");

Submodule lib/MessagePack deleted from 1ecb15e311

View File

@@ -170,7 +170,7 @@ namespace Bit.Droid
{
if (intent?.GetStringExtra("uri") is string uri)
{
_messagingService.Send(App.App.POP_ALL_AND_GO_TO_AUTOFILL_CIPHERS_MESSAGE);
_messagingService.Send("popAllAndGoToAutofillCiphers");
if (_appOptions != null)
{
_appOptions.Uri = uri;
@@ -178,7 +178,7 @@ namespace Bit.Droid
}
else if (intent.GetBooleanExtra("generatorTile", false))
{
_messagingService.Send(App.App.POP_ALL_AND_GO_TO_TAB_GENERATOR_MESSAGE);
_messagingService.Send("popAllAndGoToTabGenerator");
if (_appOptions != null)
{
_appOptions.GeneratorTile = true;
@@ -186,7 +186,7 @@ namespace Bit.Droid
}
else if (intent.GetBooleanExtra("myVaultTile", false))
{
_messagingService.Send(App.App.POP_ALL_AND_GO_TO_TAB_MYVAULT_MESSAGE);
_messagingService.Send("popAllAndGoToTabMyVault");
if (_appOptions != null)
{
_appOptions.MyVaultTile = true;
@@ -198,7 +198,7 @@ namespace Bit.Droid
{
_appOptions.CreateSend = GetCreateSendRequest(intent);
}
_messagingService.Send(App.App.POP_ALL_AND_GO_TO_TAB_SEND_MESSAGE);
_messagingService.Send("popAllAndGoToTabSend");
}
else
{

View File

@@ -21,7 +21,6 @@ using Bit.App.Utilities;
using Bit.App.Pages;
using Bit.App.Utilities.AccountManagement;
using Bit.App.Controls;
using Bit.Core.Enums;
#if !FDROID
using Android.Gms.Security;
#endif
@@ -82,8 +81,7 @@ namespace Bit.Droid
ServiceContainer.Resolve<IAuthService>("authService"),
ServiceContainer.Resolve<ILogger>("logger"),
ServiceContainer.Resolve<IMessagingService>("messagingService"),
ServiceContainer.Resolve<IWatchDeviceService>(),
ServiceContainer.Resolve<IConditionedAwaiterManager>());
ServiceContainer.Resolve<IWatchDeviceService>());
ServiceContainer.Register<IAccountsManager>("accountsManager", accountsManager);
}
#if !FDROID
@@ -145,10 +143,9 @@ namespace Bit.Droid
var secureStorageService = new SecureStorageService();
var cryptoPrimitiveService = new CryptoPrimitiveService();
var mobileStorageService = new MobileStorageService(preferencesStorage, liteDbStorage);
var storageMediatorService = new StorageMediatorService(mobileStorageService, secureStorageService, preferencesStorage);
var stateService = new StateService(mobileStorageService, secureStorageService, storageMediatorService, messagingService);
var stateService = new StateService(mobileStorageService, secureStorageService, messagingService);
var stateMigrationService =
new StateMigrationService(DeviceType.Android, liteDbStorage, preferencesStorage, secureStorageService);
new StateMigrationService(liteDbStorage, preferencesStorage, secureStorageService);
var clipboardService = new ClipboardService(stateService);
var deviceActionService = new DeviceActionService(stateService, messagingService);
var fileService = new FileService(stateService, broadcasterService);
@@ -156,12 +153,11 @@ namespace Bit.Droid
messagingService, broadcasterService);
var autofillHandler = new AutofillHandler(stateService, messagingService, clipboardService,
platformUtilsService, new LazyResolve<IEventService>());
var biometricService = new BiometricService(stateService);
var biometricService = new BiometricService();
var cryptoFunctionService = new PclCryptoFunctionService(cryptoPrimitiveService);
var cryptoService = new CryptoService(stateService, cryptoFunctionService);
var passwordRepromptService = new MobilePasswordRepromptService(platformUtilsService, cryptoService);
ServiceContainer.Register<ISynchronousStorageService>(preferencesStorage);
ServiceContainer.Register<IBroadcasterService>("broadcasterService", broadcasterService);
ServiceContainer.Register<IMessagingService>("messagingService", messagingService);
ServiceContainer.Register<ILocalizeService>("localizeService", localizeService);
@@ -169,7 +165,6 @@ namespace Bit.Droid
ServiceContainer.Register<ICryptoPrimitiveService>("cryptoPrimitiveService", cryptoPrimitiveService);
ServiceContainer.Register<IStorageService>("storageService", mobileStorageService);
ServiceContainer.Register<IStorageService>("secureStorageService", secureStorageService);
ServiceContainer.Register<IStorageMediatorService>(storageMediatorService);
ServiceContainer.Register<IStateService>("stateService", stateService);
ServiceContainer.Register<IStateMigrationService>("stateMigrationService", stateMigrationService);
ServiceContainer.Register<IClipboardService>("clipboardService", clipboardService);
@@ -202,9 +197,7 @@ namespace Bit.Droid
private void Bootstrap()
{
var locale = ServiceContainer.Resolve<IStateService>().GetLocale();
(ServiceContainer.Resolve<II18nService>("i18nService") as MobileI18nService)
.Init(locale != null ? new System.Globalization.CultureInfo(locale) : null);
(ServiceContainer.Resolve<II18nService>("i18nService") as MobileI18nService).Init();
ServiceContainer.Resolve<IAuthService>("authService").Init();
// Note: This is not awaited
var bootstrapTask = BootstrapAsync();

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="2023.4.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:versionCode="1" android:versionName="2023.1.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" />

View File

@@ -4,6 +4,7 @@ using Android.OS;
using Android.Security.Keystore;
using Bit.Core.Abstractions;
using Bit.Core.Services;
using Bit.Core.Utilities;
using Java.Security;
using Javax.Crypto;
@@ -11,8 +12,6 @@ namespace Bit.Droid.Services
{
public class BiometricService : IBiometricService
{
private readonly IStateService _stateService;
private const string KeyName = "com.8bit.bitwarden.biometric_integrity";
private const string KeyStoreName = "AndroidKeyStore";
@@ -24,28 +23,28 @@ namespace Bit.Droid.Services
private readonly KeyStore _keystore;
public BiometricService(IStateService stateService)
public BiometricService()
{
_stateService = stateService;
_keystore = KeyStore.GetInstance(KeyStoreName);
_keystore.Load(null);
}
public async Task<bool> SetupBiometricAsync(string bioIntegritySrcKey = null)
public Task<bool> SetupBiometricAsync(string bioIntegrityKey = null)
{
// bioIntegrityKey used in iOS only
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
await CreateKeyAsync(bioIntegritySrcKey);
CreateKey();
}
return true;
return Task.FromResult(true);
}
public async Task<bool> IsSystemBiometricIntegrityValidAsync(string bioIntegritySrcKey = null)
public Task<bool> ValidateIntegrityAsync(string bioIntegrityKey = null)
{
if (Build.VERSION.SdkInt < BuildVersionCodes.M)
{
return true;
return Task.FromResult(true);
}
try
@@ -56,7 +55,7 @@ namespace Bit.Droid.Services
if (key == null || cipher == null)
{
return true;
return Task.FromResult(true);
}
cipher.Init(CipherMode.EncryptMode, key);
@@ -64,32 +63,25 @@ namespace Bit.Droid.Services
catch (KeyPermanentlyInvalidatedException e)
{
// Biometric has changed
await ClearStateAsync(bioIntegritySrcKey);
return false;
return Task.FromResult(false);
}
catch (UnrecoverableKeyException e)
{
// Biometric was disabled and re-enabled
await ClearStateAsync(bioIntegritySrcKey);
return false;
return Task.FromResult(false);
}
catch (InvalidKeyException e)
{
// Fallback for old bitwarden users without a key
LoggerHelper.LogEvenIfCantBeResolved(e);
await CreateKeyAsync(bioIntegritySrcKey);
CreateKey();
}
return true;
return Task.FromResult(true);
}
private async Task CreateKeyAsync(string bioIntegritySrcKey = null)
private void CreateKey()
{
bioIntegritySrcKey ??= Core.Constants.BiometricIntegritySourceKey;
await _stateService.SetSystemBiometricIntegrityState(bioIntegritySrcKey,
await GetStateAsync(bioIntegritySrcKey));
await _stateService.SetAccountBiometricIntegrityValidAsync(bioIntegritySrcKey);
try
{
var keyGen = KeyGenerator.GetInstance(KeyAlgorithm, KeyStoreName);
@@ -109,16 +101,5 @@ namespace Bit.Droid.Services
LoggerHelper.LogEvenIfCantBeResolved(e);
}
}
private async Task<string> GetStateAsync(string bioIntegritySrcKey)
{
return await _stateService.GetSystemBiometricIntegrityState(bioIntegritySrcKey) ??
Guid.NewGuid().ToString();
}
private async Task ClearStateAsync(string bioIntegritySrcKey)
{
await _stateService.SetSystemBiometricIntegrityState(bioIntegritySrcKey, null);
}
}
}

View File

@@ -49,6 +49,12 @@ namespace Bit.Droid.Services
}
}
public bool IsCopyNotificationHandledByPlatform()
{
// Android 13+ provides built-in notification when text is copied to the clipboard
return (int)Build.VERSION.SdkInt >= 33;
}
private void CopyToClipboard(string text, bool isSensitive = true)
{
var clipboardManager = Application.Context.GetSystemService(Context.ClipboardService) as ClipboardManager;

View File

@@ -502,6 +502,11 @@ namespace Bit.Droid.Services
public async Task SetScreenCaptureAllowedAsync()
{
if (CoreHelpers.ForceScreenCaptureEnabled())
{
return;
}
var activity = CrossCurrentActivity.Current?.Activity;
if (await _stateService.GetScreenCaptureAllowedAsync())
{

View File

@@ -2,6 +2,7 @@
using System.Threading.Tasks;
using Bit.App.Services;
using Bit.Core.Abstractions;
using Bit.Core.Models;
namespace Bit.Droid.Services
{
@@ -21,7 +22,7 @@ namespace Bit.Droid.Services
protected override bool CanSendData => false;
protected override Task SendDataToWatchAsync(byte[] rawData) => throw new NotImplementedException();
protected override Task SendDataToWatchAsync(WatchDTO watchDto) => throw new NotImplementedException();
protected override void ConnectToWatch() => throw new NotImplementedException();
}

View File

@@ -8,7 +8,6 @@ namespace Bit.App.Abstractions
{
void Init(Func<AppOptions> getOptionsFunc, IAccountsManagerHost accountsManagerHost);
Task NavigateOnAccountChangeAsync(bool? isAuthed = null);
Task StartDefaultNavigationFlowAsync(Action<AppOptions> appOptionsAction);
Task LogOutAsync(string userId, bool userInitiated, bool expired);
Task PromptToSwitchToExistingAccountAsync(string userId);
}

View File

@@ -1,9 +0,0 @@
using System;
namespace Bit.App.Abstractions
{
public interface IDeepLinkContext
{
bool OnNewUri(Uri uri);
}
}

View File

@@ -21,7 +21,6 @@
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2515" />
<PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
<PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />
<PackageReference Include="MessagePack" Version="2.4.59" />
</ItemGroup>
<ItemGroup>
@@ -437,8 +436,6 @@
<None Remove="Utilities\AccountManagement\" />
<None Remove="Controls\DateTime\" />
<None Remove="Controls\IconLabelButton\" />
<None Remove="MessagePack" />
<None Remove="MessagePack.MSBuild.Tasks" />
<None Remove="Controls\PasswordStrengthProgressBar\" />
</ItemGroup>
</Project>

View File

@@ -18,22 +18,11 @@ using Bit.Core.Utilities;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace Bit.App
{
public partial class App : Application, IAccountsManagerHost
{
public const string POP_ALL_AND_GO_TO_TAB_GENERATOR_MESSAGE = "popAllAndGoToTabGenerator";
public const string POP_ALL_AND_GO_TO_TAB_MYVAULT_MESSAGE = "popAllAndGoToTabMyVault";
public const string POP_ALL_AND_GO_TO_TAB_SEND_MESSAGE = "popAllAndGoToTabSend";
public const string POP_ALL_AND_GO_TO_AUTOFILL_CIPHERS_MESSAGE = "popAllAndGoToAutofillCiphers";
private readonly IBroadcasterService _broadcasterService;
private readonly IMessagingService _messagingService;
private readonly IStateService _stateService;
@@ -114,18 +103,12 @@ namespace Bit.App
await Task.Delay(1000);
await _accountsManager.NavigateOnAccountChangeAsync();
}
else if (message.Command == POP_ALL_AND_GO_TO_TAB_GENERATOR_MESSAGE ||
message.Command == POP_ALL_AND_GO_TO_TAB_MYVAULT_MESSAGE ||
message.Command == POP_ALL_AND_GO_TO_TAB_SEND_MESSAGE ||
message.Command == POP_ALL_AND_GO_TO_AUTOFILL_CIPHERS_MESSAGE ||
message.Command == DeepLinkContext.NEW_OTP_MESSAGE)
else if (message.Command == "popAllAndGoToTabGenerator" ||
message.Command == "popAllAndGoToTabMyVault" ||
message.Command == "popAllAndGoToTabSend" ||
message.Command == "popAllAndGoToAutofillCiphers")
{
if (message.Command == DeepLinkContext.NEW_OTP_MESSAGE)
{
Options.OtpData = new OtpData((string)message.Data);
}
await Device.InvokeOnMainThreadAsync(async () =>
Device.BeginInvokeOnMainThread(async () =>
{
if (Current.MainPage is TabsPage tabsPage)
{
@@ -133,29 +116,24 @@ namespace Bit.App
{
await tabsPage.Navigation.PopModalAsync(false);
}
if (message.Command == POP_ALL_AND_GO_TO_AUTOFILL_CIPHERS_MESSAGE)
if (message.Command == "popAllAndGoToAutofillCiphers")
{
Current.MainPage = new NavigationPage(new CipherSelectionPage(Options));
Current.MainPage = new NavigationPage(new AutofillCiphersPage(Options));
}
else if (message.Command == POP_ALL_AND_GO_TO_TAB_MYVAULT_MESSAGE)
else if (message.Command == "popAllAndGoToTabMyVault")
{
Options.MyVaultTile = false;
tabsPage.ResetToVaultPage();
}
else if (message.Command == POP_ALL_AND_GO_TO_TAB_GENERATOR_MESSAGE)
else if (message.Command == "popAllAndGoToTabGenerator")
{
Options.GeneratorTile = false;
tabsPage.ResetToGeneratorPage();
}
else if (message.Command == POP_ALL_AND_GO_TO_TAB_SEND_MESSAGE)
else if (message.Command == "popAllAndGoToTabSend")
{
tabsPage.ResetToSendPage();
}
else if (message.Command == DeepLinkContext.NEW_OTP_MESSAGE)
{
tabsPage.ResetToVaultPage();
await tabsPage.Navigation.PushModalAsync(new NavigationPage(new CipherSelectionPage(Options)));
}
}
});
}
@@ -167,14 +145,6 @@ namespace Bit.App
new NavigationPage(new RemoveMasterPasswordPage()));
});
}
else if (message.Command == Constants.ForceUpdatePassword)
{
Device.BeginInvokeOnMainThread(async () =>
{
await Application.Current.MainPage.Navigation.PushModalAsync(
new NavigationPage(new UpdateTempPasswordPage()));
});
}
else if (message.Command == Constants.PasswordlessLoginRequestKey
|| message.Command == "unlocked"
|| message.Command == AccountsManagerMessageCommands.ACCOUNT_SWITCH_COMPLETED)
@@ -231,7 +201,7 @@ namespace Bit.App
Id = loginRequestData.Id,
IpAddress = loginRequestData.RequestIpAddress,
Email = await _stateService.GetEmailAsync(),
FingerprintPhrase = loginRequestData.FingerprintPhrase,
FingerprintPhrase = loginRequestData.RequestFingerprint,
RequestDate = loginRequestData.CreationDate,
DeviceType = loginRequestData.RequestDeviceType,
Origin = loginRequestData.Origin
@@ -338,7 +308,6 @@ namespace Bit.App
private async Task SleptAsync()
{
await _vaultTimeoutService.CheckVaultTimeoutAsync();
await ClearSensitiveFieldsAsync();
_messagingService.Send("stopEventTimer");
}
@@ -346,7 +315,6 @@ namespace Bit.App
{
await _stateService.CheckExtensionActiveUserAndSwitchIfNeededAsync();
await _vaultTimeoutService.CheckVaultTimeoutAsync();
await ClearSensitiveFieldsAsync();
_messagingService.Send("startEventTimer");
await UpdateThemeAsync();
await ClearCacheIfNeededAsync();
@@ -367,14 +335,6 @@ namespace Bit.App
});
}
private async Task ClearSensitiveFieldsAsync()
{
await Device.InvokeOnMainThreadAsync(() =>
{
_messagingService.Send(Constants.ClearSensitiveFields);
});
}
private void SetCulture()
{
// Calendars are removed by linker. ref https://bugzilla.xamarin.com/show_bug.cgi?id=59077
@@ -524,8 +484,7 @@ namespace Bit.App
Current.MainPage = new NavigationPage(new CipherAddEditPage(appOptions: Options));
break;
case NavigationTarget.AutofillCiphers:
case NavigationTarget.OtpCipherSelection:
Current.MainPage = new NavigationPage(new CipherSelectionPage(Options));
Current.MainPage = new NavigationPage(new AutofillCiphersPage(Options));
break;
case NavigationTarget.SendAddEdit:
Current.MainPage = new NavigationPage(new SendAddEditPage(Options));

View File

@@ -1,5 +1,4 @@
using System;
using System.Windows.Input;
using Bit.App.Abstractions;
using Bit.Core.Models.View;
using Bit.Core.Utilities;
@@ -19,7 +18,7 @@ namespace Bit.App.Controls
nameof(WebsiteIconsEnabled), typeof(bool?), typeof(CipherViewCell));
public static readonly BindableProperty ButtonCommandProperty = BindableProperty.Create(
nameof(ButtonCommand), typeof(ICommand), typeof(CipherViewCell));
nameof(ButtonCommand), typeof(Command<CipherView>), typeof(CipherViewCell));
public CipherViewCell()
{
@@ -43,9 +42,9 @@ namespace Bit.App.Controls
set => SetValue(CipherProperty, value);
}
public ICommand ButtonCommand
public Command<CipherView> ButtonCommand
{
get => GetValue(ButtonCommandProperty) as ICommand;
get => GetValue(ButtonCommandProperty) as Command<CipherView>;
set => SetValue(ButtonCommandProperty, value);
}

View File

@@ -1,6 +1,5 @@
using System;
using Bit.Core.Enums;
using Bit.Core.Utilities;
namespace Bit.App.Models
{
@@ -24,7 +23,6 @@ namespace Bit.App.Models
public Tuple<SendType, string, byte[], string> CreateSend { get; set; }
public bool CopyInsteadOfShareAfterSaving { get; set; }
public bool HideAccountSwitcher { get; set; }
public OtpData? OtpData { get; set; }
public void SetAllFrom(AppOptions o)
{
@@ -50,7 +48,6 @@ namespace Bit.App.Models
CreateSend = o.CreateSend;
CopyInsteadOfShareAfterSaving = o.CopyInsteadOfShareAfterSaving;
HideAccountSwitcher = o.HideAccountSwitcher;
OtpData = o.OtpData;
}
}
}

View File

@@ -1,7 +1,10 @@
using System.Text;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Bit.App.Abstractions;
using Bit.App.Resources;
using Bit.App.Utilities;
using Bit.Core;
using Bit.Core.Abstractions;
using Bit.Core.Models.Domain;
@@ -70,13 +73,13 @@ namespace Bit.App.Pages
set => SetProperty(ref _policy, value);
}
public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye;
public string ShowPasswordIcon => ShowPassword ? "" : "";
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
public string MasterPassword { get; set; }
public string ConfirmMasterPassword { get; set; }
public string Hint { get; set; }
public virtual async Task InitAsync(bool forceSync = false)
public async Task InitAsync(bool forceSync = false)
{
if (forceSync)
{
@@ -159,7 +162,7 @@ namespace Bit.App.Pages
{
if (MasterPassword.Length < Constants.MasterPasswordMinimumChars)
{
await _platformUtilsService.ShowDialogAsync(string.Format(AppResources.MasterPasswordLengthValMessageX, Constants.MasterPasswordMinimumChars),
await _platformUtilsService.ShowDialogAsync(AppResources.MasterPasswordLengthValMessage,
AppResources.MasterPasswordPolicyValidationTitle, AppResources.Ok);
return false;
}

View File

@@ -137,7 +137,7 @@
</StackLayout>
<StackLayout Padding="10, 0">
<Label
Text="{u:I18n AccountBiometricInvalidated}"
Text="{u:I18n BiometricInvalidated}"
StyleClass="box-footer-label,text-danger,text-bold"
IsVisible="{Binding BiometricIntegrityValid, Converter={StaticResource inverseBool}}" />
<Button Text="{Binding BiometricButtonText}" Clicked="Biometric_Clicked"

View File

@@ -3,8 +3,6 @@ using System.Threading.Tasks;
using Bit.App.Models;
using Bit.App.Resources;
using Bit.App.Utilities;
using Bit.Core;
using Bit.Core.Abstractions;
using Bit.Core.Utilities;
using Xamarin.Forms;
@@ -12,7 +10,6 @@ namespace Bit.App.Pages
{
public partial class LockPage : BaseContentPage
{
private readonly IBroadcasterService _broadcasterService;
private readonly AppOptions _appOptions;
private readonly bool _autoPromptBiometric;
private readonly LockPageViewModel _vm;
@@ -25,7 +22,6 @@ namespace Bit.App.Pages
_appOptions = appOptions;
_autoPromptBiometric = autoPromptBiometric;
InitializeComponent();
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>();
_vm = BindingContext as LockPageViewModel;
_vm.Page = this;
_vm.UnlockedAction = () => Device.BeginInvokeOnMainThread(async () => await UnlockedAsync());
@@ -68,13 +64,6 @@ namespace Bit.App.Pages
protected override async void OnAppearing()
{
base.OnAppearing();
_broadcasterService.Subscribe(nameof(LockPage), message =>
{
if (message.Command == Constants.ClearSensitiveFields)
{
Device.BeginInvokeOnMainThread(_vm.ResetPinPasswordFields);
}
});
if (_appeared)
{
return;
@@ -140,7 +129,6 @@ namespace Bit.App.Pages
base.OnDisappearing();
_accountAvatar?.OnDisappearing();
_broadcasterService.Unsubscribe(nameof(LockPage));
}
private void Unlock_Clicked(object sender, EventArgs e)

View File

@@ -9,7 +9,6 @@ using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Models.Domain;
using Bit.Core.Models.Request;
using Bit.Core.Services;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.Helpers;
using Xamarin.Forms;
@@ -31,12 +30,8 @@ namespace Bit.App.Pages
private readonly ILogger _logger;
private readonly IWatchDeviceService _watchDeviceService;
private readonly WeakEventManager<int?> _secretEntryFocusWeakEventManager = new WeakEventManager<int?>();
private readonly IPolicyService _policyService;
private readonly IPasswordGenerationService _passwordGenerationService;
private string _email;
private string _masterPassword;
private string _pin;
private bool _showPassword;
private bool _pinLock;
private bool _biometricLock;
@@ -63,8 +58,6 @@ namespace Bit.App.Pages
_keyConnectorService = ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService");
_logger = ServiceContainer.Resolve<ILogger>("logger");
_watchDeviceService = ServiceContainer.Resolve<IWatchDeviceService>();
_policyService = ServiceContainer.Resolve<IPolicyService>();
_passwordGenerationService = ServiceContainer.Resolve<IPasswordGenerationService>();
PageTitle = AppResources.VerifyMasterPassword;
TogglePasswordCommand = new Command(TogglePassword);
@@ -77,18 +70,6 @@ namespace Bit.App.Pages
};
}
public string MasterPassword
{
get => _masterPassword;
set => SetProperty(ref _masterPassword, value);
}
public string Pin
{
get => _pin;
set => SetProperty(ref _pin, value);
}
public bool ShowPassword
{
get => _showPassword;
@@ -153,6 +134,8 @@ namespace Bit.App.Pages
public Command TogglePasswordCommand { get; }
public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye;
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
public string MasterPassword { get; set; }
public string Pin { get; set; }
public Action UnlockedAction { get; set; }
public event Action<int?> FocusSecretEntry
{
@@ -209,7 +192,7 @@ namespace Bit.App.Pages
if (BiometricLock)
{
BiometricIntegrityValid = await _platformUtilsService.IsBiometricIntegrityValidAsync();
BiometricIntegrityValid = await _biometricService.ValidateIntegrityAsync();
if (!_biometricIntegrityValid)
{
BiometricButtonVisible = false;
@@ -298,7 +281,6 @@ namespace Bit.App.Pages
var key = await _cryptoService.MakeKeyAsync(MasterPassword, _email, kdfConfig);
var storedKeyHash = await _cryptoService.GetKeyHashAsync();
var passwordValid = false;
MasterPasswordPolicyOptions enforcedMasterPasswordOptions = null;
if (storedKeyHash != null)
{
@@ -310,11 +292,9 @@ namespace Bit.App.Pages
var keyHash = await _cryptoService.HashPasswordAsync(MasterPassword, key, HashPurpose.ServerAuthorization);
var request = new PasswordVerificationRequest();
request.MasterPasswordHash = keyHash;
try
{
var response = await _apiService.PostAccountVerifyPasswordAsync(request);
enforcedMasterPasswordOptions = response.MasterPasswordPolicy;
await _apiService.PostAccountVerifyPasswordAsync(request);
passwordValid = true;
var localKeyHash = await _cryptoService.HashPasswordAsync(MasterPassword, key, HashPurpose.LocalAuthorization);
await _cryptoService.SetKeyHashAsync(localKeyHash);
@@ -335,14 +315,6 @@ namespace Bit.App.Pages
var pinKey = await _cryptoService.MakePinKeyAysnc(decPin, _email, kdfConfig);
await _stateService.SetPinProtectedKeyAsync(await _cryptoService.EncryptAsync(key.Key, pinKey));
}
if (await RequirePasswordChangeAsync(enforcedMasterPasswordOptions))
{
// Save the ForcePasswordResetReason to force a password reset after unlock
await _stateService.SetForcePasswordResetReasonAsync(
ForcePasswordResetReason.WeakMasterPasswordOnLogin);
}
MasterPassword = string.Empty;
await AppHelpers.ResetInvalidUnlockAttemptsAsync();
await SetKeyAndContinueAsync(key);
@@ -367,37 +339,6 @@ namespace Bit.App.Pages
}
}
/// <summary>
/// Checks if the master password requires updating to meet the enforced policy requirements
/// </summary>
/// <param name="options"></param>
private async Task<bool> RequirePasswordChangeAsync(MasterPasswordPolicyOptions options = null)
{
// If no policy options are provided, attempt to load them from the policy service
var enforcedOptions = options ?? await _policyService.GetMasterPasswordPolicyOptions();
// No policy to enforce on login/unlock
if (!(enforcedOptions is { EnforceOnLogin: true }))
{
return false;
}
var strength = _passwordGenerationService.PasswordStrength(
MasterPassword, _passwordGenerationService.GetPasswordStrengthUserInput(_email))?.Score;
if (!strength.HasValue)
{
_logger.Error("Unable to evaluate master password strength during unlock");
return false;
}
return !await _policyService.EvaluateMasterPassword(
strength.Value,
MasterPassword,
enforcedOptions
);
}
public async Task LogOutAsync()
{
var confirmed = await _platformUtilsService.ShowDialogAsync(AppResources.LogoutConfirmation,
@@ -408,20 +349,6 @@ namespace Bit.App.Pages
}
}
public void ResetPinPasswordFields()
{
try
{
MasterPassword = string.Empty;
Pin = string.Empty;
ShowPassword = false;
}
catch (Exception ex)
{
LoggerHelper.LogEvenIfCantBeResolved(ex);
}
}
public void TogglePassword()
{
ShowPassword = !ShowPassword;
@@ -431,8 +358,7 @@ namespace Bit.App.Pages
public async Task PromptBiometricAsync()
{
BiometricIntegrityValid = await _platformUtilsService.IsBiometricIntegrityValidAsync();
BiometricButtonVisible = BiometricIntegrityValid;
BiometricIntegrityValid = await _biometricService.ValidateIntegrityAsync();
if (!BiometricLock || !BiometricIntegrityValid)
{
return;

View File

@@ -2,7 +2,6 @@
using System.Threading.Tasks;
using Bit.App.Models;
using Bit.App.Utilities;
using Bit.Core;
using Bit.Core.Abstractions;
using Bit.Core.Services;
using Bit.Core.Utilities;
@@ -13,7 +12,6 @@ namespace Bit.App.Pages
{
public partial class LoginPage : BaseContentPage
{
private readonly IBroadcasterService _broadcasterService;
private readonly LoginPageViewModel _vm;
private readonly AppOptions _appOptions;
@@ -25,7 +23,6 @@ namespace Bit.App.Pages
{
_appOptions = appOptions;
InitializeComponent();
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>();
_vm = BindingContext as LoginPageViewModel;
_vm.Page = this;
_vm.StartTwoFactorAction = () => Device.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync());
@@ -73,13 +70,6 @@ namespace Bit.App.Pages
protected override async void OnAppearing()
{
base.OnAppearing();
_broadcasterService.Subscribe(nameof(LoginPage), message =>
{
if (message.Command == Constants.ClearSensitiveFields)
{
Device.BeginInvokeOnMainThread(_vm.ResetPasswordField);
}
});
_mainContent.Content = _mainLayout;
_accountAvatar?.OnAppearing();
@@ -114,7 +104,6 @@ namespace Bit.App.Pages
base.OnDisappearing();
_accountAvatar?.OnDisappearing();
_broadcasterService.Unsubscribe(nameof(LoginPage));
}
private async void LogIn_Clicked(object sender, EventArgs e)

View File

@@ -40,7 +40,6 @@ namespace Bit.App.Pages
private string _masterPassword;
private bool _isEmailEnabled;
private bool _isKnownDevice;
private bool _isExecutingLogin;
public LoginPageViewModel()
{
@@ -144,27 +143,20 @@ namespace Bit.App.Pages
try
{
await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
await _stateService.SetPreLoginEmailAsync(Email);
await AccountSwitchingOverlayViewModel.RefreshAccountViewsAsync();
if (string.IsNullOrWhiteSpace(Email))
{
Email = await _stateService.GetRememberedEmailAsync();
}
var deviceIdentifier = await _appIdService.GetAppIdAsync();
IsKnownDevice = await _apiService.GetKnownDeviceAsync(Email, deviceIdentifier);
CanRemoveAccount = await _stateService.GetActiveUserEmailAsync() != Email;
IsKnownDevice = await _apiService.GetKnownDeviceAsync(Email, await _appIdService.GetAppIdAsync());
}
catch (ApiException apiEx) when (apiEx.Error.StatusCode == System.Net.HttpStatusCode.Unauthorized)
{
_logger.Exception(apiEx);
await _deviceActionService.HideLoadingAsync();
}
catch (Exception ex)
{
HandleException(ex);
}
finally
{
await _deviceActionService.HideLoadingAsync();
}
}
public async Task LogInAsync(bool showLoading = true, bool checkForExistingAccount = false)
@@ -199,7 +191,6 @@ namespace Bit.App.Pages
ShowPassword = false;
try
{
_isExecutingLogin = true;
if (checkForExistingAccount)
{
var userId = await _stateService.GetUserIdAsync(Email);
@@ -261,26 +252,6 @@ namespace Bit.App.Pages
AppResources.AnErrorHasOccurred, AppResources.Ok);
}
}
finally
{
_isExecutingLogin = false;
}
}
public void ResetPasswordField()
{
try
{
if (!_isExecutingLogin)
{
MasterPassword = string.Empty;
ShowPassword = false;
}
}
catch (Exception ex)
{
LoggerHelper.LogEvenIfCantBeResolved(ex);
}
}
private async Task MoreAsync()

View File

@@ -171,7 +171,7 @@ namespace Bit.App.Pages
var response = await _authService.PasswordlessCreateLoginRequestAsync(_email);
if (response != null)
{
FingerprintPhrase = response.FingerprintPhrase;
FingerprintPhrase = response.RequestFingerprint;
_requestId = response.Id;
_requestAccessCode = response.RequestAccessCode;
_requestKeyPair = response.RequestKeyPair;

View File

@@ -1,5 +1,4 @@
using System;
using System.Net;
using System.Threading.Tasks;
using System.Windows.Input;
using Bit.App.Abstractions;
@@ -28,7 +27,6 @@ namespace Bit.App.Pages
private readonly IPlatformUtilsService _platformUtilsService;
private readonly IStateService _stateService;
private readonly ILogger _logger;
private readonly IOrganizationService _organizationService;
private string _orgIdentifier;
@@ -44,7 +42,6 @@ namespace Bit.App.Pages
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
_stateService = ServiceContainer.Resolve<IStateService>("stateService");
_logger = ServiceContainer.Resolve<ILogger>("logger");
_organizationService = ServiceContainer.Resolve<IOrganizationService>();
PageTitle = AppResources.Bitwarden;
@@ -66,27 +63,11 @@ namespace Bit.App.Pages
public async Task InitAsync()
{
try
{
if (await TryClaimedDomainLogin())
{
return;
}
if (string.IsNullOrWhiteSpace(OrgIdentifier))
{
OrgIdentifier = await _stateService.GetRememberedOrgIdentifierAsync();
}
}
catch (Exception ex)
{
_logger.Exception(ex);
}
finally
{
await _deviceActionService.HideLoadingAsync();
}
}
public async Task LogInAsync()
{
@@ -226,37 +207,5 @@ namespace Bit.App.Pages
AppResources.AnErrorHasOccurred);
}
}
private async Task<bool> TryClaimedDomainLogin()
{
try
{
await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
var userEmail = await _stateService.GetPreLoginEmailAsync();
var claimedDomainOrgDetails = await _organizationService.GetClaimedOrganizationDomainAsync(userEmail);
await _deviceActionService.HideLoadingAsync();
if (claimedDomainOrgDetails == null || !claimedDomainOrgDetails.SsoAvailable)
{
return false;
}
if (string.IsNullOrEmpty(claimedDomainOrgDetails.OrganizationIdentifier))
{
await _platformUtilsService.ShowDialogAsync(AppResources.OrganizationSsoIdentifierRequired, AppResources.AnErrorHasOccurred);
return false;
}
OrgIdentifier = claimedDomainOrgDetails.OrganizationIdentifier;
await LogInAsync();
return true;
}
catch (Exception ex)
{
HandleException(ex);
}
return false;
}
}
}

View File

@@ -148,7 +148,7 @@ namespace Bit.App.Pages
}
if (MasterPassword.Length < Constants.MasterPasswordMinimumChars)
{
await _platformUtilsService.ShowDialogAsync(string.Format(AppResources.MasterPasswordLengthValMessageX, Constants.MasterPasswordMinimumChars),
await _platformUtilsService.ShowDialogAsync(AppResources.MasterPasswordLengthValMessage,
AppResources.AnErrorHasOccurred, AppResources.Ok);
return;
}

View File

@@ -152,7 +152,7 @@ namespace Bit.App.Pages
if (MasterPassword.Length < Constants.MasterPasswordMinimumChars)
{
await Page.DisplayAlert(AppResources.MasterPasswordPolicyValidationTitle,
string.Format(AppResources.MasterPasswordLengthValMessageX, Constants.MasterPasswordMinimumChars), AppResources.Ok);
AppResources.MasterPasswordLengthValMessage, AppResources.Ok);
return;
}
}

View File

@@ -46,7 +46,7 @@
BackgroundColor="Transparent"
BorderColor="{DynamicResource PrimaryColor}">
<Label
Text="{Binding UpdateMasterPasswordWarningText }"
Text="{u:I18n UpdateMasterPasswordWarning}"
StyleClass="text-muted, text-sm, text-bold"
HorizontalTextAlignment="Center" />
</Frame>
@@ -74,40 +74,6 @@
HorizontalTextAlignment="Start" />
</Frame>
</Grid>
<Grid StyleClass="box-row" IsVisible="{Binding RequireCurrentPassword }">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label
Text="{u:I18n CurrentMasterPassword}"
StyleClass="box-label"
Grid.Row="0"
Grid.Column="0" />
<controls:MonoEntry
x:Name="_currentMasterPassword"
Text="{Binding CurrentMasterPassword}"
StyleClass="box-value"
IsSpellCheckEnabled="False"
IsTextPredictionEnabled="False"
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
Grid.Row="1"
Grid.Column="0" />
<controls:IconButton
StyleClass="box-row-button, box-row-button-platform"
Text="{Binding ShowPasswordIcon}"
Command="{Binding TogglePasswordCommand}"
Grid.Row="0"
Grid.Column="1"
Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n ToggleVisibility}"
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" />
</Grid>
<Grid StyleClass="box-row">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />

View File

@@ -1,68 +1,27 @@
using System;
using System.Threading.Tasks;
using Bit.App.Resources;
using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Exceptions;
using Bit.Core.Models.Domain;
using Bit.Core.Models.Request;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public class UpdateTempPasswordPageViewModel : BaseChangePasswordViewModel
{
private readonly IUserVerificationService _userVerificationService;
private ForcePasswordResetReason _reason = ForcePasswordResetReason.AdminForcePasswordReset;
public UpdateTempPasswordPageViewModel()
{
PageTitle = AppResources.UpdateMasterPassword;
TogglePasswordCommand = new Command(TogglePassword);
ToggleConfirmPasswordCommand = new Command(ToggleConfirmPassword);
SubmitCommand = new AsyncCommand(SubmitAsync,
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
_userVerificationService = ServiceContainer.Resolve<IUserVerificationService>();
SubmitCommand = new Command(async () => await SubmitAsync());
}
public AsyncCommand SubmitCommand { get; }
public Command SubmitCommand { get; }
public Command TogglePasswordCommand { get; }
public Command ToggleConfirmPasswordCommand { get; }
public Action UpdateTempPasswordSuccessAction { get; set; }
public Action LogOutAction { get; set; }
public string CurrentMasterPassword { get; set; }
public override async Task InitAsync(bool forceSync = false)
{
await base.InitAsync(forceSync);
var forcePasswordResetReason = await _stateService.GetForcePasswordResetReasonAsync();
if (forcePasswordResetReason.HasValue)
{
_reason = forcePasswordResetReason.Value;
}
}
public bool RequireCurrentPassword
{
get => _reason == ForcePasswordResetReason.WeakMasterPasswordOnLogin;
}
public string UpdateMasterPasswordWarningText
{
get
{
return _reason == ForcePasswordResetReason.WeakMasterPasswordOnLogin
? AppResources.UpdateWeakMasterPasswordWarning
: AppResources.UpdateMasterPasswordWarning;
}
}
public void TogglePassword()
{
@@ -83,12 +42,6 @@ namespace Bit.App.Pages
return;
}
if (RequireCurrentPassword &&
!await _userVerificationService.VerifyUser(CurrentMasterPassword, VerificationType.MasterPassword))
{
return;
}
// Retrieve details for key generation
var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile));
var email = await _stateService.GetEmailAsync();
@@ -100,29 +53,21 @@ namespace Bit.App.Pages
// Create new encKey for the User
var newEncKey = await _cryptoService.RemakeEncKeyAsync(key);
// Create request
var request = new UpdateTempPasswordRequest
{
Key = newEncKey.Item2.EncryptedString,
NewMasterPasswordHash = masterPasswordHash,
MasterPasswordHint = Hint
};
// Initiate API action
try
{
await _deviceActionService.ShowLoadingAsync(AppResources.UpdatingPassword);
switch (_reason)
{
case ForcePasswordResetReason.AdminForcePasswordReset:
await UpdateTempPasswordAsync(masterPasswordHash, newEncKey.Item2.EncryptedString);
break;
case ForcePasswordResetReason.WeakMasterPasswordOnLogin:
await UpdatePasswordAsync(masterPasswordHash, newEncKey.Item2.EncryptedString);
break;
default:
throw new ArgumentOutOfRangeException();
}
await _apiService.PutUpdateTempPasswordAsync(request);
await _deviceActionService.HideLoadingAsync();
// Clear the force reset password reason
await _stateService.SetForcePasswordResetReasonAsync(null);
_platformUtilsService.ShowToast(null, null, AppResources.UpdatedMasterPassword);
UpdateTempPasswordSuccessAction?.Invoke();
}
catch (ApiException e)
@@ -140,32 +85,5 @@ namespace Bit.App.Pages
}
}
}
private async Task UpdateTempPasswordAsync(string newMasterPasswordHash, string newEncKey)
{
var request = new UpdateTempPasswordRequest
{
Key = newEncKey,
NewMasterPasswordHash = newMasterPasswordHash,
MasterPasswordHint = Hint
};
await _apiService.PutUpdateTempPasswordAsync(request);
}
private async Task UpdatePasswordAsync(string newMasterPasswordHash, string newEncKey)
{
var currentPasswordHash = await _cryptoService.HashPasswordAsync(CurrentMasterPassword, null);
var request = new PasswordRequest
{
MasterPasswordHash = currentPasswordHash,
Key = newEncKey,
NewMasterPasswordHash = newMasterPasswordHash,
MasterPasswordHint = Hint
};
await _apiService.PostPasswordAsync(request);
}
}
}

View File

@@ -39,7 +39,7 @@
Padding="0, 10, 0 ,0"
FontAttributes="Bold"/>
<controls:MonoLabel
FormattedText="{Binding FingerprintPhrase}"
FormattedText="{Binding RequestFingerprint}"
Grid.Row="1"
Grid.ColumnSpan="2"
FontSize="Small"

View File

@@ -99,7 +99,7 @@ namespace Bit.App.Pages
Id = loginRequestData.Id,
IpAddress = loginRequestData.RequestIpAddress,
Email = await _stateService.GetEmailAsync(),
FingerprintPhrase = loginRequestData.FingerprintPhrase,
FingerprintPhrase = loginRequestData.RequestFingerprint,
RequestDate = loginRequestData.CreationDate,
DeviceType = loginRequestData.RequestDeviceType,
Origin = loginRequestData.Origin

View File

@@ -80,22 +80,6 @@
Text="{u:I18n ClearClipboardDescription}"
StyleClass="box-footer-label" />
</StackLayout>
<StackLayout StyleClass="box">
<StackLayout StyleClass="box-row, box-row-input, box-row-input-options-platform">
<Label
Text="{u:I18n Language}"
StyleClass="box-label" />
<Picker
x:Name="_languagePicker"
ItemsSource="{Binding LocalesOptions, Mode=OneTime}"
SelectedItem="{Binding SelectedLocale}"
ItemDisplayBinding="{Binding Value}"
StyleClass="box-value" />
</StackLayout>
<Label
Text="{u:I18n LanguageChangeRequiresAppRestart}"
StyleClass="box-footer-label" />
</StackLayout>
<StackLayout StyleClass="box">
<StackLayout StyleClass="box-row, box-row-switch">
<Label

View File

@@ -34,7 +34,6 @@ namespace Bit.App.Pages
_autoDarkThemePicker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
_uriMatchPicker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
_clearClipboardPicker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
_languagePicker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
}
}

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Bit.App.Resources;
using Bit.App.Utilities;
@@ -15,8 +14,7 @@ namespace Bit.App.Pages
{
private readonly IStateService _stateService;
private readonly IMessagingService _messagingService;
private readonly II18nService _i18nService;
private readonly IPlatformUtilsService _platformUtilsService;
private bool _autofillSavePrompt;
private string _autofillBlockedUris;
@@ -26,7 +24,6 @@ namespace Bit.App.Pages
private int _themeSelectedIndex;
private int _autoDarkThemeSelectedIndex;
private int _uriMatchSelectedIndex;
private KeyValuePair<string, string> _selectedLocale;
private bool _inited;
private bool _updatingAutofill;
private bool _showAndroidAutofillSettings;
@@ -35,8 +32,6 @@ namespace Bit.App.Pages
{
_stateService = ServiceContainer.Resolve<IStateService>("stateService");
_messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService");
_i18nService = ServiceContainer.Resolve<II18nService>();
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>();
PageTitle = AppResources.Options;
var iosIos = Device.RuntimePlatform == Device.iOS;
@@ -79,18 +74,12 @@ namespace Bit.App.Pages
new KeyValuePair<UriMatchType?, string>(UriMatchType.Exact, AppResources.Exact),
new KeyValuePair<UriMatchType?, string>(UriMatchType.Never, AppResources.Never),
};
LocalesOptions = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>(null, AppResources.DefaultSystem)
};
LocalesOptions.AddRange(_i18nService.LocaleNames.ToList());
}
public List<KeyValuePair<int?, string>> ClearClipboardOptions { get; set; }
public List<KeyValuePair<string, string>> ThemeOptions { get; set; }
public List<KeyValuePair<string, string>> AutoDarkThemeOptions { get; set; }
public List<KeyValuePair<UriMatchType?, string>> UriMatchOptions { get; set; }
public List<KeyValuePair<string, string>> LocalesOptions { get; }
public int ClearClipboardSelectedIndex
{
@@ -144,18 +133,6 @@ namespace Bit.App.Pages
}
}
public KeyValuePair<string, string> SelectedLocale
{
get => _selectedLocale;
set
{
if (SetProperty(ref _selectedLocale, value))
{
UpdateCurrentLocaleAsync().FireAndForget();
}
}
}
public bool Favicon
{
get => _favicon;
@@ -207,30 +184,19 @@ namespace Bit.App.Pages
public async Task InitAsync()
{
AutofillSavePrompt = !(await _stateService.GetAutofillDisableSavePromptAsync()).GetValueOrDefault();
var blockedUrisList = await _stateService.GetAutofillBlacklistedUrisAsync();
AutofillBlockedUris = blockedUrisList != null ? string.Join(", ", blockedUrisList) : null;
AutoTotpCopy = !(await _stateService.GetDisableAutoTotpCopyAsync() ?? false);
Favicon = !(await _stateService.GetDisableFaviconAsync()).GetValueOrDefault();
var theme = await _stateService.GetThemeAsync();
ThemeSelectedIndex = ThemeOptions.FindIndex(k => k.Key == theme);
var autoDarkTheme = await _stateService.GetAutoDarkThemeAsync() ?? "dark";
AutoDarkThemeSelectedIndex = AutoDarkThemeOptions.FindIndex(k => k.Key == autoDarkTheme);
var defaultUriMatch = await _stateService.GetDefaultUriMatchAsync();
UriMatchSelectedIndex = defaultUriMatch == null ? 0 :
UriMatchOptions.FindIndex(k => (int?)k.Key == defaultUriMatch);
var clearClipboard = await _stateService.GetClearClipboardAsync();
ClearClipboardSelectedIndex = ClearClipboardOptions.FindIndex(k => k.Key == clearClipboard);
var appLocale = _stateService.GetLocale();
SelectedLocale = appLocale == null ? LocalesOptions.First() : LocalesOptions.FirstOrDefault(kv => kv.Key == appLocale);
_inited = true;
}
@@ -322,17 +288,5 @@ namespace Bit.App.Pages
catch { }
}
}
private async Task UpdateCurrentLocaleAsync()
{
if (!_inited)
{
return;
}
_stateService.SetLocale(SelectedLocale.Key);
await _platformUtilsService.ShowDialogAsync(string.Format(AppResources.LanguageChangeXDescription, SelectedLocale.Value), AppResources.Language, AppResources.Ok);
}
}
}

View File

@@ -7,7 +7,10 @@ using Bit.App.Pages.Accounts;
using Bit.App.Resources;
using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Models;
using Bit.Core.Models.Domain;
using Bit.Core.Models.Response;
using Bit.Core.Models.View;
using Bit.Core.Services;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
@@ -48,7 +51,7 @@ namespace Bit.App.Pages
private bool _reportLoggingEnabled;
private bool _approvePasswordlessLoginRequests;
private bool _shouldConnectToWatch;
private readonly static List<KeyValuePair<string, int?>> VaultTimeoutOptions =
private List<KeyValuePair<string, int?>> _vaultTimeouts =
new List<KeyValuePair<string, int?>>
{
new KeyValuePair<string, int?>(AppResources.Immediately, 0),
@@ -62,7 +65,7 @@ namespace Bit.App.Pages
new KeyValuePair<string, int?>(AppResources.Never, null),
new KeyValuePair<string, int?>(AppResources.Custom, CustomVaultTimeoutValue),
};
private readonly static List<KeyValuePair<string, VaultTimeoutAction>> VaultTimeoutActionOptions =
private List<KeyValuePair<string, VaultTimeoutAction>> _vaultTimeoutActions =
new List<KeyValuePair<string, VaultTimeoutAction>>
{
new KeyValuePair<string, VaultTimeoutAction>(AppResources.Lock, VaultTimeoutAction.Lock),
@@ -71,8 +74,6 @@ namespace Bit.App.Pages
private Policy _vaultTimeoutPolicy;
private int? _vaultTimeout;
private List<KeyValuePair<string, int?>> _vaultTimeoutOptions = VaultTimeoutOptions;
private List<KeyValuePair<string, VaultTimeoutAction>> _vaultTimeoutActionOptions = VaultTimeoutActionOptions;
public SettingsPageViewModel()
{
@@ -116,28 +117,20 @@ namespace Bit.App.Pages
_localizeService.GetLocaleShortTime(lastSync.Value));
}
_vaultTimeoutPolicy = null;
_vaultTimeoutOptions = VaultTimeoutOptions;
_vaultTimeoutActionOptions = VaultTimeoutActionOptions;
_vaultTimeout = await _vaultTimeoutService.GetVaultTimeout();
_vaultTimeoutDisplayValue = _vaultTimeoutOptions.FirstOrDefault(o => o.Value == _vaultTimeout).Key;
_vaultTimeoutDisplayValue ??= _vaultTimeoutOptions.Where(o => o.Value == CustomVaultTimeoutValue).First().Key;
var action = await _vaultTimeoutService.GetVaultTimeoutAction() ?? VaultTimeoutAction.Lock;
_vaultTimeoutActionDisplayValue = _vaultTimeoutActionOptions.FirstOrDefault(o => o.Value == action).Key;
if (await _policyService.PolicyAppliesToUser(PolicyType.MaximumVaultTimeout))
{
// if we have a vault timeout policy, we need to filter the timeout options
_vaultTimeoutPolicy = (await _policyService.GetAll(PolicyType.MaximumVaultTimeout)).First();
var policyMinutes = _policyService.GetPolicyInt(_vaultTimeoutPolicy, PolicyService.TIMEOUT_POLICY_MINUTES);
_vaultTimeoutOptions = _vaultTimeoutOptions.Where(t =>
t.Value <= policyMinutes &&
var minutes = _policyService.GetPolicyInt(_vaultTimeoutPolicy, "minutes").GetValueOrDefault();
_vaultTimeouts = _vaultTimeouts.Where(t =>
t.Value <= minutes &&
(t.Value > 0 || t.Value == CustomVaultTimeoutValue) &&
t.Value != null).ToList();
}
_vaultTimeout = await _vaultTimeoutService.GetVaultTimeout();
_vaultTimeoutDisplayValue = _vaultTimeouts.FirstOrDefault(o => o.Value == _vaultTimeout).Key;
var action = await _stateService.GetVaultTimeoutActionAsync() ?? VaultTimeoutAction.Lock;
_vaultTimeoutActionDisplayValue = _vaultTimeoutActions.FirstOrDefault(o => o.Value == action).Key;
var pinSet = await _vaultTimeoutService.IsPinLockSetAsync();
_pin = pinSet.Item1 || pinSet.Item2;
_biometric = await _vaultTimeoutService.IsBiometricLockSetAsync();
@@ -273,7 +266,7 @@ namespace Bit.App.Pages
{
var oldTimeout = _vaultTimeout;
var options = _vaultTimeoutOptions.Select(
var options = _vaultTimeouts.Select(
o => o.Key == _vaultTimeoutDisplayValue ? $"✓ {o.Key}" : o.Key).ToArray();
if (promptOptions)
{
@@ -284,7 +277,7 @@ namespace Bit.App.Pages
return;
}
var cleanSelection = selection.Replace("✓ ", string.Empty);
var selectionOption = _vaultTimeoutOptions.FirstOrDefault(o => o.Key == cleanSelection);
var selectionOption = _vaultTimeouts.FirstOrDefault(o => o.Key == cleanSelection);
// Check if the selected Timeout action is "Never" and if it's different from the previous selected value
if (selectionOption.Value == null && selectionOption.Value != oldTimeout)
@@ -302,13 +295,13 @@ namespace Bit.App.Pages
if (_vaultTimeoutPolicy != null)
{
var maximumTimeout = _policyService.GetPolicyInt(_vaultTimeoutPolicy, PolicyService.TIMEOUT_POLICY_MINUTES);
var maximumTimeout = _policyService.GetPolicyInt(_vaultTimeoutPolicy, "minutes");
if (newTimeout > maximumTimeout)
{
await _platformUtilsService.ShowDialogAsync(AppResources.VaultTimeoutToLarge, AppResources.Warning);
var timeout = await _vaultTimeoutService.GetVaultTimeout();
_vaultTimeoutDisplayValue = _vaultTimeoutOptions.FirstOrDefault(o => o.Value == timeout).Key ??
_vaultTimeoutDisplayValue = _vaultTimeouts.FirstOrDefault(o => o.Value == timeout).Key ??
AppResources.Custom;
return;
}
@@ -381,13 +374,7 @@ namespace Bit.App.Pages
public async Task VaultTimeoutActionAsync()
{
if (_vaultTimeoutPolicy != null &&
!string.IsNullOrEmpty(_policyService.GetPolicyString(_vaultTimeoutPolicy, PolicyService.TIMEOUT_POLICY_ACTION)))
{
// do nothing if we have a policy set
return;
}
var options = _vaultTimeoutActionOptions.Select(o =>
var options = _vaultTimeoutActions.Select(o =>
o.Key == _vaultTimeoutActionDisplayValue ? $"✓ {o.Key}" : o.Key).ToArray();
var selection = await Page.DisplayActionSheet(AppResources.VaultTimeoutAction,
AppResources.Cancel, null, options);
@@ -406,7 +393,7 @@ namespace Bit.App.Pages
cleanSelection = AppResources.Lock;
}
}
var selectionOption = _vaultTimeoutActionOptions.FirstOrDefault(o => o.Key == cleanSelection);
var selectionOption = _vaultTimeoutActions.FirstOrDefault(o => o.Key == cleanSelection);
var changed = _vaultTimeoutActionDisplayValue != selectionOption.Key;
_vaultTimeoutActionDisplayValue = selectionOption.Key;
await _vaultTimeoutService.SetVaultTimeoutOptionsAsync(_vaultTimeout,
@@ -610,37 +597,15 @@ namespace Bit.App.Pages
}
if (_vaultTimeoutPolicy != null)
{
var policyMinutes = _policyService.GetPolicyInt(_vaultTimeoutPolicy, PolicyService.TIMEOUT_POLICY_MINUTES);
var policyAction = _policyService.GetPolicyString(_vaultTimeoutPolicy, PolicyService.TIMEOUT_POLICY_ACTION);
if (policyMinutes.HasValue || !string.IsNullOrWhiteSpace(policyAction))
{
string policyAlert;
if (policyMinutes.HasValue && string.IsNullOrWhiteSpace(policyAction))
{
policyAlert = string.Format(AppResources.VaultTimeoutPolicyInEffect,
Math.Floor((float)policyMinutes / 60),
policyMinutes % 60);
}
else if (!policyMinutes.HasValue && !string.IsNullOrWhiteSpace(policyAction))
{
policyAlert = string.Format(AppResources.VaultTimeoutActionPolicyInEffect,
policyAction == PolicyService.TIMEOUT_POLICY_ACTION_LOCK ? AppResources.Lock : AppResources.LogOut);
}
else
{
policyAlert = string.Format(AppResources.VaultTimeoutPolicyWithActionInEffect,
Math.Floor((float)policyMinutes / 60),
policyMinutes % 60,
policyAction == PolicyService.TIMEOUT_POLICY_ACTION_LOCK ? AppResources.Lock : AppResources.LogOut);
}
var maximumTimeout = _policyService.GetPolicyInt(_vaultTimeoutPolicy, "minutes").GetValueOrDefault();
securityItems.Insert(0, new SettingsPageListItem
{
Name = policyAlert,
Name = string.Format(AppResources.VaultTimeoutPolicyInEffect,
Math.Floor((float)maximumTimeout / 60),
maximumTimeout % 60),
UseFrame = true,
});
}
}
if (Device.RuntimePlatform == Device.Android)
{
securityItems.Add(new SettingsPageListItem
@@ -827,12 +792,12 @@ namespace Bit.App.Pages
private VaultTimeoutAction GetVaultTimeoutActionFromKey(string key)
{
return _vaultTimeoutActionOptions.FirstOrDefault(o => o.Key == key).Value;
return _vaultTimeoutActions.FirstOrDefault(o => o.Key == key).Value;
}
private int? GetVaultTimeoutFromKey(string key)
{
return _vaultTimeoutOptions.FirstOrDefault(o => o.Key == key).Value;
return _vaultTimeouts.FirstOrDefault(o => o.Key == key).Value;
}
private string CreateSelectableOption(string option, bool selected) => selected ? $"✓ {option}" : option;
@@ -841,6 +806,11 @@ namespace Bit.App.Pages
public async Task SetScreenCaptureAllowedAsync()
{
if (CoreHelpers.ForceScreenCaptureEnabled())
{
return;
}
try
{
if (!_screenCaptureAllowed

View File

@@ -3,7 +3,6 @@ using System.Threading.Tasks;
using Bit.App.Effects;
using Bit.App.Models;
using Bit.App.Resources;
using Bit.Core;
using Bit.Core.Abstractions;
using Bit.Core.Models.Data;
using Bit.Core.Utilities;
@@ -16,7 +15,6 @@ namespace Bit.App.Pages
private readonly IBroadcasterService _broadcasterService;
private readonly IMessagingService _messagingService;
private readonly IKeyConnectorService _keyConnectorService;
private readonly IStateService _stateService;
private readonly LazyResolve<ILogger> _logger = new LazyResolve<ILogger>("logger");
private NavigationPage _groupingsPage;
@@ -28,7 +26,6 @@ namespace Bit.App.Pages
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>("broadcasterService");
_messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService");
_keyConnectorService = ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService");
_stateService = ServiceContainer.Resolve<IStateService>();
_groupingsPage = new NavigationPage(new GroupingsPage(true, previousPage: previousPage))
{
@@ -98,13 +95,6 @@ namespace Bit.App.Pages
{
_messagingService.Send("convertAccountToKeyConnector");
}
var forcePasswordResetReason = await _stateService.GetForcePasswordResetReasonAsync();
if (forcePasswordResetReason.HasValue)
{
_messagingService.Send(Constants.ForceUpdatePassword);
}
}
protected override void OnDisappearing()

View File

@@ -1,15 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<pages:BaseContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
x:Class="Bit.App.Pages.CipherSelectionPage"
x:Class="Bit.App.Pages.AutofillCiphersPage"
xmlns:pages="clr-namespace:Bit.App.Pages"
xmlns:u="clr-namespace:Bit.App.Utilities"
xmlns:controls="clr-namespace:Bit.App.Controls"
xmlns:effects="clr-namespace:Bit.App.Effects;assembly=BitwardenApp"
x:DataType="pages:CipherSelectionPageViewModel"
x:DataType="pages:AutofillCiphersPageViewModel"
Title="{Binding PageTitle}"
x:Name="_page">
<ContentPage.BindingContext>
<pages:AutofillCiphersPageViewModel />
</ContentPage.BindingContext>
<ContentPage.ToolbarItems>
<controls:ExtendedToolbarItem
x:Name="_accountAvatar"
@@ -20,7 +24,7 @@
UseOriginalImage="True"
AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n Account}" />
<ToolbarItem IconImageSource="search.png" Clicked="Search_Clicked"
<ToolbarItem Icon="search.png" Clicked="Search_Clicked"
AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n Search}" />
</ContentPage.ToolbarItems>
@@ -28,21 +32,6 @@
<ContentPage.Resources>
<ResourceDictionary>
<u:InverseBoolConverter x:Key="inverseBool" />
<controls:SelectionChangedEventArgsConverter x:Key="SelectionChangedEventArgsConverter" />
<ToolbarItem
x:Name="_closeItem"
x:Key="_closeItem"
Text="{u:I18n Close}"
Clicked="CloseItem_Clicked"
Order="Primary"
Priority="-1" />
<ToolbarItem x:Name="_addItem" x:Key="addItem"
IconImageSource="plus.png"
Command="{Binding AddCipherCommand}"
Order="Primary"
AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n AddItem}" />
<DataTemplate x:Key="cipherTemplate"
x:DataType="pages:GroupingsPageListItem">
@@ -81,44 +70,23 @@
Padding="20, 0"
Spacing="20"
IsVisible="{Binding ShowNoData}">
<Image
Source="empty_items_state" />
<Label
Text="{Binding NoDataText}"
HorizontalTextAlignment="Center"></Label>
<Button
Text="{u:I18n AddAnItem}"
Command="{Binding AddCipherCommand}" />
Clicked="AddButton_Clicked"></Button>
</StackLayout>
<Frame
IsVisible="{Binding ShowCallout}"
Padding="10"
Margin="20, 10"
HasShadow="False"
BackgroundColor="Transparent"
BorderColor="{DynamicResource PrimaryColor}">
<Label
Text="{u:I18n AddTheKeyToAnExistingOrNewItem}"
StyleClass="text-muted, text-sm, text-bold"
HorizontalTextAlignment="Center" />
</Frame>
<controls:ExtendedCollectionView
IsVisible="{Binding ShowList}"
ItemsSource="{Binding GroupedItems}"
VerticalOptions="FillAndExpand"
ItemTemplate="{StaticResource listItemDataTemplateSelector}"
SelectionMode="Single"
SelectionChanged="RowSelected"
StyleClass="list, list-platform"
ExtraDataForLogging="Autofill Ciphers Page">
<controls:ExtendedCollectionView.Behaviors>
<xct:EventToCommandBehavior
EventName="SelectionChanged"
Command="{Binding SelectCipherCommand}"
EventArgsConverter="{StaticResource SelectionChangedEventArgsConverter}" />
</controls:ExtendedCollectionView.Behaviors>
</controls:ExtendedCollectionView>
ExtraDataForLogging="Autofill Ciphers Page" />
</StackLayout>
</ResourceDictionary>
</ContentPage.Resources>
@@ -136,10 +104,9 @@
<!-- Android FAB -->
<Button
x:Name="_fab"
ImageSource="plus.png"
Command="{Binding AddCipherCommand}"
Image="plus.png"
Clicked="AddButton_Clicked"
Style="{StaticResource btn-fab}"
IsVisible="{OnPlatform iOS=false, Android=true}"
AbsoluteLayout.LayoutFlags="PositionProportional"
AbsoluteLayout.LayoutBounds="1, 1, AutoSize, AutoSize">
<Button.Effects>

View File

@@ -1,6 +1,7 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Bit.App.Abstractions;
using Bit.App.Controls;
using Bit.App.Models;
using Bit.App.Utilities;
using Bit.Core.Abstractions;
@@ -11,46 +12,27 @@ using Xamarin.Forms;
namespace Bit.App.Pages
{
public partial class CipherSelectionPage : BaseContentPage
public partial class AutofillCiphersPage : BaseContentPage
{
private readonly AppOptions _appOptions;
private readonly IBroadcasterService _broadcasterService;
private readonly ISyncService _syncService;
private readonly IVaultTimeoutService _vaultTimeoutService;
private readonly IAccountsManager _accountsManager;
private readonly CipherSelectionPageViewModel _vm;
private AutofillCiphersPageViewModel _vm;
public CipherSelectionPage(AppOptions appOptions)
public AutofillCiphersPage(AppOptions appOptions)
{
_appOptions = appOptions;
if (appOptions?.OtpData is null)
{
BindingContext = new AutofillCiphersPageViewModel();
}
else
{
BindingContext = new OTPCipherSelectionPageViewModel();
}
InitializeComponent();
if (Device.RuntimePlatform == Device.iOS)
{
ToolbarItems.Add(_closeItem);
ToolbarItems.Add(_addItem);
}
SetActivityIndicator(_mainContent);
_vm = BindingContext as CipherSelectionPageViewModel;
_vm = BindingContext as AutofillCiphersPageViewModel;
_vm.Page = this;
_vm.Init(appOptions);
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>("broadcasterService");
_syncService = ServiceContainer.Resolve<ISyncService>("syncService");
_vaultTimeoutService = ServiceContainer.Resolve<IVaultTimeoutService>("vaultTimeoutService");
_accountsManager = ServiceContainer.Resolve<IAccountsManager>();
}
protected async override void OnAppearing()
@@ -69,18 +51,10 @@ namespace Bit.App.Pages
return;
}
try
{
// don't crash the app if the avatar can't be loaded, just log the ex
_accountAvatar?.OnAppearing();
_vm.AvatarImageSource = await GetAvatarImageSourceAsync();
}
catch (Exception ex)
{
LoggerHelper.LogEvenIfCantBeResolved(ex);
}
_broadcasterService.Subscribe(nameof(CipherSelectionPage), async (message) =>
_broadcasterService.Subscribe(nameof(AutofillCiphersPage), async (message) =>
{
try
{
@@ -142,44 +116,40 @@ namespace Bit.App.Pages
_accountAvatar?.OnDisappearing();
}
private void AddButton_Clicked(object sender, System.EventArgs e)
private async void RowSelected(object sender, SelectionChangedEventArgs e)
{
((ExtendedCollectionView)sender).SelectedItem = null;
if (!DoOnce())
{
return;
}
if (e.CurrentSelection?.FirstOrDefault() is GroupingsPageListItem item && item.Cipher != null)
{
await _vm.SelectCipherAsync(item.Cipher, item.FuzzyAutofill);
}
}
private async void AddButton_Clicked(object sender, System.EventArgs e)
{
if (!DoOnce())
{
return;
}
if (_vm is AutofillCiphersPageViewModel autofillVM)
{
AddFromAutofill(autofillVM).FireAndForget();
}
}
private async Task AddFromAutofill(AutofillCiphersPageViewModel autofillVM)
{
if (_appOptions.FillType.HasValue && _appOptions.FillType != CipherType.Login)
{
var pageForOther = new CipherAddEditPage(type: _appOptions.FillType, fromAutofill: true);
await Navigation.PushModalAsync(new NavigationPage(pageForOther));
return;
}
var pageForLogin = new CipherAddEditPage(null, CipherType.Login, uri: autofillVM.Uri, name: _vm.Name,
var pageForLogin = new CipherAddEditPage(null, CipherType.Login, uri: _vm.Uri, name: _vm.Name,
fromAutofill: true);
await Navigation.PushModalAsync(new NavigationPage(pageForLogin));
}
private void Search_Clicked(object sender, EventArgs e)
private void Search_Clicked(object sender, System.EventArgs e)
{
var page = new CiphersPage(null, appOptions: _appOptions);
Navigation.PushModalAsync(new NavigationPage(page)).FireAndForget();
}
void CloseItem_Clicked(object sender, EventArgs e)
{
if (DoOnce())
{
_accountsManager.StartDefaultNavigationFlowAsync(op => op.OtpData = null).FireAndForget();
}
var page = new CiphersPage(null, autofillUrl: _vm.Uri);
Application.Current.MainPage = new NavigationPage(page);
}
}
}

View File

@@ -1,29 +1,91 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Bit.App.Abstractions;
using Bit.App.Controls;
using Bit.App.Models;
using Bit.App.Resources;
using Bit.App.Utilities;
using Bit.Core;
using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Exceptions;
using Bit.Core.Models.View;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public class AutofillCiphersPageViewModel : CipherSelectionPageViewModel
public class AutofillCiphersPageViewModel : BaseViewModel
{
private CipherType? _fillType;
private readonly IPlatformUtilsService _platformUtilsService;
private readonly IDeviceActionService _deviceActionService;
private readonly IAutofillHandler _autofillHandler;
private readonly ICipherService _cipherService;
private readonly IStateService _stateService;
private readonly IPasswordRepromptService _passwordRepromptService;
private readonly IMessagingService _messagingService;
private readonly ILogger _logger;
private bool _showNoData;
private bool _showList;
private string _noDataText;
private bool _websiteIconsEnabled;
public AutofillCiphersPageViewModel()
{
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
_cipherService = ServiceContainer.Resolve<ICipherService>("cipherService");
_deviceActionService = ServiceContainer.Resolve<IDeviceActionService>("deviceActionService");
_autofillHandler = ServiceContainer.Resolve<IAutofillHandler>();
_stateService = ServiceContainer.Resolve<IStateService>("stateService");
_passwordRepromptService = ServiceContainer.Resolve<IPasswordRepromptService>("passwordRepromptService");
_messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService");
_logger = ServiceContainer.Resolve<ILogger>("logger");
GroupedItems = new ObservableRangeCollection<IGroupingsPageListItem>();
CipherOptionsCommand = new Command<CipherView>(CipherOptionsAsync);
AccountSwitchingOverlayViewModel = new AccountSwitchingOverlayViewModel(_stateService, _messagingService, _logger)
{
AllowAddAccountRow = false
};
}
public string Name { get; set; }
public string Uri { get; set; }
public Command CipherOptionsCommand { get; set; }
public bool LoadedOnce { get; set; }
public ObservableRangeCollection<IGroupingsPageListItem> GroupedItems { get; set; }
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
public override void Init(AppOptions appOptions)
public bool ShowNoData
{
get => _showNoData;
set => SetProperty(ref _showNoData, value);
}
public bool ShowList
{
get => _showList;
set => SetProperty(ref _showList, value);
}
public string NoDataText
{
get => _noDataText;
set => SetProperty(ref _noDataText, value);
}
public bool WebsiteIconsEnabled
{
get => _websiteIconsEnabled;
set => SetProperty(ref _websiteIconsEnabled, value);
}
public void Init(AppOptions appOptions)
{
Uri = appOptions?.Uri;
_fillType = appOptions.FillType;
string name = null;
if (Uri?.StartsWith(Constants.AndroidAppProtocol) ?? false)
{
@@ -42,11 +104,14 @@ namespace Bit.App.Pages
NoDataText = string.Format(AppResources.NoItemsForUri, Name ?? "--");
}
protected override async Task<List<GroupingsPageListGroup>> LoadGroupedItemsAsync()
public async Task LoadAsync()
{
LoadedOnce = true;
ShowList = false;
ShowNoData = false;
WebsiteIconsEnabled = !(await _stateService.GetDisableFaviconAsync()).GetValueOrDefault();
var groupedItems = new List<GroupingsPageListGroup>();
var ciphers = await _cipherService.GetAllDecryptedByUrlAsync(Uri, null);
var matching = ciphers.Item1?.Select(c => new GroupingsPageListItem { Cipher = c }).ToList();
var hasMatching = matching?.Any() ?? false;
if (matching?.Any() ?? false)
@@ -54,7 +119,6 @@ namespace Bit.App.Pages
groupedItems.Add(
new GroupingsPageListGroup(matching, AppResources.MatchingItems, matching.Count, false, true));
}
var fuzzy = ciphers.Item2?.Select(c =>
new GroupingsPageListItem { Cipher = c, FuzzyAutofill = true }).ToList();
if (fuzzy?.Any() ?? false)
@@ -64,30 +128,70 @@ namespace Bit.App.Pages
!hasMatching));
}
return groupedItems;
// TODO: refactor this
if (Device.RuntimePlatform == Device.Android
||
GroupedItems.Any())
{
var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems)
{
items.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
items.AddRange(itemGroup);
}
protected override async Task SelectCipherAsync(IGroupingsPageListItem item)
GroupedItems.ReplaceRange(items);
}
else
{
if (!(item is GroupingsPageListItem listItem) || listItem.Cipher is null)
// HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
var first = true;
var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems)
{
if (!first)
{
items.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
}
else
{
first = false;
}
items.AddRange(itemGroup);
}
if (groupedItems.Any())
{
GroupedItems.ReplaceRange(new List<IGroupingsPageListItem> { new GroupingsPageHeaderListItem(groupedItems[0].Name, groupedItems[0].ItemCount) });
GroupedItems.AddRange(items);
}
else
{
GroupedItems.Clear();
}
}
ShowList = groupedItems.Any();
ShowNoData = !ShowList;
}
public async Task SelectCipherAsync(CipherView cipher, bool fuzzy)
{
if (cipher == null)
{
return;
}
var cipher = listItem.Cipher;
if (_deviceActionService.SystemMajorVersion() < 21)
{
await AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService);
return;
}
else
{
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync())
{
return;
}
var autofillResponse = AppResources.Yes;
if (listItem.FuzzyAutofill)
if (fuzzy)
{
var options = new List<string> { AppResources.Yes };
if (cipher.Type == CipherType.Login &&
@@ -133,19 +237,14 @@ namespace Bit.App.Pages
_autofillHandler.Autofill(cipher);
}
}
protected override async Task AddCipherAsync()
{
if (_fillType.HasValue && _fillType != CipherType.Login)
{
var pageForOther = new CipherAddEditPage(type: _fillType, fromAutofill: true);
await Page.Navigation.PushModalAsync(new NavigationPage(pageForOther));
return;
}
var pageForLogin = new CipherAddEditPage(null, CipherType.Login, uri: Uri, name: Name,
fromAutofill: true);
await Page.Navigation.PushModalAsync(new NavigationPage(pageForLogin));
private async void CipherOptionsAsync(CipherView cipher)
{
if ((Page as BaseContentPage).DoOnce())
{
await AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService);
}
}
}
}

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Bit.App.Abstractions;
using Bit.App.Lists.ItemViewModels.CustomFields;
using Bit.App.Models;
using Bit.App.Resources;
@@ -31,7 +30,6 @@ namespace Bit.App.Pages
private readonly IClipboardService _clipboardService;
private readonly IAutofillHandler _autofillHandler;
private readonly IWatchDeviceService _watchDeviceService;
private readonly IAccountsManager _accountsManager;
private bool _showNotesSeparator;
private bool _showPassword;
@@ -46,8 +44,6 @@ namespace Bit.App.Pages
private bool _hasCollections;
private string _previousCipherId;
private List<Core.Models.View.CollectionView> _writeableCollections;
private bool _fromOtp;
protected override string[] AdditionalPropertiesToRaiseOnCipherChanged => new string[]
{
nameof(IsLogin),
@@ -86,8 +82,6 @@ namespace Bit.App.Pages
_clipboardService = ServiceContainer.Resolve<IClipboardService>("clipboardService");
_autofillHandler = ServiceContainer.Resolve<IAutofillHandler>();
_watchDeviceService = ServiceContainer.Resolve<IWatchDeviceService>();
_accountsManager = ServiceContainer.Resolve<IAccountsManager>();
GeneratePasswordCommand = new Command(GeneratePassword);
TogglePasswordCommand = new Command(TogglePassword);
@@ -121,7 +115,6 @@ namespace Bit.App.Pages
new KeyValuePair<string, string>("JCB", "JCB"),
new KeyValuePair<string, string>("Maestro", "Maestro"),
new KeyValuePair<string, string>("UnionPay", "UnionPay"),
new KeyValuePair<string, string>("RuPay", "RuPay"),
new KeyValuePair<string, string>(AppResources.Other, "Other")
};
CardExpMonthOptions = new List<KeyValuePair<string, string>>
@@ -309,7 +302,6 @@ namespace Bit.App.Pages
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
public bool HasTotpValue => IsLogin && !string.IsNullOrEmpty(Cipher?.Login?.Totp);
public string SetupTotpText => $"{BitwardenIcons.Camera} {AppResources.SetupTotp}";
public void Init()
{
PageTitle = EditMode && !CloneMode ? AppResources.EditItem : AppResources.AddItem;
@@ -317,8 +309,6 @@ namespace Bit.App.Pages
public async Task<bool> LoadAsync(AppOptions appOptions = null)
{
_fromOtp = appOptions?.OtpData != null;
var myEmail = await _stateService.GetEmailAsync();
OwnershipOptions.Add(new KeyValuePair<string, string>(myEmail, null));
var orgs = await _organizationService.GetAllAsync();
@@ -368,10 +358,6 @@ namespace Bit.App.Pages
Cipher.OrganizationId = OrganizationId;
}
}
if (appOptions?.OtpData != null && Cipher.Type == CipherType.Login)
{
Cipher.Login.Totp = appOptions.OtpData.Value.Uri;
}
}
else
{
@@ -394,7 +380,6 @@ namespace Bit.App.Pages
Cipher.Type = appOptions.SaveType.GetValueOrDefault(Cipher.Type);
Cipher.Login.Username = appOptions.SaveUsername;
Cipher.Login.Password = appOptions.SavePassword;
Cipher.Login.Totp = appOptions.OtpData?.Uri;
Cipher.Card.Code = appOptions.SaveCardCode;
if (int.TryParse(appOptions.SaveCardExpMonth, out int month) && month <= 12 && month >= 1)
{
@@ -439,11 +424,6 @@ namespace Bit.App.Pages
{
Fields.ResetWithRange(Cipher.Fields?.Select(f => _customFieldItemFactory.CreateCustomFieldItem(f, true, Cipher, null, null, FieldOptionsCommand)));
}
if (appOptions?.OtpData != null)
{
_platformUtilsService.ShowToast(null, AppResources.AuthenticatorKey, AppResources.AuthenticatorKeyAdded);
}
}
if (EditMode && _previousCipherId != CipherId)
@@ -537,10 +517,6 @@ namespace Bit.App.Pages
// Close and go back to app
_autofillHandler.CloseAutofill();
}
else if (_fromOtp)
{
await _accountsManager.StartDefaultNavigationFlowAsync(op => op.OtpData = null);
}
else
{
if (CloneMode)

View File

@@ -1,167 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using Bit.App.Abstractions;
using Bit.App.Controls;
using Bit.App.Models;
using Bit.App.Resources;
using Bit.App.Utilities;
using Bit.Core;
using Bit.Core.Abstractions;
using Bit.Core.Models.View;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public abstract class CipherSelectionPageViewModel : BaseViewModel
{
protected readonly IPlatformUtilsService _platformUtilsService;
protected readonly IDeviceActionService _deviceActionService;
protected readonly IAutofillHandler _autofillHandler;
protected readonly ICipherService _cipherService;
protected readonly IStateService _stateService;
protected readonly IPasswordRepromptService _passwordRepromptService;
protected readonly IMessagingService _messagingService;
protected readonly ILogger _logger;
protected bool _showNoData;
protected bool _showList;
protected string _noDataText;
protected bool _websiteIconsEnabled;
public CipherSelectionPageViewModel()
{
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>();
_cipherService = ServiceContainer.Resolve<ICipherService>();
_deviceActionService = ServiceContainer.Resolve<IDeviceActionService>();
_autofillHandler = ServiceContainer.Resolve<IAutofillHandler>();
_stateService = ServiceContainer.Resolve<IStateService>();
_passwordRepromptService = ServiceContainer.Resolve<IPasswordRepromptService>();
_messagingService = ServiceContainer.Resolve<IMessagingService>();
_logger = ServiceContainer.Resolve<ILogger>();
GroupedItems = new ObservableRangeCollection<IGroupingsPageListItem>();
CipherOptionsCommand = new AsyncCommand<CipherView>(cipher => AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService),
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
SelectCipherCommand = new AsyncCommand<IGroupingsPageListItem>(SelectCipherAsync,
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
AddCipherCommand = new AsyncCommand(AddCipherAsync,
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
AccountSwitchingOverlayViewModel = new AccountSwitchingOverlayViewModel(_stateService, _messagingService, _logger)
{
AllowAddAccountRow = false
};
}
public string Name { get; set; }
public bool LoadedOnce { get; set; }
public ObservableRangeCollection<IGroupingsPageListItem> GroupedItems { get; set; }
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
public ICommand CipherOptionsCommand { get; set; }
public ICommand SelectCipherCommand { get; set; }
public ICommand AddCipherCommand { get; set; }
public bool ShowNoData
{
get => _showNoData;
set => SetProperty(ref _showNoData, value, additionalPropertyNames: new string[] { nameof(ShowCallout) });
}
public bool ShowList
{
get => _showList;
set => SetProperty(ref _showList, value);
}
public string NoDataText
{
get => _noDataText;
set => SetProperty(ref _noDataText, value);
}
public bool WebsiteIconsEnabled
{
get => _websiteIconsEnabled;
set => SetProperty(ref _websiteIconsEnabled, value);
}
public virtual bool ShowCallout => false;
public abstract void Init(Models.AppOptions options);
public async Task LoadAsync()
{
LoadedOnce = true;
ShowList = false;
ShowNoData = false;
WebsiteIconsEnabled = !(await _stateService.GetDisableFaviconAsync()).GetValueOrDefault();
var groupedItems = await LoadGroupedItemsAsync();
// TODO: refactor this
if (Device.RuntimePlatform == Device.Android
||
GroupedItems.Any())
{
var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems)
{
items.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
items.AddRange(itemGroup);
}
GroupedItems.ReplaceRange(items);
}
else
{
// HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
var first = true;
var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems)
{
if (!first)
{
items.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
}
else
{
first = false;
}
items.AddRange(itemGroup);
}
await Device.InvokeOnMainThreadAsync(() =>
{
if (groupedItems.Any())
{
GroupedItems.ReplaceRange(new List<IGroupingsPageListItem> { new GroupingsPageHeaderListItem(groupedItems[0].Name, groupedItems[0].ItemCount) });
GroupedItems.AddRange(items);
}
else
{
GroupedItems.Clear();
}
});
}
await Device.InvokeOnMainThreadAsync(() =>
{
ShowList = groupedItems.Any();
ShowNoData = !ShowList;
});
}
protected abstract Task<List<GroupingsPageListGroup>> LoadGroupedItemsAsync();
protected abstract Task SelectCipherAsync(IGroupingsPageListItem item);
protected abstract Task AddCipherAsync();
}
}

View File

@@ -81,22 +81,12 @@
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
HorizontalTextAlignment="Center" />
<StackLayout
HorizontalOptions="Center"
VerticalOptions="StartAndExpand"
Margin="20, 80, 20, 0"
Spacing="20"
IsVisible="{Binding ShowNoData}">
<Image
Source="empty_items_state" />
<Label
Text="{u:I18n ThereAreNoItemsThatMatchTheSearch}"
<Label IsVisible="{Binding ShowNoData}"
Text="{u:I18n NoItemsToList}"
Margin="20, 0"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
HorizontalTextAlignment="Center" />
<Button
Text="{u:I18n AddAnItem}"
Command="{Binding AddCipherCommand}"
IsVisible="{Binding ShowAddCipher}"/>
</StackLayout>
<controls:ExtendedCollectionView
IsVisible="{Binding ShowList}"
ItemsSource="{Binding Ciphers}"

View File

@@ -1,7 +1,6 @@
using System;
using System.Linq;
using Bit.App.Controls;
using Bit.App.Models;
using Bit.App.Resources;
using Bit.Core.Abstractions;
using Bit.Core.Models.View;
@@ -18,18 +17,15 @@ namespace Bit.App.Pages
private CiphersPageViewModel _vm;
private bool _hasFocused;
public CiphersPage(Func<CipherView, bool> filter,
string pageTitle = null,
string vaultFilterSelection = null,
bool deleted = false,
AppOptions appOptions = null)
public CiphersPage(Func<CipherView, bool> filter, string pageTitle = null, string vaultFilterSelection = null,
string autofillUrl = null, bool deleted = false)
{
InitializeComponent();
_vm = BindingContext as CiphersPageViewModel;
_vm.Page = this;
_autofillUrl = appOptions?.Uri;
_vm.Prepare(filter, deleted, appOptions);
_vm.Filter = filter;
_vm.AutofillUrl = _autofillUrl = autofillUrl;
_vm.Deleted = deleted;
if (pageTitle != null)
{
_vm.PageTitle = string.Format(AppResources.SearchGroup, pageTitle);

View File

@@ -3,16 +3,13 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
using Bit.App.Abstractions;
using Bit.App.Models;
using Bit.App.Resources;
using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Exceptions;
using Bit.Core.Models.View;
using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Forms;
namespace Bit.App.Pages
@@ -34,7 +31,6 @@ namespace Bit.App.Pages
private bool _showNoData;
private bool _showList;
private bool _websiteIconsEnabled;
private AppOptions _appOptions;
public CiphersPageViewModel()
{
@@ -50,21 +46,14 @@ namespace Bit.App.Pages
_logger = ServiceContainer.Resolve<ILogger>("logger");
Ciphers = new ExtendedObservableCollection<CipherView>();
CipherOptionsCommand = new AsyncCommand<CipherView>(cipher => Utilities.AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService),
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
AddCipherCommand = new AsyncCommand(AddCipherAsync,
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
CipherOptionsCommand = new Command<CipherView>(CipherOptionsAsync);
}
public ICommand CipherOptionsCommand { get; }
public ICommand AddCipherCommand { get; }
public Command CipherOptionsCommand { get; set; }
public ExtendedObservableCollection<CipherView> Ciphers { get; set; }
public Func<CipherView, bool> Filter { get; set; }
public string AutofillUrl { get; set; }
public bool Deleted { get; set; }
public bool ShowAllIfSearchTextEmpty { get; set; }
protected override ICipherService cipherService => _cipherService;
protected override IPolicyService policyService => _policyService;
@@ -76,8 +65,7 @@ namespace Bit.App.Pages
get => _showNoData;
set => SetProperty(ref _showNoData, value, additionalPropertyNames: new string[]
{
nameof(ShowSearchDirection),
nameof(ShowAddCipher)
nameof(ShowSearchDirection)
});
}
@@ -92,23 +80,12 @@ namespace Bit.App.Pages
public bool ShowSearchDirection => !ShowList && !ShowNoData;
public bool ShowAddCipher => ShowNoData && _appOptions?.OtpData != null;
public bool WebsiteIconsEnabled
{
get => _websiteIconsEnabled;
set => SetProperty(ref _websiteIconsEnabled, value);
}
internal void Prepare(Func<CipherView, bool> filter, bool deleted, AppOptions appOptions)
{
Filter = filter;
AutofillUrl = appOptions?.Uri;
Deleted = deleted;
ShowAllIfSearchTextEmpty = appOptions?.OtpData != null;
_appOptions = appOptions;
}
public async Task InitAsync()
{
await InitVaultFilterAsync(true);
@@ -124,33 +101,25 @@ namespace Bit.App.Pages
{
List<CipherView> ciphers = null;
var searchable = !string.IsNullOrWhiteSpace(searchText) && searchText.Length > 1;
var shouldShowAllWhenEmpty = ShowAllIfSearchTextEmpty && string.IsNullOrEmpty(searchText);
if (searchable || shouldShowAllWhenEmpty)
if (searchable)
{
if (timeout != null)
{
await Task.Delay(timeout.Value);
}
if (searchText != (Page as CiphersPage).SearchBar.Text
&&
!shouldShowAllWhenEmpty)
if (searchText != (Page as CiphersPage).SearchBar.Text)
{
return;
}
else
{
previousCts?.Cancel();
}
try
{
var vaultFilteredCiphers = await GetAllCiphersAsync();
if (!shouldShowAllWhenEmpty)
{
ciphers = await _searchService.SearchCiphersAsync(searchText,
Filter ?? (c => c.IsDeleted == Deleted), vaultFilteredCiphers, cts.Token);
}
else
{
ciphers = vaultFilteredCiphers;
}
cts.Token.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
@@ -165,8 +134,8 @@ namespace Bit.App.Pages
Device.BeginInvokeOnMainThread(() =>
{
Ciphers.ResetWithRange(ciphers);
ShowNoData = !shouldShowAllWhenEmpty && searchable && Ciphers.Count == 0;
ShowList = (searchable || shouldShowAllWhenEmpty) && !ShowNoData;
ShowNoData = searchable && Ciphers.Count == 0;
ShowList = searchable && !ShowNoData;
});
}, cts.Token);
_searchCancellationTokenSource = cts;
@@ -175,7 +144,6 @@ namespace Bit.App.Pages
public async Task SelectCipherAsync(CipherView cipher)
{
string selection = null;
if (!string.IsNullOrWhiteSpace(AutofillUrl))
{
var options = new List<string> { AppResources.Autofill };
@@ -188,19 +156,6 @@ namespace Bit.App.Pages
selection = await Page.DisplayActionSheet(AppResources.AutofillOrView, AppResources.Cancel, null,
options.ToArray());
}
if (_appOptions?.OtpData != null)
{
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync())
{
return;
}
var editCipherPage = new CipherAddEditPage(cipher.Id, appOptions: _appOptions);
await Page.Navigation.PushModalAsync(new NavigationPage(editCipherPage));
return;
}
if (selection == AppResources.View || string.IsNullOrWhiteSpace(AutofillUrl))
{
var page = new CipherDetailsPage(cipher.Id);
@@ -250,7 +205,7 @@ namespace Bit.App.Pages
private void PerformSearchIfPopulated()
{
if (!string.IsNullOrWhiteSpace((Page as CiphersPage).SearchBar.Text) || ShowAllIfSearchTextEmpty)
if (!string.IsNullOrWhiteSpace((Page as CiphersPage).SearchBar.Text))
{
Search((Page as CiphersPage).SearchBar.Text, 200);
}
@@ -261,10 +216,12 @@ namespace Bit.App.Pages
PerformSearchIfPopulated();
}
private async Task AddCipherAsync()
private async void CipherOptionsAsync(CipherView cipher)
{
var pageForLogin = new CipherAddEditPage(null, CipherType.Login, name: _appOptions?.OtpData?.Issuer ?? _appOptions?.OtpData?.AccountName, appOptions: _appOptions);
await Page.Navigation.PushModalAsync(new NavigationPage(pageForLogin));
if ((Page as BaseContentPage).DoOnce())
{
await Utilities.AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService);
}
}
}
}

View File

@@ -78,9 +78,7 @@ namespace Bit.App.Pages
Refreshing = true;
await LoadAsync();
});
CipherOptionsCommand = new AsyncCommand<CipherView>(cipher => AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService),
onException: ex => _logger.Exception(ex),
allowsMultipleExecutions: false);
CipherOptionsCommand = new Command<CipherView>(CipherOptionsAsync);
VaultFilterCommand = new AsyncCommand(VaultFilterOptionsAsync,
onException: ex => _logger.Exception(ex),
allowsMultipleExecutions: false);
@@ -170,7 +168,7 @@ namespace Bit.App.Pages
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
public ObservableRangeCollection<IGroupingsPageListItem> GroupedItems { get; set; }
public Command RefreshCommand { get; set; }
public ICommand CipherOptionsCommand { get; }
public Command<CipherView> CipherOptionsCommand { get; set; }
public bool LoadedOnce { get; set; }
public async Task LoadAsync()
@@ -711,5 +709,13 @@ namespace Bit.App.Pages
var folders = decFolders.Where(f => _allCiphers.Any(c => c.FolderId == f.Id)).ToList();
return folders.Any() ? folders : null;
}
private async void CipherOptionsAsync(CipherView cipher)
{
if ((Page as BaseContentPage).DoOnce())
{
await AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService);
}
}
}
}

View File

@@ -1,79 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Bit.App.Resources;
using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Utilities;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public class OTPCipherSelectionPageViewModel : CipherSelectionPageViewModel
{
private readonly ISearchService _searchService = ServiceContainer.Resolve<ISearchService>();
private OtpData _otpData;
private Models.AppOptions _appOptions;
public override bool ShowCallout => !ShowNoData;
public override void Init(Models.AppOptions options)
{
_appOptions = options;
_otpData = options.OtpData.Value;
Name = _otpData.Issuer ?? _otpData.AccountName;
PageTitle = string.Format(AppResources.ItemsForUri, Name ?? "--");
NoDataText = string.Format(AppResources.ThereAreNoItemsInYourVaultThatMatchX, Name ?? "--")
+ Environment.NewLine
+ AppResources.SearchForAnItemOrAddANewItem;
}
protected override async Task<List<GroupingsPageListGroup>> LoadGroupedItemsAsync()
{
var groupedItems = new List<GroupingsPageListGroup>();
var allCiphers = await _cipherService.GetAllDecryptedAsync();
var ciphers = await _searchService.SearchCiphersAsync(_otpData.Issuer ?? _otpData.AccountName,
c => c.Type == CipherType.Login && !c.IsDeleted, allCiphers);
if (ciphers?.Any() ?? false)
{
groupedItems.Add(
new GroupingsPageListGroup(ciphers.Select(c => new GroupingsPageListItem { Cipher = c }).ToList(),
AppResources.MatchingItems,
ciphers.Count,
false,
true));
}
return groupedItems;
}
protected override async Task SelectCipherAsync(IGroupingsPageListItem item)
{
if (!(item is GroupingsPageListItem listItem) || listItem.Cipher is null)
{
return;
}
var cipher = listItem.Cipher;
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync())
{
return;
}
var editCipherPage = new CipherAddEditPage(cipher.Id, appOptions: _appOptions);
await Page.Navigation.PushModalAsync(new NavigationPage(editCipherPage));
return;
}
protected override async Task AddCipherAsync()
{
var pageForLogin = new CipherAddEditPage(null, CipherType.Login, name: Name, appOptions: _appOptions);
await Page.Navigation.PushModalAsync(new NavigationPage(pageForLogin));
}
}
}

View File

@@ -382,15 +382,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Add the key to an existing or new item.
/// </summary>
public static string AddTheKeyToAnExistingOrNewItem {
get {
return ResourceManager.GetString("AddTheKeyToAnExistingOrNewItem", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Add TOTP.
/// </summary>
@@ -970,18 +961,18 @@ namespace Bit.App.Resources {
/// <summary>
/// Looks up a localized string similar to Biometric unlock disabled pending verification of master password..
/// </summary>
public static string AccountBiometricInvalidated {
public static string BiometricInvalidated {
get {
return ResourceManager.GetString("AccountBiometricInvalidated", resourceCulture);
return ResourceManager.GetString("BiometricInvalidated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Biometric unlock for autofill disabled pending verification of master password..
/// </summary>
public static string AccountBiometricInvalidatedExtension {
public static string BiometricInvalidatedExtension {
get {
return ResourceManager.GetString("AccountBiometricInvalidatedExtension", resourceCulture);
return ResourceManager.GetString("BiometricInvalidatedExtension", resourceCulture);
}
}
@@ -1687,15 +1678,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Current master password.
/// </summary>
public static string CurrentMasterPassword {
get {
return ResourceManager.GetString("CurrentMasterPassword", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Custom.
/// </summary>
@@ -1822,15 +1804,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Default (System).
/// </summary>
public static string DefaultSystem {
get {
return ResourceManager.GetString("DefaultSystem", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Default URI match detection.
/// </summary>
@@ -3397,33 +3370,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Language.
/// </summary>
public static string Language {
get {
return ResourceManager.GetString("Language", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Language change requires app restart.
/// </summary>
public static string LanguageChangeRequiresAppRestart {
get {
return ResourceManager.GetString("LanguageChangeRequiresAppRestart", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The language has been changed to {0}. Please restart the app to see the change.
/// </summary>
public static string LanguageChangeXDescription {
get {
return ResourceManager.GetString("LanguageChangeXDescription", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Last name.
/// </summary>
@@ -3724,7 +3670,7 @@ namespace Bit.App.Resources {
}
/// <summary>
/// Looks up a localized string similar to Log in with device.
/// Looks up a localized string similar to Log In with another device.
/// </summary>
public static string LogInWithAnotherDevice {
get {
@@ -3841,11 +3787,11 @@ namespace Bit.App.Resources {
}
/// <summary>
/// Looks up a localized string similar to Master password must be at least {0} characters long..
/// Looks up a localized string similar to Master password must be at least 8 characters long..
/// </summary>
public static string MasterPasswordLengthValMessageX {
public static string MasterPasswordLengthValMessage {
get {
return ResourceManager.GetString("MasterPasswordLengthValMessageX", resourceCulture);
return ResourceManager.GetString("MasterPasswordLengthValMessage", resourceCulture);
}
}
@@ -4074,6 +4020,17 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Mx.
/// </summary>
public static string Mx
{
get
{
return ResourceManager.GetString("Mx", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You must log into the main Bitwarden app before you can use the extension..
/// </summary>
@@ -4092,15 +4049,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Mx.
/// </summary>
public static string Mx {
get {
return ResourceManager.GetString("Mx", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to My vault.
/// </summary>
@@ -4615,15 +4563,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Organization SSO identifier required..
/// </summary>
public static string OrganizationSsoIdentifierRequired {
get {
return ResourceManager.GetString("OrganizationSsoIdentifierRequired", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Organization identifier.
/// </summary>
@@ -5354,15 +5293,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Search for an item or add a new item.
/// </summary>
public static string SearchForAnItemOrAddANewItem {
get {
return ResourceManager.GetString("SearchForAnItemOrAddANewItem", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Search {0}.
/// </summary>
@@ -6056,24 +5986,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to There are no items in your vault that match &quot;{0}&quot;.
/// </summary>
public static string ThereAreNoItemsInYourVaultThatMatchX {
get {
return ResourceManager.GetString("ThereAreNoItemsInYourVaultThatMatchX", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There are no items that match the search.
/// </summary>
public static string ThereAreNoItemsThatMatchTheSearch {
get {
return ResourceManager.GetString("ThereAreNoItemsThatMatchTheSearch", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 30 days.
/// </summary>
@@ -6461,15 +6373,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour..
/// </summary>
public static string UpdateWeakMasterPasswordWarning {
get {
return ResourceManager.GetString("UpdateWeakMasterPasswordWarning", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Updating password.
/// </summary>
@@ -6695,15 +6598,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Your organization policies have set your vault timeout action to {0}..
/// </summary>
public static string VaultTimeoutActionPolicyInEffect {
get {
return ResourceManager.GetString("VaultTimeoutActionPolicyInEffect", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?.
/// </summary>
@@ -6714,7 +6608,7 @@ namespace Bit.App.Resources {
}
/// <summary>
/// Looks up a localized string similar to Your organization policies have set your maximum allowed vault timeout to {0} hour(s) and {1} minute(s)..
/// Looks up a localized string similar to Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s).
/// </summary>
public static string VaultTimeoutPolicyInEffect {
get {
@@ -6722,15 +6616,6 @@ namespace Bit.App.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}..
/// </summary>
public static string VaultTimeoutPolicyWithActionInEffect {
get {
return ResourceManager.GetString("VaultTimeoutPolicyWithActionInEffect", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Your vault timeout exceeds the restrictions set by your organization..
/// </summary>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>n Hoofwagwoordwenk kan u help om u wagwoord te onthou indien u dit sou vergeet.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Die hoofwagwoord moet ten minste {0} karakters lank wees.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Hoofwagwoord moet ten minste 8 karakters lank wees.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Min. aantal syfers</value>
@@ -1752,11 +1752,11 @@ Skandering gebeur outomaties.</value>
<value>Wil u dit regtig na die asblik stuur?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometriese ontgrendeling gedeaktiveer hangende bevestiging van hoofwagwoord.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometriese ontgrendeling vir outovul gedeaktiveer hangende bevestiging van hoofwagwoord.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Aktiveer sinchronisering by verfrissing</value>
@@ -2142,16 +2142,10 @@ Skandering gebeur outomaties.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>U organisasiebeleide beïnvloed u kluisuitelling. Maksimum toegelate kluisuittelling is {0} uur en {1} minuut(e).</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Jou organisasie se beleid affekteer jou kluis-uittel tyd. Maksimum toelaatbare kluis-uittel tyd is {0} uur(ure) en {1} minuut(minute). Jou kluis-uittel aksie is gestel na {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Jou organisasie se beleid het jou kluis-uittel aksie na {0} verander.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>U kluisuittelling oorskry die beperkinge wat deur u organisasie daargestel is.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Een of meer organisasiebeleide verhoed u om u persoonlike kluis uit te stuur.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2529,90 +2523,57 @@ Wil u na die rekening omskakel?</value>
<value>Hierdie versoek is nie langer gelding nie</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>In afwagting vir aantekeningsversoeke</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Weier alle versoeke</value>
<value>Decline all requests</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>Is jy seker dat jy alle hangende aantekeningsversoeke wil weier?</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Versoeke geweier</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>Geen hangende versoeke</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Laat die kamera versoek toe om die skandeerder te gebruik</value>
</data>
<data name="Language" xml:space="preserve">
<value>Taal</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Die taal is na {0} verander. Asseblief herbegin die toep om die veranderinge te sien</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Die taal verandering vereis 'n herbegin van die toep</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Verstek (Sisteem)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Belangrik</value>
<value>Important</value>
</data>
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
<value>Jou hoofwagwoord kan nie geherstel word as jy dit vergeet het nie! {0} karakters minimum.</value>
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
</data>
<data name="WeakMasterPassword" xml:space="preserve">
<value>Swak Hoofwagwoord</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>Swak wagwoord geïdentifiseer. Gebruik 'n sterk wagwoord om jou rekening te beskerm. Is jy seker dat jy 'n swak wagwoord wil gebruik?</value>
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
</data>
<data name="Weak" xml:space="preserve">
<value>Swak</value>
</data>
<data name="Good" xml:space="preserve">
<value>Goed</value>
<value>Good</value>
</data>
<data name="Strong" xml:space="preserve">
<value>Sterk</value>
<value>Strong</value>
</data>
<data name="CheckKnownDataBreachesForThisPassword" xml:space="preserve">
<value>Ondersoek bekende data lekkasies vir dié wagwoord</value>
<value>Check known data breaches for this password</value>
</data>
<data name="ExposedMasterPassword" xml:space="preserve">
<value>Blootgestelde Hoofwagwoord</value>
<value>Exposed Master Password</value>
</data>
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Dié wagwoord was in data lekkasie gevind. Gebruik 'n unieke wagwoord om jou rekening te beskerm. Is jy seker dat jy 'n blootgestelde wagwoord wil gebruik?</value>
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
</data>
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
<value>Swak en Blootgestelde Hoofwagwoord</value>
<value>Weak and Exposed Master Password</value>
</data>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Swak wagwoord geïdentifiseer en in 'n data lekkasie gevind. Gebruik 'n sterk en unieke wagwoord om jou rekening te beskerm. Is jy seker dat jy hierdie wagwoord wil gebruik?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organisasie SSO identifiseerder vereis.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Voeg die sleutel by 'n huidige of nuwe item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Daar is geen items in jou kluis wat met "{0}" ooreenstem nie</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Soek vir 'n item of voeg 'n nuwe een by</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Daar is geen items wat met die soekterm ooreenstem nie</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>يمكن أن تساعدك فكرة كلمة المرور الرئيسية على تذكر كلمة المرور الخاصة بك إذا نسيت.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>كلمة المرور الرئيسية يجب أن تكون على الأقل {0} حرفاً.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>يجب أن تكون كلمة المرور الرئيسية أكثر من 8 أحرف.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>الحد الأدنى للأرقام</value>
@@ -1752,11 +1752,11 @@
<value>هل تريد حقاً أن ترسل إلى سلة المهملات؟</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>تم تعطيل فتح القفل الحيوي في انتظار التحقق من كلمة المرور الرئيسية.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>تم تعطيل إلغاء القفل البيومتري للملء التلقائي في انتظار التحقق من كلمة المرور الرئيسية.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>تمكين المزامنة عند التحديث</value>
@@ -2143,16 +2143,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>سياسات مؤسستك تؤثر على مهلة الخزنة الخاص بك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة و {1} دقيقة</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>سياسات مؤسستك تؤثر على مهلة خزنتك. الحد الأقصى المسموح به لمهلة الخزنة هو {0} ساعة(ساعات) و {1} دقيقة(دقائق). يتم تعيين إجراء مهلة المخزن الخاص بك إلى {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>سياسات مؤسستك قامت بتعيين إجراء مهلة خزنتك إلى {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>مهلة خزنتك تتجاوز القيود التي تضعها مؤسستك.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>واحدة أو أكثر من سياسات المؤسسة تمنعك من تصدير خزانتك الشخصية.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2530,90 +2524,57 @@
<value>هذا الطلب لم يعد صالحًا</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>طلبات تسجيل الدخول المعلقة</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>رفض جميع الطلبات</value>
<value>Decline all requests</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>هل أنت متأكد من أنك تريد رفض جميع طلبات تسجيل الدخول المعلقة؟</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>تم رفض الطلبات</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>لا توجد طلبات معلقة</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>تمكين إذن الكاميرا لاستخدام الماسح الضوئي</value>
</data>
<data name="Language" xml:space="preserve">
<value>اللّغة</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>تم تغيير اللغة إلى {0}. الرجاء إعادة تشغيل التطبيق لرؤية التغيير</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>تغيير اللّغة يتطلب إعادة تشغيل التطبيق</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>الافتراضي (النظام)</value>
</data>
<data name="Important" xml:space="preserve">
<value>مهم</value>
<value>Important</value>
</data>
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
<value>لا يمكن استعادة كلمة المرور الرئيسية الخاصة بك إذا نسيت ذلك! {0} أحرف الحد الأدنى.</value>
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
</data>
<data name="WeakMasterPassword" xml:space="preserve">
<value>كلمة المرور الرئيسية الضعيفة</value>
<value>Weak Master Password</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>تم تحديد كلمة المرور ضعيفة. استخدم كلمة مرور قوية لحماية حسابك. هل أنت متأكد من أنك تريد استخدام كلمة مرور ضعيفة؟</value>
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
</data>
<data name="Weak" xml:space="preserve">
<value>ضعيفة</value>
<value>Weak</value>
</data>
<data name="Good" xml:space="preserve">
<value>جيدة</value>
<value>Good</value>
</data>
<data name="Strong" xml:space="preserve">
<value>قوية</value>
<value>Strong</value>
</data>
<data name="CheckKnownDataBreachesForThisPassword" xml:space="preserve">
<value>تحقق من خروقات البيانات المعروفة لكلمة المرور هذه</value>
<value>Check known data breaches for this password</value>
</data>
<data name="ExposedMasterPassword" xml:space="preserve">
<value>كلمة المرور الرئيسية مكشوفة</value>
<value>Exposed Master Password</value>
</data>
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
<value>كلمة المرور موجودة في خرق البيانات. استخدم كلمة مرور فريدة لحماية حسابك. هل أنت متأكد من أنك تريد استخدام كلمة مرور مكشوفة؟</value>
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
</data>
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
<value>كلمة المرور الرئيسية ضعيفة ومكشوفة</value>
<value>Weak and Exposed Master Password</value>
</data>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>كلمة مرور ضعيفة محددة وموجودة في خرق البيانات. استخدم كلمة مرور قوية وفريدة لحماية حسابك. هل أنت متأكد من أنك تريد استخدام كلمة المرور هذه؟</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>معرف الـSSO للمنظمة مطلوب.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>إضافة المفتاح إلى عنصر موجود أو جديد</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>لا توجد عناصر في خزانتك تتطابق مع "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>البحث عن عنصر أو إضافة عنصر جديد</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>لا توجد عناصر تطابق البحث</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>كلمة المرور الرئيسية الخاصة بك لا تفي بواحدة أو أكثر من سياسات مؤسستك. من أجل الوصول إلى الخزنة، يجب عليك تحديث كلمة المرور الرئيسية الآن. سيتم تسجيل خروجك من الجلسة الحالية، مما يتطلب منك تسجيل الدخول مرة أخرى. وقد تظل الجلسات النشطة على أجهزة أخرى نشطة لمدة تصل إلى ساعة واحدة.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>كلمة المرور الرئيسية الحالية</value>
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Ana parol məsləhəti, unutduğunuz parolu xatırlamağınıza kömək edir.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Ana parol ən azı {0} simvol uzunluğunda olmalıdır.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Ana parol ən azı 8 simvol uzunluğunda olmalıdır.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Minimum rəqəm</value>
@@ -1752,11 +1752,11 @@ Skan prosesi avtomatik baş tutacaq.</value>
<value>Həqiqətən tullantı qutusuna göndərmək istəyirsiniz?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Ana parolun təsdiqlənməsi gözlənildiyi üçün bu hesab üzrə biometrik kilid açma sıradan çıxarıldı.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Ana parolun təsdiqlənməsi gözlənildiyi üçün biometrik kilid açma sıradan çıxarıldı.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Ana parolun təsdiqlənməsi gözlənildiyi üçün bu hesab üzrə avto-doldurma biometrik kilid açma sıradan çıxarıldı.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Ana parolun təsdiqlənməsi gözlənildiyi üçün avto-doldurma üzrə biometrik kilid açma sıradan çıxarıldı.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Təzələmə əsnasında eyniləşdirməni fəallaşdır</value>
@@ -2142,16 +2142,10 @@ Skan prosesi avtomatik baş tutacaq.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>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 {0} saat {1} dəqiqədir</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>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 {0} saat {1} dəqiqədir. Anbar vaxt bitişi əməliyyatı {2} olaraq tənzimləndi.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Təşkilatınızın siyasətləri, anbar vaxt bitişi əməliyyatınızı {0} olaraq tənzimlədi.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Anbar vaxt bitişi, təşkilatınız tərəfindən tənzimlənən məhdudiyyətləri aşır.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Bir və ya daha çox təşkilat siyasəti, fərdi anbarınızı ixrac etməyinizin qarşısını alır.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2545,18 +2539,6 @@ Bu hesaba keçmək istəyirsiniz?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Skaneri istifadə etmək üçün kamera icazəsini fəallaşdırın</value>
</data>
<data name="Language" xml:space="preserve">
<value>Dil</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Dil, {0} olaraq dəyişdirildi. Dəyişiklikləri görmək üçün zəhmət olmasa tətbiqi yenidən başladın</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Dil dəyişikliyi, tətbiqin yenidən başladılmasını tələb edir</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>İlkin (Sistem)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Vacib</value>
</data>
@@ -2593,25 +2575,4 @@ Bu hesaba keçmək istəyirsiniz?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Zəif parol məlumat pozuntusunda aşkarlandı və tapıldı. Hesabınızı qorumaq üçün güclü və unikal bir parol istifadə edin. Bu parolu istifadə etmək istədiyinizə əminsiniz?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Təşkilat SSO identifikatoru tələb olundu.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Açarı, mövcud və ya yeni bir elementə əlavə edin</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Anbarınızda {0} ilə uyğunlaşan heç bir element yoxdur</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Bir element axtarın və ya yenisini əlavə edin</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Axtarışa uyğun gələn heç bir element yoxdur</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. Anbara müraciət üçün ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Hazırkı ana parol</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Падказка да асноўнага пароля можа дапамагчы вам успомніць яго, калі вы яго забылі.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Асноўны пароль павінен змяшчаць прынамсі {0} сімвалаў.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Асноўны пароль павінен змяшчаць прынамсі 8 сімвалаў.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Мінімум лічбаў</value>
@@ -1751,11 +1751,11 @@
<value>Вы сапраўды хочаце адправіць элемент у сметніцу?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Разблакіроўка па біяметрыі для гэтага ўліковага запісу адключана. Чакаецца праверка асноўным паролем.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Разблакіраванне па біяметрыі адключана. Чакаецца праверка асноўным паролем.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Аўтазапаўненне з дапамогай разблакіроўкі па біяметрыі для гэтага ўліковага запісу адключана. Чакаецца праверка асноўным паролем.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Разблакіраванне па біяметрыі для аўтазапаўнення адключана. Чакаецца праверка асноўным паролем.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Уключыць сінхранізацыю пры абнаўленні</value>
@@ -2142,16 +2142,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Палітыка вашай арганізацыі ўплывае на час чакання сховішча. Максімальны дазволены час чакання сховішча складае {0} гадз. і {1} хв.</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Палітыка вашай арганізацыі ўплывае на час чакання сховішча. Максімальны дазволены час чакання сховішча складае гадзін: {0}; хвілін: {1}. Для часу чакання вашага сховішча прызначана дзеянне {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Палітыкай вашай арганізацыі прызначана дзеянне {0} для часу чакання вашага сховішча.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Час чакання вашага сховішча перавышае дазволеныя абмежаванні, якія прызначыла ваша арганізацыя.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Адна або больш палітык арганізацыі не дазваляюць вам экспартаваць асабістае сховішча.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2546,18 +2540,6 @@
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Каб выкарыстоўваць сканер дайце дазвол на выкарыстанне камеры</value>
</data>
<data name="Language" xml:space="preserve">
<value>Мова</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Мова была зменена на {0}. Перазапусціце праграму, каб убачыць змены</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Для змены мовы неабходна перазапусціць праграму</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Прадвызначана (сістэмная)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Важна</value>
</data>
@@ -2594,25 +2576,4 @@
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Вызначаны ненадзейны пароль, які знойдзены ва ўцечках даных. Выкарыстоўвайце надзейныя і ўнікальныя паролі для абароны свайго ўліковага запісу. Вы сапраўды хочаце выкарыстоўваць гэты пароль?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Неабходны ідэнтыфікатар SSO арганізацыі.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Дадаць ключ да існуючага або новага элемента</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>У вашым сховішчы адсутнічаюць элементы, якія адпавядаюць "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Пошук або дабаўленне новага элемента</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Адсутнічаюць элементы, якія адпавядаюць пошуку</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Ваш асноўны пароль не адпавядае адной або некалькім палітыкам арганізацыі. Для атрымання доступу да сховішча, вы павінны абнавіць яго. Працягваючы, вы выйдзіце з бягучага сеанса і вам неабходна будзе ўвайсці паўторна. Актыўныя сеансы на іншых прыладах могуць заставацца актыўнымі на працягу адной гадзіны.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Бягучы асноўны пароль</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Подсказката помага да си спомните паролата, ако сте я забравили.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Главната парола трябва да е дълга поне {0} знака.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Главната парола трябва да е дълга поне 8 знака.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Минимален брой цифри</value>
@@ -1752,11 +1752,11 @@
<value>Сигурни ли сте, че искате да преместите записа в кошчето?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Потвърждаването с биометрични данни е изключено за тази регистрация. Въведете главната парола, за да го включите.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Засечена е промяна в биометричните данни. Впишете се с главната парола, за да я включите отново биометричната идентификация.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Автоматичното попълване за потвърждаване с биометрични данни е изключено за тази регистрация. Въведете главната парола, за да го включите.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Потвърждаването с биометрични данни е изключено. Въведете главната парола, за да го включите.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Синхронизация при опресняване</value>
@@ -2083,10 +2083,11 @@
<value>Това действие е защитено. За да продължите, въведете отново главната си парола, за да потвърдите самоличността си.</value>
</data>
<data name="CaptchaRequired" xml:space="preserve">
<value>Проверката е задължителна</value>
<value>Адресът за hCaptcha е задължителен</value>
</data>
<data name="CaptchaFailed" xml:space="preserve">
<value>Грешка. Опитайте отново.</value>
<value>
Грешка. Моля опитайте пак</value>
</data>
<data name="UpdatedMasterPassword" xml:space="preserve">
<value>Главната парола е променена</value>
@@ -2142,16 +2143,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Настройките на организацията Ви влияят върху времето за достъп до трезора Ви. Максималното разрешено време за достъп е {0} час(а) и {1} минути</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Настройките на организацията Ви влияят върху времето за достъп до трезора Ви. Максималното разрешено време за достъп е {0} час(а) и {1} минута/и. Зададеното действие при изтичане на това време е {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Настройките на организацията Ви задават следното действие при изтичане на времето за достъп до трезора: {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Времето за достъп до трезора Ви превишава ограничението, определено от организацията Ви.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Една или повече от настройките на организацията Ви не позволяват да изнасяте личния си трезор.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2299,10 +2294,10 @@
<value>Ръчно въвеждане на кода</value>
</data>
<data name="AddTotp" xml:space="preserve">
<value>Добавяне на TOTP</value>
<value>Копиране на кода за потвърждаване</value>
</data>
<data name="SetupTotp" xml:space="preserve">
<value>Настройка на TOTP</value>
<value>Копиране на кода за потвърждаване</value>
</data>
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
<value>Once the key is successfully entered,
@@ -2546,18 +2541,6 @@ select Add TOTP to store the key safely</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Разрешете достъпа до камерата, за да използвате скенера</value>
</data>
<data name="Language" xml:space="preserve">
<value>Език</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Езикът беше променен на {0}. Рестартирайте приложението, за да влезе промяната в сила</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Промяната на езика изисква рестартиране на приложението</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>По подразбиране (от системата)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Важно</value>
</data>
@@ -2594,25 +2577,4 @@ select Add TOTP to store the key safely</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Идентификаторът за еднократн идентификация на организация е задължителен.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Добавяне на ключа към съществуващ или нов елемент</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>В трезора липсват елементи, които отговарят на „{0}“</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Търсене на елемент или добавяне на нов</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Няма елементи, които отговарят на търсенето</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Вашата главна парола не отговаря на една или повече политики на организацията Ви. За да получите достъп до трезора, трябва да промените главната си парола сега. Това означава, че ще бъдете отписан(а) от текущата си сесия и ще трябва да се впишете отново. Активните сесии на други устройства може да продължат да бъдат активни още един час.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Текуща главна парола</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>যদি আপনি আপনার পাসওয়ার্ড ভুলে যান তাহলে একটি প্রধান পাসওয়ার্ডের ইঙ্গিতটি আপনাকে মনে করাতে সাহায্য করতে পারে।</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>প্রধান পাসওয়ার্ড কমপক্ষে ৮ অক্ষর দীর্ঘ হওয়া উচিত।</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>সর্বনিম্ন সংখ্যা</value>
@@ -1752,11 +1752,11 @@ Scanning will happen automatically.</value>
<value>Do you really want to send to the trash?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometric unlock disabled pending verification of master password.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometric unlock for autofill disabled pending verification of master password.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Allow sync on refresh</value>
@@ -2141,18 +2141,12 @@ Scanning will happen automatically.</value>
<value>This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your maximum allowed vault timeout to {0} hour(s) and {1} minute(s).</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Your vault timeout exceeds the restrictions set by your organization.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>One or more organization policies prevents your from exporting your individual vault.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2547,18 +2541,6 @@ Do you want to switch to this account?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2595,25 +2577,4 @@ Do you want to switch to this account?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -300,7 +300,7 @@
<comment>The title for the vault page.</comment>
</data>
<data name="Authenticator" xml:space="preserve">
<value>Aplikacija za autentifikaciju</value>
<value>Authenticator</value>
<comment>Authenticator TOTP feature</comment>
</data>
<data name="Name" xml:space="preserve">
@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Nagoveštaj glavne lozinke može Vam pomoći da zapamtite lozinku ako je zaboravite.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Glavna lozinka mora imati najmanje 8 znakova.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Minimalno brojeva</value>
@@ -775,10 +775,10 @@
<value>Omogućeno</value>
</data>
<data name="Off" xml:space="preserve">
<value>Isključeno</value>
<value>Off</value>
</data>
<data name="On" xml:space="preserve">
<value>Uključeno</value>
<value>On</value>
</data>
<data name="Status" xml:space="preserve">
<value>Status</value>
@@ -900,8 +900,8 @@
<value>Ne može se pročitati ključ autentifikatora.</value>
</data>
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
<value>Usmjerite kameru prema QR kodu.
Skeniranje će biti izvršeno automatski.</value>
<value>Point your camera at the QR Code.
Scanning will happen automatically.</value>
</data>
<data name="ScanQrTitle" xml:space="preserve">
<value>Skenirajte QR kod</value>
@@ -916,10 +916,10 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Iskopirajte TOTP</value>
</data>
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
<value>Ako je za Vašu prijavu priložen autentifikacioni ključ, TOTP verifikacioni kod se automatski kopira u Vašu memoriju kad god automatski popunite prijavu.</value>
<value>If a login has an authenticator key, copy the TOTP verification code to your clip-board when you auto-fill the login.</value>
</data>
<data name="CopyTotpAutomatically" xml:space="preserve">
<value>Kopiraj TOTP (autentifikacijski kod) automatski</value>
<value>Copy TOTP automatically</value>
</data>
<data name="PremiumRequired" xml:space="preserve">
<value>Za korišćenje ove funkcije potrebno je premium članstvo.</value>
@@ -1104,7 +1104,7 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Gđica</value>
</data>
<data name="Mx" xml:space="preserve">
<value>Rodno neutralan</value>
<value>Mx</value>
</data>
<data name="November" xml:space="preserve">
<value>Novembar</value>
@@ -1140,10 +1140,10 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Rok upotrebe</value>
</data>
<data name="ShowWebsiteIcons" xml:space="preserve">
<value>Pokaži ikone web stranica</value>
<value>Show website icons</value>
</data>
<data name="ShowWebsiteIconsDescription" xml:space="preserve">
<value>Prikaži prepoznatljivu sliku pored svake prijave.</value>
<value>Show a recognizable image next to each login.</value>
</data>
<data name="IconsUrl" xml:space="preserve">
<value>URL adresa servera ikona</value>
@@ -1415,7 +1415,7 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Nema kolekcija za prikazati.</value>
</data>
<data name="MovedItemToOrg" xml:space="preserve">
<value>{0} premješteno u {1}.</value>
<value>{0} moved to {1}.</value>
<comment>ex: Item moved to Organization.</comment>
</data>
<data name="ItemShared" xml:space="preserve">
@@ -1556,7 +1556,7 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Zadana tamna tema</value>
</data>
<data name="DefaultDarkThemeDescription" xml:space="preserve">
<value>Odaberi korištenje tamne teme kada je uređaj već zadano koristi.</value>
<value>Choose the dark theme to use when using Default (System) theme while your device's dark mode is in use.</value>
</data>
<data name="CopyNotes" xml:space="preserve">
<value>Kopiraj bilješke</value>
@@ -1583,16 +1583,16 @@ Skeniranje će biti izvršeno automatski.</value>
<comment>'Solarized Dark' is the name of a specific color scheme. It should not be translated.</comment>
</data>
<data name="AutofillBlockedUris" xml:space="preserve">
<value>Auto-popunjavanje blokiranih URI-ja</value>
<value>Auto-fill blocked URIs</value>
</data>
<data name="AutofillBlockedUrisDescription" xml:space="preserve">
<value>Auto-popunjavanje neće biti ponuđeno za blokirane URI-je. Odvoji višestruke URI-je zarezom. Npr. „https://twitter.com, androidapp://com.twitter.android.</value>
<value>Auto-fill will not be offered for blocked URIs. Separate multiple URIs with a comma. For example: "https://twitter.com, androidapp://com.twitter.android".</value>
</data>
<data name="AskToAddLogin" xml:space="preserve">
<value>Upitaj za dodavanje prijave</value>
<value>Ask to add login</value>
</data>
<data name="AskToAddLoginDescription" xml:space="preserve">
<value>Upitaj za dodavanje, ako se stavka već ne nalazi u trezoru.</value>
<value>Ask to add an item if one isn't found in your vault.</value>
</data>
<data name="OnRestart" xml:space="preserve">
<value>Kod ponovnog pokretanja</value>
@@ -1752,11 +1752,11 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Želite li zaista poslati u smeće?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometrijsko otključavanje onemogućeno do potvrde glavne lozinke.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometrijsko otključavanje za auto-ispunu onemogućeno do potvrde glavne lozinke.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Uključi sinkronizaciju pri osvježavanju</value>
@@ -1886,7 +1886,7 @@ Skeniranje će biti izvršeno automatski.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="Text" xml:space="preserve">
<value>Tekst</value>
<value>Text</value>
</data>
<data name="TypeText" xml:space="preserve">
<value>Tekst</value>
@@ -1905,16 +1905,16 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Datoteka koju želiš poslati</value>
</data>
<data name="FileTypeIsSelected" xml:space="preserve">
<value>Odabrana je vrsta datoteke.</value>
<value>File type is selected.</value>
</data>
<data name="FileTypeIsNotSelected" xml:space="preserve">
<value>Vrsta datoteke nije odabrana, dodirnite za odabir.</value>
<value>File type is not selected, tap to select.</value>
</data>
<data name="TextTypeIsSelected" xml:space="preserve">
<value>Vrsta teksta je odabrana.</value>
<value>Text type is selected.</value>
</data>
<data name="TextTypeIsNotSelected" xml:space="preserve">
<value>Vrsta teksta nije odabrana, dodirnite za odabir.</value>
<value>Text type is not selected, tap to select.</value>
</data>
<data name="DeletionDate" xml:space="preserve">
<value>Datum brisanja</value>
@@ -2142,16 +2142,10 @@ Skeniranje će biti izvršeno automatski.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Pravilo tvoje organizacije utječe na vrijeme isteka trezora. Najveće dozvoljeno vrijeme isteka je {0} sata(i) i {1} minuta.</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Vrijeme isteka premašuje ograničenje koju je postavila tvoja organizacija.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Jedno ili više pravila organizacija onemogućuje izvoz osobnog trezora. </value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2227,88 +2221,89 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Unesi verifikacijski kod koji je poslan na tvoj E-Mail</value>
</data>
<data name="SubmitCrashLogs" xml:space="preserve">
<value>Pošaljite evidenciju o pogreškama u radu aplikacije</value>
<value>Submit crash logs</value>
</data>
<data name="SubmitCrashLogsDescription" xml:space="preserve">
<value>Pomozi Bitwardenu poboljšati stabilnost aplikacije šaljući evidenciju o pogreškama u radu aplikacije.</value>
<value>Help Bitwarden improve app stability by submitting crash reports.</value>
</data>
<data name="OptionsExpanded" xml:space="preserve">
<value>Opcije su proširene, dodirni za smanjivanje.</value>
<value>Options are expanded, tap to collapse.</value>
</data>
<data name="OptionsCollapsed" xml:space="preserve">
<value>Opcije su smanjene, dodirni za proširenje.</value>
<value>Options are collapsed, tap to expand.</value>
</data>
<data name="UppercaseAtoZ" xml:space="preserve">
<value>Velika slova (A-Z)</value>
<value>Uppercase (A to Z)</value>
</data>
<data name="LowercaseAtoZ" xml:space="preserve">
<value>Mala slova (a - z)</value>
<value>Lowercase (A to Z)</value>
</data>
<data name="NumbersZeroToNine" xml:space="preserve">
<value>Brojevi (0-9)</value>
<value>Numbers (0 to 9)</value>
</data>
<data name="SpecialCharacters" xml:space="preserve">
<value>Posebni znakovi (!@#$%^&amp;*)</value>
<value>Special characters (!@#$%^&amp;*)</value>
</data>
<data name="TapToGoBack" xml:space="preserve">
<value>Dodirnite za povratak</value>
<value>Tap to go back</value>
</data>
<data name="PasswordIsVisibleTapToHide" xml:space="preserve">
<value>Lozinka je vidljiva, dodirnite za skrivanje.</value>
<value>Password is visible, tap to hide.</value>
</data>
<data name="PasswordIsNotVisibleTapToShow" xml:space="preserve">
<value>Lozinka nije vidljiva, dodirnite za prikaz.</value>
<value>Password is not visible, tap to show.</value>
</data>
<data name="FilterByVault" xml:space="preserve">
<value>Filtrirajte stavke prema trezoru</value>
<value>Filter items by vault</value>
</data>
<data name="AllVaults" xml:space="preserve">
<value>Svi trezori</value>
<value>All vaults</value>
</data>
<data name="Vaults" xml:space="preserve">
<value>Trezori</value>
<value>Vaults</value>
</data>
<data name="VaultFilterDescription" xml:space="preserve">
<value>Trezor: {0}</value>
<value>Vault: {0}</value>
</data>
<data name="All" xml:space="preserve">
<value>Sve</value>
<value>All</value>
</data>
<data name="Totp" xml:space="preserve">
<value>TOTP</value>
</data>
<data name="VerificationCodes" xml:space="preserve">
<value>Autentifikacijski kodovi</value>
<value>Verification codes</value>
</data>
<data name="PremiumSubscriptionRequired" xml:space="preserve">
<value>Potrebna Premium pretplata</value>
<value>Premium subscription required</value>
</data>
<data name="CannotAddAuthenticatorKey" xml:space="preserve">
<value>Nije moguće dodati autentifikacijski ključ? </value>
<value>Cannot add authenticator key? </value>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>Skenirajte QR kod</value>
<value>Scan QR Code</value>
</data>
<data name="CannotScanQRCode" xml:space="preserve">
<value>Nije moguće skenirati QR kod? </value>
<value>Cannot scan QR Code? </value>
</data>
<data name="AuthenticatorKeyScanner" xml:space="preserve">
<value>Autentifikacijski ključ</value>
<value>Authenticator key</value>
</data>
<data name="EnterKeyManually" xml:space="preserve">
<value>Ručno unesi ključ</value>
<value>Enter key manually</value>
</data>
<data name="AddTotp" xml:space="preserve">
<value>Dodaj TOTP</value>
<value>Add TOTP</value>
</data>
<data name="SetupTotp" xml:space="preserve">
<value>Podesi TOTP</value>
<value>Set up TOTP</value>
</data>
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
<value>Jednom kada je ključ uspješno unesen, odaberi „Dodaj TOTP” za sigurno spremanje ključa</value>
<value>Once the key is successfully entered,
select Add TOTP to store the key safely</value>
</data>
<data name="NeverLockWarning" xml:space="preserve">
<value>Postavljanje zaključavanja na „Nikad” čini tvoj trezor dostupnim svima koji imaju pristupom tvom uređaju. Ako koristiš ovu mogućnost, pobrini se da je uređaj adekvatno zaštićen.</value>
<value>Setting your lock options to “Never” keeps your vault available to anyone with access to your device. If you use this option, you should ensure that you keep your device properly protected.</value>
</data>
<data name="EnvironmentPageUrlsError" xml:space="preserve">
<value>One or more of the URLs entered are invalid. Please revise it and try to save again.</value>
@@ -2466,152 +2461,119 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Random</value>
</data>
<data name="ConnectToWatch" xml:space="preserve">
<value>Poveži se na Apple Watch</value>
<value>Connect to Watch</value>
</data>
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
<value>Odobrenje servisa pristupačnosti</value>
<value>Accessibility Service Disclosure</value>
</data>
<data name="AccessibilityDisclosureText" xml:space="preserve">
<value>Bitwarden koristi servis pristupačnosti za pretragu polja za prijavu u aplikacijama i na web stranicama, te potom određuje ID polja za unos korisničkog imena i lozinke kada su pronađeni odgovarajući podaci. Ne spremamo podatke koje servis daje, niti pokušavamo upravljati bilo kojim elementima na zaslonu osim tekstualnog unosa podataka.</value>
<value>Bitwarden uses the Accessibility Service to search for login fields in apps and websites, then establish the appropriate field IDs for entering a username &amp; password when a match for the app or site is found. We do not store any of the information presented to us by the service, nor do we make any attempt to control any on-screen elements beyond text entry of credentials.</value>
</data>
<data name="Accept" xml:space="preserve">
<value>Prihvati</value>
<value>Accept</value>
</data>
<data name="Decline" xml:space="preserve">
<value>Odbij</value>
<value>Decline</value>
</data>
<data name="LoginRequestHasAlreadyExpired" xml:space="preserve">
<value>Zahtjev za prijavu je već istekao.</value>
<value>Login request has already expired.</value>
</data>
<data name="LoginAttemptFromXDoYouWantToSwitchToThisAccount" xml:space="preserve">
<value>Pokušaj prijave od:
<value>Login attempt from:
{0}
Želiš li se prebaciti na ovaj račun?</value>
Do you want to switch to this account?</value>
</data>
<data name="NewAroundHere" xml:space="preserve">
<value>Novi ovdje?</value>
<value>New around here?</value>
</data>
<data name="GetMasterPasswordwordHint" xml:space="preserve">
<value>Dobijte podsjetnik glavne lozinke</value>
<value>Get master password hint</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Prijava kao {0}</value>
<value>Logging in as {0}</value>
</data>
<data name="NotYou" xml:space="preserve">
<value>Nisi ti?</value>
<value>Not you?</value>
</data>
<data name="LogInWithMasterPassword" xml:space="preserve">
<value>Prijava sa glavnom lozinkom</value>
<value>Log in with master password</value>
</data>
<data name="LogInWithAnotherDevice" xml:space="preserve">
<value>Prijava sa drugim uređajem</value>
<value>Log in with device</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Prijava je pokrenuta</value>
<value>Log in initiated</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Obavijest je poslana na tvoj uređaj.</value>
<value>A notification has been sent to your device.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Provjeri je li trezor otključan i slaže li se jedinstvena fraza s drugim uređajem.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Ponovno pošalji obavijest</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Trebaš drugu opciju?</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Pogledaj sve mogućnosti prijave</value>
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Ovaj zahtjev više ne važi</value>
<value>This request is no longer valid</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>Zahtjevi za prijavu koji su na čekanju</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Odbij sve zahtjeve</value>
<value>Decline all requests</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>Jeste li sigurni da želite odbiti sve zahtjeve koji su na čekanju?</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Zahtjevi odbijeni</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>Nema zahtjeva na čekanju</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Omogućite dozvolu za korištenje kamere da bi koristili skener</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Important" xml:space="preserve">
<value>Važno</value>
<value>Important</value>
</data>
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
<value>Tvoja glavna lozinka ne može biti oporavljena ukoliko je zaboraviš! {0} znakova najmanje.</value>
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
</data>
<data name="WeakMasterPassword" xml:space="preserve">
<value>Slaba glavna lozinka</value>
<value>Weak Master Password</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>Slaba lozinka prepoznata. Koristite jaku lozinku za zaštitu Vašeg računa. Da li ste sigurni da želite koristiti slabu lozinku?</value>
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
</data>
<data name="Weak" xml:space="preserve">
<value>Slabo</value>
<value>Weak</value>
</data>
<data name="Good" xml:space="preserve">
<value>Dobro</value>
<value>Good</value>
</data>
<data name="Strong" xml:space="preserve">
<value>Jako</value>
<value>Strong</value>
</data>
<data name="CheckKnownDataBreachesForThisPassword" xml:space="preserve">
<value>Provjeri da li postoji kompromitovana baza podataka povezana sa ovom lozinkom</value>
<value>Check known data breaches for this password</value>
</data>
<data name="ExposedMasterPassword" xml:space="preserve">
<value>Glavna lozinka je kompromitovana</value>
<value>Exposed Master Password</value>
</data>
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Lozinka je pronađena u bazama podataka koje su provaljene. Koristite jedinstvenu lozinku da zaštitite vaš račun. Da li ste sigurni da želite koritstiti već kompromitovanu lozinku?</value>
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
</data>
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
<value>Slaba i kompromitovana glavna lozinka</value>
<value>Weak and Exposed Master Password</value>
</data>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Slaba lozinka prepoznata i pronađena u kompromitovanim bazama podataka. Koristite jaku lozinku za zaštitu Vašeg računa. Da li ste sigurni da želite koristiti ovu lozinku?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Una pista de contrasenya mestra pot ajudar-vos a recordar-la si la oblideu.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>La contrasenya mestra ha de contenir almenys {0} caràcters.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>La contrasenya ha de contenir almenys 8 caràcters.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Mínim de caràcters numèrics</value>
@@ -1752,11 +1752,11 @@ L'escaneig es farà automàticament.</value>
<value>Esteu segur que voleu enviar-ho a la paperera?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>El desbloqueig biomètric d'aquest compte està deshabilitat mentre es verifica la contrasenya mestra.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>S'ha detectat un canvi biomètric. Inicieu la sessió mitjançant la contrasenya principal per tornar a activar-la.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>El desbloqueig biomètric d'emplenament automàtic d'aquest compte està deshabilitat mentre es verifica la contrasenya mestra.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Desbloqueig biomètric d'emplenament automàtic deshabilitat. Està pendent de verificació de la contrasenya mestra.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Activa la sincronització en actualitzar-se</value>
@@ -2140,18 +2140,12 @@ L'escaneig es farà automàticament.</value>
<value>Aquesta organització té una política empresarial que us inscriurà automàticament al restabliment de la contrasenya. La inscripció permetrà als administradors de lorganització canviar la vostra contrasenya mestra.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>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 {0} hores i {1} minuts</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Les polítiques de l'organització afecten el temps d'espera de la vostra caixa forta. El temps d'espera màxim permès és de {0} hores i {1} minuts. L'acció de temps d'espera de la caixa forta està definida en {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Les polítiques de l'organització han establert l'acció de temps d'espera de la caixa forta a {0}.</value>
<value>Les polítiques de la vostra organització afecten el temps d'espera de la vostra caixa forta. El temps d'espera màxim permès de la caixa forta és de {0} hores i {1} minuts</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>El temps d'espera de la caixa forta supera les restriccions establertes per la vostra organització.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Una o més polítiques d'organització us impedeixen exportar la vostra caixa forta.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2546,18 +2540,6 @@ Voleu canviar a aquest compte?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Habilita el permís de la càmera per utilitzar l'escàner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Idioma</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>L'idioma s'ha canviat a {0}. Reinicieu l'aplicació per veure el canvi</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>El canvi d'idioma requereix un reinici de l'aplicació</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Per defecte (Sistema)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2594,25 +2576,4 @@ Voleu canviar a aquest compte?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Contrasenya feble identificada i trobada en una filtració de dades. Utilitzeu una contrasenya única i segura per protegir el vostre compte. Esteu segur que voleu utilitzar aquesta contrasenya?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Lidentificador SSO de lorganització és obligatori.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Afig la clau a un element existent o nou</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>No hi ha cap element a la caixa forta que coincidisca amb "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Cerca un element o n'afig un nou</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>No hi ha elements que coincidisquen amb la cerca</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>La vostra contrasenya mestra no compleix una o més de les polítiques de l'organització. Per accedir a la caixa forta, heu d'actualitzar-la ara. Si continueu, es tancarà la sessió actual i us demanarà que torneu a iniciar-la. Les sessions en altres dispositius poden continuar romanent actives fins a una hora.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Contrasenya mestra actual</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Et hovedeadgangskodentip kan hjælpe dig med at huske din adgangskode, hvis du glemmer den.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Hovedadgangskoden skal udgøre mindst {0} tegn.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Hovedadgangskode skal være på minimum 8 tegn.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Mindste antal cifre</value>
@@ -1104,7 +1104,7 @@ Skanning vil ske automatisk.</value>
<value>Frk</value>
</data>
<data name="Mx" xml:space="preserve">
<value>Neutral</value>
<value>Mx</value>
</data>
<data name="November" xml:space="preserve">
<value>November</value>
@@ -1752,11 +1752,11 @@ Skanning vil ske automatisk.</value>
<value>Er du sikker på, at du sende til papirkurven?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometrisk oplåsning af denne konto deaktiveret afventende bekræftelse af hovedadgangskode.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometrisk oplåsning deaktiveret - afventer verifikation af hovedadgangskoden.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autoudfyldelse for biometrisk oplåsning af denne konto deaktiveret afventende bekræftelse af hovedadgangskode.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometrisk oplåsning til autoudfyldning deaktiveret - afventer verifikation af hovedadgangskoden.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Tillad synk ved opfriskning</value>
@@ -2142,16 +2142,10 @@ Skanning vil ske automatisk.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Dine organisationspolitikker påvirker din boks-timeout. Maksimum tilladte boks-timeout er {0} time(r) og {1} minut(ter)</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Organisationspolitikkerne påvirker boks-timeout. Maks. tilladt boks-timeout er {0} time(r) og {1} minut(ter). Boks-timeout er pt. sat til {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Organisationspolitikker har sat boks-timeouthandlingen til {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Timeout for din boks overskrider de begrænsninger, der er angivet af din organisation.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>En eller flere organisationspolitikker forhindrer eksport af din personlige boks.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2505,7 +2499,7 @@ Vil du skifte til denne konto?</value>
<value>Log ind med hovedadgangskoden</value>
</data>
<data name="LogInWithAnotherDevice" xml:space="preserve">
<value>Log ind med enhed</value>
<value>Log ind med en anden enhed</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Indlogning påbegyndt</value>
@@ -2546,18 +2540,6 @@ Vil du skifte til denne konto?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Tildel kameratilladelse for brug af skanneren</value>
</data>
<data name="Language" xml:space="preserve">
<value>Sprog</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Sproget er blevet ændret til {0}. Genstart appen for at se ændringen</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Skift af sprog kræver app-genstart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Standard (system)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Vigtigt</value>
</data>
@@ -2594,25 +2576,4 @@ Vil du skifte til denne konto?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Svag adgangskode identificeret og fundet i datalæk. Brug en unik adgangskode til at beskytte din konto. Sikker på, at du vil bruge denne adgangskode?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organisations-SSO obligatorisk.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Føj nøglen til et eksisterende eller nyt emne</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Der er ingen emner i boksen matchende "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Søg efter, eller tilføj et nyt, emne</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Ingen emner matcher søgningen</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Din hovedadgangskode overholder ikke én eller flere organisationspolitikker. For at få adgang til boksen skal hovedadgangskode opdateres nu. Fortsættes, logges du ud af den nuværende session og vil skulle logger ind igen. Aktive sessioner på andre enheder kan forblive aktive i op til én time.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Aktuel hovedadgangskode</value>
</data>
</root>

View File

@@ -156,7 +156,7 @@
<comment>The button text that allows a user to copy the login's password to their clipboard.</comment>
</data>
<data name="CopyUsername" xml:space="preserve">
<value>Benutzername kopieren</value>
<value>Nutzernamen kopieren</value>
<comment>The button text that allows a user to copy the login's username to their clipboard.</comment>
</data>
<data name="Credits" xml:space="preserve">
@@ -229,10 +229,10 @@
<value>Ordner</value>
</data>
<data name="FolderUpdated" xml:space="preserve">
<value>Ordner gespeichert</value>
<value>Ordner aktualisiert</value>
</data>
<data name="GoToWebsite" xml:space="preserve">
<value>Zur Website</value>
<value>Webseite besuchen</value>
<comment>The button text that allows user to launch the website to their web browser.</comment>
</data>
<data name="HelpAndFeedback" xml:space="preserve">
@@ -285,10 +285,10 @@
<value>Konto bereits hinzugefügt</value>
</data>
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
<value>Möchtest du jetzt dazu wechseln?</value>
<value>Möchtest du jetzt darauf umschalten?</value>
</data>
<data name="MasterPassword" xml:space="preserve">
<value>Master-Passwort</value>
<value>Masterpasswort</value>
<comment>Label for a master password.</comment>
</data>
<data name="More" xml:space="preserve">
@@ -375,14 +375,14 @@
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
</data>
<data name="ValueHasBeenCopied" xml:space="preserve">
<value>{0} kopiert</value>
<value>{0} wurde kopiert</value>
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
</data>
<data name="VerifyFingerprint" xml:space="preserve">
<value>Fingerabdruck verifizieren</value>
<value>Fingerabdruck überprüfen</value>
</data>
<data name="VerifyMasterPassword" xml:space="preserve">
<value>Master-Passwort verifizieren</value>
<value>Masterpasswort überprüfen</value>
</data>
<data name="VerifyPIN" xml:space="preserve">
<value>PIN überprüfen</value>
@@ -394,7 +394,7 @@
<value>Ansicht</value>
</data>
<data name="VisitOurWebsite" xml:space="preserve">
<value>Besuche unsere Website</value>
<value>Besuchen Sie unsere Website</value>
</data>
<data name="VisitOurWebsiteDescription" xml:space="preserve">
<value>Besuche unsere Webseite um Hilfe zu erhalten, Neuigkeiten zu erfahren, Kontakt aufzunehmen und mehr über die Verwendung von Bitwarden zu lernen.</value>
@@ -422,7 +422,7 @@
<value>Verwende den Bitwarden Dienst in den Bedienungshilfen, um deine Zugangsdaten in Apps und im Web automatisch ausfüllen zu lassen.</value>
</data>
<data name="AutofillService" xml:space="preserve">
<value>Auto-Ausfüllen-Dienst</value>
<value>Auto-Ausfüllen Funktion</value>
</data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>Mehrdeutige Zeichen vermeiden</value>
@@ -431,7 +431,7 @@
<value>Bitwarden App-Erweiterung</value>
</data>
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
<value>Die einfachste Möglichkeit, neue Zugangsdaten zu deinem Tresor hinzuzufügen, ist die Bitwarden App-Erweiterung. Erfahre mehr über die Benutzung der Bitwarden App-Erweiterung, indem du zu den "Einstellungen" wechselst.</value>
<value>Die einfachste Möglichkeit, neue Anmeldedaten zu Ihrem Tresor hinzuzufügen, ist die Bitwarden App Erweiterung. Erfahren Sie mehr über die Bitwarden App Erweiterung, indem Sie zu dem "Einstellungen"-Bildschirm navigieren.</value>
</data>
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
<value>Nutze Bitwarden in Safari und anderen Apps, um Zugangsdaten automatisch einzufügen.</value>
@@ -443,7 +443,7 @@
<value>Verwende den Bitwarden Dienst in den Bedienungshilfen um deine Zugangsdaten automatisch einzufügen.</value>
</data>
<data name="ChangeEmail" xml:space="preserve">
<value>E-Mail-Adresse ändern</value>
<value>E-Mail Adresse ändern</value>
</data>
<data name="ChangeEmailConfirmation" xml:space="preserve">
<value>Du kannst deine E-Mail Adresse im Bitwarden.com Web-Tresor ändern. Möchtest du die Seite jetzt öffnen?</value>
@@ -471,13 +471,13 @@
<value>Eintrag bearbeiten</value>
</data>
<data name="EnableAutomaticSyncing" xml:space="preserve">
<value>Automatische Synchronisierung zulassen</value>
<value>Automatische Synchronisierung aktivieren</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Gebe die E-Mail Adresse deines Kontos ein, um den Hinweis für dein Master-Passwort zu erhalten.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>App-Erweiterung reaktivieren</value>
<value>App-Erweiterung wieder aktivieren</value>
</data>
<data name="ExtensionAlmostDone" xml:space="preserve">
<value>Fast geschafft!</value>
@@ -514,7 +514,7 @@
<value>Fingerabdruck</value>
</data>
<data name="GeneratePassword" xml:space="preserve">
<value>Passwort generieren</value>
<value>Passwort erstellen</value>
</data>
<data name="GetPasswordHint" xml:space="preserve">
<value>Hinweis zum Masterpasswort zusenden</value>
@@ -566,7 +566,7 @@
<comment>Message shown when interacting with the server</comment>
</data>
<data name="LoginOrCreateNewAccount" xml:space="preserve">
<value>Melde dich an oder erstelle ein neues Konto, um auf deinen Tresor zuzugreifen.</value>
<value>Melde dich an oder erstelle einen neuen Account, um auf Deinen Tresor zuzugreifen.</value>
</data>
<data name="Manage" xml:space="preserve">
<value>Verwalten</value>
@@ -583,11 +583,11 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Ein Hinweis auf dein Master-Passwort kann dir helfen, dich an das Passwort zu erinnern, solltest du es vergessen.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Das Master-Passwort muss mindestens {0} Zeichen lang sein.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Das Masterpasswort muss mindestens 8 Zeichen lang sein.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Mindestanzahl Ziffern</value>
<value>Mindestanzahl Zahlen</value>
<comment>Minimum numeric characters for password generator settings</comment>
</data>
<data name="MinSpecial" xml:space="preserve">
@@ -635,10 +635,10 @@
<value>Passwort generiert</value>
</data>
<data name="PasswordGenerator" xml:space="preserve">
<value>Passwort-Generator</value>
<value>Passwortgenerator</value>
</data>
<data name="PasswordHint" xml:space="preserve">
<value>Passwort-Hinweis</value>
<value>Passworthinweis</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Wir haben Ihnen eine E-Mail mit Ihrem Masterpassworthinweis gesendet.</value>
@@ -647,7 +647,7 @@
<value>Bist du sicher, dass du das aktuelle Passwort überschreiben möchtest?</value>
</data>
<data name="PushNotificationAlert" xml:space="preserve">
<value>Bitwarden hält deinen Tresor durch Push-Benachrichtigungen automatisch synchronisiert. Für die bestmögliche Benutzererfahrung tippe im folgenden Dialogfenster auf "Erlauben", um Push-Benachrichtigungen zu erlauben.</value>
<value>Bitwarden aktualisiert deinen Tresor mit Push-Benachrichtigungen. Für die bestmögliche Benutzererfahrung tippe im folgenden Dialogfenster auf "Ok", um Push-Benachrichtigungen zu aktivieren.</value>
<comment>Push notifications for apple products</comment>
</data>
<data name="RateTheApp" xml:space="preserve">
@@ -678,10 +678,10 @@
<value>Gebe deine 4-stellige PIN ein, um die App zu entsperren.</value>
</data>
<data name="ItemInformation" xml:space="preserve">
<value>Eintragsinformationen</value>
<value>Eintrags-Information</value>
</data>
<data name="ItemUpdated" xml:space="preserve">
<value>Eintrag gespeichert</value>
<value>Eintrag aktualisiert</value>
</data>
<data name="Submitting" xml:space="preserve">
<value>Wird übermittelt...</value>
@@ -708,7 +708,7 @@
<value>Zwei-Faktor-Authentifizierung</value>
</data>
<data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>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 Webseite jetzt öffnen?</value>
<value>Mit der Zwei-Faktor-Authentifizierung wird dein Account zusätzlich abgesichert, da jede Anmeldung durch einen Sicherheitscode, eine Authentifizierungs-App, SMS, einen Anruf oder eine E-Mail verifiziert werden muss. Die Zwei-Faktor-Authentifizierung kann im Web-Tresor unter bitwarden.com aktiviert werden. Möchtest du die Seite jetzt öffnen?</value>
</data>
<data name="UnlockWith" xml:space="preserve">
<value>Mit {0} entsperren</value>
@@ -815,7 +815,7 @@
<comment>Message shown when trying to launch an app that does not exist on the user's device.</comment>
</data>
<data name="AuthenticatorAppTitle" xml:space="preserve">
<value>Authenticator App</value>
<value>Authentifizierungs-App</value>
<comment>For 2FA</comment>
</data>
<data name="EnterVerificationCodeApp" xml:space="preserve">
@@ -827,11 +827,11 @@
<comment>For 2FA</comment>
</data>
<data name="LoginUnavailable" xml:space="preserve">
<value>Anmeldung nicht verfügbar</value>
<value>Zugangsdaten nicht verfügbar</value>
<comment>For 2FA whenever there are no available providers on this device.</comment>
</data>
<data name="NoTwoStepAvailable" xml:space="preserve">
<value>Für dieses Konto ist eine aktive Zwei-Faktor-Authentifizierung eingerichtet, allerdings wird keiner der konfigurierten Zwei-Faktor-Anbieter von diesem Gerät unterstützt. Bitte nutze ein unterstütztes Gerät und / oder füge zusätzliche Anbieter hinzu, die von mehr Geräten unterstützt werden (wie eine Authentifizierungs-App).</value>
<value>Dieses Konto hat eine aktive Zwei-Faktor-Authentifizierung, allerdings wird keiner der konfigurierten Zwei-Faktor-Anbieter von diesem Gerät unterstützt. Bitte nutzen Sie ein unterstütztes Gerät und / oder fügen Sie zusätzliche Anbieter hinzu, die von mehr Geräten unterstützt werden (wie eine Authentifizierungs-App).</value>
</data>
<data name="RecoveryCodeTitle" xml:space="preserve">
<value>Wiederherstellungscode</value>
@@ -846,7 +846,7 @@
<comment>For 2FA</comment>
</data>
<data name="TwoStepLoginOptions" xml:space="preserve">
<value>Optionen für Zwei-Faktor-Authentifizierung</value>
<value>Optionen für Zwei-Faktor Authentifizierung</value>
</data>
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
<value>Verwende eine andere Zwei-Faktor Authentifizierungsmethode</value>
@@ -856,18 +856,18 @@
<comment>For 2FA</comment>
</data>
<data name="VerificationEmailSent" xml:space="preserve">
<value>Verifizierung-E-Mail versendet</value>
<value>Bestätigungsmail wurde gesendet</value>
<comment>For 2FA</comment>
</data>
<data name="YubiKeyInstruction" xml:space="preserve">
<value>Halte deinen YubiKey NEO an die Rückseite des Geräts, um fortzufahren.</value>
</data>
<data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey Sicherheitsschlüssel</value>
<value>YubiKey NEO Sicherheitsschlüssel</value>
<comment>"YubiKey" is the product name and should not be translated.</comment>
</data>
<data name="AddNewAttachment" xml:space="preserve">
<value>Neuen Anhang hinzufügen</value>
<value>Anhang hinzufügen</value>
</data>
<data name="Attachments" xml:space="preserve">
<value>Anhänge</value>
@@ -916,7 +916,7 @@ Das Scannen erfolgt automatisch.</value>
<value>TOTP kopieren</value>
</data>
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
<value>Ist ein Authentifizierungsschlüssel mit deinen Zugangsdaten verknüpft, wird der TOTP Verifizierungscode in die Zwischenablage kopiert, wenn du die Zugangsdaten automatisch einfügen lässt.</value>
<value>Falls Zugangsdaten einen Authentifizierungsschlüssel haben, den TOTP-Verifizierungsscode nach dem automatischen Ausfüllen in die Zwischenablage kopieren.</value>
</data>
<data name="CopyTotpAutomatically" xml:space="preserve">
<value>TOTP automatisch kopieren</value>
@@ -958,7 +958,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Mehr erfahren</value>
</data>
<data name="ApiUrl" xml:space="preserve">
<value>API Server-URL</value>
<value>API Server URL</value>
</data>
<data name="CustomEnvironment" xml:space="preserve">
<value>Benutzerdefinierte Umgebung</value>
@@ -974,7 +974,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>Validation error when something is not formatted correctly, such as a URL or email address.</comment>
</data>
<data name="IdentityUrl" xml:space="preserve">
<value>URL des Identitätsservers</value>
<value>Identitätsserver-URL</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data>
<data name="SelfHostedEnvironment" xml:space="preserve">
@@ -987,7 +987,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Server URL</value>
</data>
<data name="WebVaultUrl" xml:space="preserve">
<value>URL des Web-Tresor-Servers</value>
<value>Web-Tresor Server URL</value>
</data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Tippe auf diese Benachrichtigung um Einträge aus deinem Tresor anzusehen.</value>
@@ -1140,13 +1140,13 @@ Das Scannen erfolgt automatisch.</value>
<value>Gültig bis</value>
</data>
<data name="ShowWebsiteIcons" xml:space="preserve">
<value>Website-Symbole anzeigen</value>
<value>Zeige Webseiten-Icons</value>
</data>
<data name="ShowWebsiteIconsDescription" xml:space="preserve">
<value>Ein wiedererkennbares Bild neben jeden Zugangsdaten anzeigen.</value>
</data>
<data name="IconsUrl" xml:space="preserve">
<value>URL des Icons-Servers</value>
<value>Icons Server URL</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Mit Bitwarden automatisch ausfüllen</value>
@@ -1173,10 +1173,10 @@ Das Scannen erfolgt automatisch.</value>
<value>Auto-Fill Bedienungshilfe</value>
</data>
<data name="AutofillServiceDescription" xml:space="preserve">
<value>Der Auto-Ausfüllen-Dienst von Bitwarden benutzt das Android Autofill Framework, um Zugangsdaten in anderen Apps auf deinem Gerät auszufüllen.</value>
<value>Der Bitwarden Auto-Fill Service benutzt das Android Autofill Framework, um Logins, Kreditkarten und Identitätsinformationen in anderen Apps auf Ihrem Gerät zu befüllen.</value>
</data>
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
<value>Verwende den Auto-Ausfüllen-Dienst von Bitwarden, um Anmeldedaten in anderen Apps auszufüllen.</value>
<value>Verwende den Bitwarden Dienst in den Bedienungshilfen, um deine Zugangsdaten automatisch einzufügen.</value>
</data>
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
<value>Öffne Auto-Fill Einstellungen</value>
@@ -1201,7 +1201,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Die Android Auto-Fill Einstellungen konnten nicht automatisch geöffnet werden. Über Android Einstellungen &gt; Sprachen &amp; Eingabe &gt; AutoFill-Dienst kannst du manuell zu den Auto-Fill Einstellungen navigieren.</value>
</data>
<data name="CustomFieldName" xml:space="preserve">
<value>Name des benutzerdefinierten Feldes</value>
<value>Name Benutzerdefiniertes Feld</value>
</data>
<data name="FieldTypeBoolean" xml:space="preserve">
<value>Boolean</value>
@@ -1252,14 +1252,14 @@ Das Scannen erfolgt automatisch.</value>
<value>Beginnt mit</value>
</data>
<data name="URIMatchDetection" xml:space="preserve">
<value>URI-Übereinstimmungserkennung</value>
<value>Match-Erkennung</value>
</data>
<data name="MatchDetection" xml:space="preserve">
<value>Übereinstimmungserkennung</value>
<value>Match-Erkennung</value>
<comment>URI match detection for auto-fill.</comment>
</data>
<data name="YesAndSave" xml:space="preserve">
<value>Ja und speichern</value>
<value>Ja, und speichern</value>
</data>
<data name="AutofillAndSave" xml:space="preserve">
<value>Automatisch ausfüllen und speichern</value>
@@ -1289,7 +1289,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>ex. Date this item was updated</comment>
</data>
<data name="AutofillActivated" xml:space="preserve">
<value>Auto-Ausfüllen aktiviert!</value>
<value>AutoFill aktiviert!</value>
</data>
<data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Du musst dich in der Bitwarden App einloggen, bevor du AutoFill nutzen kannst.</value>
@@ -1304,7 +1304,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Greife auf deinen Tressor direkt von deiner Tastatur aus zu um Passwörter schnell und automatisch auszufüllen.</value>
</data>
<data name="AutofillTurnOn" xml:space="preserve">
<value>Um das automatische Ausfüllen von Passwörtern auf deinem Gerät einzurichten, befolge bitte diese Anweisungen:</value>
<value>Um Autofill auf deinem Gerät zu aktivieren, befolge bitte diese Anweisungen:</value>
</data>
<data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Gehe in die iOS Einstellungen</value>
@@ -1322,7 +1322,7 @@ Das Scannen erfolgt automatisch.</value>
<value>5. Wähle "Bitwarden"</value>
</data>
<data name="PasswordAutofill" xml:space="preserve">
<value>Passwort automatisch ausfüllen</value>
<value>Passwort AutoFill</value>
</data>
<data name="BitwardenAutofillAlert2" xml:space="preserve">
<value>Die einfachste Möglichkeit, neue Zugangsdaten zu deinemTresor hinzuzufügen, ist die Bitwarden Passwort Auto-Ausfüllen Erweiterung. Erfahre mehr über die Bitwarden Passwort Auto-Ausfüllen Funktion, indem du zur "Einstellungen" wechselst.</value>
@@ -1384,13 +1384,13 @@ Das Scannen erfolgt automatisch.</value>
<value>Sammlung durchsuchen</value>
</data>
<data name="SearchFileSends" xml:space="preserve">
<value>Datei-Sends durchsuchen</value>
<value>Versendete Dateien suchen</value>
</data>
<data name="SearchTextSends" xml:space="preserve">
<value>Text-Sends durchsuchen</value>
<value>Versendete Texte suchen</value>
</data>
<data name="SearchGroup" xml:space="preserve">
<value>{0} durchsuchen</value>
<value>Suche {0}</value>
<comment>ex: Search Logins</comment>
</data>
<data name="Type" xml:space="preserve">
@@ -1437,7 +1437,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Keine Organisationen vorhanden.</value>
</data>
<data name="MoveToOrgDesc" xml:space="preserve">
<value>Wähle eine Organisation aus, in die du diesen Eintrag verschieben möchtest. Das Verschieben in eine Organisation überträgt das Eigentum an diese Organisation. Du bist nicht mehr der direkte Eigentümer dieses Eintrags, sobald er verschoben wurde.</value>
<value>Wähle eine Organisation aus, in die du diesen Eintrag verschieben möchtest. Das Verschieben in eine Organisation überträgt das Eigentum an diese Organisation. Du bist nicht mehr der direkte Besitzer dieses Eintrags, sobald er verschoben wurde.</value>
</data>
<data name="NumberOfWords" xml:space="preserve">
<value>Anzahl der Wörter</value>
@@ -1502,7 +1502,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Dein Tresor ist gesperrt. Gebe deinen PIN-Code ein um fortzufahren.</value>
</data>
<data name="VaultLockedIdentity" xml:space="preserve">
<value>Dein Tresor ist gesperrt. Verifiziere deine Identität, um fortzufahren.</value>
<value>Dein Tresor ist gesperrt. Überprüfe deine Identität, um fortzufahren.</value>
</data>
<data name="Dark" xml:space="preserve">
<value>Dunkel</value>
@@ -1536,7 +1536,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>Clipboard is the operating system thing where you copy/paste data to on your device.</comment>
</data>
<data name="DefaultUriMatchDetection" xml:space="preserve">
<value>Standard URI-Übereinstimmungserkennung</value>
<value>Standard-URI-Match-Erkennung</value>
<comment>Default URI match detection for auto-fill.</comment>
</data>
<data name="DefaultUriMatchDetectionDescription" xml:space="preserve">
@@ -1553,13 +1553,13 @@ Das Scannen erfolgt automatisch.</value>
<value>Standard (System)</value>
</data>
<data name="DefaultDarkTheme" xml:space="preserve">
<value>Dunkles Standard-Design</value>
<value>Dunkles Standard Design</value>
</data>
<data name="DefaultDarkThemeDescription" xml:space="preserve">
<value>Wähle das zu verwendende dunkle Design aus, das bei der Auswahl vom Standard-(System)-Design verwendet werden soll, während der Dark Mode deines Geräts aktiviert ist.</value>
<value>Wähle das zu verwendende dunkle Design aus, das bei der Auswahl vom Standard (System) Design verwendet werden soll, während der Dunkelmodus deines Geräts aktiviert ist</value>
</data>
<data name="CopyNotes" xml:space="preserve">
<value>Notiz kopieren</value>
<value>Notizen kopieren</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Beenden</value>
@@ -1589,16 +1589,16 @@ Das Scannen erfolgt automatisch.</value>
<value>Auto-Ausfüllen wird für blockierte URIs nicht angeboten. Trenne mehrere URIs mit einem Komma. Beispiel: "https://twitter.com, androidapp://com.twitter.android".</value>
</data>
<data name="AskToAddLogin" xml:space="preserve">
<value>Nach dem Hinzufügen von Zugangsdaten fragen</value>
<value>Danach fragen Zugangsdaten hinzuzufügen</value>
</data>
<data name="AskToAddLoginDescription" xml:space="preserve">
<value>Nach dem Hinzufügen eines Eintrags fragen, wenn dieser nicht in deinem Tresor gefunden wurde.</value>
<value>Wenn ein Eintrag nicht in deinem Tresor gefunden wurde, danach fragen.</value>
</data>
<data name="OnRestart" xml:space="preserve">
<value>Beim Neustart der App</value>
</data>
<data name="AutofillServiceNotEnabled" xml:space="preserve">
<value>Auto-Ausfüllen vereinfacht es, sicher auf deinen Bitwarden Tresor über andere Webseiten und Apps zuzugreifen. Es sieht aus, als ob du den Auto-Ausfüllen-Dienst für Bitwarden nicht eingerichtet hast. Richte Auto-Ausfüllen in den "Einstellungen" ein.</value>
<value>Automatisches Ausfüllen vereinfacht es, sicher auf deinen Bitwarden Tresor über andere Webseiten und Apps zuzugreifen. Es sieht aus, als ob du den automatischen Ausfülldienst für Bitwarden nicht aktiviert hast. Aktiviere automatisches Ausfüllen in der "Einstellungen" Ansicht.</value>
</data>
<data name="ThemeAppliedOnRestart" xml:space="preserve">
<value>Deine Änderungen am Aussehen der App werden beim nächsten Neustart der App angewendet.</value>
@@ -1608,7 +1608,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>ex. Uppercase the first character of a word.</comment>
</data>
<data name="IncludeNumber" xml:space="preserve">
<value>Ziffern einschließen</value>
<value>Ziffer hinzufügen</value>
</data>
<data name="Download" xml:space="preserve">
<value>Herunterladen</value>
@@ -1623,19 +1623,19 @@ Das Scannen erfolgt automatisch.</value>
<value>Deine Sitzung ist abgelaufen.</value>
</data>
<data name="BiometricsDirection" xml:space="preserve">
<value>Biometrische Verifizierung</value>
<value>Biometrische Daten zur Verifizierung nutzen.</value>
</data>
<data name="Biometrics" xml:space="preserve">
<value>Biometrie</value>
</data>
<data name="UseBiometricsToUnlock" xml:space="preserve">
<value>Biometrie zum Entsperren verwenden</value>
<value>Biometrische Daten zum Entsperren verwenden</value>
</data>
<data name="AccessibilityOverlayPermissionAlert" xml:space="preserve">
<value>Bitwarden braucht Aufmerksamkeit - Siehe "Bedienungshilfen zum automatischen Ausfüllen" in den Bitwarden-Einstellungen</value>
<value>Bitwarden braucht Aufmerksamkeit - Siehe "Auto-Fill-Bedienungshilfe" in den Bitwarden-Einstellungen</value>
</data>
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
<value>3. Gehe in den Android App-Einstellungen für Bitwarden zur Option "Über anderen Apps einblenden" (unter Erweitert) und tippe auf den Schalter, um die Overlay-Unterstützung zu aktivieren.</value>
<value>3. Gehe unter Android in den App-Einstellungen für Bitwarden zur Option "Über anderen Apps einblenden" (unter Erweitert) und tippe auf den Schalter, um die Overlay-Unterstützung zu aktivieren.</value>
</data>
<data name="OverlayPermission" xml:space="preserve">
<value>Berechtigung</value>
@@ -1659,13 +1659,13 @@ Das Scannen erfolgt automatisch.</value>
<value>Gib das Masterpasswort ein, um deine Tresordaten zu exportieren.</value>
</data>
<data name="SendVerificationCodeToEmail" xml:space="preserve">
<value>Einen Verifizierungscode an deine E-Mail-Adresse senden</value>
<value>Einen Bestätigungscode an deine E-Mail senden</value>
</data>
<data name="CodeSent" xml:space="preserve">
<value>Code gesendet!</value>
</data>
<data name="ConfirmYourIdentity" xml:space="preserve">
<value>Verifiziere deine Identität, um fortzufahren.</value>
<value>Bestätige deine Identität, um fortzufahren.</value>
</data>
<data name="ExportVaultWarning" xml:space="preserve">
<value>Dieser Export enthält deine Tresordaten in einem unverschlüsseltem Format. Du solltest sie nicht speichern oder über unsichere Kanäle (z. B. E-Mail) senden. Lösche sie sofort nach ihrer Verwendung.</value>
@@ -1707,7 +1707,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Anhang erfolgreich gespeichert</value>
</data>
<data name="AutofillTileAccessibilityRequired" xml:space="preserve">
<value>Bitte aktiviere "Bedienungshilfen zum automatischen Ausfüllen" in den Bitwarden-Einstellungen, um die Auto-Ausfüllen-Kachel zu verwenden.</value>
<value>Bitte aktivieren Sie "Auto-Fill-Bedienungshilfe" in den Bitwarden-Einstellungen, um die Auto-Fill-Kachel zu verwenden.</value>
</data>
<data name="AutofillTileUriNotFound" xml:space="preserve">
<value>Keine Passwortfelder erkannt</value>
@@ -1752,11 +1752,11 @@ Das Scannen erfolgt automatisch.</value>
<value>Soll dieser Eintrag wirklich in den Papierkorb verschoben werden?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometrie zum Entsperren ist für dieses Konto deaktiviert, bis das Master-Passwort verifiziert wurde.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometrisches Entsperren ist deaktiviert, bis das Master-Passwort eingegeben wurde.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Das Entsperren von Auto-Ausfüllen über Biometrie ist für dieses Konto deaktiviert, bis das Master-Passwort verifiziert wurde.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometrisches Entsperren für automatisches Ausfüllen ist deaktiviert, bis das Master-Passwort eingegeben wurde.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Synchronisation beim Aktualisieren aktivieren</value>
@@ -1765,10 +1765,10 @@ Das Scannen erfolgt automatisch.</value>
<value>Tresor durch Runterziehen Geste synchronisieren.</value>
</data>
<data name="LogInSso" xml:space="preserve">
<value>Enterprise Single-Sign-On</value>
<value>Enterprise Single Sign-On</value>
</data>
<data name="LogInSsoSummary" xml:space="preserve">
<value>Melde dich schnell über das Single Sign-on-Portal deiner Organisation an. Bitte gib die Organisationskennung ein, um zu beginnen.</value>
<value>Schnell über den Single Sign-on deiner Organisation anmelden. Bitte gib deine Organisationskennung an, um zu beginnen.</value>
</data>
<data name="OrgIdentifier" xml:space="preserve">
<value>Organisationskennung</value>
@@ -1777,7 +1777,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Anmeldung mit SSO derzeit nicht möglich</value>
</data>
<data name="SetMasterPassword" xml:space="preserve">
<value>Master-Passwort festlegen</value>
<value>Masterpasswort festlegen</value>
</data>
<data name="SetMasterPasswordSummary" xml:space="preserve">
<value>Bitte lege ein Masterpasswort für den Schutz deines Tresors fest, um die Anmeldung über SSO abzuschließen.</value>
@@ -1825,10 +1825,10 @@ Das Scannen erfolgt automatisch.</value>
<value>Datenschutzbestimmungen</value>
</data>
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
<value>Bitwarden braucht Aufmerksamkeit - Aktiviere "Überschreiben" im "Auto-Ausfüllen-Dienst" in den Bitwarden-Einstellungen</value>
<value>Bitwarden braucht Aufmerksamkeit - Aktiviere "Überschreiben" in dem "Auto-Ausfüllen-Dienst" in den Bitwarden-Einstellungen</value>
</data>
<data name="AutofillServices" xml:space="preserve">
<value>Auto-Ausfüllen-Dienst</value>
<value>Auto-Ausfüllen Dienst</value>
</data>
<data name="InlineAutofill" xml:space="preserve">
<value>Inline Auto-Ausfüllen verwenden</value>
@@ -1840,28 +1840,28 @@ Das Scannen erfolgt automatisch.</value>
<value>Bedienungshilfen verwenden</value>
</data>
<data name="AccessibilityDescription" xml:space="preserve">
<value>Verwende die Bitwarden Bedienungshilfe, um deine Zugangsdaten innerhalb von Apps und dem Web automatisch auszufüllen. Wenn aktiviert, werden wir ein Pop-up anzeigen, falls Anmeldefelder ausgewählt sind.</value>
<value>Verwende die Bitwarden Bedienungshilfe, um deine Zugangsdaten innerhalb von Apps und dem Web automatisch auszufüllen. Wenn aktiviert, werden wir ein Popup anzeigen, falls Login-Felder ausgewählt sind.</value>
</data>
<data name="AccessibilityDescription2" xml:space="preserve">
<value>Verwende die Bitwarden Bedienungshilfe, um deine Zugangsdaten in Apps und im Web automatisch auszufüllen. (Benötigt das Überschreiben ebenfalls aktiviert ist)</value>
<value>Verwende die Bitwarden Bedienungshilfe, um deine Zugangsdaten in Apps und im Web automatisch auszufüllen. (Benötigt das Überschreiben ebenfalls aktiviertes ist)</value>
</data>
<data name="AccessibilityDescription3" xml:space="preserve">
<value>Verwende die Bitwarden Bedienungshilfe, um die Auto-Ausfüllen-Schnellaktionskachel zu verwenden und/oder ein Pop-up mit Überschreiben anzuzeigen (wenn aktiviert).</value>
<value>Verwende die Bitwarden Bedienungshilfe, um die Auto-Ausfüllen Schnellaktionskachel zu verwenden und/oder ein Popup mit Überschreiben anzuzeigen (wenn aktiviert).</value>
</data>
<data name="AccessibilityDescription4" xml:space="preserve">
<value>Benötigt, um die Auto-Ausfüllen-Schnellaktionskachel zu verwenden oder um die Auto-Ausfüllen-Funktion durch Überschreiben (falls aktiviert) zu ermöglichen.</value>
<value>Benötigt um die Auto-Ausfüllen Schnellaktionskachel zu verwenden oder um den Auto-Ausfüllen Service durch Überschreiben(falls aktiviert) zu ermöglichen.</value>
</data>
<data name="DrawOver" xml:space="preserve">
<value>Überschreiben verwenden</value>
</data>
<data name="DrawOverDescription" xml:space="preserve">
<value>Erlaubt es der Bitwarden Bedienungshilfe ein Pop-up anzuzeigen, wenn Anmeldefelder ausgewählt sind.</value>
<value>Falls aktiviert, erlaubt es der Bitwarden Bedienungshilfe ein Popup anzuzeigen, wenn Anmeldefelder ausgewählt sind.</value>
</data>
<data name="DrawOverDescription2" xml:space="preserve">
<value>Wenn aktiviert, wird die Bitwarden Bedienungshilfe ein Pop-up anzeigen, falls Anmeldefelder ausgewählt sind, um bei der automatischen Ausfüllung deiner Zugangsdaten zu helfen.</value>
<value>Wenn aktiviert, wird die Bitwarden Bedienungshilfe, falls Anmeldefelder ausgewählt sind, ein Popup anzeigen, um bei der automatischen Ausfüllung deiner Zugangsdaten zu helfen.</value>
</data>
<data name="DrawOverDescription3" xml:space="preserve">
<value>Wenn aktiviert, wird die Bedienungshilfe ein Pop-up anzeigen, um das automatische Ausfüllen in älteren Apps zu ermöglichen, die das Android Autofill Framework nicht unterstützen.</value>
<value>Wenn aktiviert, wird die Bedienungshilfe ein Popup anzeigen, um das automatische Ausfüllen in älteren Anwendungen zu ermöglichen, die das Android Auto-Ausfüllen Framework nicht unterstützen. </value>
</data>
<data name="PersonalOwnershipSubmitError" xml:space="preserve">
<value>Aufgrund einer Unternehmensrichtlinie darfst du keine Einträge in deinem persönlichen Tresor speichern. Ändere die Eigentümer-Option in eine Organisation und wähle aus den verfügbaren Sammlungen.</value>
@@ -1933,7 +1933,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Ablaufdatum</value>
</data>
<data name="ExpirationTime" xml:space="preserve">
<value>Ablaufzeitpunkt</value>
<value>Ablaufzeit</value>
</data>
<data name="ExpirationDateInfo" xml:space="preserve">
<value>Falls aktiviert, verfällt der Zugriff auf diesen Send zur angegebenen Datum und Uhrzeit.</value>
@@ -2009,7 +2009,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="AddSend" xml:space="preserve">
<value>Neues Send</value>
<value>Send hinzufügen</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="AreYouSureDeleteSend" xml:space="preserve">
@@ -2017,11 +2017,11 @@ Das Scannen erfolgt automatisch.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="SendDeleted" xml:space="preserve">
<value>Send gelöscht</value>
<value>Send wurde gelöscht</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="SendUpdated" xml:space="preserve">
<value>Send gespeichert</value>
<value>Send aktualisiert</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="NewSendCreated" xml:space="preserve">
@@ -2070,7 +2070,7 @@ Das Scannen erfolgt automatisch.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="SendFileEmailVerificationRequired" xml:space="preserve">
<value>Du musst deine E-Mail-Adresse verifizieren, um Dateien mit Send zu verwenden. Du kannst deine E-Mail-Adresse im Web-Tresor verifizieren.</value>
<value>Du musst deine E-Mail verifizieren, um Dateien mit Send zu verwenden. Du kannst deine E-Mail im Web-Tresor verifizieren.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="PasswordPrompt" xml:space="preserve">
@@ -2080,7 +2080,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Master-Passwort bestätigen</value>
</data>
<data name="PasswordConfirmationDesc" xml:space="preserve">
<value>Diese Aktion ist geschützt. Um fortzufahren, gib bitte dein Master-Passwort erneut ein, um deine Identität zu verifizieren.</value>
<value>Diese Aktion ist geschützt. Um fortzufahren, gib bitte dein Master-Passwort erneut ein, um deine Identität zu bestätigen.</value>
</data>
<data name="CaptchaRequired" xml:space="preserve">
<value>Captcha erforderlich</value>
@@ -2095,7 +2095,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Master-Passwort aktualisieren</value>
</data>
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
<value>Dein Master-Passwort wurde kürzlich von einem Administrator deiner Organisation geändert. Um auf den Tresor zuzugreifen, musst du dein Master-Passwort jetzt aktualisieren. Wenn Du fortfährst, wirst du aus der aktuellen Sitzung abgemeldet und eine erneute Anmeldung ist erforderlich. Aktive Sitzungen auf anderen Geräten können bis zu einer Stunde weiterhin aktiv bleiben.</value>
<value>Dein Master-Passwort wurde kürzlich von einem Administrator Deiner Organisation geändert. Um auf den Tresor zuzugreifen, musst Du Dein Master-Passwort jetzt aktualisieren. Wenn Du fortfährst, wirst Du aus der aktuellen Sitzung abgemeldet und wirst Dich erneut anmelden müssen. Aktive Sitzungen auf anderen Geräten können bis zu einer Stunde weiterhin aktiv bleiben.</value>
</data>
<data name="UpdatingPassword" xml:space="preserve">
<value>Passwort wird aktualisiert</value>
@@ -2122,13 +2122,13 @@ Das Scannen erfolgt automatisch.</value>
<value>FIDO2 WebAuthn</value>
</data>
<data name="Fido2Instruction" xml:space="preserve">
<value>Um fortzufahren, halte deinen FIDO2 WebAuthn-kompatiblen Sicherheitsschlüssel bereit und folge dann den Anweisungen, nachdem du auf der nächsten Seite auf 'WebAuthn authentifizieren' geklickt hast.</value>
<value>Um fortzufahren, halte deinen FIDO2 WebAuthn kompatiblen Sicherheitsschlüssel bereit und folge dann den Anweisungen, nachdem du auf der nächsten Seite auf 'Authentifiziere WebAuthn' geklickt hast.</value>
</data>
<data name="Fido2Desc" xml:space="preserve">
<value>Authentifizierung mit FIDO2 WebAuthn. Du kannst dich mit einem externen Sicherheitsschlüssel authentifizieren.</value>
<value>Authentifizierung mit FIDO2 WebAuthn, du kannst dich mit einem externen Sicherheitsschlüssel authentifizieren.</value>
</data>
<data name="Fido2AuthenticateWebAuthn" xml:space="preserve">
<value>WebAuthn authentifizieren</value>
<value>Authentifiziere WebAuthn</value>
</data>
<data name="Fido2ReturnToApp" xml:space="preserve">
<value>Zurück zur App</value>
@@ -2137,21 +2137,15 @@ Das Scannen erfolgt automatisch.</value>
<value>Bitte stelle sicher, dass dein Standardbrowser WebAuthn unterstützt und versuche es erneut.</value>
</data>
<data name="ResetPasswordAutoEnrollInviteWarning" xml:space="preserve">
<value>Diese Organisation hat eine Unternehmensrichtlinie, die dich automatisch für die Passwortzurücksetzung registriert. Die Registrierung wird es Administratoren der Organisation erlauben, dein Master-Passwort zu ändern.</value>
<value>Diese Organisation hat eine Unternehmensrichtlinie, die dich automatisch für die Passwort Zurücksetzung registriert. Die Registrierung wird es Administratoren der Organisation erlauben, dein Master-Passwort zu ändern.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Deine Unternehmensrichtlinien haben das maximal zulässige Tresor-Timeout auf {0} Stunde(n) und {1} Minute(n) festgelegt.</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Deine Organisationsrichtlinien beeinflussen dein Tresor-Timeout. Das maximal zulässige Tresor-Timeout beträgt {0} Stunde(n) und {1} Minute(n). Deine Tresor-Timeout-Aktion ist auf {2} gesetzt.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Deine Organisationsrichtlinien haben deine Tresor-Timeout-Aktion auf {0} gesetzt.</value>
<value>Deine Organisationsrichtlinien haben Auswirkungen auf dein Tresor-Timeout. Das maximal zulässige Tresor-Timeout beträgt {0} Stunde(n) und {1} Minute(n)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Dein Tresor-Timeout überschreitet die von deinem Unternehmen festgelegten Beschränkungen.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Eine oder mehrere Unternehmensrichtlinien verhindern es, dass du deinen persönlichen Tresor exportieren kannst.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2164,7 +2158,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Gesperrt</value>
</data>
<data name="AccountLoggedOut" xml:space="preserve">
<value>Abgemeldet</value>
<value>Ausgeloggt</value>
</data>
<data name="AccountSwitchedAutomatically" xml:space="preserve">
<value>Zum nächsten verfügbaren Konto gewechselt</value>
@@ -2188,7 +2182,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Dein Konto und alle damit verbundenen Daten werden gelöscht und sind nicht wiederherstellbar. Bist du sicher, dass du fortfahren möchtest?</value>
</data>
<data name="DeletingYourAccount" xml:space="preserve">
<value>Dein Konto wird gelöscht</value>
<value>Löschen deines Kontos</value>
</data>
<data name="YourAccountHasBeenPermanentlyDeleted" xml:space="preserve">
<value>Dein Konto wurde unwiderruflich gelöscht</value>
@@ -2200,19 +2194,19 @@ Das Scannen erfolgt automatisch.</value>
<value>Einmalpasswort anfordern</value>
</data>
<data name="SendCode" xml:space="preserve">
<value>Code senden</value>
<value>Send Code</value>
</data>
<data name="Sending" xml:space="preserve">
<value>Wird gesendet</value>
<value>Sende</value>
</data>
<data name="CopySendLinkOnSave" xml:space="preserve">
<value>Send-Link beim Speichern kopieren</value>
<value>Send Link beim Speichern kopieren</value>
</data>
<data name="SendingCode" xml:space="preserve">
<value>Code wird gesendet</value>
<value>Sende code</value>
</data>
<data name="Verifying" xml:space="preserve">
<value>Wird verifiziert</value>
<value>Überprüfen</value>
</data>
<data name="ResendCode" xml:space="preserve">
<value>Code erneut senden</value>
@@ -2224,7 +2218,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Beim Senden des Bestätigungscodes an deine E-Mail-Adresse ist ein Fehler aufgetreten. Bitte versuche es erneut</value>
</data>
<data name="EnterTheVerificationCodeThatWasSentToYourEmail" xml:space="preserve">
<value>Gib den Verifizierungscode ein, der an deine E-Mail-Adresse gesendet wurde</value>
<value>Gib den Bestätigungscode ein, der an deine E-Mail-Adresse gesendet wurde</value>
</data>
<data name="SubmitCrashLogs" xml:space="preserve">
<value>Absturzprotokolle senden</value>
@@ -2233,10 +2227,10 @@ Das Scannen erfolgt automatisch.</value>
<value>Hilf Bitwarden die Stabilität der App zu verbessern, indem du Absturzberichte sendest.</value>
</data>
<data name="OptionsExpanded" xml:space="preserve">
<value>Optionen sind ausgeklappt, tippen zum Einklappen.</value>
<value>Optionen sind ausgeklappt, tippen zum einklappen.</value>
</data>
<data name="OptionsCollapsed" xml:space="preserve">
<value>Optionen sind eingeklappt, tippe zum Ausklappen.</value>
<value>Optionen sind eingeklappt, tippe zum ausklappen.</value>
</data>
<data name="UppercaseAtoZ" xml:space="preserve">
<value>Großbuchstaben (A bis Z)</value>
@@ -2260,7 +2254,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Passwort ist nicht sichtbar, tippen um es einzublenden.</value>
</data>
<data name="FilterByVault" xml:space="preserve">
<value>Einträge nach Tresor filtern</value>
<value>Objekte nach Tresor filtern</value>
</data>
<data name="AllVaults" xml:space="preserve">
<value>Alle Tresore</value>
@@ -2290,7 +2284,7 @@ Das Scannen erfolgt automatisch.</value>
<value>QR Code scannen</value>
</data>
<data name="CannotScanQRCode" xml:space="preserve">
<value>QR-Code kann nicht gescannt werden? </value>
<value>QR Code kann nicht gescannt werden? </value>
</data>
<data name="AuthenticatorKeyScanner" xml:space="preserve">
<value>Authentifizierungsschlüssel</value>
@@ -2311,7 +2305,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Wenn du deine Sperroptionen auf „Nie“ einstellst, bleibt dein Tresor für jeden zugänglich, der Zugriff auf dein Gerät hat. Wenn du diese Option verwendest, solltest du sicherstellen, dass du dein Gerät angemessen schützt.</value>
</data>
<data name="EnvironmentPageUrlsError" xml:space="preserve">
<value>Eine oder mehrere der eingegebenen URLs sind ungültig. Bitte überarbeite diese und versuche erneut zu speichern.</value>
<value>Eine oder mehrere der eingegebenen URLs sind ungültig. Bitte überprüfe sie und versuche erneut zu speichern.</value>
</data>
<data name="GenericErrorMessage" xml:space="preserve">
<value>Wir konnten deine Anfrage nicht bearbeiten. Bitte versuche es erneut oder kontaktiere uns.</value>
@@ -2329,7 +2323,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Versuchst du dich anzumelden?</value>
</data>
<data name="LogInAttemptByXOnY" xml:space="preserve">
<value>Anmeldeversuch von {0} auf {1}</value>
<value>Anmeldeversuch von {0} am {1}</value>
</data>
<data name="DeviceType" xml:space="preserve">
<value>Gerätetyp</value>
@@ -2344,22 +2338,22 @@ Das Scannen erfolgt automatisch.</value>
<value>Nahe</value>
</data>
<data name="ConfirmLogIn" xml:space="preserve">
<value>Anmeldung genehmigen</value>
<value>Anmeldung bestätigen</value>
</data>
<data name="DenyLogIn" xml:space="preserve">
<value>Anmeldung ablehnen</value>
<value>Anmeldung verweigern</value>
</data>
<data name="JustNow" xml:space="preserve">
<value>Gerade eben</value>
</data>
<data name="XMinutesAgo" xml:space="preserve">
<value>vor {0} Minuten</value>
<value>vor {0} Minute(n)</value>
</data>
<data name="LogInAccepted" xml:space="preserve">
<value>Anmeldung genehmigt</value>
<value>Anmeldung bestätigt</value>
</data>
<data name="LogInDenied" xml:space="preserve">
<value>Anmeldung abgelehnt</value>
<value>Anmeldung verweigert</value>
</data>
<data name="ApproveLoginRequests" xml:space="preserve">
<value>Anmeldeanfragen genehmigen</value>
@@ -2374,7 +2368,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Push-Benachrichtigungen für neue Anmeldeanfragen erhalten</value>
</data>
<data name="NoThanks" xml:space="preserve">
<value>Nein danke</value>
<value>Nein, danke</value>
</data>
<data name="ConfimLogInAttempForX" xml:space="preserve">
<value>Anmeldeversuch für {0} bestätigen</value>
@@ -2389,10 +2383,10 @@ Das Scannen erfolgt automatisch.</value>
<value>Was möchtest du generieren?</value>
</data>
<data name="UsernameType" xml:space="preserve">
<value>Benutzernamenstyp</value>
<value>Benutzernamentyp</value>
</data>
<data name="PlusAddressedEmail" xml:space="preserve">
<value>Plus-adressierte E-Mail-Adresse</value>
<value>Mit Plus adressierte E-Mail</value>
</data>
<data name="CatchAllEmail" xml:space="preserve">
<value>Catch-All E-Mail-Adresse</value>
@@ -2407,7 +2401,7 @@ Das Scannen erfolgt automatisch.</value>
<value>E-Mail (erforderlich)</value>
</data>
<data name="DomainNameRequiredParenthesis" xml:space="preserve">
<value>Domainname (erforderlich)</value>
<value>Domain-Name (erforderlich)</value>
</data>
<data name="APIKeyRequiredParenthesis" xml:space="preserve">
<value>API-Schlüssel (erforderlich)</value>
@@ -2436,13 +2430,13 @@ Das Scannen erfolgt automatisch.</value>
<comment>"Fastmail" is the product name and should not be translated.</comment>
</data>
<data name="APIAccessToken" xml:space="preserve">
<value>API-Zugriffstoken</value>
<value>API-Zugangs-Token</value>
</data>
<data name="AreYouSureYouWantToOverwriteTheCurrentUsername" xml:space="preserve">
<value>Bist Du sicher, dass Du den aktuellen Benutzernamen überschreiben möchtest?</value>
</data>
<data name="GenerateUsername" xml:space="preserve">
<value>Benutzername generieren</value>
<value>Benutzernamen generieren</value>
</data>
<data name="EmailType" xml:space="preserve">
<value>E-Mail-Typ</value>
@@ -2472,7 +2466,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Bedienungshilfen Offenlegung</value>
</data>
<data name="AccessibilityDisclosureText" xml:space="preserve">
<value>Bitwarden verwendet die Bedienungshilfen, um nach Anmeldefeldern in Apps und auf Webseiten zu suchen und legt dann die entsprechenden Feld-IDs fest, um einen Benutzernamen und Passwort einzugeben, wenn eine Übereinstimmung mit der App oder der Seite gefunden wird. Wir speichern keine der Informationen, die uns der Dienst zur Verfügung stellt. Ebenso wenig versuchen wir beliebige Elemente auf dem Bildschirm außer der Texteingabe von Anmeldedaten zu kontrollieren.</value>
<value>Bitwarden verwendet die Bedienungshilfen, um nach Anmeldefeldern in Apps und Webseiten zu suchen und legt dann die entsprechenden Feld-IDs fest, um Benutzername und Passwort einzugeben, wenn eine Übereinstimmung mit der App oder der Seite gefunden wird. Wir speichern keine der Informationen, die uns der Dienst zur Verfügung stellt. Ebenso wenig versuchen wir beliebige Elemente auf dem Bildschirm außer der Texteingabe von Anmeldedaten zu kontrollieren.</value>
</data>
<data name="Accept" xml:space="preserve">
<value>Akzeptieren</value>
@@ -2504,10 +2498,10 @@ Möchtest du zu diesem Konto wechseln?</value>
<value>Mit Master-Passwort anmelden</value>
</data>
<data name="LogInWithAnotherDevice" xml:space="preserve">
<value>Mit Gerät anmelden</value>
<value>Mit einem anderen Gerät anmelden</value>
</data>
<data name="LogInInitiated" xml:space="preserve">
<value>Anmeldung eingeleitet</value>
<value>Anmeldung initiiert</value>
</data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Eine Benachrichtigung wurde an dein Gerät gesendet.</value>
@@ -2522,7 +2516,7 @@ Möchtest du zu diesem Konto wechseln?</value>
<value>Brauchst du eine andere Option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Alle Anmeldeoptionen anzeigen</value>
<value>Alle Anmelde-Optionen anzeigen</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Diese Anfrage ist nicht mehr gültig</value>
@@ -2543,19 +2537,7 @@ Möchtest du zu diesem Konto wechseln?</value>
<value>Keine ausstehenden Anfragen</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Kamerazugriff gewähren, um den Scanner zu verwenden</value>
</data>
<data name="Language" xml:space="preserve">
<value>Sprache</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Die Sprache wurde auf {0} geändert. Bitte starte die App neu, um die Änderung zu sehen</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Sprachänderung erfordert einen App-Neustart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Standard (System)</value>
<value>Kamerazugriff aktivieren, um den Scanner zu verwenden</value>
</data>
<data name="Important" xml:space="preserve">
<value>Wichtig</value>
@@ -2593,25 +2575,4 @@ Möchtest du zu diesem Konto wechseln?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Schwaches Passwort erkannt und in einem Datendiebstahl gefunden. Verwende ein starkes und einzigartiges Passwort, um dein Konto zu schützen. Bist du sicher, dass du dieses Passwort verwenden möchtest?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>SSO-Kennung der Organisation erforderlich.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Den Schlüssel zu einem bestehenden oder neuen Eintrag hinzufügen</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Es gibt keine Einträge in deinem Tresor, die mit "{0}" übereinstimmen</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Nach einem Eintrag suchen oder einen neuen Eintrag hinzufügen</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Es gibt keine Einträge, die mit der Suche übereinstimmen</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Dein Master-Passwort entspricht nicht einer oder mehreren Richtlinien deiner Organisation. Um auf den Tresor zugreifen zu können, musst du dein Master-Passwort jetzt aktualisieren. Wenn du fortfährst, wirst du von deiner aktuellen Sitzung abgemeldet und musst dich erneut anmelden. Aktive Sitzungen auf anderen Geräten können noch bis zu einer Stunde lang aktiv bleiben.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Aktuelles Master-Passwort</value>
</data>
</root>

View File

@@ -584,8 +584,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Η υπόδειξη κύριου κωδικού μπορεί να σας βοηθήσει να θυμηθείτε τον κωδικό σας αν τον ξεχάσετε.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Ο κύριος κωδικός πρέπει να έχει μήκος τουλάχιστον {0} χαρακτήρες.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Ο κύριος κωδικός πρέπει να έχει μήκος τουλάχιστον 8 χαρακτήρων.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Ελάχιστα Αριθμητικά Ψηφία</value>
@@ -1104,7 +1104,7 @@
<value>Κα</value>
</data>
<data name="Mx" xml:space="preserve">
<value>Mx στα Ελληνικά</value>
<value>Mx</value>
</data>
<data name="November" xml:space="preserve">
<value>Νοέμβριος</value>
@@ -1752,11 +1752,11 @@
<value>Θέλετε πραγματικά να στείλετε στον κάδο απορριμμάτων;</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Εντοπίστηκε βιομετρική αλλαγή, συνδεθείτε χρησιμοποιώντας τον κύριο κωδικό πρόσβασης για ενεργοποίηση ξανά.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Το βιομετρικό ξεκλείδωμα για αυτόματη συμπλήρωση απενεργοποιήθηκε εν αναμονή της επαλήθευσης του κύριου κωδικού πρόσβασης.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Ενεργοποίηση συγχρονισμού κατά την ανανέωση</value>
@@ -2142,16 +2142,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Οι πολιτικές του οργανισμού σας επηρεάζουν το χρονικό όριο vault σας. Το μέγιστο επιτρεπόμενο Χρονικό όριο Vault είναι {0} ώρα(ες) και {1} λεπτό(ά)</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Το χρονικό όριο του vault σας υπερβαίνει τους περιορισμούς που έχει ορίσει ο οργανισμός σας.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Μία ή περισσότερες οργανωτικές πολιτικές αποτρέπουν την εξαγωγή του προσωπικού vault.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2485,12 +2479,12 @@
<value>Το αίτημα σύνδεσης έχει ήδη λήξει.</value>
</data>
<data name="LoginAttemptFromXDoYouWantToSwitchToThisAccount" xml:space="preserve">
<value>Προσπάθεια σύνδεσης από:
<value>Login attempt from:
{0}
Θέλετε να μεταβείτε σε αυτόν τον λογαριασμό;</value>
Do you want to switch to this account?</value>
</data>
<data name="NewAroundHere" xml:space="preserve">
<value>Είστε νέος/α εδώ;</value>
<value>New around here?</value>
</data>
<data name="GetMasterPasswordwordHint" xml:space="preserve">
<value>Λάβετε υπόδειξη κύριου κωδικού</value>
@@ -2514,61 +2508,49 @@
<value>Μια ειδοποίηση έχει σταλεί στη συσκευή σας.</value>
</data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>Βεβαιωθείτε ότι το vault σας είναι ξεκλείδωτο και ότι η Φράση δακτυλικών αποτυπωμάτων ταιριάζει στην άλλη συσκευή.</value>
<value>Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device.</value>
</data>
<data name="ResendNotification" xml:space="preserve">
<value>Επαναποστολή ειδοποίησης</value>
<value>Resend notification</value>
</data>
<data name="NeedAnotherOption" xml:space="preserve">
<value>Προσθέστε μια άλλη επιλογή</value>
<value>Need another option?</value>
</data>
<data name="ViewAllLoginOptions" xml:space="preserve">
<value>Δείτε όλες τις επιλογές σύνδεσης</value>
<value>View all log in options</value>
</data>
<data name="ThisRequestIsNoLongerValid" xml:space="preserve">
<value>Αυτό το αίτημα δεν είναι πλέον έγκυρο</value>
<value>This request is no longer valid</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>Εκκρεμούν αιτήματα σύνδεσης</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Απόρριψη όλων των αιτημάτων</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>Είστε σίγουροι ότι θέλετε να απορρίψετε όλα τα εκκρεμή αιτήματα σύνδεσης;</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Τα αιτήματα απορρίφθηκαν</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>Δεν υπάρχουν εκκρεμή αιτήματα</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Ενεργοποιήστε την άδεια της κάμερας για χρήση του σαρωτή</value>
</data>
<data name="Language" xml:space="preserve">
<value>Γλώσσα</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Η γλώσσα έχει αλλάξει σε {0}. Παρακαλούμε επανεκκινήστε την εφαρμογή για να δείτε την αλλαγή</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Η αλλαγή γλώσσας απαιτεί επανεκκίνηση της εφαρμογής</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Προεπιλογή (σύστημα)</value>
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Important" xml:space="preserve">
<value>Σημαντικό</value>
</data>
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
<value>Ο κύριος κωδικός δεν μπορεί να ανακτηθεί αν τον ξεχάσετε! Απαιτούνται τουλάχιστον {0} χαρακτήρες.</value>
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
</data>
<data name="WeakMasterPassword" xml:space="preserve">
<value>Αδύναμος Κύριος Κωδικός</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>Αδύναμος κωδικός. Χρησιμοποιήστε έναν ισχυρό κωδικό για την προστασία του λογαριασμού σας. Είστε βέβαιοι ότι θέλετε να χρησιμοποιήσετε έναν αδύναμο κωδικό πρόσβασης;</value>
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
</data>
<data name="Weak" xml:space="preserve">
<value>Αδύναμος</value>
@@ -2580,39 +2562,18 @@
<value>Ισχυρός</value>
</data>
<data name="CheckKnownDataBreachesForThisPassword" xml:space="preserve">
<value>Ελέγξτε γνωστές παραβιάσεις δεδομένων για αυτόν τον κωδικό</value>
<value>Check known data breaches for this password</value>
</data>
<data name="ExposedMasterPassword" xml:space="preserve">
<value>Εκτεθειμένος Κύριος Κωδικός Πρόσβασης</value>
</data>
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Ο κωδικός έχει βρεθεί σε παραβίαση δεδομένων. Χρησιμοποιήστε έναν μοναδικό κωδικό για την προστασία του λογαριασμού σας. Είστε σίγουροι ότι θέλετε να χρησιμοποιήσετε έναν εκτεθειμένο κωδικό πρόσβασης;</value>
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
</data>
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
<value>Αδύναμος και Εκτεθειμένος Κύριος Κωδικός</value>
<value>Weak and Exposed Master Password</value>
</data>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Αδύναμος κωδικός που έχει εντοπιστεί σε παραβίαση δεδομένων. Χρησιμοποιήστε έναν ισχυρό και μοναδικό κωδικό για την προστασία του λογαριασμού σας. Είστε σίγουροι ότι θέλετε να χρησιμοποιήσετε αυτόν τον κωδικό;</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Απαιτείται αναγνωριστικό οργανισμού SSO.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Προσθέστε το κλειδί σε ένα υπάρχον ή νέο στοιχείο</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Δεν υπάρχουν αντικείμενα στη κρύπτη σας που ταιριάζουν με "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Αναζητήστε ένα στοιχείο ή προσθέστε ένα νέο</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Δεν υπάρχουν στοιχεία που να ταιριάζουν με την αναζήτηση</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>A master password hint can help you remember your password if you forget it.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Master password must be at least 8 characters long.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Minimum numbers</value>
@@ -1752,11 +1752,11 @@ Scanning will happen automatically.</value>
<value>Do you really want to send to the bin?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometric unlock disabled pending verification of master password.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometric unlock for autofill disabled pending verification of master password.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Allow sync on refresh</value>
@@ -2137,21 +2137,15 @@ Scanning will happen automatically.</value>
<value>Please make sure your default browser supports WebAuthn and try again.</value>
</data>
<data name="ResetPasswordAutoEnrollInviteWarning" xml:space="preserve">
<value>This organisation has an enterprise policy that will automatically enrol you in password reset. Enrolment will allow organisation administrators to change your master password.</value>
<value>This organisation has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organisation administrators to change your master password.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Your organisation policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Your vault timeout exceeds the restrictions set by your organisation.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>One or more organisation policies prevents your from exporting your individual vault.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2546,18 +2540,6 @@ Do you want to switch to this account?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2594,25 +2576,4 @@ Do you want to switch to this account?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organisation SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>A master password hint can help you remember your password if you forget it.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Master password must be at least 8 characters long.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Minimum numbers</value>
@@ -1579,7 +1579,7 @@ Scanning will happen automatically.</value>
<comment>'Nord' is the name of a specific color scheme. It should not be translated.</comment>
</data>
<data name="SolarizedDark" xml:space="preserve">
<value>Solarised Dark</value>
<value>Solarized Dark</value>
<comment>'Solarized Dark' is the name of a specific color scheme. It should not be translated.</comment>
</data>
<data name="AutofillBlockedUris" xml:space="preserve">
@@ -1752,11 +1752,11 @@ Scanning will happen automatically.</value>
<value>Do you really want to send to the bin?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometric change detected, login using master password to enable again.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometric unlock for autofill disabled pending verification of master password.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Enable sync on refresh</value>
@@ -2156,16 +2156,10 @@ Scanning will happen automatically.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Your vault timeout exceeds the restrictions set by your organization.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>One or more organization policies prevents your from exporting your individual vault.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2560,18 +2554,6 @@ Do you want to switch to this account?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2579,7 +2561,7 @@ Do you want to switch to this account?</value>
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
</data>
<data name="WeakMasterPassword" xml:space="preserve">
<value>Weak master password</value>
<value>Weak Master Password</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
@@ -2608,25 +2590,4 @@ Do you want to switch to this account?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Una pista de tu contraseña maestra puede ayudarte a recordarla en caso de que la olvides.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>La contraseña maestra debe tener al menos {0} caracteres.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>La contraseña maestra debe tener al menos 8 caracteres.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Mínimo de caracteres numéricos</value>
@@ -1752,11 +1752,11 @@ El escaneo se realizará automáticamente.</value>
<value>¿Seguro que quieres enviarlo a la papelera?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>El desbloqueo biométrico para esta cuenta está deshabilitado hasta que se verifique la contraseña maestra.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Se ha detectado un cambio biométrico, inicie sesión usando la contraseña maestra para volver a activarlo.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>El desbloqueo biométrico para autorrelleno de esta cuenta está deshabilitado hasta que realice la verificación de la contraseña maestra.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Desbloqueo biométrico para autorrellenar desactivado hasta la verificación de la contraseña maestra.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Habilitar sincronización al actualizar</value>
@@ -2142,16 +2142,10 @@ El escaneo se realizará automáticamente.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Las políticas de su organización están afectando el tiempo de espera de tu caja fuerte. El máximo permitido de tiempo de espera es {0} hora(s) y {1} minuto(s)</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Las políticas de tu organización están afectando el tiempo de espera de tu caja fuerte. El tiempo máximo permitido para la bóveda es de {0} hora(s) y de {1} minuto(s). Su acción de tiempo de espera de la bóveda se ha establecido en {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Las políticas de su organización han establecido la acción de tiempo de espera de su caja fuerte a {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>El tiempo de espera de tu caja fuerte excede las restricciones establecidas por tu organización.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Una o más políticas de organización impiden que usted exporte su caja fuerte personal.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2530,35 +2524,23 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<value>Esta solicitud ya no es válida</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>Solicitudes de acceso pendientes</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Rechazar todas las solicitudes</value>
<value>Decline all requests</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>¿Está seguro de que desea rechazar todas las solicitudes de inicio de sesión pendientes?</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Solicitudes rechazadas</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>No hay solicitudes pendientes</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Habilitar el permiso de la cámara para usar el escáner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Idioma</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>El idioma se ha cambiado a {0}. Por favor, reinicia la aplicación para aplicar los cambios</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>El cambio de idioma requiere reiniciar la aplicación</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Por defecto (Sistema)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Importante</value>
</data>
@@ -2595,25 +2577,4 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Contraseña débil encontrada en una violación de datos. Utilice una contraseña única para proteger su cuenta. ¿Está seguro de que desea utilizar una contraseña comprometida?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Se requiere un inicio de sesión único de la organización.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Añadir la clave a un elemento existente o nuevo</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>No hay artículos en su caja fuerte que coincidan con "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Buscar un elemento o añadir uno nuevo</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>No hay elementos que coincidan con la búsqueda</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Su contraseña maestra no cumple con una o más de las políticas de su organización. Para acceder a la caja fuerte, debe actualizar su contraseña maestra ahora. Proceder le desconectará de su sesión actual, requiriendo que vuelva a iniciar sesión. Las sesiones activas en otros dispositivos pueden seguir estando activas durante hasta una hora.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Contraseña maestra actual</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Vihje võib abiks olla olukorras, kui oled ülemparooli unustanud.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Ülemparool peab olema vähemalt {0} tähemärgi pikkune.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Ülemparool peab olema vähemalt 8 tähemärgi pikkune.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Vähim arv numbreid</value>
@@ -1752,11 +1752,11 @@ Skaneerimine toimub automaatselt.</value>
<value>Oled kindel, et soovid kirje(d) prügikasti teisaldada?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biomeetriaga lahtilukustamine on keelatud. Oodatakse ülemparooli sisestamist.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Automaattäite kinnitamine läbi biomeetria on keelatud. Oodatakse ülemparooli sisestamist.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Automaattäite ja biomeetrilise avamise kasutamine on keelatud. Oodatakse ülemprooli sisestamist.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Automaattäite kinnitamine läbi biomeetria on keelatud. Oodatakse ülemparooli sisestamist.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Luba allatõmbel sünkroniseerimine</value>
@@ -2140,18 +2140,12 @@ Skaneerimine toimub automaatselt.</value>
<value>Selle organisatsiooni poliitika kohaselt liidetakse sind automaatselt ülemparooli lähtestamise funktsiooniga. Liitumisel saavad organisatsiooni administraatorid sinu ülemparooli muuta.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Organisatsiooni poliitikad mõjutavad sinu hoidla ajalõppu. Maksimaalne lubatud hoidla ajalõpp on {0} tund(i) ja {1} minut(it).</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Organisatsiooni poliitikad mõjutavad sinu hoidla ajalõppu. Maksimaalne lubatud hoidla ajalõpp on {0} tund(i) ja {1} minut(it). Sinu hoidla ajalõpu tegevus on {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Organisatsiooni poliitika on sinu hoidla ajalõpu tegevuse seadistanud {0} peale.</value>
<value>Organisatsiooni poliitikad mõjutavad sinu hoidla ajalõppu. Maksimaalne lubatud hoidla ajalõpp on {0} tund(i) ja {1} minut(it)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Valitud hoidla ajalõpp ei ole organisatsiooni poolt määratud reeglitega kooskõlas.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Üks või enam organisatsiooni poliitikat ei võimalda sul oma personaalset hoidlat eksportida.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2529,35 +2523,23 @@ Soovid selle konto peale lülituda?</value>
<value>See päring ei ole enam kehtiv</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>Ootel sisselogimise taotlused</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Tühista kõik taotlused</value>
<value>Decline all requests</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>Oled kindel, et soovid tühistada kõik pooleliolevad sisselogimise taotlused?</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Taotlused on tagasi lükatud</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>Ootel taotlused puuduvad</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Kaamera kasutamiseks luba ligipääs kaamerale</value>
</data>
<data name="Language" xml:space="preserve">
<value>Keel</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Rakenduse keel muudeti {0}-ks. Muudatuste rakendamiseks taaskäivita Bitwarden</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Keele muutmiseks on vajalik rakenduse taaskäivitamine</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Vaikeväärtus (süsteem)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Tähtis</value>
</data>
@@ -2594,25 +2576,4 @@ Soovid selle konto peale lülituda?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Tuvastati nõrk ning andmelekkes lekkinud ülemparool. Kasuta konto paremaks turvamiseks tugevamat parooli. Oled kindel, et soovid nõrga parooliga jätkata?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Nõutud on organisatsiooni SSO identifikaator.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Lisa võti olemasolevale või uuele kirjele</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Hoidlas puuduvad kirjed, mis sobituksid sõnaga "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Otsi kirjet või lisa uus kirje</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Otsingusõnale ei vasta kirjeid</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Sinu ülemparool ei vasta ühele või rohkemale organisatsiooni poolt seatud poliitikale. Hoidlale ligipääsemiseks pead oma ülemaprooli uuendama. Jätkamisel logitakse sind praegusest sessioonist välja, mistõttu pead uuesti sisse logima. Teistes seadmetes olevad aktiivsed sessioonid aeguvad umbes ühe tunni jooksul.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Praegune ülemparool</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Pasahitz nagusia ahazten baduzu, pista batek pasahitza gogoratzen lagunduko dizu.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Pasahitz nagusiak gutxienez 8 karaktere izan behar ditu.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Gutxieneko zenbaki kopurua</value>
@@ -1751,11 +1751,11 @@
<value>Ziur zaude elementu hau zakarrontzira bidali nahi duzula?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Desblokeatze biometrikoa desgaituta dago, pasahitz nagusiarekin saioa hasi zain.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Auto-betetzerako desblokeatze biometrikoa desgaituta dago, pasahitz nagusiarekin saioa hasi zain.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Gaitu eguneratzean sinkronizatzea</value>
@@ -2142,16 +2142,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Zure erakundearen politikek zure itxaronaldiari eragiten diote. Itxaronaldiak gehienez ere {0} ordu eta {1} minutu izango ditu</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Zure kutxa gotorreko itxaronaldiak, zure erakundeak ezarritako murrizpenak gainditzen ditu.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Erakundeko politika batek edo gehiagok kutxa gotorra esportatzea galarazten dute.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2545,18 +2539,6 @@ Kontu honetara aldatu nahi duzu?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Gaitu kameraren baimena eskanerra erabiltzeko</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Garrantzitsua</value>
</data>
@@ -2593,25 +2575,4 @@ Kontu honetara aldatu nahi duzu?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Pasahitz ahul hau datu-urraketa batean aurkitu da. Erabil ezazu beste inon erabili ez duzun pasahitz sendi bat zure kontua babesteko. Ziur zaude pasahitz hau erabili nahi duzula?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>یادآور کلمه عبور اصلی کمک می‌کند در صورت فراموشی آن را به یاد بیارید.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>طول کلمه عبور اصلی باید حداقل {0} کاراکتر باشد.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>طول کلمه عبور اصلی باید حداقل ۸ کاراکتر باشد.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>حداقل اعداد</value>
@@ -1752,11 +1752,11 @@
<value>واقعاً می‌خواهید این آیتم را به سطل زباله ارسال کنید؟</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>تغییر بیومتریک شناسایی شد، برای فعال کردن مجدد آن با استفاده از کلمه عبور اصلی وارد سیستم شوید.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>باز کردن قفل بیومتریک برای پرکردن خودکار در انتظار تأیید کلمه عبور اصلی غیرفعال است.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>فعال کردن همگام‌سازی در نوسازی</value>
@@ -2143,16 +2143,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>سیاست‌های سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق {0} ساعت و {1} دقیقه است</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>مهلت زمانی شما بیش از محدودیت های تعیین شده توسط سازمانتان است.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>یک یا چند سیاست سازمان از برون ریزی گاوصندوق شخصی شما جلوگیری می‌کند.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2547,18 +2541,6 @@
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>اجازه دوربین را برای استفاده از اسکنر فعال کنید</value>
</data>
<data name="Language" xml:space="preserve">
<value>زبان</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>زبان به {0} تغییر کرده است. لطفاً برنامه را مجدداً راه اندازی کنید تا تغییرات را مشاهده کنید</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>تغییر زبان نیاز به راه اندازی مجدد برنامه دارد</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>پیش‌فرض (سیستم)</value>
</data>
<data name="Important" xml:space="preserve">
<value>مهم</value>
</data>
@@ -2595,25 +2577,4 @@
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>کلمه عبور ضعیف شناسایی و در یک نقض داده پیدا شد. از یک کلمه عبور قوی و منحصر به فرد برای محافظت از حساب خود استفاده کنید. آیا مطمئنید که می‌خواهید از این کلمه عبور استفاده کنید؟</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>شناسه سازمان SSO مورد نیاز است.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>کلید را به یک مورد موجود یا جدید اضافه کنید</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>هیچ موردی در گاوصندوق شما وجود ندارد که با "{0}" مطابقت داشته باشد</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>یک مورد را جستجو کنید یا یک مورد جدید اضافه کنید</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>هیچ موردی وجود ندارد که با جستجو مطابقت داشته باشد</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Pääsalasanan vihje voi auttaa sinua muistamaan unohtamasi salasanan.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Pääsalasanan tulee sisältää vähintään {0} merkkiä.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Pääsalasanan tulee sisältää ainakin 8 merkkiä.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Numeroita vähintään</value>
@@ -1281,7 +1281,7 @@ Koodi luetaan automaattisesti.</value>
<value>Esteettömyyspalvelu voi olla hyödyllinen sellaisten sovellusten kanssa, jotka eivät tue tavallista automaattisen täytön palvelua.</value>
</data>
<data name="DatePasswordUpdated" xml:space="preserve">
<value>Salasana vaihdettiin</value>
<value>Salasana päivitettiin</value>
<comment>ex. Date this password was updated</comment>
</data>
<data name="DateUpdated" xml:space="preserve">
@@ -1752,11 +1752,11 @@ Koodi luetaan automaattisesti.</value>
<value>Haluatko varmasti siirtää roskakoriin?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometrinen avaus on poistettu käytöstä, kunnes pääsalasana on vahvistettu.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Automaattisen täytön biometrinen avaus on poistettu käytöstä, kunnes pääsalasana on vahvistettu.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Synkronoi holvi päivityksen yhteydessä</value>
@@ -2090,13 +2090,13 @@ Koodi luetaan automaattisesti.</value>
<value>Captcha-vahvistus epäonnistui. Yritä uudelleen.</value>
</data>
<data name="UpdatedMasterPassword" xml:space="preserve">
<value>Pääsalasanasi on vaihdettu</value>
<value>Pääsalasana päivitettiin</value>
</data>
<data name="UpdateMasterPassword" xml:space="preserve">
<value>Päivitä pääsalasana</value>
<value>Vaihda pääsalasana</value>
</data>
<data name="UpdateMasterPasswordWarning" xml:space="preserve">
<value>Organisaatiosi ylläpito on hiljattain vaihtanut pääsalasanasi ja käyttääksesi holvia sinun on päivitettävä se nyt. Tämä uloskirjaa kaikki nykyiset istunnot pakottaen uudelleenkirjautumisen. Muiden laitteiden aktiiviset istunnot saattavat toimia vielä tunnin ajan.</value>
<value>Organisaatiosi ylläpito on hiljattain vaihtanut pääsalasanasi. Käyttääksesi holvia sinun on päivitettävä pääsalasanasi nyt. Tämä uloskirjaa kaikki nykyiset istunnot pakottaen uudelleenkirjautumisen. Muiden laitteiden aktiiviset istunnot saattavat toimia vielä tunnin ajan.</value>
</data>
<data name="UpdatingPassword" xml:space="preserve">
<value>Salasanaa vaihdetaan</value>
@@ -2141,18 +2141,12 @@ Koodi luetaan automaattisesti.</value>
<value>Organisaatiolla on käytäntö, joka liittää tilisi automaattisesti salasanan palautusapuun. Liitos sallii organisaation ylläpitäjien vaihtaa pääsalasanasi.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Organisaatiokäytännöt ovat määrittäneet holvisi aikakatkaisun enimmäisajaksi {0} tunti(a) {1} minuutti(a).</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Organisaatiokäytännöt vaikuttavat holvisi aikakatkaisuun. Suurin sallittu aika on {0} tunti(a) {1} minuutti(a). Holvillesi määritetty aikakatkaisutoiminto on {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Organisaatiokäytännöt ovat määrittäneet holville aikakatkaisutoiminnon {0}.</value>
<value>Organisaatiokäytännöt vaikuttavat holvin aikakatkaisuun. Suurin sallittu aika on {0} tunti(a) ja {1} minuutti(a)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Holvisi aikakatkaisu ylittää organisaatiosi asettamat rajoitukset.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Yksi tai useampi organisaatiokäytäntö estää henkilökohtaisen holvisi viennin.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2530,7 +2524,7 @@ Haluatko vaihtaa tähän tiliin?</value>
<value>Pyyntö ei ole enää voimassa.</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>Odottavat kirjautumispyynnöt</value>
<value>Odottavia kirjautumispyyntöjä</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Hylkää kaikki pyynnöt</value>
@@ -2539,7 +2533,7 @@ Haluatko vaihtaa tähän tiliin?</value>
<value>Haluatko varmasti hylätä kaikki odottavat kirjautumispyynnöt?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Pyynnöt hylättiin</value>
<value>Pyynnöt on hylätty</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>Ei odottavia pyyntöjä</value>
@@ -2547,18 +2541,6 @@ Haluatko vaihtaa tähän tiliin?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Myönnä kameran käyttöoikeus skannerin käyttämiseksi</value>
</data>
<data name="Language" xml:space="preserve">
<value>Kieli</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Kieleksi vaihdettiin {0}. Käynnistä sovellus uudelleen nähdäksesi muutoksen.</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Kielen vaihto edellyttää sovelluksen uudelleenkäynnistyksen</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Oletus (järjestelmä)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Tärkeää</value>
</data>
@@ -2569,7 +2551,7 @@ Haluatko vaihtaa tähän tiliin?</value>
<value>Heikko pääsalasana</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>Havaittiin heikko salasana. Suojaa tilisi vahvalla salasanalla. Haluatko varmasti käyttää heikkoa salasanaa?</value>
<value>Tunnistettiin heikko salasana. Sinun tulisi suojata tilisi vahvalla salasanalla. Haluatko varmasti käyttää heikkoa salasanaa?</value>
</data>
<data name="Weak" xml:space="preserve">
<value>Heikko</value>
@@ -2595,25 +2577,4 @@ Haluatko vaihtaa tähän tiliin?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Havaittiin heikko ja tietovuodosta löytynyt salasana. Sinun tulisi suojata tilisi vahvalla ja ainutlaatuisella salasanalla. Haluatko varmasti käyttää tätä salasanaa?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organisaation SSO-tunniste tarvitaan.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Lisää avain olemassa olevaan tai uuteen kohteeseen</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Holvissasi ei ole kohteita osoitteelle "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Etsi kohdetta tai lisää uusi kohde</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Hakua vastaavia kohteita ei ole</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Pääsalasanasi ei täytä yhden tai useamman organisaatiokäytännön vaatimuksia ja holvin käyttämiseksi sinun on vaihdettava se nyt. Tämä uloskirjaa kaikki nykyiset istunnot pakottaen uudelleenkirjautumisen. Muiden laitteiden aktiiviset istunnot saattavat toimia vielä tunnin ajan.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Nykyinen pääsalasana</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -132,7 +132,7 @@
<comment>The title for the add item page.</comment>
</data>
<data name="AnErrorHasOccurred" xml:space="preserve">
<value>Une erreur s'est produite.</value>
<value>Une erreur est survenue.</value>
<comment>Alert title when something goes wrong.</comment>
</data>
<data name="Back" xml:space="preserve">
@@ -190,7 +190,7 @@
<comment>Full label for a email address.</comment>
</data>
<data name="EmailUs" xml:space="preserve">
<value>Envoyez-nous un courriel</value>
<value>Nous contacter</value>
</data>
<data name="EmailUsDescription" xml:space="preserve">
<value>Envoyez-nous un courriel directement pour obtenir de l'aide ou laisser un commentaire.</value>
@@ -203,7 +203,7 @@
<comment>Title for your favorite items in the vault.</comment>
</data>
<data name="FileBugReport" xml:space="preserve">
<value>Remplir un rapport de bug</value>
<value>Envoyer un rapport de bug</value>
</data>
<data name="FileBugReportDescription" xml:space="preserve">
<value>Ouvrir un ticket dans notre dépôt Github.</value>
@@ -247,7 +247,7 @@
<comment>Description message for the alert when internet connection is required to continue.</comment>
</data>
<data name="InternetConnectionRequiredTitle" xml:space="preserve">
<value>Connexion internet requise</value>
<value>Connexion Internet requise</value>
<comment>Title for the alert when internet connection is required to continue.</comment>
</data>
<data name="InvalidMasterPassword" xml:space="preserve">
@@ -282,7 +282,7 @@
<value>Êtes-vous sûr de vouloir supprimer ce compte ?</value>
</data>
<data name="AccountAlreadyAdded" xml:space="preserve">
<value>Compte déjà ajouté</value>
<value>Le compte a déjà été ajouté</value>
</data>
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
<value>Souhaitez-vous y passer maintenant ?</value>
@@ -300,7 +300,7 @@
<comment>The title for the vault page.</comment>
</data>
<data name="Authenticator" xml:space="preserve">
<value>Authentificateur</value>
<value>Authentification</value>
<comment>Authenticator TOTP feature</comment>
</data>
<data name="Name" xml:space="preserve">
@@ -471,19 +471,19 @@
<value>Éditer l'élément</value>
</data>
<data name="EnableAutomaticSyncing" xml:space="preserve">
<value>Autoriser la synchronisation automatique</value>
<value>Activer la synchronisation automatique</value>
</data>
<data name="EnterEmailForHint" xml:space="preserve">
<value>Saisissez l'adresse électronique de votre compte pour recevoir l'indice de votre mot de passe principal.</value>
</data>
<data name="ExntesionReenable" xml:space="preserve">
<value>Réactivez l'extension de l'application</value>
<value>Activez à nouveau l'extension de l'application</value>
</data>
<data name="ExtensionAlmostDone" xml:space="preserve">
<value>Presque terminé !</value>
</data>
<data name="ExtensionEnable" xml:space="preserve">
<value>Activer l'extension de l'application</value>
<value>Activez l'extension de l'application</value>
</data>
<data name="ExtensionInSafari" xml:space="preserve">
<value>Sur Safari, trouvez Bitwarden en utilisant l'icône de partage (aide : faire défiler sur la droite sur la ligne du bas du menu).</value>
@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Un indice de mot de passe principal peut vous aider à vous souvenir de votre mot de passe si vous l'oubliez.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Le mot de passe principal doit comporter au moins {0} caractères.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Le mot de passe principal doit comporter au moins 8 caractères.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Chiffres minimum</value>
@@ -632,13 +632,13 @@
<value>Autres</value>
</data>
<data name="PasswordGenerated" xml:space="preserve">
<value>Mot de passe généré</value>
<value>Mot de passe généré.</value>
</data>
<data name="PasswordGenerator" xml:space="preserve">
<value>Générateur de mot de passe</value>
</data>
<data name="PasswordHint" xml:space="preserve">
<value>Indice de mot de passe</value>
<value>Indice du mot de passe</value>
</data>
<data name="PasswordHintAlert" xml:space="preserve">
<value>Nous vous avons envoyé un courriel avec votre indice de mot de passe principal.</value>
@@ -919,7 +919,7 @@ La numérisation se fera automatiquement.</value>
<value>Si un identifiant possède une clé d'authentification, copiez le code de vérification TOTP dans votre presse-papiers lorsque vous saisissez automatiquement l'identifiant.</value>
</data>
<data name="CopyTotpAutomatically" xml:space="preserve">
<value>Copier TOTP automatiquement</value>
<value>Copier le code TOTP automatiquement</value>
</data>
<data name="PremiumRequired" xml:space="preserve">
<value>Une adhésion Premium est requise pour utiliser cette fonctionnalité.</value>
@@ -1140,13 +1140,13 @@ La numérisation se fera automatiquement.</value>
<value>Expiration</value>
</data>
<data name="ShowWebsiteIcons" xml:space="preserve">
<value>Afficher les icônes du site web</value>
<value>Afficher les icônes des sites web</value>
</data>
<data name="ShowWebsiteIconsDescription" xml:space="preserve">
<value>Affichez une image reconnaissable à côté de chaque identifiant.</value>
<value>Afficher une image reconnaissable à côté de chaque identifiant.</value>
</data>
<data name="IconsUrl" xml:space="preserve">
<value>Icônes URL du serveur</value>
<value>URL du serveur dicônes</value>
</data>
<data name="AutofillWithBitwarden" xml:space="preserve">
<value>Saisie automatique avec Bitwarden</value>
@@ -1556,7 +1556,7 @@ La numérisation se fera automatiquement.</value>
<value>Thème sombre par défaut</value>
</data>
<data name="DefaultDarkThemeDescription" xml:space="preserve">
<value>Choisissez le thème sombre à utiliser lorsque le thème (système) par défaut est utilisé alors que le mode sombre de votre appareil est en cours d'utilisation.</value>
<value>Si le mode sombre de l'appareil et le thème par défaut (système) sont activés, choisissez votre thème sombre préféré</value>
</data>
<data name="CopyNotes" xml:space="preserve">
<value>Copier la note</value>
@@ -1579,7 +1579,7 @@ La numérisation se fera automatiquement.</value>
<comment>'Nord' is the name of a specific color scheme. It should not be translated.</comment>
</data>
<data name="SolarizedDark" xml:space="preserve">
<value>Solarized Dark</value>
<value>Sombre "Solarized"</value>
<comment>'Solarized Dark' is the name of a specific color scheme. It should not be translated.</comment>
</data>
<data name="AutofillBlockedUris" xml:space="preserve">
@@ -1617,7 +1617,7 @@ La numérisation se fera automatiquement.</value>
<value>Partagé</value>
</data>
<data name="ToggleVisibility" xml:space="preserve">
<value>Basculer la visibilité</value>
<value>Afficher/Masquer</value>
</data>
<data name="LoginExpired" xml:space="preserve">
<value>Votre session a expiré.</value>
@@ -1677,7 +1677,7 @@ La numérisation se fera automatiquement.</value>
<value>Les clés de chiffrement du compte sont spécifiques à chaque utilisateur Bitwarden. Vous ne pouvez donc pas importer d'export chiffré dans un compte différent.</value>
</data>
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
<value>Confirmez l'export du coffre</value>
<value>Confirmer l'export du coffre</value>
<comment>Title for the alert to confirm vault exports.</comment>
</data>
<data name="Warning" xml:space="preserve">
@@ -1694,7 +1694,7 @@ La numérisation se fera automatiquement.</value>
<comment>Clone an entity (verb).</comment>
</data>
<data name="PasswordGeneratorPolicyInEffect" xml:space="preserve">
<value>Une ou plusieurs politiques de sécurité de l'organisation affectent les paramètres de votre générateur</value>
<value>Une ou plusieurs politiques d'organisation affectent les paramètres de votre générateur</value>
</data>
<data name="Open" xml:space="preserve">
<value>Ouvrir</value>
@@ -1729,7 +1729,7 @@ La numérisation se fera automatiquement.</value>
<comment>Message shown when interacting with the server</comment>
</data>
<data name="ItemRestored" xml:space="preserve">
<value>Élément restauré</value>
<value>L'élément a été restauré.</value>
<comment>Confirmation message after successfully restoring a soft-deleted item</comment>
</data>
<data name="Trash" xml:space="preserve">
@@ -1752,14 +1752,14 @@ La numérisation se fera automatiquement.</value>
<value>Voulez-vous vraiment envoyer à la corbeille ?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Déverrouillage biométrique désactivé dans l'attente de vérification du mot de passe principal.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Déverrouillage biométrique pour la saisie automatique désactivé dans l'attente de vérification du mot de passe principal.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Autoriser la synchronisation au rafraîchissement</value>
<value>Activer la synchronisation lors de l'actualisation</value>
</data>
<data name="EnableSyncOnRefreshDescription" xml:space="preserve">
<value>Synchronisation du coffre avec un geste vers le bas</value>
@@ -1783,7 +1783,7 @@ La numérisation se fera automatiquement.</value>
<value>Afin de finaliser la connexion avec SSO, veuillez définir un mot de passe principal pour accéder et protéger votre coffre.</value>
</data>
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
<value>Une ou plusieurs politiques de sécurité de l'organisation exigent que votre mot de passe principal réponde aux exigences suivantes :</value>
<value>Une ou plusieurs politiques de l'organisation exigent que votre mot de passe principal réponde aux exigences suivantes :</value>
</data>
<data name="PolicyInEffectMinComplexity" xml:space="preserve">
<value>Score de complexité minimum de {0}</value>
@@ -1813,8 +1813,7 @@ La numérisation se fera automatiquement.</value>
<value>Chargement</value>
</data>
<data name="AcceptPolicies" xml:space="preserve">
<value>En cochant cette case vous acceptez ce qui suit :
</value>
<value>En cochant cette case, vous acceptez les éléments suivants :</value>
</data>
<data name="AcceptPoliciesError" xml:space="preserve">
<value>Les conditions d'utilisation et la politique de confidentialité n'ont pas été acceptées.</value>
@@ -2063,7 +2062,7 @@ La numérisation se fera automatiquement.</value>
<value>Masquer mon adresse électronique aux destinataires</value>
</data>
<data name="SendOptionsPolicyInEffect" xml:space="preserve">
<value>Une ou plusieurs politiques de sécurité de l'organisation affectent vos options Send.</value>
<value>Une ou plusieurs politiques d'organisation affectent vos options Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data>
<data name="SendFilePremiumRequired" xml:space="preserve">
@@ -2084,7 +2083,7 @@ La numérisation se fera automatiquement.</value>
<value>Cette action est protégée, pour continuer veuillez entrer à nouveau votre mot de passe principal pour vérifier votre identité.</value>
</data>
<data name="CaptchaRequired" xml:space="preserve">
<value>Captcha requis</value>
<value>Captcha obligatoire</value>
</data>
<data name="CaptchaFailed" xml:space="preserve">
<value>Le captcha a échoué. Veuillez réessayer.</value>
@@ -2141,19 +2140,13 @@ La numérisation se fera automatiquement.</value>
<value>Cette organisation dispose d'une politique d'entreprise qui vous inscrira automatiquement à la réinitialisation du mot de passe. L'inscription permettra aux administrateurs de l'organisation de changer votre mot de passe principal.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Les politiques de sécurité de votre organisation ont défini le délai d'expiration de votre coffre à {0} heure(s) et {1} minute(s) maximum.</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Les politiques de sécurité de votre organisation affectent le délai d'expiration de votre coffre. Le délai d'expiration autorisé du coffre est de {0} heure(s) et {1} minute(s) maximum. L'action après délai d'expiration de votre coffre est fixée à {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Les politiques de sécurité de votre organisation ont défini l'action après délai d'expiration de votre coffre à {0}.</value>
<value>Les politiques de votre organisation affectent le délai d'expiration de votre coffre-fort. Le délai d'expiration maximal autorisé est de {0} heure(s) et {1} minute(s)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Le délai d'expiration de votre coffre dépasse les restrictions définies par votre organisation.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<value>Une ou plusieurs politiques de sécurité de l'organisation vous empêchent d'exporter votre coffre individuel.</value>
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Une ou plusieurs politiques d'organisation vous empêchent d'exporter votre coffre personnel.</value>
</data>
<data name="AddAccount" xml:space="preserve">
<value>Ajouter un compte</value>
@@ -2216,7 +2209,7 @@ La numérisation se fera automatiquement.</value>
<value>Vérification</value>
</data>
<data name="ResendCode" xml:space="preserve">
<value>Renvoyer le code</value>
<value>Renvoyer le Code</value>
</data>
<data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve">
<value>Un code de vérification a été envoyé à votre courriel</value>
@@ -2231,7 +2224,7 @@ La numérisation se fera automatiquement.</value>
<value>Envoyer les journaux de plantage</value>
</data>
<data name="SubmitCrashLogsDescription" xml:space="preserve">
<value>Aidez Bitwarden à améliorer la stabilité de l'application en soumettant des rapports d'erreur.</value>
<value>Aidez Bitwarden à améliorer la stabilité de l'application en autorisant les rapports d'erreurs.</value>
</data>
<data name="OptionsExpanded" xml:space="preserve">
<value>Les options sont dépliées, appuyez pour grouper.</value>
@@ -2319,7 +2312,7 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
<value>Nous n'avons pas pu traiter votre requête. Veuillez réessayer ou nous contacter.</value>
</data>
<data name="AllowScreenCapture" xml:space="preserve">
<value>Autoriser la capture d'écran</value>
<value>Autoriser les captures d'écran</value>
</data>
<data name="AreYouSureYouWantToEnableScreenCapture" xml:space="preserve">
<value>Êtes-vous sûr de vouloir activer la capture d'écran ?</value>
@@ -2471,10 +2464,10 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
<value>Se connecter à la montre</value>
</data>
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
<value>Divulgation du service d'accessibilité</value>
<value>Confidentialité du Service d'accessibilité</value>
</data>
<data name="AccessibilityDisclosureText" xml:space="preserve">
<value>Bitwarden utilise le service d'accessibilité pour rechercher les champs de connexion dans les applications et les sites web, puis établit les identifiants de champ appropriés pour la saisie d'un nom d'utilisateur et d'un mot de passe lorsqu'une correspondance est trouvée pour l'application ou le site. Nous ne stockons aucune des informations qui nous sont présentées par le service, et nous ne tentons pas de contrôler les éléments à l'écran au-delà de la saisie des informations d'identification.</value>
<value>Bitwarden utilise le Service d'Accessibilité pour rechercher des champs de connexion dans les applis et les sites web, puis trouvent les IDs des champs liés pour saisir un nom d'utilisateur et un mot de passe lorsqu'une correspondance pour l'appli ou le site est trouvée. Nous ne stockons aucune information que nous recevons via le service, et nous n'essayons pas de contrôler des éléments qui se superposeraient aux entrées de saisie des identifiants.</value>
</data>
<data name="Accept" xml:space="preserve">
<value>Accepter</value>
@@ -2483,7 +2476,7 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
<value>Refuser</value>
</data>
<data name="LoginRequestHasAlreadyExpired" xml:space="preserve">
<value>La demande de connexion a déjà expiré.</value>
<value>La demande didentification a déjà expiré.</value>
</data>
<data name="LoginAttemptFromXDoYouWantToSwitchToThisAccount" xml:space="preserve">
<value>Tentative de connexion depuis :
@@ -2547,18 +2540,6 @@ Voulez-vous basculer vers ce compte ?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Activer la permission de l'appareil photo pour utiliser le scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Langue</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>La langue a été changée en {0}. Veuillez redémarrer l'application pour voir le changement</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Le changement de langue nécessite le redémarrage de l'application</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Par défaut (système)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2595,25 +2576,4 @@ Voulez-vous basculer vers ce compte ?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Mot de passe faible identifié et trouvé dans une fuite de données. Utilisez un mot de passe fort et unique pour protéger votre compte. Voulez-vous vraiment utiliser ce mot de passe ?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Identifiant SSO de l'organisation requis.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Ajouter la clé à un élément existant ou nouveau</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>Il n'y a pas d'éléments dans votre coffre qui correspondent à "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Rechercher un élément ou ajouter un nouvel élément</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Il n'y a pas d'éléments qui correspondent à la recherche</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Votre mot de passe principal ne répond pas aux exigences de politique de sécurité de cette organisation. Pour accéder au coffre, vous devez mettre à jour votre mot de passe principal dès maintenant. En poursuivant, vous serez déconnecté de votre session actuelle et vous devrez vous reconnecter. Les sessions actives sur d'autres appareils peuver rester actives pendant encore une heure.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Mot de passe principal actuel</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>A master password hint can help you remember your password if you forget it.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Master password must be at least 8 characters long.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Minimum numbers</value>
@@ -1752,11 +1752,11 @@ Scanning will happen automatically.</value>
<value>Do you really want to send to the trash?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometric unlock disabled pending verification of master password.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometric unlock for autofill disabled pending verification of master password.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Allow sync on refresh</value>
@@ -2141,18 +2141,12 @@ Scanning will happen automatically.</value>
<value>This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your maximum allowed vault timeout to {0} hour(s) and {1} minute(s).</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Your vault timeout exceeds the restrictions set by your organization.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>One or more organization policies prevents your from exporting your individual vault.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2547,18 +2541,6 @@ Do you want to switch to this account?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2595,25 +2577,4 @@ Do you want to switch to this account?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>רמז לסיסמה הראשית יכול לעזור במקרה ושכחת את הסיסמה.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>הסיסמה הראשית חייבת להיות לפחות באורך 8 תווים.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>מינימום ספרות</value>
@@ -1754,11 +1754,11 @@ Scanning will happen automatically.</value>
<value>האם אתה בטוח שברצונך לשלוח פריט זה לסל המחזור?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>פתיחה באמצעות זיהוי ביומטרי ממתינה לאימות הסיסמה הראשית.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>פתיחה באמצעים ביומטריים עבור השלמה אוטומטית - מצריכה אימות בעזרת סיסמה ראשית.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>אפשר סנכרון בעת רענון</value>
@@ -2145,16 +2145,10 @@ Scanning will happen automatically.</value>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>מדיניות הארגון שלך משפיעה על הזמן הקצוב לכספת שלך. הזמן הקצוב המרבי המותר לכספת הוא {0} שעות ו-{1} דקות</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>הזמן הקצוב לכספת שלך חורג מהמגבלות שנקבעו על ידי הארגון שלך.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>מדיניות אחת או יותר של הארגון שלך מונעות ממך לייצא את הכספת האישית שלך.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2549,18 +2543,6 @@ Do you want to switch to this account?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2597,25 +2579,4 @@ Do you want to switch to this account?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -118,21 +118,21 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>बारे में</value>
<value>हमारे बारे में</value>
</data>
<data name="Add" xml:space="preserve">
<value>जोड़ें</value>
<comment>Add/create a new entity (verb).</comment>
</data>
<data name="AddFolder" xml:space="preserve">
<value>नया फोल्डर जोड़ें</value>
<value>नया फोल्डर जोड़ें</value>
</data>
<data name="AddItem" xml:space="preserve">
<value>चीज़ जोड़ें</value>
<value>आइटम जोड़ें</value>
<comment>The title for the add item page.</comment>
</data>
<data name="AnErrorHasOccurred" xml:space="preserve">
<value>एक गड़बड़ हुई।</value>
<value>एक त्रुटि हुई।</value>
<comment>Alert title when something goes wrong.</comment>
</data>
<data name="Back" xml:space="preserve">
@@ -276,10 +276,10 @@
<value>क्या आप वाकई लॉग आउट करना चाहते हैं?</value>
</data>
<data name="RemoveAccount" xml:space="preserve">
<value>खाता हटाएं</value>
<value>Remove account</value>
</data>
<data name="RemoveAccountConfirmation" xml:space="preserve">
<value>क्या आप वाकई यह खाता हटाना चाहते हैं?</value>
<value>Are you sure you want to remove this account?</value>
</data>
<data name="AccountAlreadyAdded" xml:space="preserve">
<value>Account already added</value>
@@ -584,8 +584,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>मास्टर पासवर्ड संकेत आपको भूल जाने की अवस्था में पासवर्ड को याद करने में सहायता करता है।</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Master password must be at least {0} characters long.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>मास्टर पासवर्ड में कम से कम 8 अक्षर होने चाहिएं।</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>कम से कम अंक</value>
@@ -1753,11 +1753,11 @@ Scanning will happen automatically.</value>
<value>Do you really want to send to the trash?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometric unlock disabled pending verification of master password.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometric unlock for autofill disabled pending verification of master password.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Allow sync on refresh</value>
@@ -2142,18 +2142,12 @@ Scanning will happen automatically.</value>
<value>This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password.</value>
</data>
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your maximum allowed vault timeout to {0} hour(s) and {1} minute(s).</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s)</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Your vault timeout exceeds the restrictions set by your organization.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>One or more organization policies prevents your from exporting your individual vault.</value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2548,18 +2542,6 @@ Do you want to switch to this account?</value>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>The language has been changed to {0}. Please restart the app to see the change</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Language change requires app restart</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Default (System)</value>
</data>
<data name="Important" xml:space="preserve">
<value>Important</value>
</data>
@@ -2596,25 +2578,4 @@ Do you want to switch to this account?</value>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Organization SSO identifier required.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Add the key to an existing or new item</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>There are no items in your vault that match "{0}"</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Search for an item or add a new item</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>There are no items that match the search</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
</data>
</root>

View File

@@ -583,8 +583,8 @@
<data name="MasterPasswordHintDescription" xml:space="preserve">
<value>Podsjetnik glavne lozinke ti može pomoći da se prisjetiš svoje lozinke ako ju zaboraviš.</value>
</data>
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
<value>Glavna lozinka mora imati najmanje {0} znakova.</value>
<data name="MasterPasswordLengthValMessage" xml:space="preserve">
<value>Glavna lozinka mora imati najmanje 8 znakova.</value>
</data>
<data name="MinNumbers" xml:space="preserve">
<value>Najmanje brojeva</value>
@@ -1751,11 +1751,11 @@
<value>Želite li zaista poslati u smeće?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data>
<data name="AccountBiometricInvalidated" xml:space="preserve">
<value>Biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidated" xml:space="preserve">
<value>Biometrijsko otključavanje onemogućeno do potvrde glavne lozinke.</value>
</data>
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
<value>Autofill biometric unlock for this account is disabled pending verification of master password.</value>
<data name="BiometricInvalidatedExtension" xml:space="preserve">
<value>Biometrijsko otključavanje za auto-ispunu onemogućeno do potvrde glavne lozinke.</value>
</data>
<data name="EnableSyncOnRefresh" xml:space="preserve">
<value>Uključi sinkronizaciju pri osvježavanju</value>
@@ -2141,16 +2141,10 @@
<data name="VaultTimeoutPolicyInEffect" xml:space="preserve">
<value>Pravilo tvoje organizacije utječe na istek trezora. Najveće dozvoljeno vrijeme isteka je {0}:{1} h.</value>
</data>
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
<value>Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is {0} hour(s) and {1} minute(s). Your vault timeout action is set to {2}.</value>
</data>
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
<value>Your organization policies have set your vault timeout action to {0}.</value>
</data>
<data name="VaultTimeoutToLarge" xml:space="preserve">
<value>Vrijeme isteka premašuje ograničenje koje je postavila tvoja organizacija.</value>
</data>
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
<data name="DisablePersonalVaultExportPolicyInEffect">
<value>Jedno ili više pravila organizacija onemogućuje izvoz osobnog trezora. </value>
</data>
<data name="AddAccount" xml:space="preserve">
@@ -2465,7 +2459,7 @@
<value>Nasumično</value>
</data>
<data name="ConnectToWatch" xml:space="preserve">
<value>Spoji se na Watch</value>
<value>Connect to Watch</value>
</data>
<data name="AccessibilityServiceDisclosure" xml:space="preserve">
<value>Odobrenje servisa pristupačnosti</value>
@@ -2488,7 +2482,7 @@
Želiš li se prebaciti na ovaj račun?</value>
</data>
<data name="NewAroundHere" xml:space="preserve">
<value>Novi korisnik?</value>
<value>New around here?</value>
</data>
<data name="GetMasterPasswordwordHint" xml:space="preserve">
<value>Slanje podsjetnika glavne lozinke</value>
@@ -2527,90 +2521,57 @@
<value>Ovaj zahtjev više nije valjan</value>
</data>
<data name="PendingLogInRequests" xml:space="preserve">
<value>Zahtjevi za prijavu na čekanju</value>
<value>Pending login requests</value>
</data>
<data name="DeclineAllRequests" xml:space="preserve">
<value>Odbij sve zahtjeve</value>
<value>Decline all requests</value>
</data>
<data name="AreYouSureYouWantToDeclineAllPendingLogInRequests" xml:space="preserve">
<value>Sigurno želiš odbiti sve zahtjeve na čekanju?</value>
<value>Are you sure you want to decline all pending login requests?</value>
</data>
<data name="RequestsDeclined" xml:space="preserve">
<value>Zahtjevi odbijeni</value>
<value>Requests declined</value>
</data>
<data name="NoPendingRequests" xml:space="preserve">
<value>Nema zahtjeva na čekanju</value>
<value>No pending requests</value>
</data>
<data name="EnableCamerPermissionToUseTheScanner" xml:space="preserve">
<value>Za skeniranje, odobri korištenje kamere</value>
</data>
<data name="Language" xml:space="preserve">
<value>Jezik</value>
</data>
<data name="LanguageChangeXDescription" xml:space="preserve">
<value>Jezik je promijenjen u {0}. Ponovno pokreni aplikaciju za primjenu.</value>
</data>
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
<value>Promjena jezika zahtijeva ponovno pokretanje aplikacije</value>
</data>
<data name="DefaultSystem" xml:space="preserve">
<value>Zadano (sustav)</value>
<value>Enable camera permission to use the scanner</value>
</data>
<data name="Important" xml:space="preserve">
<value>Važno</value>
<value>Important</value>
</data>
<data name="YourMasterPasswordCannotBeRecoveredIfYouForgetItXCharactersMinimum" xml:space="preserve">
<value>Glavnu lozinku nije moguće vratiti ako ju zaboraviš! Najmanje {0} znakova.</value>
<value>Your master password cannot be recovered if you forget it! {0} characters minimum.</value>
</data>
<data name="WeakMasterPassword" xml:space="preserve">
<value>Slaba glavna lozinka</value>
<value>Weak Master Password</value>
</data>
<data name="WeakPasswordIdentifiedUseAStrongPasswordToProtectYourAccount" xml:space="preserve">
<value>Prepoznata je slaba lozinka. Za zaštitu računa, preporučuje se da koristiš jake lozinke. Želiš li svejedno koristiti slabu lozinku?</value>
<value>Weak password identified. Use a strong password to protect your account. Are you sure you want to use a weak password?</value>
</data>
<data name="Weak" xml:space="preserve">
<value>Slaba</value>
<value>Weak</value>
</data>
<data name="Good" xml:space="preserve">
<value>Dobra</value>
<value>Good</value>
</data>
<data name="Strong" xml:space="preserve">
<value>Jaka</value>
<value>Strong</value>
</data>
<data name="CheckKnownDataBreachesForThisPassword" xml:space="preserve">
<value>Provjeri je li lozinka ukradena prilikom krađe podataka</value>
<value>Check known data breaches for this password</value>
</data>
<data name="ExposedMasterPassword" xml:space="preserve">
<value>Ugrožena glavna lozinka</value>
<value>Exposed Master Password</value>
</data>
<data name="PasswordFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Lozinka je nađena među ukradenima tijekom krađa podataka. Za zaštitu svog računa koristi jedinstvenu lozinku. Želiš li svejedno korisiti ukradenu lozinku?</value>
<value>Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?</value>
</data>
<data name="WeakAndExposedMasterPassword" xml:space="preserve">
<value>Slaba i ugrožena glavna lozinka</value>
<value>Weak and Exposed Master Password</value>
</data>
<data name="WeakPasswordIdentifiedAndFoundInADataBreachAlertDescription" xml:space="preserve">
<value>Slaba lozinka je nađena među ukradenima tijekom krađa podataka. Za zaštitu svog računa koristi jaku i jedinstvenu lozinku. Želiš li svejedno korisiti slabu, ukradenu lozinku?</value>
</data>
<data name="OrganizationSsoIdentifierRequired" xml:space="preserve">
<value>Potreban SSO identifikator organizacije.</value>
</data>
<data name="AddTheKeyToAnExistingOrNewItem" xml:space="preserve">
<value>Dodaj ključ postojećoj ili novoj stavci</value>
</data>
<data name="ThereAreNoItemsInYourVaultThatMatchX" xml:space="preserve">
<value>U tvom trezoru nema stavki za ”{0}„</value>
</data>
<data name="SearchForAnItemOrAddANewItem" xml:space="preserve">
<value>Potraži ili dodaj novu stavku</value>
</data>
<data name="ThereAreNoItemsThatMatchTheSearch" xml:space="preserve">
<value>Nema stavki koje odgovaraju pretrazi</value>
</data>
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
<value>Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour.</value>
</data>
<data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value>
<value>Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?</value>
</data>
</root>

Some files were not shown because too many files have changed in this diff Show More