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

Compare commits

...

42 Commits

Author SHA1 Message Date
Todd Martin
6dae9f5192 Revert "Enable cipher key encryption for QA"
This reverts commit 1e869bf237.
2023-10-09 10:11:35 -04:00
Todd Martin
1e869bf237 Enable cipher key encryption for QA 2023-10-02 11:05:41 -04:00
github-actions[bot]
bb5125a124 Bumped version to 2023.9.2 (#2797)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
(cherry picked from commit 828043ec97)
2023-09-29 16:31:56 -04:00
Federico Maccaroni
ee1cbae589 Cherry-picked [PM-115] Cipher key encryption update (#2421) 2023-09-29 17:29:04 -03:00
github-actions[bot]
4cc5e13b61 Bumped version to 2023.9.1 (#2784)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
(cherry picked from commit b8cef16711)
2023-09-21 18:17:29 -04:00
Jake Fink
99e64b4e3f [PM-3726] prevent legacy user login (#2769)
* [PM-3726] prevent legacy user login

* [PM-3726] prevent unlock or auto key migration if legacy user

* [PM-3726] add legacy checks to lock page and refactor

* [PM-3726] rethrow exception from pin

* formatting

* [PM-3726] add changes to LockViewController, consolidate logout calls

* formatting

* [PM-3726] pr feedback

* generate resx

* formatting

(cherry picked from commit c4f6ae9077)
2023-09-21 11:55:45 -04:00
github-actions[bot]
0f634ff3f0 Bumped version to 2023.9.0 (#2783)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
(cherry picked from commit 8b9658d2c5)
2023-09-20 12:35:25 -04:00
André Bispo
3e2005e5ed [PM-3606] TDE user with 2FA isn't able to autofill on iOS (#2723)
* [PM-3606] Fix 2FA for autofill

* [PM-3606] Fix autofill when user doesn't have a login method available.

* [PM-3606] PR fixes

* [PM-3606] Add logout logic to other extension projects

* [PM-3606] Move code to base class.

* Transform into property instead of field

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

* Remove double ";"

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

* [PM-3606] Fix iOS extension by changing base class of LockPasswordViewController

---------

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
2023-09-09 17:38:14 -04:00
Will Browning
382eee2ed3 [PM-3556] Change anonaddy to addy io (#2711)
* Update AppResources.af.resx

* Update AnonAddy references

* Reverted AnonAddy to AddyIo refactor, keeping text and url changes

---------

Co-authored-by: Andre Rosado <arosado@bitwarden.com>
2023-09-08 15:23:51 +01:00
github-actions[bot]
b0f1dd00ee Autosync the updated translations (#2751)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-09-08 09:33:37 +00:00
André Bispo
5961a001ab [PM-3551] Expired SSO token cached (#2718) 2023-09-08 07:48:37 +01:00
André Bispo
9026dd10e5 [PM-3593] Fix enable biometric on autofill when there is not MP (#2717) 2023-09-07 16:30:46 +01:00
ifernandezdiaz
355261679d Adding missing IDs for Set Password and Update Password pages (#2748) 2023-09-07 11:24:48 -03:00
ifernandezdiaz
7f14ec9b5d QA-508 - Build app for automation CI (#2705)
* Adding build steps for .app

* Uploading .app artifact

* Fixing ARCHIVE_PATH variable

* Fixing missing OutputPath

* Fixing Bitwarden .app file name

* Fixing wrong .app location

* Adding Fede's suggestion

* Update .github/workflows/build.yml

Co-authored-by: Vince Grassia <593223+vgrassia@users.noreply.github.com>

---------

Co-authored-by: Vince Grassia <593223+vgrassia@users.noreply.github.com>
2023-09-06 14:25:59 -03:00
Opeyemi
0c72626916 UPDATE: all workflows (#2743) 2023-09-06 15:30:47 +01:00
André Bispo
f21fae7fea [PM-3382] User cannot select Email as a secondary 2FA option following SSO (#2719)
* [PM-3382] Update mobile client to receive and use SsoEmail2faSessionToken

* [PM-3382] Fix null 2fa email with local email on MP login.
2023-09-06 10:26:11 +01:00
github-actions[bot]
6d4792bc24 Autosync the updated translations (#2741)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-09-01 12:46:27 +00:00
mpbw2
dbadf8c56f [PM-3222] Migration of data from LiteDB to shared pref storage (#2724)
* Migration of data from LiteDB to shared pref storage

* tweaks
2023-08-30 10:55:20 -04:00
André Bispo
4d0f9d1c03 [PM-3543] [PM-3607] Fix password re-prompt when editing and on autofill. (#2713)
* [PM-3543] [PM-3507] Fix password re-prompt when editing and on autofill.
2023-08-30 09:38:46 +01:00
André Bispo
68759fc608 [PM-3547] Change logic to set user key for inactive account (#2715) 2023-08-29 10:28:51 +01:00
github-actions[bot]
47be3d6aef Bumped version to 2023.8.1 (#2730)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-08-28 16:34:38 -04:00
github-actions[bot]
7ec5c8ccfd Bumped version to 2023.8.0 (#2725)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-08-25 19:52:35 -04:00
Jake Fink
819aabb330 don't clear key needed for bio/auto migration in pin migration (#2721) 2023-08-25 09:47:37 -04:00
github-actions[bot]
9c7ff853d7 Autosync the updated translations (#2720)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-08-25 09:03:57 +00:00
mpbw2
e30f9903d1 fix for TDE pref naming collision (#2712)
* fix for TDE pref naming collision

* fix case
2023-08-22 15:51:11 -04:00
André Bispo
249406e3a8 [PM-3545] Fix biometric unlock for autofill (#2710)
* [PM-3545] Fix biometric unlock for autofill

* [PM-3545] Reuse existing method
2023-08-21 20:30:22 +01:00
github-actions[bot]
8cae840c68 Autosync the updated translations (#2704)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-08-19 14:00:16 +00:00
André Bispo
e274c04107 [PM-3513] Show error SSO policy (#2707)
* [PM-3513] Show API error when SSO policy is enforced.
2023-08-18 23:05:52 +01:00
Robyn MacCallum
7043be67dd Update CODEOWNERS (#2701)
* Update CODEOWNERS

* Update CODEOWNERS
2023-08-18 11:20:26 -04:00
Federico Maccaroni
afb8c515d6 [PM-3071] Remove share on save toggle on Send view (#2659)
* PM-3071 Removed share on save toggle on Send view and now it's done automatically, same for copy after saving from the Share extension

* PM-3071 Fix alignments on Share extension send view
2023-08-17 16:42:08 -03:00
Todd Martin
bfcfd367dd Trusted Device Encryption feature (#2656)
* [PM-1208] Add Device approval options screen. View model waiting for additional logic to be added.

* [PM-1208] Add device related api endpoint. Add AccoundDecryptOptions model and property to user Account.

* [PM-1208] Add continue button and not you option

* [PM-1379] add DeviceTrustCryptoService with establish trust logic (#2535)

* [PM-1379] add DeviceCryptoService with establish trust logic

* PM-1379 update api location and other minor refactors

* pm-1379 fix encoding

* update trusted device keys api call to Put

* [PM-1379] rename DeviceCryptoService to DeviceTrustCryptoService
- refactors to prevent side effects

* [PM-1379] rearrange methods in DeviceTrustCryptoService

* [PM-1379] rearrange methods in abstraction

* [PM-1379] deconstruct tuples

* [PM-1379] remove extra tasks

* [PM-2583] Answer auth request with mp field as null if doesn't have it. (#2609)

* [PM-2287][PM-2289][PM-2293] Approval Options (#2608)

* [PM-2293] Add AuthRequestType to PasswordlessLoginPage.

* [PM-2293] Add Actions to ApproveWithDevicePage

* [PM-2293] Change screen text based on AuthRequestType

* [PM-2293] Refactor AuthRequestType enum. Add label. Remove unnecessary actions.

* [PM-2293] Change boolean variable expression.

* [PM-2293] Trust device after admin request login.

* code format

* [PM-2287] Add trust device to master password unlock. Change trust device method. Remove email from SSO login page.

* [PM-2293] Fix state variable get set.

* [PM-2287][PM-2289][PM-2293] Rename method

* [PM-1201] Change timeout actions available based on hasMasterPassword (#2610)

* [PM-1201] Change timeout actions available based on hasMasterPassword

* [PM-2731] add user key and master key types

* [PM-2713] add new state for new keys and obsolete old ones
- UserKey
- MasterKey
- UserKeyMasterKey (enc UserKey from User Table)

* [PM-271] add UserKey and MasterKey support to crypto service

* [PM-2713] rename key hash to password hash & begin add methods to crypto service

* [PM-2713] continue organizing crypto service

* [PM-2713] more updates to crypto service

* [PM-2713] add new pin methods to state service

* [PM-2713] fix signature of GetUserKeyPin

* [PM-2713] add make user key method to crypto service

* [PM-2713] refresh pin key when setting user key

* [PM-2713] use new MakeMasterKey method

* [PM-2713] add toggle method to crypto service for keys

* [PM-2713] converting calls to new crypto service api

* [PM-2713] add migration for pin on lock screens

* [PM-2713] more conversions to new crypto service api

* [PM-2713] convert cipher service and others to crypto service api

* [PM-2713] More conversions to crypto api

* [PM-2713] use new crypto service api in auth service

* [PM-2713] remove unused cached values in crypto service

* [PM-2713] set decrypt and set user key in login helper

* fix bad merge

* Update crypto service api call to fix build

* [PM-1208] Fix app resource file

* [PM-1208] Fix merge

* [PM-1208] Fix merge

* [PM-2713] optimize async code in crypto service

* [PM-2713] rename password hash to master key hash

* [PM-2713] fix casting issues and pin

* [PM-2713] remove extra comment

* [PM-2713] remove broken casting

* [PM-2297] Login with trusted device (Flow 2) (#2623)

* [PM-2297] Add DecryptUserKeyWithDeviceKey method

* [PM-2297] Add methods to DeviceTrustCryptoService update decryption options model

* [PM-2297] Update account decryption options model

* [PM-2297] Fix TrustedDeviceOption and DeviceResponse model. Change StateService device key get set to have default user id

* [PM-2297] Update navigation to decryption options

* [PM-2297] Add missing action navigations to iOS extensions

* [PM-2297] Fix trust device bug/typo

* [PM-2297] Fix model bug

* [PM-2297] Fix state var crash

* [PM-2297] Add trust device login logic to auth service

* [PM-2297] Refactor auth service key connector code

* [PM-2297] Remove reconciledOptions for deviceKey in state service

* [PM-2297] Remove unnecessary user id params

* [PM-2289] [PM-2293] TDE Login with device Admin Request (#2642)

* [PM-2713] deconstruct new key pair

* [PM-2713] rename PrivateKey methods to UserPrivateKey on crypto service

* [PM-2713] rename PinLockEnum to PinLockType

* [PM-2713] don't pass user key as param when encrypting

* [PM-2713] rename toggle method, don't reset enc user key

* [PM-2713] pr feedback

* [PM-2713] PR feedback

* [PM-2713] rename get pin lock type method

* [PM-2713] revert feedback for build

* [PM-2713] rename state methods

* [PM-2713] combine makeDataEncKey methods

* [PM-2713] consolidate attachment key creation
- also fix ios files missed during symbol rename

* [PM-2713] replace generic with inherited class

* rename account keys to be more descriptive

* [PM-2713] add auto unlock key to mobile

* [PM-1208] Add TDE flows for new users (#2655)

* [PM-1208] Create new user on SSO. Logout if not password is setup or has pending admin auth request.

* [PM-1208] Fix new user UserKey decryption.

* [PM-1208] Add new user continue to vault logic. Auto enrol user on continue.

* [PM-1208] Trust device only if needed

* [PM-1208] Add logic for New User SSO.

* [PM-1208] Add logic for New User SSO (missing file).

* [PM-2713] set user key on set password page

* [PM-2713] set enc user key during kc onboarding

* fix formatting

* [PM-2713] make method async again
- returning null from a task thats not async throws

* [PM-2713] clear service cache when adding new account

* Fix build after merge

* [PM-3313] Fix Android SSO Login (#2663)

* [PM-3313] Catch exception on AuthPendingRequest

* [PM-3313] Fix lock timeout action if user doesn't have a master password.

* code format

* [PM-3313] Null email in Approval Options screen (#2664)

* [PM-3313] Fix null email in approval options screen

* [PM-3320][PM-3321] Fix labels and UI tweaks (#2666)

* [PM-3320] Fix UI copy and remember me default ON.

* [PM-3321] Fix UI on Log in with device screen.

* [PM-3337] Fix admin request deny error (#2669)

* [PM-3342] Not you button logs user out. (#2672)

* [PM-3319] Check for admin request in Lock page (#2668)

* [PM-3319] Ignore admin auth request when choosing mp as decryption option.

* [PM-2289] Change header title based on auth request type (#2670)

* [PM-2289] Change header title based on auth request type

* [PM-3333] Check for purged admin auth requests (#2671)

* [PM-3333] Check for purged admin auth requests

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

---------

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

* [PM-3341] Vault Timeout Action not persisted correctly (#2673)

* [PM-3341] Fix timeout action change when navigating

* [PM-3357] Fix copy for Login Initiated (#2674)

* [PM-3362] Fix auth request approval (#2675)

* [PM-3362] Fix auth request approval

* [PM-3362] Add new exception type

* [PM-3102] Update Master password reprompt to be based on MP instead of Key Connector (#2653)

* PM-3102 Added check to see if a user has master password set replacing previous usage of key connector.

* PM-3102 Fix formatting

* [PM-2713] Final merge from Key Migration branch to TDE Feature branch (#2667)

* [PM-2713] add async to key connector service methods

* [PM-2713] rename ephemeral pin key

* add state for biometric key and accept UserKey instead of string for auto key

* Get UserKey from bio state on unlock

* PM-2713 Fix auto-migrating EncKeyEncrypted into MasterKey encrypted UserKey when requesting DecryptUserKeyWithMasterKeyAsync is called

* renaming bio key and fix build

* PM-3194 Fix biometrics button to be shown on upgrade when no UserKey is present yet

* revert removal of key connector service from auth service

* PM-2713 set user key when using KC

* clear enc user key after migration

* use is true for nullable bool

* PR feedback, refactor kc service

---------

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

* Fix app fresh install user login with master password. (#2676)

* [PM-3303] Fix biometric login after key migration (#2679)

* [PM-3303] Add condition to biometric unlock

* [PM-3381] Fix TDE login 2FA flow (#2678)

* [PM-3381] Check for vault lock on 2FA screen

* [PM-3381] Move logic to ViewModel

* [PM-3381] Fix null vm error

* [PM-3379] Fix key rotation on trusted device. (#2680)

* [PM-3381] Update login flows (#2683)

* [PM-3381] Update login flows

* [PM-3381] Remove _authingWithSso parameter

* PM-3385 Fix MP reprompt item level when no MP hash is stored like logging in with TDE. Also refactor code to be more maintainable (#2687)

* PM-3386 Fix MP reprompt / OTP decision to be also based on the master key hash. (#2688)

* PM-3450 Fix has master password with mp key hash check (#2689)

* [PM-3394] Fix login with device for passwordless approvals (#2686)

* set activeUserId to null when logging in a new account
- Also stop the user key from being set in inactive accounts

* get token for login with device if approving device doesn't have master key

* add comment

* simplify logic

* check for route instead of using isAuthenticated
- we don't clear the user id when logging in new account
- this means we can't trust the state service, so we have to base our logic off the route in login with device

* use authenticated auth request for tde login with device

* [PM-3394] Add authingWithSso parameter to LoginPasswordlessRequestPage.

* pr feedback

* [PM-3394] Refactor condition

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

---------

Co-authored-by: André Bispo <abispo@bitwarden.com>
Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

* [PM-3462] Handle force password reset on mobile with TDE (#2694)

* [PM-3462] Handle force password reset on mobile with TDE

* [PM-3462] update references to refactored crypto method
- fix kc bug, we were sending private key instead of user key to server
- rename kc service method to be correct

* [PM-3462] Update TwoFactorPage login logic

* [PM-3462] Added pending admin request check to TwoFactorPage

* [PM-3462] Added new exception types for null keys

---------

Co-authored-by: André Bispo <abispo@bitwarden.com>

* [PM-1029] Fix Async suffix in ApiService. Add UserKeyNullExceptions.

* [PM 3513] Fix passwordless 2fa login with device on mobile (#2700)

* [PM-3513] Fix 2FA for normal login with device with users without mp

* move _userKey

---------

Co-authored-by: André Bispo <abispo@bitwarden.com>

* clear encrypted pin on logout (#2699)

---------

Co-authored-by: André Bispo <abispo@bitwarden.com>
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
2023-08-17 15:19:35 -04:00
Federico Maccaroni
a23454bc53 [PM-3508] Fix Release iPhoneSimulator configuration for iOS / Extensions (#2698)
* PM-3508 Fix Release iPhoneSimulator configuration for iOS / Extensions

* PM-3508 Fix --deep space on watch app references
2023-08-16 15:55:34 -03:00
mpbw2
6f7100ae4f lib updates (#2696) 2023-08-16 12:48:54 -04:00
ifernandezdiaz
01ac20e6e4 Adding missing AutomationIDs on LoginPasswordlessRequestListPage (#2693) 2023-08-16 11:09:07 -03:00
github-actions[bot]
8474f536ff Autosync the updated translations (#2677)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
2023-08-15 13:48:01 +00:00
Daniel James Smith
f426c0e370 Create section for crowdin sync (#2692) 2023-08-15 15:47:08 +02:00
Daniel James Smith
420dc09fd1 Update codeowners (#2691)
* Set team-leads-eng as owners for translations

This is needed to Crowdin sync PRs can be merged.

* Add team-tools as owner of the email-forwarders

* Fix unescaped whitespace

* Remove team-leads-eng from owning English resources
2023-08-15 15:32:57 +02:00
Federico Maccaroni
6d4793d592 [PM-1768] Set up CODEOWNERS file (#2464)
* PM-1768 Add CODEOWNERS file with some initial setup of folders that don't need to be moved and can have their owners assigned already.

* Update CODEOWNERS

Removed entire projects owners cause I didn't consider auth inside of the extensions.
2023-08-10 13:58:03 -03:00
Bernd Schoolmann
eea7c6b7d7 [PM-2901] Synchronize sends on send creation/update/deletion notification (#2606)
* Add sync on send create/update/delete notification

* Update send notifications to only sync sends

* Fix incorrect notification type in PushNotificationListenerService

Co-authored-by: aj-rosado <109146700+aj-rosado@users.noreply.github.com>

* Invert if to improve readability

* Simplify shouldUpdate logic in SyncUpsertSendAsync

* Further simplify SyncService code

* Fix if condition in SyncService

Co-authored-by: aj-rosado <109146700+aj-rosado@users.noreply.github.com>

* Fixed whitespace formatting

---------

Co-authored-by: aj-rosado <109146700+aj-rosado@users.noreply.github.com>
Co-authored-by: Andre Rosado <arosado@bitwarden.com>
2023-08-08 14:59:42 +01:00
Bernd Schoolmann
ec93a61275 [PM-3092] Clarify argon2 ios autofill warning (#2630)
* Clarify argon2 ios warning

* Update Argon2 insufficient memory warning message
2023-08-07 10:41:40 -04:00
Federico Maccaroni
c34d1da6e6 PM-3298 Updated region selector to be logging in on and also its options (#2657) 2023-08-04 11:44:39 -03:00
github-actions[bot]
c4e64e082b Autosync the updated translations (#2660)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2023-08-04 10:55:27 +00:00
228 changed files with 14870 additions and 10412 deletions

29
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,29 @@
# Please sort lines alphabetically, this will ensure we don't accidentally add duplicates.
#
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
# The following owners will be the default owners for everything in the repo.
# Unless a later match takes precedence
# @bitwarden/tech-leads
## Auth team files ##
## Platform team files ##
appIcons @bitwarden/team-platform-dev
build.cake @bitwarden/team-platform-dev
## Vault team files ##
src/watchOS @bitwarden/team-vault-dev
## Tools team files ##
src/Core/Services/EmailForwarders @bitwarden/team-tools-dev
## Crowdin Sync files ##
src/App/Resources @bitwarden/tech-leads
src/watchOS/bitwarden/bitwarden\ WatchKit\ Extension/Localization @bitwarden/tech-leads
## Locales ##
src/App/Resources/AppResources.Designer.cs
src/App/Resources/AppResources.resx
src/watchOS/bitwarden/bitwarden\ WatchKit\ Extension/Localization/en.lproj

View File

@@ -525,7 +525,7 @@ jobs:
submodules: 'true' submodules: 'true'
- name: Login to Azure - CI Subscription - name: Login to Azure - CI Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf # v1.4.3 uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
with: with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
@@ -667,6 +667,22 @@ jobs:
$configuration = "AppStore"; $configuration = "AppStore";
$platform = "iPhone"; $platform = "iPhone";
Write-Output "########################################"
Write-Output "##### Archive $configuration Configuration for $platform Platform"
Write-Output "########################################"
msbuild "$($env:GITHUB_WORKSPACE + "/src/iOS/iOS.csproj")" "/p:Platform=$platform" `
"/p:Configuration=$configuration" "/p:ArchiveOnBuild=true" "/t:`"Build`""
Write-Output "########################################"
Write-Output "##### Done"
Write-Output "########################################"
shell: pwsh
- name: Archive Build for Mobile Automation
run: |
$configuration = "Release";
$platform = "iPhoneSimulator";
Write-Output "########################################" Write-Output "########################################"
Write-Output "##### Archive $configuration Configuration for $platform Platform" Write-Output "##### Archive $configuration Configuration for $platform Platform"
Write-Output "########################################" Write-Output "########################################"
@@ -689,6 +705,15 @@ jobs:
-exportOptionsPlist $EXPORT_OPTIONS_PATH -exportOptionsPlist $EXPORT_OPTIONS_PATH
shell: bash shell: bash
- name: Export .app for Automation CI
run: |
ARCHIVE_PATH="./src/iOS/bin/iPhoneSimulator/Release/BitwardeniOS.app"
EXPORT_PATH="./bitwarden-export"
zip -r -q BitwardeniOS.app.zip $ARCHIVE_PATH
mv BitwardeniOS.app.zip $EXPORT_PATH
shell: bash
- name: Copy all dSYMs files to upload - name: Copy all dSYMs files to upload
run: | run: |
ARCHIVE_DSYMS_PATH="$HOME/Library/Developer/Xcode/Archives/*/*.xcarchive/dSYMs" ARCHIVE_DSYMS_PATH="$HOME/Library/Developer/Xcode/Archives/*/*.xcarchive/dSYMs"
@@ -711,6 +736,13 @@ jobs:
./bitwarden-export/dSYMs/*.* ./bitwarden-export/dSYMs/*.*
if-no-files-found: error if-no-files-found: error
- name: Upload .app file for Automation CI
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
with:
name: BitwardeniOS.app.zip
path: ./bitwarden-export/BitwardeniOS.app.zip
if-no-files-found: error
- name: Install AppCenter CLI - name: Install AppCenter CLI
if: | if: |
(github.ref == 'refs/heads/master' (github.ref == 'refs/heads/master'
@@ -779,7 +811,7 @@ jobs:
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- name: Login to Azure - CI Subscription - name: Login to Azure - CI Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf # v1.4.3 uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
with: with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
@@ -845,7 +877,7 @@ jobs:
fi fi
- name: Login to Azure - CI Subscription - name: Login to Azure - CI Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf # v1.4.3 uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
if: failure() if: failure()
with: with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}

View File

@@ -18,13 +18,13 @@ jobs:
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- name: Login to Azure - CI Subscription - name: Login to Azure - CI Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf # v1.4.3 uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
with: with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
- name: Retrieve secrets - name: Retrieve secrets
id: retrieve-secrets id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/get-keyvault-secrets@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
keyvault: "bitwarden-ci" keyvault: "bitwarden-ci"
secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase" secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase"

View File

@@ -12,6 +12,6 @@ jobs:
pull-requests: write pull-requests: write
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- uses: actions/labeler@ba790c862c380240c6d5e7427be5ace9a05c754b # v4.0.3 - uses: actions/labeler@ac9175f8a1f3625fd0d4fb234536d26811351594 # v4.3.0
with: with:
sync-labels: true sync-labels: true

View File

@@ -38,11 +38,11 @@ jobs:
fi fi
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Check Release Version - name: Check Release Version
id: version id: version
uses: bitwarden/gh-actions/release-version-check@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/release-version-check@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
release-type: ${{ github.event.inputs.release_type }} release-type: ${{ github.event.inputs.release_type }}
project-type: xamarin project-type: xamarin
@@ -87,7 +87,7 @@ jobs:
- name: Create release - name: Create release
if: ${{ github.event.inputs.release_type != 'Dry Run' }} if: ${{ github.event.inputs.release_type != 'Dry Run' }}
uses: ncipollo/release-action@40bb172bd05f266cf9ba4ff965cb61e9ee5f6d01 # v1.9.0 uses: ncipollo/release-action@6c75be85e571768fa31b40abf38de58ba0397db5 # v1.13.0
with: with:
artifacts: "./com.x8bit.bitwarden.aab/com.x8bit.bitwarden.aab, artifacts: "./com.x8bit.bitwarden.aab/com.x8bit.bitwarden.aab,
./com.x8bit.bitwarden.apk/com.x8bit.bitwarden.apk, ./com.x8bit.bitwarden.apk/com.x8bit.bitwarden.apk,
@@ -126,7 +126,7 @@ jobs:
if: inputs.fdroid_publish if: inputs.fdroid_publish
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Download F-Droid .apk artifact - name: Download F-Droid .apk artifact
if: ${{ github.event.inputs.release_type != 'Dry Run' }} if: ${{ github.event.inputs.release_type != 'Dry Run' }}
@@ -147,9 +147,9 @@ jobs:
name: com.x8bit.bitwarden-fdroid.apk name: com.x8bit.bitwarden-fdroid.apk
- name: Set up Node - name: Set up Node
uses: actions/setup-node@1f8c6b94b26d0feae1e387ca63ccbdc44d27b561 # v2.5.1 uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1
with: with:
node-version: '10.x' node-version: '16.x'
- name: Set up F-Droid server - name: Set up F-Droid server
run: | run: |

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- name: 'Run stale action' - name: 'Run stale action'
uses: actions/stale@3cc123766321e9f15a6676375c154ccffb12a358 # v5.0.0 uses: actions/stale@f7176fd3007623b69d27091f9b9d4ab7995f0a06 # v5.2.1
with: with:
stale-issue-label: 'needs-reply' stale-issue-label: 'needs-reply'
stale-pr-label: 'needs-changes' stale-pr-label: 'needs-changes'

View File

@@ -14,7 +14,7 @@ jobs:
version_number: ${{ steps.version.outputs.new-version }} version_number: ${{ steps.version.outputs.new-version }}
steps: steps:
- name: Checkout Branch - name: Checkout Branch
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Calculate bumped version - name: Calculate bumped version
id: version id: version
@@ -35,7 +35,5 @@ jobs:
name: Bump version to ${{ needs.setup.outputs.version_number }} name: Bump version to ${{ needs.setup.outputs.version_number }}
needs: setup needs: setup
uses: ./.github/workflows/version-bump.yml uses: ./.github/workflows/version-bump.yml
secrets:
AZURE_PROD_KV_CREDENTIALS: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
with: with:
version_number: ${{ needs.setup.outputs.version_number }} version_number: ${{ needs.setup.outputs.version_number }}

View File

@@ -12,9 +12,6 @@ on:
version_number: version_number:
required: true required: true
type: string type: string
secrets:
AZURE_PROD_KV_CREDENTIALS:
required: true
jobs: jobs:
bump_version: bump_version:
@@ -22,22 +19,22 @@ jobs:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- name: Checkout Branch - name: Checkout Branch
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- name: Login to Azure - CI Subscription - name: Login to Azure - CI Subscription
uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf # v1.4.3 uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7
with: with:
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
- name: Retrieve secrets - name: Retrieve secrets
id: retrieve-secrets id: retrieve-secrets
uses: bitwarden/gh-actions/get-keyvault-secrets@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/get-keyvault-secrets@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
keyvault: "bitwarden-ci" keyvault: "bitwarden-ci"
secrets: "github-gpg-private-key, github-gpg-private-key-passphrase" secrets: "github-gpg-private-key, github-gpg-private-key-passphrase"
- name: Import GPG key - name: Import GPG key
uses: crazy-max/ghaction-import-gpg@111c56156bcc6918c056dbef52164cfa583dc549 # v5.2.0 uses: crazy-max/ghaction-import-gpg@d6f3f49f3345e29369fe57596a3ca8f94c4d2ca7 # v5.4.0
with: with:
gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }} gpg_private_key: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key }}
passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }} passphrase: ${{ steps.retrieve-secrets.outputs.github-gpg-private-key-passphrase }}
@@ -48,31 +45,31 @@ jobs:
run: git switch -c version_bump_${{ github.event.inputs.version_number }} run: git switch -c version_bump_${{ github.event.inputs.version_number }}
- name: Bump Version - Android XML - name: Bump Version - Android XML
uses: bitwarden/gh-actions/version-bump@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/version-bump@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
version: ${{ github.event.inputs.version_number }} version: ${{ github.event.inputs.version_number }}
file_path: "./src/Android/Properties/AndroidManifest.xml" file_path: "./src/Android/Properties/AndroidManifest.xml"
- name: Bump Version - iOS.Autofill - name: Bump Version - iOS.Autofill
uses: bitwarden/gh-actions/version-bump@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/version-bump@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
version: ${{ github.event.inputs.version_number }} version: ${{ github.event.inputs.version_number }}
file_path: "./src/iOS.Autofill/Info.plist" file_path: "./src/iOS.Autofill/Info.plist"
- name: Bump Version - iOS.Extension - name: Bump Version - iOS.Extension
uses: bitwarden/gh-actions/version-bump@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/version-bump@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
version: ${{ github.event.inputs.version_number }} version: ${{ github.event.inputs.version_number }}
file_path: "./src/iOS.Extension/Info.plist" file_path: "./src/iOS.Extension/Info.plist"
- name: Bump Version - iOS.ShareExtension - name: Bump Version - iOS.ShareExtension
uses: bitwarden/gh-actions/version-bump@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/version-bump@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
version: ${{ github.event.inputs.version_number }} version: ${{ github.event.inputs.version_number }}
file_path: "./src/iOS.ShareExtension/Info.plist" file_path: "./src/iOS.ShareExtension/Info.plist"
- name: Bump Version - iOS - name: Bump Version - iOS
uses: bitwarden/gh-actions/version-bump@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/version-bump@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67
with: with:
version: ${{ github.event.inputs.version_number }} version: ${{ github.event.inputs.version_number }}
file_path: "./src/iOS/Info.plist" file_path: "./src/iOS/Info.plist"

View File

@@ -8,4 +8,4 @@ on:
jobs: jobs:
call-workflow: call-workflow:
uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@34ecb67b2a357795dc893549df0795e7383ff50f uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@4a7ddc1b38ca5cb4e3e43578f4df5cabe4f55a67

View File

@@ -77,21 +77,21 @@
<PackageReference Include="Portable.BouncyCastle"> <PackageReference Include="Portable.BouncyCastle">
<Version>1.9.0</Version> <Version>1.9.0</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.5.1.1" /> <PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.6.1.3" />
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.16" /> <PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.18" />
<PackageReference Include="Xamarin.AndroidX.CardView" Version="1.0.0.19" /> <PackageReference Include="Xamarin.AndroidX.CardView" Version="1.0.0.21" />
<PackageReference Include="Xamarin.AndroidX.Core" Version="1.10.0" /> <PackageReference Include="Xamarin.AndroidX.Core" Version="1.10.1.2" />
<PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.3.1.1" /> <PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.4.0.2" />
<PackageReference Include="Xamarin.Essentials"> <PackageReference Include="Xamarin.Essentials">
<Version>1.7.5</Version> <Version>1.8.0</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Xamarin.Firebase.Messaging"> <PackageReference Include="Xamarin.Firebase.Messaging">
<Version>123.1.1.1</Version> <Version>123.1.2.2</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.8.0" /> <PackageReference Include="Xamarin.Google.Android.Material" Version="1.9.0.2" />
<PackageReference Include="Xamarin.Google.Dagger" Version="2.44.2.1" /> <PackageReference Include="Xamarin.Google.Dagger" Version="2.46.1.2" />
<PackageReference Include="Xamarin.GooglePlayServices.SafetyNet"> <PackageReference Include="Xamarin.GooglePlayServices.SafetyNet">
<Version>118.0.1.3</Version> <Version>118.0.1.5</Version>
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -68,9 +68,9 @@ namespace Bit.Droid
ServiceContainer.Register<IDeleteAccountActionFlowExecutioner>("deleteAccountActionFlowExecutioner", deleteAccountActionFlowExecutioner); ServiceContainer.Register<IDeleteAccountActionFlowExecutioner>("deleteAccountActionFlowExecutioner", deleteAccountActionFlowExecutioner);
var verificationActionsFlowHelper = new VerificationActionsFlowHelper( var verificationActionsFlowHelper = new VerificationActionsFlowHelper(
ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService"),
ServiceContainer.Resolve<IPasswordRepromptService>("passwordRepromptService"), ServiceContainer.Resolve<IPasswordRepromptService>("passwordRepromptService"),
ServiceContainer.Resolve<ICryptoService>("cryptoService")); ServiceContainer.Resolve<ICryptoService>("cryptoService"),
ServiceContainer.Resolve<IUserVerificationService>());
ServiceContainer.Register<IVerificationActionsFlowHelper>("verificationActionsFlowHelper", verificationActionsFlowHelper); ServiceContainer.Register<IVerificationActionsFlowHelper>("verificationActionsFlowHelper", verificationActionsFlowHelper);
var accountsManager = new AccountsManager( var accountsManager = new AccountsManager(
@@ -156,10 +156,10 @@ namespace Bit.Droid
messagingService, broadcasterService); messagingService, broadcasterService);
var autofillHandler = new AutofillHandler(stateService, messagingService, clipboardService, var autofillHandler = new AutofillHandler(stateService, messagingService, clipboardService,
platformUtilsService, new LazyResolve<IEventService>()); platformUtilsService, new LazyResolve<IEventService>());
var biometricService = new BiometricService(stateService);
var cryptoFunctionService = new PclCryptoFunctionService(cryptoPrimitiveService); var cryptoFunctionService = new PclCryptoFunctionService(cryptoPrimitiveService);
var cryptoService = new CryptoService(stateService, cryptoFunctionService); var cryptoService = new CryptoService(stateService, cryptoFunctionService);
var passwordRepromptService = new MobilePasswordRepromptService(platformUtilsService, cryptoService); var biometricService = new BiometricService(stateService, cryptoService);
var passwordRepromptService = new MobilePasswordRepromptService(platformUtilsService, cryptoService, stateService);
ServiceContainer.Register<ISynchronousStorageService>(preferencesStorage); ServiceContainer.Register<ISynchronousStorageService>(preferencesStorage);
ServiceContainer.Register<IBroadcasterService>("broadcasterService", broadcasterService); ServiceContainer.Register<IBroadcasterService>("broadcasterService", broadcasterService);

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?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.7.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.9.2" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" /> <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.NFC" />

View File

@@ -2,6 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Android.OS; using Android.OS;
using Android.Security.Keystore; using Android.Security.Keystore;
using Bit.App.Services;
using Bit.Core.Abstractions; using Bit.Core.Abstractions;
using Bit.Core.Services; using Bit.Core.Services;
using Java.Security; using Java.Security;
@@ -9,10 +10,8 @@ using Javax.Crypto;
namespace Bit.Droid.Services namespace Bit.Droid.Services
{ {
public class BiometricService : IBiometricService public class BiometricService : BaseBiometricService
{ {
private readonly IStateService _stateService;
private const string KeyName = "com.8bit.bitwarden.biometric_integrity"; private const string KeyName = "com.8bit.bitwarden.biometric_integrity";
private const string KeyStoreName = "AndroidKeyStore"; private const string KeyStoreName = "AndroidKeyStore";
@@ -24,14 +23,14 @@ namespace Bit.Droid.Services
private readonly KeyStore _keystore; private readonly KeyStore _keystore;
public BiometricService(IStateService stateService) public BiometricService(IStateService stateService, ICryptoService cryptoService)
: base(stateService, cryptoService)
{ {
_stateService = stateService;
_keystore = KeyStore.GetInstance(KeyStoreName); _keystore = KeyStore.GetInstance(KeyStoreName);
_keystore.Load(null); _keystore.Load(null);
} }
public async Task<bool> SetupBiometricAsync(string bioIntegritySrcKey = null) public override async Task<bool> SetupBiometricAsync(string bioIntegritySrcKey = null)
{ {
if (Build.VERSION.SdkInt >= BuildVersionCodes.M) if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{ {
@@ -41,7 +40,7 @@ namespace Bit.Droid.Services
return true; return true;
} }
public async Task<bool> IsSystemBiometricIntegrityValidAsync(string bioIntegritySrcKey = null) public override async Task<bool> IsSystemBiometricIntegrityValidAsync(string bioIntegritySrcKey = null)
{ {
if (Build.VERSION.SdkInt < BuildVersionCodes.M) if (Build.VERSION.SdkInt < BuildVersionCodes.M)
{ {

View File

@@ -1,4 +1,5 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Bit.Core.Enums;
namespace Bit.App.Abstractions namespace Bit.App.Abstractions
{ {
@@ -6,10 +7,8 @@ namespace Bit.App.Abstractions
{ {
string[] ProtectedFields { get; } string[] ProtectedFields { get; }
Task<bool> ShowPasswordPromptAsync(); Task<bool> PromptAndCheckPasswordIfNeededAsync(CipherRepromptType repromptType = CipherRepromptType.Password);
Task<(string password, bool valid)> ShowPasswordPromptAndGetItAsync(); Task<(string password, bool valid)> ShowPasswordPromptAndGetItAsync();
Task<bool> Enabled();
} }
} }

View File

@@ -16,9 +16,9 @@
<PackageReference Include="Plugin.Fingerprint" Version="2.1.5" /> <PackageReference Include="Plugin.Fingerprint" Version="2.1.5" />
<PackageReference Include="SkiaSharp.Views.Forms" Version="2.88.3" /> <PackageReference Include="SkiaSharp.Views.Forms" Version="2.88.3" />
<PackageReference Include="Xamarin.CommunityToolkit" Version="2.0.6" /> <PackageReference Include="Xamarin.CommunityToolkit" Version="2.0.6" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.5" /> <PackageReference Include="Xamarin.Essentials" Version="1.8.0" />
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.4.11.982" /> <PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.4.11.982" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" /> <PackageReference Include="Xamarin.Forms" Version="5.0.0.2612" />
<PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" /> <PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
<PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" /> <PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />
<PackageReference Include="MessagePack" Version="2.4.59" /> <PackageReference Include="MessagePack" Version="2.4.59" />

View File

@@ -7,17 +7,17 @@ using Bit.App.Utilities;
using Bit.Core; using Bit.Core;
using Bit.Core.Abstractions; using Bit.Core.Abstractions;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
using Bit.Core.Models.Response;
using Bit.Core.Services;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel; using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Essentials;
using Xamarin.Forms; using Xamarin.Forms;
namespace Bit.App.Pages namespace Bit.App.Pages
{ {
public class HomeViewModel : BaseViewModel public class HomeViewModel : BaseViewModel
{ {
private const string LOGGING_IN_ON_US = "bitwarden.com";
private const string LOGGING_IN_ON_EU = "bitwarden.eu";
private readonly IStateService _stateService; private readonly IStateService _stateService;
private readonly IMessagingService _messagingService; private readonly IMessagingService _messagingService;
private readonly IPlatformUtilsService _platformUtilsService; private readonly IPlatformUtilsService _platformUtilsService;
@@ -30,8 +30,6 @@ namespace Bit.App.Pages
private bool _rememberEmail; private bool _rememberEmail;
private string _email; private string _email;
private string _selectedEnvironmentName; private string _selectedEnvironmentName;
private bool _isEmailEnabled;
private bool _canLogin;
private bool _displayEuEnvironment; private bool _displayEuEnvironment;
public HomeViewModel() public HomeViewModel()
@@ -86,7 +84,7 @@ namespace Bit.App.Pages
set => SetProperty(ref _selectedEnvironmentName, value); set => SetProperty(ref _selectedEnvironmentName, value);
} }
public string RegionText => $"{AppResources.Region}:"; public string RegionText => $"{AppResources.LoggingInOn}:";
public bool CanContinue => !string.IsNullOrEmpty(Email); public bool CanContinue => !string.IsNullOrEmpty(Email);
public FormattedString CreateAccountText public FormattedString CreateAccountText
@@ -167,12 +165,12 @@ namespace Bit.App.Pages
{ {
_displayEuEnvironment = await _configService.GetFeatureFlagBoolAsync(Constants.DisplayEuEnvironmentFlag); _displayEuEnvironment = await _configService.GetFeatureFlagBoolAsync(Constants.DisplayEuEnvironmentFlag);
var options = _displayEuEnvironment var options = _displayEuEnvironment
? new string[] { AppResources.US, AppResources.EU, AppResources.SelfHosted } ? new string[] { LOGGING_IN_ON_US, LOGGING_IN_ON_EU, AppResources.SelfHosted }
: new string[] { AppResources.US, AppResources.SelfHosted }; : new string[] { LOGGING_IN_ON_US, AppResources.SelfHosted };
await Device.InvokeOnMainThreadAsync(async () => await Device.InvokeOnMainThreadAsync(async () =>
{ {
var result = await Page.DisplayActionSheet(AppResources.DataRegion, AppResources.Cancel, null, options); var result = await Page.DisplayActionSheet(AppResources.LoggingInOn, AppResources.Cancel, null, options);
if (result is null || result == AppResources.Cancel) if (result is null || result == AppResources.Cancel)
{ {
@@ -185,7 +183,7 @@ namespace Bit.App.Pages
return; return;
} }
await _environmentService.SetUrlsAsync(result == AppResources.EU ? EnvironmentUrlData.DefaultEU : EnvironmentUrlData.DefaultUS); await _environmentService.SetUrlsAsync(result == LOGGING_IN_ON_EU ? EnvironmentUrlData.DefaultEU : EnvironmentUrlData.DefaultUS);
await _configService.GetAsync(true); await _configService.GetAsync(true);
SelectedEnvironmentName = result; SelectedEnvironmentName = result;
}); });
@@ -198,17 +196,17 @@ namespace Bit.App.Pages
{ {
await _environmentService.SetUrlsAsync(EnvironmentUrlData.DefaultUS); await _environmentService.SetUrlsAsync(EnvironmentUrlData.DefaultUS);
environmentsSaved = EnvironmentUrlData.DefaultUS; environmentsSaved = EnvironmentUrlData.DefaultUS;
SelectedEnvironmentName = AppResources.US; SelectedEnvironmentName = LOGGING_IN_ON_US;
return; return;
} }
if (environmentsSaved.Base == EnvironmentUrlData.DefaultUS.Base) if (environmentsSaved.Base == EnvironmentUrlData.DefaultUS.Base)
{ {
SelectedEnvironmentName = AppResources.US; SelectedEnvironmentName = LOGGING_IN_ON_US;
} }
else if (environmentsSaved.Base == EnvironmentUrlData.DefaultEU.Base) else if (environmentsSaved.Base == EnvironmentUrlData.DefaultEU.Base)
{ {
SelectedEnvironmentName = AppResources.EU; SelectedEnvironmentName = LOGGING_IN_ON_EU;
} }
else else
{ {

View File

@@ -46,7 +46,7 @@
<StackLayout StyleClass="box"> <StackLayout StyleClass="box">
<Grid <Grid
StyleClass="box-row" StyleClass="box-row"
IsVisible="{Binding PinLock}" IsVisible="{Binding PinEnabled}"
Padding="0, 10, 0, 0"> Padding="0, 10, 0, 0">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@@ -89,7 +89,7 @@
<Grid <Grid
x:Name="_passwordGrid" x:Name="_passwordGrid"
StyleClass="box-row" StyleClass="box-row"
IsVisible="{Binding PinLock, Converter={StaticResource inverseBool}}" IsVisible="{Binding PinEnabled, Converter={StaticResource inverseBool}}"
Padding="0, 10, 0, 0"> Padding="0, 10, 0, 0">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />

View File

@@ -20,13 +20,14 @@ namespace Bit.App.Pages
private bool _promptedAfterResume; private bool _promptedAfterResume;
private bool _appeared; private bool _appeared;
public LockPage(AppOptions appOptions = null, bool autoPromptBiometric = true) public LockPage(AppOptions appOptions = null, bool autoPromptBiometric = true, bool checkPendingAuthRequests = true)
{ {
_appOptions = appOptions; _appOptions = appOptions;
_autoPromptBiometric = autoPromptBiometric; _autoPromptBiometric = autoPromptBiometric;
InitializeComponent(); InitializeComponent();
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>(); _broadcasterService = ServiceContainer.Resolve<IBroadcasterService>();
_vm = BindingContext as LockPageViewModel; _vm = BindingContext as LockPageViewModel;
_vm.CheckPendingAuthRequests = checkPendingAuthRequests;
_vm.Page = this; _vm.Page = this;
_vm.UnlockedAction = () => Device.BeginInvokeOnMainThread(async () => await UnlockedAsync()); _vm.UnlockedAction = () => Device.BeginInvokeOnMainThread(async () => await UnlockedAsync());
@@ -44,7 +45,7 @@ namespace Bit.App.Pages
{ {
get get
{ {
if (_vm?.PinLock ?? false) if (_vm?.PinEnabled ?? false)
{ {
return _pin; return _pin;
} }
@@ -54,7 +55,7 @@ namespace Bit.App.Pages
public async Task PromptBiometricAfterResumeAsync() public async Task PromptBiometricAfterResumeAsync()
{ {
if (_vm.BiometricLock) if (_vm.BiometricEnabled)
{ {
await Task.Delay(500); await Task.Delay(500);
if (!_promptedAfterResume) if (!_promptedAfterResume)
@@ -91,13 +92,13 @@ namespace Bit.App.Pages
_vm.FocusSecretEntry += PerformFocusSecretEntry; _vm.FocusSecretEntry += PerformFocusSecretEntry;
if (!_vm.BiometricLock) if (!_vm.BiometricEnabled)
{ {
RequestFocus(SecretEntry); RequestFocus(SecretEntry);
} }
else else
{ {
if (_vm.UsingKeyConnector && !_vm.PinLock) if (!_vm.HasMasterPassword && !_vm.PinEnabled)
{ {
_passwordGrid.IsVisible = false; _passwordGrid.IsVisible = false;
_unlockButton.IsVisible = false; _unlockButton.IsVisible = false;

View File

@@ -7,6 +7,7 @@ using Bit.App.Utilities;
using Bit.Core; using Bit.Core;
using Bit.Core.Abstractions; using Bit.Core.Abstractions;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions;
using Bit.Core.Models.Domain; using Bit.Core.Models.Domain;
using Bit.Core.Models.Request; using Bit.Core.Models.Request;
using Bit.Core.Services; using Bit.Core.Services;
@@ -27,27 +28,27 @@ namespace Bit.App.Pages
private readonly IEnvironmentService _environmentService; private readonly IEnvironmentService _environmentService;
private readonly IStateService _stateService; private readonly IStateService _stateService;
private readonly IBiometricService _biometricService; private readonly IBiometricService _biometricService;
private readonly IKeyConnectorService _keyConnectorService; private readonly IUserVerificationService _userVerificationService;
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IWatchDeviceService _watchDeviceService; private readonly IWatchDeviceService _watchDeviceService;
private readonly WeakEventManager<int?> _secretEntryFocusWeakEventManager = new WeakEventManager<int?>(); private readonly WeakEventManager<int?> _secretEntryFocusWeakEventManager = new WeakEventManager<int?>();
private readonly IPolicyService _policyService; private readonly IPolicyService _policyService;
private readonly IPasswordGenerationService _passwordGenerationService; private readonly IPasswordGenerationService _passwordGenerationService;
private IDeviceTrustCryptoService _deviceTrustCryptoService;
private readonly ISyncService _syncService;
private string _email; private string _email;
private string _masterPassword; private string _masterPassword;
private string _pin; private string _pin;
private bool _showPassword; private bool _showPassword;
private bool _pinLock; private PinLockType _pinStatus;
private bool _biometricLock; private bool _pinEnabled;
private bool _biometricEnabled;
private bool _biometricIntegrityValid = true; private bool _biometricIntegrityValid = true;
private bool _biometricButtonVisible; private bool _biometricButtonVisible;
private bool _usingKeyConnector; private bool _hasMasterPassword;
private string _biometricButtonText; private string _biometricButtonText;
private string _loggedInAsText; private string _loggedInAsText;
private string _lockedVerifyText; private string _lockedVerifyText;
private bool _isPinProtected;
private bool _isPinProtectedWithKey;
public LockPageViewModel() public LockPageViewModel()
{ {
@@ -60,21 +61,24 @@ namespace Bit.App.Pages
_environmentService = ServiceContainer.Resolve<IEnvironmentService>("environmentService"); _environmentService = ServiceContainer.Resolve<IEnvironmentService>("environmentService");
_stateService = ServiceContainer.Resolve<IStateService>("stateService"); _stateService = ServiceContainer.Resolve<IStateService>("stateService");
_biometricService = ServiceContainer.Resolve<IBiometricService>("biometricService"); _biometricService = ServiceContainer.Resolve<IBiometricService>("biometricService");
_keyConnectorService = ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService"); _userVerificationService = ServiceContainer.Resolve<IUserVerificationService>();
_logger = ServiceContainer.Resolve<ILogger>("logger"); _logger = ServiceContainer.Resolve<ILogger>("logger");
_watchDeviceService = ServiceContainer.Resolve<IWatchDeviceService>(); _watchDeviceService = ServiceContainer.Resolve<IWatchDeviceService>();
_policyService = ServiceContainer.Resolve<IPolicyService>(); _policyService = ServiceContainer.Resolve<IPolicyService>();
_passwordGenerationService = ServiceContainer.Resolve<IPasswordGenerationService>(); _passwordGenerationService = ServiceContainer.Resolve<IPasswordGenerationService>();
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
_syncService = ServiceContainer.Resolve<ISyncService>();
PageTitle = AppResources.VerifyMasterPassword; PageTitle = AppResources.VerifyMasterPassword;
TogglePasswordCommand = new Command(TogglePassword); TogglePasswordCommand = new Command(TogglePassword);
SubmitCommand = new Command(async () => await SubmitAsync()); SubmitCommand = new Command(async () => await SubmitAsync());
AccountSwitchingOverlayViewModel = new AccountSwitchingOverlayViewModel(_stateService, _messagingService, _logger) AccountSwitchingOverlayViewModel =
{ new AccountSwitchingOverlayViewModel(_stateService, _messagingService, _logger)
AllowAddAccountRow = true, {
AllowActiveAccountSelection = true AllowAddAccountRow = true,
}; AllowActiveAccountSelection = true
};
} }
public string MasterPassword public string MasterPassword
@@ -100,21 +104,21 @@ namespace Bit.App.Pages
}); });
} }
public bool PinLock public bool PinEnabled
{ {
get => _pinLock; get => _pinEnabled;
set => SetProperty(ref _pinLock, value); set => SetProperty(ref _pinEnabled, value);
} }
public bool UsingKeyConnector public bool HasMasterPassword
{ {
get => _usingKeyConnector; get => _hasMasterPassword;
} }
public bool BiometricLock public bool BiometricEnabled
{ {
get => _biometricLock; get => _biometricEnabled;
set => SetProperty(ref _biometricLock, value); set => SetProperty(ref _biometricEnabled, value);
} }
public bool BiometricIntegrityValid public bool BiometricIntegrityValid
@@ -147,12 +151,18 @@ namespace Bit.App.Pages
set => SetProperty(ref _lockedVerifyText, value); set => SetProperty(ref _lockedVerifyText, value);
} }
public bool CheckPendingAuthRequests { get; set; }
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; } public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
public Command SubmitCommand { get; } public Command SubmitCommand { get; }
public Command TogglePasswordCommand { get; } public Command TogglePasswordCommand { get; }
public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye; public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye;
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow; public string PasswordVisibilityAccessibilityText => ShowPassword
? AppResources.PasswordIsVisibleTapToHide
: AppResources.PasswordIsNotVisibleTapToShow;
public Action UnlockedAction { get; set; } public Action UnlockedAction { get; set; }
public event Action<int?> FocusSecretEntry public event Action<int?> FocusSecretEntry
{ {
@@ -162,18 +172,33 @@ namespace Bit.App.Pages
public async Task InitAsync() public async Task InitAsync()
{ {
(_isPinProtected, _isPinProtectedWithKey) = await _vaultTimeoutService.IsPinLockSetAsync(); var pendingRequest = await _stateService.GetPendingAdminAuthRequestAsync();
PinLock = (_isPinProtected && await _stateService.GetPinProtectedKeyAsync() != null) || if (pendingRequest != null && CheckPendingAuthRequests)
_isPinProtectedWithKey;
BiometricLock = await _vaultTimeoutService.IsBiometricLockSetAsync() && await _cryptoService.HasKeyAsync();
// Users with key connector and without biometric or pin has no MP to unlock with
_usingKeyConnector = await _keyConnectorService.GetUsesKeyConnector();
if (_usingKeyConnector && !(BiometricLock || PinLock))
{ {
await _vaultTimeoutService.LogOutAsync(); await _vaultTimeoutService.LogOutAsync();
return; return;
} }
_pinStatus = await _vaultTimeoutService.GetPinLockTypeAsync();
var ephemeralPinSet = await _stateService.GetPinKeyEncryptedUserKeyEphemeralAsync()
?? await _stateService.GetPinProtectedKeyAsync();
PinEnabled = (_pinStatus == PinLockType.Transient && ephemeralPinSet != null) ||
_pinStatus == PinLockType.Persistent;
BiometricEnabled = await IsBiometricsEnabledAsync();
// Users without MP and without biometric or pin has no MP to unlock with
_hasMasterPassword = await _userVerificationService.HasMasterPasswordAsync();
if (await _stateService.IsAuthenticatedAsync()
&& !_hasMasterPassword
&& !BiometricEnabled
&& !PinEnabled)
{
await _vaultTimeoutService.LogOutAsync();
return;
}
_email = await _stateService.GetEmailAsync(); _email = await _stateService.GetEmailAsync();
if (string.IsNullOrWhiteSpace(_email)) if (string.IsNullOrWhiteSpace(_email))
{ {
@@ -188,26 +213,20 @@ namespace Bit.App.Pages
} }
var webVaultHostname = CoreHelpers.GetHostname(webVault); var webVaultHostname = CoreHelpers.GetHostname(webVault);
LoggedInAsText = string.Format(AppResources.LoggedInAsOn, _email, webVaultHostname); LoggedInAsText = string.Format(AppResources.LoggedInAsOn, _email, webVaultHostname);
if (PinLock) if (PinEnabled)
{ {
PageTitle = AppResources.VerifyPIN; PageTitle = AppResources.VerifyPIN;
LockedVerifyText = AppResources.VaultLockedPIN; LockedVerifyText = AppResources.VaultLockedPIN;
} }
else else
{ {
if (_usingKeyConnector) PageTitle = _hasMasterPassword ? AppResources.VerifyMasterPassword : AppResources.UnlockVault;
{ LockedVerifyText = _hasMasterPassword
PageTitle = AppResources.UnlockVault; ? AppResources.VaultLockedMasterPassword
LockedVerifyText = AppResources.VaultLockedIdentity; : AppResources.VaultLockedIdentity;
}
else
{
PageTitle = AppResources.VerifyMasterPassword;
LockedVerifyText = AppResources.VaultLockedMasterPassword;
}
} }
if (BiometricLock) if (BiometricEnabled)
{ {
BiometricIntegrityValid = await _platformUtilsService.IsBiometricIntegrityValidAsync(); BiometricIntegrityValid = await _platformUtilsService.IsBiometricIntegrityValidAsync();
if (!_biometricIntegrityValid) if (!_biometricIntegrityValid)
@@ -223,20 +242,119 @@ namespace Bit.App.Pages
BiometricButtonText = supportsFace ? AppResources.UseFaceIDToUnlock : BiometricButtonText = supportsFace ? AppResources.UseFaceIDToUnlock :
AppResources.UseFingerprintToUnlock; AppResources.UseFingerprintToUnlock;
} }
} }
} }
public async Task SubmitAsync() public async Task SubmitAsync()
{ {
if (PinLock && string.IsNullOrWhiteSpace(Pin)) ShowPassword = false;
try
{
var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile));
if (PinEnabled)
{
await UnlockWithPinAsync(kdfConfig);
}
else
{
await UnlockWithMasterPasswordAsync(kdfConfig);
}
}
catch (LegacyUserException)
{
await HandleLegacyUserAsync();
}
}
private async Task UnlockWithPinAsync(KdfConfig kdfConfig)
{
if (PinEnabled && string.IsNullOrWhiteSpace(Pin))
{ {
await Page.DisplayAlert(AppResources.AnErrorHasOccurred, await Page.DisplayAlert(AppResources.AnErrorHasOccurred,
string.Format(AppResources.ValidationFieldRequired, AppResources.PIN), string.Format(AppResources.ValidationFieldRequired, AppResources.PIN),
AppResources.Ok); AppResources.Ok);
return; return;
} }
if (!PinLock && string.IsNullOrWhiteSpace(MasterPassword))
var failed = true;
try
{
EncString userKeyPin;
EncString oldPinProtected;
switch (_pinStatus)
{
case PinLockType.Persistent:
{
userKeyPin = await _stateService.GetPinKeyEncryptedUserKeyAsync();
var oldEncryptedKey = await _stateService.GetPinProtectedAsync();
oldPinProtected = oldEncryptedKey != null ? new EncString(oldEncryptedKey) : null;
break;
}
case PinLockType.Transient:
userKeyPin = await _stateService.GetPinKeyEncryptedUserKeyEphemeralAsync();
oldPinProtected = await _stateService.GetPinProtectedKeyAsync();
break;
case PinLockType.Disabled:
default:
throw new Exception("Pin is disabled");
}
UserKey userKey;
if (oldPinProtected != null)
{
userKey = await _cryptoService.DecryptAndMigrateOldPinKeyAsync(
_pinStatus == PinLockType.Transient,
Pin,
_email,
kdfConfig,
oldPinProtected
);
}
else
{
userKey = await _cryptoService.DecryptUserKeyWithPinAsync(
Pin,
_email,
kdfConfig,
userKeyPin
);
}
var protectedPin = await _stateService.GetProtectedPinAsync();
var decryptedPin = await _cryptoService.DecryptToUtf8Async(new EncString(protectedPin), userKey);
failed = decryptedPin != Pin;
if (!failed)
{
Pin = string.Empty;
await AppHelpers.ResetInvalidUnlockAttemptsAsync();
await SetUserKeyAndContinueAsync(userKey);
}
}
catch (LegacyUserException)
{
throw;
}
catch
{
failed = true;
}
if (failed)
{
var invalidUnlockAttempts = await AppHelpers.IncrementInvalidUnlockAttemptsAsync();
if (invalidUnlockAttempts >= 5)
{
_messagingService.Send("logout");
return;
}
await _platformUtilsService.ShowDialogAsync(AppResources.InvalidPIN,
AppResources.AnErrorHasOccurred);
}
}
private async Task UnlockWithMasterPasswordAsync(KdfConfig kdfConfig)
{
if (!PinEnabled && string.IsNullOrWhiteSpace(MasterPassword))
{ {
await Page.DisplayAlert(AppResources.AnErrorHasOccurred, await Page.DisplayAlert(AppResources.AnErrorHasOccurred,
string.Format(AppResources.ValidationFieldRequired, AppResources.MasterPassword), string.Format(AppResources.ValidationFieldRequired, AppResources.MasterPassword),
@@ -244,126 +362,78 @@ namespace Bit.App.Pages
return; return;
} }
ShowPassword = false; var masterKey = await _cryptoService.MakeMasterKeyAsync(MasterPassword, _email, kdfConfig);
var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile)); if (await _cryptoService.IsLegacyUserAsync(masterKey))
if (PinLock)
{ {
var failed = true; throw new LegacyUserException();
}
var storedKeyHash = await _cryptoService.GetMasterKeyHashAsync();
var passwordValid = false;
MasterPasswordPolicyOptions enforcedMasterPasswordOptions = null;
if (storedKeyHash != null)
{
// Offline unlock possible
passwordValid = await _cryptoService.CompareAndUpdateKeyHashAsync(MasterPassword, masterKey);
}
else
{
// Online unlock required
await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
var keyHash = await _cryptoService.HashMasterKeyAsync(MasterPassword, masterKey,
HashPurpose.ServerAuthorization);
var request = new PasswordVerificationRequest();
request.MasterPasswordHash = keyHash;
try try
{ {
if (_isPinProtected) var response = await _apiService.PostAccountVerifyPasswordAsync(request);
{ enforcedMasterPasswordOptions = response.MasterPasswordPolicy;
var key = await _cryptoService.MakeKeyFromPinAsync(Pin, _email, passwordValid = true;
kdfConfig, var localKeyHash = await _cryptoService.HashMasterKeyAsync(MasterPassword, masterKey,
await _stateService.GetPinProtectedKeyAsync()); HashPurpose.LocalAuthorization);
var encKey = await _cryptoService.GetEncKeyAsync(key); await _cryptoService.SetMasterKeyHashAsync(localKeyHash);
var protectedPin = await _stateService.GetProtectedPinAsync();
var decPin = await _cryptoService.DecryptToUtf8Async(new EncString(protectedPin), encKey);
failed = decPin != Pin;
if (!failed)
{
Pin = string.Empty;
await AppHelpers.ResetInvalidUnlockAttemptsAsync();
await SetKeyAndContinueAsync(key);
}
}
else
{
var key = await _cryptoService.MakeKeyFromPinAsync(Pin, _email, kdfConfig);
failed = false;
Pin = string.Empty;
await AppHelpers.ResetInvalidUnlockAttemptsAsync();
await SetKeyAndContinueAsync(key);
}
} }
catch catch (Exception e)
{ {
failed = true; System.Diagnostics.Debug.WriteLine(">>> {0}: {1}", e.GetType(), e.StackTrace);
} }
if (failed) await _deviceActionService.HideLoadingAsync();
}
if (passwordValid)
{
if (await RequirePasswordChangeAsync(enforcedMasterPasswordOptions))
{ {
var invalidUnlockAttempts = await AppHelpers.IncrementInvalidUnlockAttemptsAsync(); // Save the ForcePasswordResetReason to force a password reset after unlock
if (invalidUnlockAttempts >= 5) await _stateService.SetForcePasswordResetReasonAsync(
{ ForcePasswordResetReason.WeakMasterPasswordOnLogin);
_messagingService.Send("logout"); }
return;
} MasterPassword = string.Empty;
await _platformUtilsService.ShowDialogAsync(AppResources.InvalidPIN, await AppHelpers.ResetInvalidUnlockAttemptsAsync();
AppResources.AnErrorHasOccurred);
var userKey = await _cryptoService.DecryptUserKeyWithMasterKeyAsync(masterKey);
await _cryptoService.SetMasterKeyAsync(masterKey);
await SetUserKeyAndContinueAsync(userKey);
// Re-enable biometrics
if (BiometricEnabled & !BiometricIntegrityValid)
{
await _biometricService.SetupBiometricAsync();
} }
} }
else else
{ {
var key = await _cryptoService.MakeKeyAsync(MasterPassword, _email, kdfConfig); var invalidUnlockAttempts = await AppHelpers.IncrementInvalidUnlockAttemptsAsync();
var storedKeyHash = await _cryptoService.GetKeyHashAsync(); if (invalidUnlockAttempts >= 5)
var passwordValid = false;
MasterPasswordPolicyOptions enforcedMasterPasswordOptions = null;
if (storedKeyHash != null)
{ {
passwordValid = await _cryptoService.CompareAndUpdateKeyHashAsync(MasterPassword, key); _messagingService.Send("logout");
} return;
else
{
await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
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;
passwordValid = true;
var localKeyHash = await _cryptoService.HashPasswordAsync(MasterPassword, key, HashPurpose.LocalAuthorization);
await _cryptoService.SetKeyHashAsync(localKeyHash);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(">>> {0}: {1}", e.GetType(), e.StackTrace);
}
await _deviceActionService.HideLoadingAsync();
}
if (passwordValid)
{
if (_isPinProtected)
{
var protectedPin = await _stateService.GetProtectedPinAsync();
var encKey = await _cryptoService.GetEncKeyAsync(key);
var decPin = await _cryptoService.DecryptToUtf8Async(new EncString(protectedPin), encKey);
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);
// Re-enable biometrics
if (BiometricLock & !BiometricIntegrityValid)
{
await _biometricService.SetupBiometricAsync();
}
}
else
{
var invalidUnlockAttempts = await AppHelpers.IncrementInvalidUnlockAttemptsAsync();
if (invalidUnlockAttempts >= 5)
{
_messagingService.Send("logout");
return;
}
await _platformUtilsService.ShowDialogAsync(AppResources.InvalidMasterPassword,
AppResources.AnErrorHasOccurred);
} }
await _platformUtilsService.ShowDialogAsync(AppResources.InvalidMasterPassword,
AppResources.AnErrorHasOccurred);
} }
} }
@@ -425,44 +495,80 @@ namespace Bit.App.Pages
public void TogglePassword() public void TogglePassword()
{ {
ShowPassword = !ShowPassword; ShowPassword = !ShowPassword;
var secret = PinLock ? Pin : MasterPassword; var secret = PinEnabled ? Pin : MasterPassword;
_secretEntryFocusWeakEventManager.RaiseEvent(string.IsNullOrEmpty(secret) ? 0 : secret.Length, nameof(FocusSecretEntry)); _secretEntryFocusWeakEventManager.RaiseEvent(string.IsNullOrEmpty(secret) ? 0 : secret.Length,
nameof(FocusSecretEntry));
} }
public async Task PromptBiometricAsync() public async Task PromptBiometricAsync()
{ {
BiometricIntegrityValid = await _platformUtilsService.IsBiometricIntegrityValidAsync(); try
BiometricButtonVisible = BiometricIntegrityValid;
if (!BiometricLock || !BiometricIntegrityValid)
{ {
return; BiometricIntegrityValid = await _platformUtilsService.IsBiometricIntegrityValidAsync();
BiometricButtonVisible = BiometricIntegrityValid;
if (!BiometricEnabled || !BiometricIntegrityValid)
{
return;
}
var success = await _platformUtilsService.AuthenticateBiometricAsync(null,
PinEnabled ? AppResources.PIN : AppResources.MasterPassword,
() => _secretEntryFocusWeakEventManager.RaiseEvent((int?)null, nameof(FocusSecretEntry)));
await _stateService.SetBiometricLockedAsync(!success);
if (success)
{
var userKey = await _cryptoService.GetBiometricUnlockKeyAsync();
await SetUserKeyAndContinueAsync(userKey);
}
} }
var success = await _platformUtilsService.AuthenticateBiometricAsync(null, catch (LegacyUserException)
PinLock ? AppResources.PIN : AppResources.MasterPassword,
() => _secretEntryFocusWeakEventManager.RaiseEvent((int?)null, nameof(FocusSecretEntry)));
await _stateService.SetBiometricLockedAsync(!success);
if (success)
{ {
await DoContinueAsync(); await HandleLegacyUserAsync();
} }
} }
private async Task SetKeyAndContinueAsync(SymmetricCryptoKey key) private async Task SetUserKeyAndContinueAsync(UserKey key)
{ {
var hasKey = await _cryptoService.HasKeyAsync(); var hasKey = await _cryptoService.HasUserKeyAsync();
if (!hasKey) if (!hasKey)
{ {
await _cryptoService.SetKeyAsync(key); await _cryptoService.SetUserKeyAsync(key);
} }
await _deviceTrustCryptoService.TrustDeviceIfNeededAsync();
await DoContinueAsync(); await DoContinueAsync();
} }
private async Task DoContinueAsync() private async Task DoContinueAsync()
{ {
_syncService.FullSyncAsync(false).FireAndForget();
await _stateService.SetBiometricLockedAsync(false); await _stateService.SetBiometricLockedAsync(false);
_watchDeviceService.SyncDataToWatchAsync().FireAndForget(); _watchDeviceService.SyncDataToWatchAsync().FireAndForget();
_messagingService.Send("unlocked"); _messagingService.Send("unlocked");
UnlockedAction?.Invoke(); UnlockedAction?.Invoke();
} }
private async Task<bool> IsBiometricsEnabledAsync()
{
try
{
return await _vaultTimeoutService.IsBiometricLockSetAsync() &&
await _biometricService.CanUseBiometricsUnlockAsync();
}
catch (LegacyUserException)
{
await HandleLegacyUserAsync();
}
return false;
}
private async Task HandleLegacyUserAsync()
{
// Legacy users must migrate on web vault.
await _platformUtilsService.ShowDialogAsync(AppResources.EncryptionKeyMigrationRequiredDescriptionLong,
AppResources.AnErrorHasOccurred,
AppResources.Ok);
await _vaultTimeoutService.LogOutAsync();
}
} }
} }

View File

@@ -0,0 +1,76 @@
<?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"
x:Class="Bit.App.Pages.LoginApproveDevicePage"
xmlns:pages="clr-namespace:Bit.App.Pages"
xmlns:u="clr-namespace:Bit.App.Utilities"
x:DataType="pages:LoginApproveDeviceViewModel"
x:Name="_page"
Title="{Binding PageTitle}">
<ContentPage.BindingContext>
<pages:LoginApproveDeviceViewModel />
</ContentPage.BindingContext>
<StackLayout Padding="10, 10">
<StackLayout Padding="5, 10" Orientation="Horizontal">
<StackLayout HorizontalOptions="FillAndExpand">
<Label
StyleClass="text-md"
Text="{u:I18n RememberThisDevice}"/>
<Label
StyleClass="box-sub-label"
Text="{u:I18n TurnOffUsingPublicDevice}"/>
</StackLayout>
<Switch
Scale="0.8"
IsToggled="{Binding RememberThisDevice}"
VerticalOptions="Center"/>
</StackLayout>
<StackLayout Margin="0, 20, 0, 0">
<Button
x:Name="_continue"
Text="{u:I18n Continue}"
StyleClass="btn-primary"
Command="{Binding ContinueCommand}"
IsVisible="{Binding IsNewUser}"/>
<Button
x:Name="_approveWithMyOtherDevice"
Text="{u:I18n ApproveWithMyOtherDevice}"
StyleClass="btn-primary"
Command="{Binding ApproveWithMyOtherDeviceCommand}"
IsVisible="{Binding ApproveWithMyOtherDeviceEnabled}"/>
<Button
x:Name="_requestAdminApproval"
Text="{u:I18n RequestAdminApproval}"
StyleClass="box-button-row"
Command="{Binding RequestAdminApprovalCommand}"
IsVisible="{Binding RequestAdminApprovalEnabled}"/>
<Button
x:Name="_approveWithMasterPassword"
Text="{u:I18n ApproveWithMasterPassword}"
StyleClass="box-button-row"
Command="{Binding ApproveWithMasterPasswordCommand}"
IsVisible="{Binding ApproveWithMasterPasswordEnabled}"/>
<Label
Text="{Binding LoggingInAsText}"
StyleClass="text-sm"
Margin="0,40,0,0"
AutomationId="LoggingInAsLabel"
/>
<Label
Text="{u:I18n NotYou}"
StyleClass="text-md"
HorizontalOptions="Start"
TextColor="{DynamicResource HyperlinkColor}"
AutomationId="NotYouLabel">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding LogoutCommand}" />
</Label.GestureRecognizers>
</Label>
</StackLayout>
</StackLayout>
</pages:BaseContentPage>

View File

@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Bit.App.Models;
using Bit.App.Utilities;
using Bit.Core.Enums;
using Bit.Core.Utilities;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public partial class LoginApproveDevicePage : BaseContentPage
{
private readonly LoginApproveDeviceViewModel _vm;
private readonly AppOptions _appOptions;
public LoginApproveDevicePage(AppOptions appOptions = null)
{
InitializeComponent();
_vm = BindingContext as LoginApproveDeviceViewModel;
_vm.LogInWithMasterPasswordAction = () => StartLogInWithMasterPasswordAsync().FireAndForget();
_vm.LogInWithDeviceAction = () => StartLoginWithDeviceAsync().FireAndForget();
_vm.RequestAdminApprovalAction = () => RequestAdminApprovalAsync().FireAndForget();
_vm.ContinueToVaultAction = () => ContinueToVaultAsync().FireAndForget();
_vm.Page = this;
_appOptions = appOptions;
}
protected override void OnAppearing()
{
_vm.InitAsync();
}
private async Task ContinueToVaultAsync()
{
if (AppHelpers.SetAlternateMainPage(_appOptions))
{
return;
}
var previousPage = await AppHelpers.ClearPreviousPage();
Application.Current.MainPage = new TabsPage(_appOptions, previousPage);
}
private async Task StartLogInWithMasterPasswordAsync()
{
var page = new LockPage(_appOptions, checkPendingAuthRequests: false);
await Navigation.PushModalAsync(new NavigationPage(page));
}
private async Task StartLoginWithDeviceAsync()
{
var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AuthenticateAndUnlock, _appOptions, true);
await Navigation.PushModalAsync(new NavigationPage(page));
}
private async Task RequestAdminApprovalAsync()
{
var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AdminApproval, _appOptions, true);
await Navigation.PushModalAsync(new NavigationPage(page));
}
}
}

View File

@@ -0,0 +1,150 @@
using System;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using System.Windows.Input;
using Bit.App.Abstractions;
using Bit.App.Resources;
using Bit.App.Utilities.AccountManagement;
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.ObjectModel;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public class LoginApproveDeviceViewModel : BaseViewModel
{
private bool _rememberThisDevice;
private bool _approveWithMyOtherDeviceEnabled;
private bool _requestAdminApprovalEnabled;
private bool _approveWithMasterPasswordEnabled;
private string _email;
private readonly IStateService _stateService;
private readonly IApiService _apiService;
private IDeviceTrustCryptoService _deviceTrustCryptoService;
private readonly IAuthService _authService;
private readonly ISyncService _syncService;
private readonly IMessagingService _messagingService;
public ICommand ApproveWithMyOtherDeviceCommand { get; }
public ICommand RequestAdminApprovalCommand { get; }
public ICommand ApproveWithMasterPasswordCommand { get; }
public ICommand ContinueCommand { get; }
public ICommand LogoutCommand { get; }
public Action LogInWithMasterPasswordAction { get; set; }
public Action LogInWithDeviceAction { get; set; }
public Action RequestAdminApprovalAction { get; set; }
public Action ContinueToVaultAction { get; set; }
public LoginApproveDeviceViewModel()
{
_stateService = ServiceContainer.Resolve<IStateService>();
_apiService = ServiceContainer.Resolve<IApiService>();
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
_authService = ServiceContainer.Resolve<IAuthService>();
_syncService = ServiceContainer.Resolve<ISyncService>();
_messagingService = ServiceContainer.Resolve<IMessagingService>();
PageTitle = AppResources.LogInInitiated;
RememberThisDevice = true;
ApproveWithMyOtherDeviceCommand = new AsyncCommand(() => SetDeviceTrustAndInvokeAsync(LogInWithDeviceAction),
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
RequestAdminApprovalCommand = new AsyncCommand(() => SetDeviceTrustAndInvokeAsync(RequestAdminApprovalAction),
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
ApproveWithMasterPasswordCommand = new AsyncCommand(() => SetDeviceTrustAndInvokeAsync(LogInWithMasterPasswordAction),
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
ContinueCommand = new AsyncCommand(CreateNewSsoUserAsync,
onException: ex => HandleException(ex),
allowsMultipleExecutions: false);
LogoutCommand = new Command(() => _messagingService.Send(AccountsManagerMessageCommands.LOGOUT));
}
public string LoggingInAsText => string.Format(AppResources.LoggingInAsX, Email);
public bool RememberThisDevice
{
get => _rememberThisDevice;
set => SetProperty(ref _rememberThisDevice, value);
}
public bool ApproveWithMyOtherDeviceEnabled
{
get => _approveWithMyOtherDeviceEnabled;
set => SetProperty(ref _approveWithMyOtherDeviceEnabled, value);
}
public bool RequestAdminApprovalEnabled
{
get => _requestAdminApprovalEnabled;
set => SetProperty(ref _requestAdminApprovalEnabled, value,
additionalPropertyNames: new[] { nameof(IsNewUser) });
}
public bool ApproveWithMasterPasswordEnabled
{
get => _approveWithMasterPasswordEnabled;
set => SetProperty(ref _approveWithMasterPasswordEnabled, value,
additionalPropertyNames: new[] { nameof(IsNewUser) });
}
public bool IsNewUser => !RequestAdminApprovalEnabled && !ApproveWithMasterPasswordEnabled;
public string Email
{
get => _email;
set => SetProperty(ref _email, value, additionalPropertyNames:
new string[] {
nameof(LoggingInAsText)
});
}
public async Task InitAsync()
{
try
{
Email = await _stateService.GetActiveUserEmailAsync();
var decryptOptions = await _stateService.GetAccountDecryptionOptions();
RequestAdminApprovalEnabled = decryptOptions?.TrustedDeviceOption?.HasAdminApproval ?? false;
ApproveWithMasterPasswordEnabled = decryptOptions?.HasMasterPassword ?? false;
ApproveWithMyOtherDeviceEnabled = decryptOptions?.TrustedDeviceOption?.HasLoginApprovingDevice ?? false;
}
catch (Exception ex)
{
HandleException(ex);
}
}
public async Task CreateNewSsoUserAsync()
{
await _authService.CreateNewSsoUserAsync(await _stateService.GetRememberedOrgIdentifierAsync());
if (RememberThisDevice)
{
await _deviceTrustCryptoService.TrustDeviceAsync();
}
_syncService.FullSyncAsync(true).FireAndForget();
await Device.InvokeOnMainThreadAsync(ContinueToVaultAction);
}
private async Task SetDeviceTrustAndInvokeAsync(Action action)
{
await _deviceTrustCryptoService.SetShouldTrustDeviceAsync(RememberThisDevice);
await Device.InvokeOnMainThreadAsync(action);
}
}
}

View File

@@ -4,6 +4,7 @@ using Bit.App.Models;
using Bit.App.Utilities; using Bit.App.Utilities;
using Bit.Core; using Bit.Core;
using Bit.Core.Abstractions; using Bit.Core.Abstractions;
using Bit.Core.Enums;
using Bit.Core.Services; using Bit.Core.Services;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel; using Xamarin.CommunityToolkit.ObjectModel;
@@ -135,7 +136,7 @@ namespace Bit.App.Pages
private async Task StartLoginWithDeviceAsync() private async Task StartLoginWithDeviceAsync()
{ {
var page = new LoginPasswordlessRequestPage(_vm.Email, _appOptions); var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AuthenticateAndUnlock, _appOptions);
await Navigation.PushModalAsync(new NavigationPage(page)); await Navigation.PushModalAsync(new NavigationPage(page));
} }

View File

@@ -248,6 +248,14 @@ namespace Bit.App.Pages
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
if (response.RequiresEncryptionKeyMigration)
{
// Legacy users must migrate on web vault.
await _platformUtilsService.ShowDialogAsync(AppResources.EncryptionKeyMigrationRequiredDescriptionLong, AppResources.AnErrorHasOccurred,
AppResources.Ok);
return;
}
if (response.TwoFactor) if (response.TwoFactor)
{ {
StartTwoFactorAction?.Invoke(); StartTwoFactorAction?.Invoke();

View File

@@ -21,17 +21,17 @@
<StackLayout <StackLayout
Padding="7, 0, 7, 20"> Padding="7, 0, 7, 20">
<Label <Label
Text="{u:I18n LogInInitiated}" Text="{Binding Title}"
FontSize="Title" FontSize="Title"
FontAttributes="Bold" FontAttributes="Bold"
Margin="0,14,0,21" Margin="0,14,0,21"
AutomationId="LogInInitiatedLabel" /> AutomationId="LogInInitiatedLabel" />
<Label <Label
Text="{u:I18n ANotificationHasBeenSentToYourDevice}" Text="{Binding SubTitle}"
FontSize="Small" FontSize="Small"
Margin="0,0,0,10"/> Margin="0,0,0,10"/>
<Label <Label
Text="{u:I18n PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice}" Text="{Binding Description}"
FontSize="Small" FontSize="Small"
Margin="0,0,0,24"/> Margin="0,0,0,24"/>
<Label <Label
@@ -40,41 +40,39 @@
FontAttributes="Bold"/> FontAttributes="Bold"/>
<controls:MonoLabel <controls:MonoLabel
FormattedText="{Binding FingerprintPhrase}" FormattedText="{Binding FingerprintPhrase}"
FontSize="Medium" FontSize="Small"
TextColor="{DynamicResource FingerprintPhrase}" TextColor="{DynamicResource FingerprintPhrase}"
AutomationId="FingerprintPhraseValue" /> AutomationId="FingerprintPhraseValue" />
<Label <Label
Text="{u:I18n ResendNotification}" Text="{u:I18n ResendNotification}"
StyleClass="text-md" IsVisible="{Binding ResendNotificationVisible}"
StyleClass="text-sm"
FontAttributes="Bold"
HorizontalOptions="Start" HorizontalOptions="Start"
Margin="0,40,0,0" Margin="0,24,0,0"
TextColor="{DynamicResource HyperlinkColor}" TextColor="{DynamicResource HyperlinkColor}"
AutomationId="ResendNotificationButton"> AutomationId="ResendNotificationButton">
<Label.GestureRecognizers> <Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding CreatePasswordlessLoginCommand}" /> <TapGestureRecognizer Command="{Binding CreatePasswordlessLoginCommand}" />
</Label.GestureRecognizers> </Label.GestureRecognizers>
</Label> </Label>
<StackLayout <BoxView
Orientation="Horizontal" HeightRequest="1"
Margin="0,30,0,0"> Margin="0,24,0,24"
<Label Color="{DynamicResource DisabledIconColor}" />
Text="{u:I18n NeedAnotherOption}" <Label
FontSize="Small" Text="{Binding OtherOptions}"
VerticalTextAlignment="End"/> FontSize="Small"/>
<Label <Label
Text="{u:I18n ViewAllLoginOptions}" Text="{u:I18n ViewAllLoginOptions}"
StyleClass="text-md" StyleClass="text-sm"
VerticalTextAlignment="End" FontAttributes="Bold"
VerticalOptions="CenterAndExpand" TextColor="{DynamicResource HyperlinkColor}"
Margin="5, 0" AutomationId="ViewAllLoginOptionsButton">
TextColor="{DynamicResource HyperlinkColor}" <Label.GestureRecognizers>
AutomationId="ViewAllLoginOptionsButton"> <TapGestureRecognizer Command="{Binding CloseCommand}" />
<Label.GestureRecognizers> </Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding CloseCommand}" /> </Label>
</Label.GestureRecognizers>
</Label>
</StackLayout>
</StackLayout> </StackLayout>
</ScrollView> </ScrollView>
</pages:BaseContentPage> </pages:BaseContentPage>

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Bit.App.Models; using Bit.App.Models;
using Bit.App.Utilities; using Bit.App.Utilities;
using Bit.Core.Enums;
using Xamarin.Forms; using Xamarin.Forms;
namespace Bit.App.Pages namespace Bit.App.Pages
@@ -12,13 +13,15 @@ namespace Bit.App.Pages
private LoginPasswordlessRequestViewModel _vm; private LoginPasswordlessRequestViewModel _vm;
private readonly AppOptions _appOptions; private readonly AppOptions _appOptions;
public LoginPasswordlessRequestPage(string email, AppOptions appOptions = null) public LoginPasswordlessRequestPage(string email, AuthRequestType authRequestType, AppOptions appOptions = null, bool authingWithSso = false)
{ {
InitializeComponent(); InitializeComponent();
_appOptions = appOptions; _appOptions = appOptions;
_vm = BindingContext as LoginPasswordlessRequestViewModel; _vm = BindingContext as LoginPasswordlessRequestViewModel;
_vm.Page = this; _vm.Page = this;
_vm.Email = email; _vm.Email = email;
_vm.AuthRequestType = authRequestType;
_vm.AuthingWithSso = authingWithSso;
_vm.StartTwoFactorAction = () => Device.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync()); _vm.StartTwoFactorAction = () => Device.BeginInvokeOnMainThread(async () => await StartTwoFactorAsync());
_vm.LogInSuccessAction = () => Device.BeginInvokeOnMainThread(async () => await LogInSuccessAsync()); _vm.LogInSuccessAction = () => Device.BeginInvokeOnMainThread(async () => await LogInSuccessAsync());
_vm.UpdateTempPasswordAction = () => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync()); _vm.UpdateTempPasswordAction = () => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync());

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -11,7 +12,9 @@ using Bit.App.Utilities;
using Bit.Core; using Bit.Core;
using Bit.Core.Abstractions; using Bit.Core.Abstractions;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions;
using Bit.Core.Models.Domain; using Bit.Core.Models.Domain;
using Bit.Core.Models.Response;
using Bit.Core.Services; using Bit.Core.Services;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel; using Xamarin.CommunityToolkit.ObjectModel;
@@ -32,6 +35,9 @@ namespace Bit.App.Pages
private IPlatformUtilsService _platformUtilsService; private IPlatformUtilsService _platformUtilsService;
private IEnvironmentService _environmentService; private IEnvironmentService _environmentService;
private ILogger _logger; private ILogger _logger;
private IDeviceTrustCryptoService _deviceTrustCryptoService;
private readonly ICryptoFunctionService _cryptoFunctionService;
private readonly ICryptoService _cryptoService;
protected override II18nService i18nService => _i18nService; protected override II18nService i18nService => _i18nService;
protected override IEnvironmentService environmentService => _environmentService; protected override IEnvironmentService environmentService => _environmentService;
@@ -44,6 +50,7 @@ namespace Bit.App.Pages
private string _email; private string _email;
private string _requestId; private string _requestId;
private string _requestAccessCode; private string _requestAccessCode;
private AuthRequestType _authRequestType;
// Item1 publicKey, Item2 privateKey // Item1 publicKey, Item2 privateKey
private Tuple<byte[], byte[]> _requestKeyPair; private Tuple<byte[], byte[]> _requestKeyPair;
@@ -57,8 +64,9 @@ namespace Bit.App.Pages
_i18nService = ServiceContainer.Resolve<II18nService>(); _i18nService = ServiceContainer.Resolve<II18nService>();
_stateService = ServiceContainer.Resolve<IStateService>(); _stateService = ServiceContainer.Resolve<IStateService>();
_logger = ServiceContainer.Resolve<ILogger>(); _logger = ServiceContainer.Resolve<ILogger>();
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
PageTitle = AppResources.LogInWithAnotherDevice; _cryptoFunctionService = ServiceContainer.Resolve<ICryptoFunctionService>();
_cryptoService = ServiceContainer.Resolve<ICryptoService>();
CreatePasswordlessLoginCommand = new AsyncCommand(CreatePasswordlessLoginAsync, CreatePasswordlessLoginCommand = new AsyncCommand(CreatePasswordlessLoginAsync,
onException: ex => HandleException(ex), onException: ex => HandleException(ex),
@@ -73,10 +81,91 @@ namespace Bit.App.Pages
public Action LogInSuccessAction { get; set; } public Action LogInSuccessAction { get; set; }
public Action UpdateTempPasswordAction { get; set; } public Action UpdateTempPasswordAction { get; set; }
public Action CloseAction { get; set; } public Action CloseAction { get; set; }
public bool AuthingWithSso { get; set; }
public ICommand CreatePasswordlessLoginCommand { get; } public ICommand CreatePasswordlessLoginCommand { get; }
public ICommand CloseCommand { get; } public ICommand CloseCommand { get; }
public string HeaderTitle
{
get
{
switch (_authRequestType)
{
case AuthRequestType.AuthenticateAndUnlock:
return AppResources.LogInWithDevice;
case AuthRequestType.AdminApproval:
return AppResources.LogInInitiated;
default:
return string.Empty;
};
}
}
public string Title
{
get
{
switch (_authRequestType)
{
case AuthRequestType.AuthenticateAndUnlock:
return AppResources.LogInInitiated;
case AuthRequestType.AdminApproval:
return AppResources.AdminApprovalRequested;
default:
return string.Empty;
};
}
}
public string SubTitle
{
get
{
switch (_authRequestType)
{
case AuthRequestType.AuthenticateAndUnlock:
return AppResources.ANotificationHasBeenSentToYourDevice;
case AuthRequestType.AdminApproval:
return AppResources.YourRequestHasBeenSentToYourAdmin;
default:
return string.Empty;
};
}
}
public string Description
{
get
{
switch (_authRequestType)
{
case AuthRequestType.AuthenticateAndUnlock:
return AppResources.PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice;
case AuthRequestType.AdminApproval:
return AppResources.YouWillBeNotifiedOnceApproved;
default:
return string.Empty;
};
}
}
public string OtherOptions
{
get
{
switch (_authRequestType)
{
case AuthRequestType.AuthenticateAndUnlock:
return AppResources.LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption;
case AuthRequestType.AdminApproval:
return AppResources.TroubleLoggingIn;
default:
return string.Empty;
};
}
}
public string FingerprintPhrase public string FingerprintPhrase
{ {
get => _fingerprintPhrase; get => _fingerprintPhrase;
@@ -89,6 +178,25 @@ namespace Bit.App.Pages
set => SetProperty(ref _email, value); set => SetProperty(ref _email, value);
} }
public AuthRequestType AuthRequestType
{
get => _authRequestType;
set
{
SetProperty(ref _authRequestType, value, additionalPropertyNames: new string[]
{
nameof(Title),
nameof(SubTitle),
nameof(Description),
nameof(OtherOptions),
nameof(ResendNotificationVisible)
});
PageTitle = HeaderTitle;
}
}
public bool ResendNotificationVisible => AuthRequestType == AuthRequestType.AuthenticateAndUnlock;
public void StartCheckLoginRequestStatus() public void StartCheckLoginRequestStatus()
{ {
try try
@@ -119,25 +227,39 @@ namespace Bit.App.Pages
private async Task CheckLoginRequestStatus() private async Task CheckLoginRequestStatus()
{ {
if (string.IsNullOrEmpty(_requestId) || string.IsNullOrEmpty(_requestAccessCode)) if (string.IsNullOrEmpty(_requestId))
{ {
return; return;
} }
try try
{ {
var response = await _authService.GetPasswordlessLoginResponseAsync(_requestId, _requestAccessCode); PasswordlessLoginResponse response = null;
if (AuthingWithSso)
{
response = await _authService.GetPasswordlessLoginRequestByIdAsync(_requestId);
}
else
{
response = await _authService.GetPasswordlessLoginResquestAsync(_requestId, _requestAccessCode);
}
if (response.RequestApproved == null || !response.RequestApproved.Value) if (response?.RequestApproved != true)
{ {
return; return;
} }
StopCheckLoginRequestStatus(); StopCheckLoginRequestStatus();
var authResult = await _authService.LogInPasswordlessAsync(Email, _requestAccessCode, _requestId, _requestKeyPair.Item2, response.Key, response.MasterPasswordHash); var authResult = await _authService.LogInPasswordlessAsync(AuthingWithSso, Email, _requestAccessCode, _requestId, _requestKeyPair.Item2, response.Key, response.MasterPasswordHash);
await AppHelpers.ResetInvalidUnlockAttemptsAsync(); await AppHelpers.ResetInvalidUnlockAttemptsAsync();
if (authResult == null && await _stateService.IsAuthenticatedAsync())
{
await HandleLoginCompleteAsync();
return;
}
if (await HandleCaptchaAsync(authResult.CaptchaSiteKey, authResult.CaptchaNeeded, CheckLoginRequestStatus)) if (await HandleCaptchaAsync(authResult.CaptchaSiteKey, authResult.CaptchaNeeded, CheckLoginRequestStatus))
{ {
return; return;
@@ -153,10 +275,13 @@ namespace Bit.App.Pages
} }
else else
{ {
_syncService.FullSyncAsync(true).FireAndForget(); await HandleLoginCompleteAsync();
LogInSuccessAction?.Invoke();
} }
} }
catch (ApiException ex) when (ex.Error?.StatusCode == System.Net.HttpStatusCode.BadRequest)
{
HandleException(ex);
}
catch (Exception ex) catch (Exception ex)
{ {
StartCheckLoginRequestStatus(); StartCheckLoginRequestStatus();
@@ -164,30 +289,65 @@ namespace Bit.App.Pages
} }
} }
private async Task HandleLoginCompleteAsync()
{
await _stateService.SetPendingAdminAuthRequestAsync(null);
_syncService.FullSyncAsync(true).FireAndForget();
LogInSuccessAction?.Invoke();
}
private async Task CreatePasswordlessLoginAsync() private async Task CreatePasswordlessLoginAsync()
{ {
await Device.InvokeOnMainThreadAsync(() => _deviceActionService.ShowLoadingAsync(AppResources.Loading)); await Device.InvokeOnMainThreadAsync(() => _deviceActionService.ShowLoadingAsync(AppResources.Loading));
var response = await _authService.PasswordlessCreateLoginRequestAsync(_email); PasswordlessLoginResponse response = null;
if (response != null) var pendingRequest = await _stateService.GetPendingAdminAuthRequestAsync();
if (pendingRequest != null && _authRequestType == AuthRequestType.AdminApproval)
{ {
FingerprintPhrase = response.FingerprintPhrase; response = await _authService.GetPasswordlessLoginRequestByIdAsync(pendingRequest.Id);
_requestId = response.Id; if (response == null || (response.IsAnswered && !response.RequestApproved.Value))
_requestAccessCode = response.RequestAccessCode; {
_requestKeyPair = response.RequestKeyPair; // handle pending auth request not valid remove it from state
await _stateService.SetPendingAdminAuthRequestAsync(null);
pendingRequest = null;
response = null;
}
else
{
// Derive pubKey from privKey in state to avoid MITM attacks
// Also generate FingerprintPhrase locally for the same reason
var derivedPublicKey = await _cryptoFunctionService.RsaExtractPublicKeyAsync(pendingRequest.PrivateKey);
response.FingerprintPhrase = string.Join("-", await _cryptoService.GetFingerprintAsync(Email, derivedPublicKey));
response.RequestKeyPair = new Tuple<byte[], byte[]>(derivedPublicKey, pendingRequest.PrivateKey);
}
} }
if (response == null)
{
response = await _authService.PasswordlessCreateLoginRequestAsync(_email, AuthRequestType);
}
await HandlePasswordlessLoginAsync(response, pendingRequest == null && _authRequestType == AuthRequestType.AdminApproval);
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
} }
private void HandleException(Exception ex) private async Task HandlePasswordlessLoginAsync(PasswordlessLoginResponse response, bool createPendingAdminRequest)
{ {
Xamarin.Essentials.MainThread.InvokeOnMainThreadAsync(async () => if (response == null)
{ {
await _deviceActionService.HideLoadingAsync(); throw new ArgumentNullException(nameof(response));
await _platformUtilsService.ShowDialogAsync(AppResources.GenericErrorMessage); }
}).FireAndForget();
_logger.Exception(ex); if (createPendingAdminRequest)
{
var pendingAuthRequest = new PendingAdminAuthRequest { Id = response.Id, PrivateKey = response.RequestKeyPair.Item2 };
await _stateService.SetPendingAdminAuthRequestAsync(pendingAuthRequest);
}
FingerprintPhrase = response.FingerprintPhrase;
_requestId = response.Id;
_requestAccessCode = response.RequestAccessCode;
_requestKeyPair = response.RequestKeyPair;
} }
} }
} }

View File

@@ -29,6 +29,8 @@ namespace Bit.App.Pages
_vm.SsoAuthSuccessAction = () => Device.BeginInvokeOnMainThread(async () => await SsoAuthSuccessAsync()); _vm.SsoAuthSuccessAction = () => Device.BeginInvokeOnMainThread(async () => await SsoAuthSuccessAsync());
_vm.UpdateTempPasswordAction = _vm.UpdateTempPasswordAction =
() => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync()); () => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync());
_vm.StartDeviceApprovalOptionsAction =
() => Device.BeginInvokeOnMainThread(async () => await StartDeviceApprovalOptionsAsync());
_vm.CloseAction = async () => _vm.CloseAction = async () =>
{ {
await Navigation.PopModalAsync(); await Navigation.PopModalAsync();
@@ -106,10 +108,17 @@ namespace Bit.App.Pages
await Navigation.PushModalAsync(new NavigationPage(page)); await Navigation.PushModalAsync(new NavigationPage(page));
} }
private async Task StartDeviceApprovalOptionsAsync()
{
var page = new LoginApproveDevicePage();
await Navigation.PushModalAsync(new NavigationPage(page));
}
private async Task SsoAuthSuccessAsync() private async Task SsoAuthSuccessAsync()
{ {
RestoreAppOptionsFromCopy(); RestoreAppOptionsFromCopy();
await AppHelpers.ClearPreviousPage(); await AppHelpers.ClearPreviousPage();
if (await _vaultTimeoutService.IsLockedAsync()) if (await _vaultTimeoutService.IsLockedAsync())
{ {
Application.Current.MainPage = new NavigationPage(new LockPage(_appOptions)); Application.Current.MainPage = new NavigationPage(new LockPage(_appOptions));

View File

@@ -9,6 +9,7 @@ using Bit.Core.Abstractions;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Domain; using Bit.Core.Models.Domain;
using Bit.Core.Services;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Xamarin.CommunityToolkit.ObjectModel; using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Essentials; using Xamarin.Essentials;
@@ -29,8 +30,11 @@ namespace Bit.App.Pages
private readonly IStateService _stateService; private readonly IStateService _stateService;
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IOrganizationService _organizationService; private readonly IOrganizationService _organizationService;
private readonly IDeviceTrustCryptoService _deviceTrustCryptoService;
private readonly ICryptoService _cryptoService;
private string _orgIdentifier; private string _orgIdentifier;
private bool _useEphemeralWebBrowserSession;
public LoginSsoPageViewModel() public LoginSsoPageViewModel()
{ {
@@ -45,7 +49,8 @@ namespace Bit.App.Pages
_stateService = ServiceContainer.Resolve<IStateService>("stateService"); _stateService = ServiceContainer.Resolve<IStateService>("stateService");
_logger = ServiceContainer.Resolve<ILogger>("logger"); _logger = ServiceContainer.Resolve<ILogger>("logger");
_organizationService = ServiceContainer.Resolve<IOrganizationService>(); _organizationService = ServiceContainer.Resolve<IOrganizationService>();
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
_cryptoService = ServiceContainer.Resolve<ICryptoService>();
PageTitle = AppResources.Bitwarden; PageTitle = AppResources.Bitwarden;
LogInCommand = new AsyncCommand(LogInAsync, allowsMultipleExecutions: false); LogInCommand = new AsyncCommand(LogInAsync, allowsMultipleExecutions: false);
@@ -61,6 +66,7 @@ namespace Bit.App.Pages
public Action StartTwoFactorAction { get; set; } public Action StartTwoFactorAction { get; set; }
public Action StartSetPasswordAction { get; set; } public Action StartSetPasswordAction { get; set; }
public Action SsoAuthSuccessAction { get; set; } public Action SsoAuthSuccessAction { get; set; }
public Action StartDeviceApprovalOptionsAction { get; set; }
public Action CloseAction { get; set; } public Action CloseAction { get; set; }
public Action UpdateTempPasswordAction { get; set; } public Action UpdateTempPasswordAction { get; set; }
@@ -109,7 +115,7 @@ namespace Bit.App.Pages
await _deviceActionService.ShowLoadingAsync(AppResources.LoggingIn); await _deviceActionService.ShowLoadingAsync(AppResources.LoggingIn);
var response = await _apiService.PreValidateSso(OrgIdentifier); var response = await _apiService.PreValidateSsoAsync(OrgIdentifier);
if (string.IsNullOrWhiteSpace(response?.Token)) if (string.IsNullOrWhiteSpace(response?.Token))
{ {
@@ -140,10 +146,12 @@ namespace Bit.App.Pages
"ssoToken=" + Uri.EscapeDataString(ssoToken); "ssoToken=" + Uri.EscapeDataString(ssoToken);
WebAuthenticatorResult authResult = null; WebAuthenticatorResult authResult = null;
authResult = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions()
authResult = await WebAuthenticator.AuthenticateAsync(new Uri(url), {
new Uri(REDIRECT_URI)); CallbackUrl = new Uri(REDIRECT_URI),
Url = new Uri(url),
PrefersEphemeralWebBrowserSession = _useEphemeralWebBrowserSession,
});
var code = GetResultCode(authResult, state); var code = GetResultCode(authResult, state);
if (!string.IsNullOrEmpty(code)) if (!string.IsNullOrEmpty(code))
@@ -168,6 +176,8 @@ namespace Bit.App.Pages
{ {
// user canceled // user canceled
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
// Workaroung for cached expired sso token PM-3551
_useEphemeralWebBrowserSession = true;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -197,28 +207,93 @@ namespace Bit.App.Pages
try try
{ {
var response = await _authService.LogInSsoAsync(code, codeVerifier, REDIRECT_URI, orgId); var response = await _authService.LogInSsoAsync(code, codeVerifier, REDIRECT_URI, orgId);
var decryptOptions = await _stateService.GetAccountDecryptionOptions();
await AppHelpers.ResetInvalidUnlockAttemptsAsync(); await AppHelpers.ResetInvalidUnlockAttemptsAsync();
await _stateService.SetRememberedOrgIdentifierAsync(OrgIdentifier); await _stateService.SetRememberedOrgIdentifierAsync(OrgIdentifier);
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
if (response.TwoFactor) if (response.TwoFactor)
{ {
StartTwoFactorAction?.Invoke(); StartTwoFactorAction?.Invoke();
return;
} }
else if (response.ResetMasterPassword)
// Trusted device option is sent regardless if this is a trusted device or not
// If it is trusted, it will have the necessary keys
if (decryptOptions?.TrustedDeviceOption != null)
{ {
if (await _deviceTrustCryptoService.IsDeviceTrustedAsync())
{
// If we have a device key but no keys on server, we need to remove the device key
if (decryptOptions.TrustedDeviceOption.EncryptedPrivateKey == null && decryptOptions.TrustedDeviceOption.EncryptedUserKey == null)
{
await _deviceTrustCryptoService.RemoveTrustedDeviceAsync();
StartDeviceApprovalOptionsAction?.Invoke();
return;
}
// If user doesn't have a MP, but has reset password permission, they must set a MP
if (!decryptOptions.HasMasterPassword &&
decryptOptions.TrustedDeviceOption.HasManageResetPasswordPermission)
{
StartSetPasswordAction?.Invoke();
return;
}
// Update temp password only if the device is trusted and therefore has a decrypted User Key set
if (response.ForcePasswordReset)
{
UpdateTempPasswordAction?.Invoke();
return;
}
// Device is trusted and has keys, so we can decrypt
_syncService.FullSyncAsync(true).FireAndForget();
SsoAuthSuccessAction?.Invoke();
return;
}
// Check for pending Admin Auth requests before navigating to device approval options
var pendingRequest = await _stateService.GetPendingAdminAuthRequestAsync();
if (pendingRequest != null)
{
var authRequest = await _authService.GetPasswordlessLoginRequestByIdAsync(pendingRequest.Id);
if (authRequest?.RequestApproved == true)
{
var authResult = await _authService.LogInPasswordlessAsync(true, await _stateService.GetActiveUserEmailAsync(), authRequest.RequestAccessCode, pendingRequest.Id, pendingRequest.PrivateKey, authRequest.Key, authRequest.MasterPasswordHash);
if (authResult == null && await _stateService.IsAuthenticatedAsync())
{
await Xamarin.Essentials.MainThread.InvokeOnMainThreadAsync(
() => _platformUtilsService.ShowToast("info", null, AppResources.LoginApproved));
await _stateService.SetPendingAdminAuthRequestAsync(null);
_syncService.FullSyncAsync(true).FireAndForget();
SsoAuthSuccessAction?.Invoke();
}
}
else
{
await _stateService.SetPendingAdminAuthRequestAsync(null);
StartDeviceApprovalOptionsAction?.Invoke();
}
}
else
{
StartDeviceApprovalOptionsAction?.Invoke();
}
return;
}
// In the standard, non TDE case, a user must set password if they don't
// have one and they aren't using key connector.
// Note: TDE & Key connector are mutually exclusive org config options.
if (response.ResetMasterPassword || (decryptOptions?.RequireSetPassword == true))
{
// TODO: We need to look into how to handle this when Org removes TDE
// Will we have the User Key by now to set a new password?
StartSetPasswordAction?.Invoke(); StartSetPasswordAction?.Invoke();
return;
} }
else if (response.ForcePasswordReset)
{ _syncService.FullSyncAsync(true).FireAndForget();
UpdateTempPasswordAction?.Invoke(); SsoAuthSuccessAction?.Invoke();
}
else
{
var task = Task.Run(async () => await _syncService.FullSyncAsync(true));
SsoAuthSuccessAction?.Invoke();
}
} }
catch (Exception e) catch (Exception)
{ {
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
await _platformUtilsService.ShowDialogAsync(AppResources.LoginSsoError, await _platformUtilsService.ShowDialogAsync(AppResources.LoginSsoError,

View File

@@ -177,25 +177,28 @@ namespace Bit.App.Pages
Name = string.IsNullOrWhiteSpace(Name) ? null : Name; Name = string.IsNullOrWhiteSpace(Name) ? null : Name;
Email = Email.Trim().ToLower(); Email = Email.Trim().ToLower();
var kdfConfig = new KdfConfig(KdfType.PBKDF2_SHA256, Constants.Pbkdf2Iterations, null, null); var kdfConfig = new KdfConfig(KdfType.PBKDF2_SHA256, Constants.Pbkdf2Iterations, null, null);
var key = await _cryptoService.MakeKeyAsync(MasterPassword, Email, kdfConfig); var newMasterKey = await _cryptoService.MakeMasterKeyAsync(MasterPassword, Email, kdfConfig);
var encKey = await _cryptoService.MakeEncKeyAsync(key); var (newUserKey, newProtectedUserKey) = await _cryptoService.EncryptUserKeyWithMasterKeyAsync(
var hashedPassword = await _cryptoService.HashPasswordAsync(MasterPassword, key); newMasterKey,
var keys = await _cryptoService.MakeKeyPairAsync(encKey.Item1); await _cryptoService.MakeUserKeyAsync()
);
var hashedPassword = await _cryptoService.HashMasterKeyAsync(MasterPassword, newMasterKey);
var (newPublicKey, newProtectedPrivateKey) = await _cryptoService.MakeKeyPairAsync(newUserKey);
var request = new RegisterRequest var request = new RegisterRequest
{ {
Email = Email, Email = Email,
Name = Name, Name = Name,
MasterPasswordHash = hashedPassword, MasterPasswordHash = hashedPassword,
MasterPasswordHint = Hint, MasterPasswordHint = Hint,
Key = encKey.Item2.EncryptedString, Key = newProtectedUserKey.EncryptedString,
Kdf = kdfConfig.Type, Kdf = kdfConfig.Type,
KdfIterations = kdfConfig.Iterations, KdfIterations = kdfConfig.Iterations,
KdfMemory = kdfConfig.Memory, KdfMemory = kdfConfig.Memory,
KdfParallelism = kdfConfig.Parallelism, KdfParallelism = kdfConfig.Parallelism,
Keys = new KeysRequest Keys = new KeysRequest
{ {
PublicKey = keys.Item1, PublicKey = newPublicKey,
EncryptedPrivateKey = keys.Item2.EncryptedString EncryptedPrivateKey = newProtectedPrivateKey.EncryptedString
}, },
CaptchaResponse = _captchaToken, CaptchaResponse = _captchaToken,
}; };

View File

@@ -30,14 +30,14 @@ namespace Bit.App.Pages
public async Task Init() public async Task Init()
{ {
Organization = await _keyConnectorService.GetManagingOrganization(); Organization = await _keyConnectorService.GetManagingOrganizationAsync();
} }
public async Task MigrateAccount() public async Task MigrateAccount()
{ {
await _deviceActionService.ShowLoadingAsync(AppResources.Loading); await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
await _keyConnectorService.MigrateUser(); await _keyConnectorService.MigrateUserAsync();
await _syncService.FullSyncAsync(true); await _syncService.FullSyncAsync(true);
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
@@ -47,7 +47,7 @@ namespace Bit.App.Pages
{ {
await _deviceActionService.ShowLoadingAsync(AppResources.Loading); await _deviceActionService.ShowLoadingAsync(AppResources.Loading);
await _apiService.PostLeaveOrganization(Organization.Id); await _apiService.PostLeaveOrganizationAsync(Organization.Id);
await _syncService.FullSyncAsync(true); await _syncService.FullSyncAsync(true);
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();

View File

@@ -51,7 +51,8 @@
<Label <Label
Text="{u:I18n ResetPasswordAutoEnrollInviteWarning}" Text="{u:I18n ResetPasswordAutoEnrollInviteWarning}"
StyleClass="text-muted, text-sm, text-bold" StyleClass="text-muted, text-sm, text-bold"
HorizontalTextAlignment="Start" /> HorizontalTextAlignment="Start"
AutomationId="ResetPasswordAutoEnrollInviteWarningLabel" />
</Frame> </Frame>
</Grid> </Grid>
<Grid IsVisible="{Binding IsPolicyInEffect}" <Grid IsVisible="{Binding IsPolicyInEffect}"
@@ -73,7 +74,8 @@
<Label <Label
Text="{Binding PolicySummary}" Text="{Binding PolicySummary}"
StyleClass="text-muted, text-sm, text-bold" StyleClass="text-muted, text-sm, text-bold"
HorizontalTextAlignment="Start" /> HorizontalTextAlignment="Start"
AutomationId="PolicyInEffectLabel" />
</Frame> </Frame>
</Grid> </Grid>
<Grid StyleClass="box-row"> <Grid StyleClass="box-row">
@@ -98,7 +100,8 @@
IsTextPredictionEnabled="False" IsTextPredictionEnabled="False"
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}" IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
Grid.Row="1" Grid.Row="1"
Grid.Column="0" /> Grid.Column="0"
AutomationId="MasterPasswordField" />
<controls:IconButton <controls:IconButton
StyleClass="box-row-button, box-row-button-platform" StyleClass="box-row-button, box-row-button-platform"
Text="{Binding ShowPasswordIcon}" Text="{Binding ShowPasswordIcon}"
@@ -108,7 +111,8 @@
Grid.RowSpan="2" Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True" AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n ToggleVisibility}" AutomationProperties.Name="{u:I18n ToggleVisibility}"
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" /> AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
AutomationId="ToggleMasterPasswordVisibilityButton" />
</Grid> </Grid>
<Label <Label
Text="{u:I18n MasterPasswordDescription}" Text="{u:I18n MasterPasswordDescription}"
@@ -137,7 +141,8 @@
IsTextPredictionEnabled="False" IsTextPredictionEnabled="False"
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}" IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
Grid.Row="1" Grid.Row="1"
Grid.Column="0" /> Grid.Column="0"
AutomationId="RetypePasswordField" />
<controls:IconButton <controls:IconButton
StyleClass="box-row-button, box-row-button-platform" StyleClass="box-row-button, box-row-button-platform"
Text="{Binding ShowPasswordIcon}" Text="{Binding ShowPasswordIcon}"
@@ -147,7 +152,8 @@
Grid.RowSpan="2" Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True" AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n ToggleVisibility}" AutomationProperties.Name="{u:I18n ToggleVisibility}"
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" /> AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
AutomationId="ToggleRetypePasswordVisibilityButton" />
</Grid> </Grid>
<StackLayout StyleClass="box-row"> <StackLayout StyleClass="box-row">
<Label <Label
@@ -158,7 +164,8 @@
Text="{Binding Hint}" Text="{Binding Hint}"
StyleClass="box-value" StyleClass="box-value"
ReturnType="Go" ReturnType="Go"
ReturnCommand="{Binding SubmitCommand}" /> ReturnCommand="{Binding SubmitCommand}"
AutomationId="MasterPasswordHintLabel" />
</StackLayout> </StackLayout>
<Label <Label
Text="{u:I18n MasterPasswordHintDescription}" Text="{u:I18n MasterPasswordHintDescription}"

View File

@@ -165,26 +165,18 @@ namespace Bit.App.Pages
var kdfConfig = new KdfConfig(KdfType.PBKDF2_SHA256, Constants.Pbkdf2Iterations, null, null); var kdfConfig = new KdfConfig(KdfType.PBKDF2_SHA256, Constants.Pbkdf2Iterations, null, null);
var email = await _stateService.GetEmailAsync(); var email = await _stateService.GetEmailAsync();
var key = await _cryptoService.MakeKeyAsync(MasterPassword, email, kdfConfig); var newMasterKey = await _cryptoService.MakeMasterKeyAsync(MasterPassword, email, kdfConfig);
var masterPasswordHash = await _cryptoService.HashPasswordAsync(MasterPassword, key, HashPurpose.ServerAuthorization); var masterPasswordHash = await _cryptoService.HashMasterKeyAsync(MasterPassword, newMasterKey, HashPurpose.ServerAuthorization);
var localMasterPasswordHash = await _cryptoService.HashPasswordAsync(MasterPassword, key, HashPurpose.LocalAuthorization); var localMasterPasswordHash = await _cryptoService.HashMasterKeyAsync(MasterPassword, newMasterKey, HashPurpose.LocalAuthorization);
Tuple<SymmetricCryptoKey, EncString> encKey; var (newUserKey, newProtectedUserKey) = await _cryptoService.EncryptUserKeyWithMasterKeyAsync(newMasterKey,
var existingEncKey = await _cryptoService.GetEncKeyAsync(); await _cryptoService.GetUserKeyAsync() ?? await _cryptoService.MakeUserKeyAsync());
if (existingEncKey == null)
{
encKey = await _cryptoService.MakeEncKeyAsync(key);
}
else
{
encKey = await _cryptoService.RemakeEncKeyAsync(key);
}
var keys = await _cryptoService.MakeKeyPairAsync(encKey.Item1); var (newPublicKey, newProtectedPrivateKey) = await _cryptoService.MakeKeyPairAsync(newUserKey);
var request = new SetPasswordRequest var request = new SetPasswordRequest
{ {
MasterPasswordHash = masterPasswordHash, MasterPasswordHash = masterPasswordHash,
Key = encKey.Item2.EncryptedString, Key = newProtectedUserKey.EncryptedString,
MasterPasswordHint = Hint, MasterPasswordHint = Hint,
Kdf = kdfConfig.Type.GetValueOrDefault(KdfType.PBKDF2_SHA256), Kdf = kdfConfig.Type.GetValueOrDefault(KdfType.PBKDF2_SHA256),
KdfIterations = kdfConfig.Iterations.GetValueOrDefault(Constants.Pbkdf2Iterations), KdfIterations = kdfConfig.Iterations.GetValueOrDefault(Constants.Pbkdf2Iterations),
@@ -193,8 +185,8 @@ namespace Bit.App.Pages
OrgIdentifier = OrgIdentifier, OrgIdentifier = OrgIdentifier,
Keys = new KeysRequest Keys = new KeysRequest
{ {
PublicKey = keys.Item1, PublicKey = newPublicKey,
EncryptedPrivateKey = keys.Item2.EncryptedString EncryptedPrivateKey = newProtectedPrivateKey.EncryptedString
} }
}; };
@@ -204,19 +196,20 @@ namespace Bit.App.Pages
// Set Password and relevant information // Set Password and relevant information
await _apiService.SetPasswordAsync(request); await _apiService.SetPasswordAsync(request);
await _stateService.SetKdfConfigurationAsync(kdfConfig); await _stateService.SetKdfConfigurationAsync(kdfConfig);
await _cryptoService.SetKeyAsync(key); await _cryptoService.SetUserKeyAsync(newUserKey);
await _cryptoService.SetKeyHashAsync(localMasterPasswordHash); await _cryptoService.SetMasterKeyAsync(newMasterKey);
await _cryptoService.SetEncKeyAsync(encKey.Item2.EncryptedString); await _cryptoService.SetMasterKeyHashAsync(localMasterPasswordHash);
await _cryptoService.SetEncPrivateKeyAsync(keys.Item2.EncryptedString); await _cryptoService.SetMasterKeyEncryptedUserKeyAsync(newProtectedUserKey.EncryptedString);
await _cryptoService.SetUserPrivateKeyAsync(newProtectedPrivateKey.EncryptedString);
if (ResetPasswordAutoEnroll) if (ResetPasswordAutoEnroll)
{ {
// Grab Organization Keys // Grab Organization Keys
var response = await _apiService.GetOrganizationKeysAsync(OrgId); var response = await _apiService.GetOrganizationKeysAsync(OrgId);
var publicKey = CoreHelpers.Base64UrlDecode(response.PublicKey); var publicKey = CoreHelpers.Base64UrlDecode(response.PublicKey);
// Grab user's Encryption Key and encrypt with Org Public Key // Grab User Key and encrypt with Org Public Key
var userEncKey = await _cryptoService.GetEncKeyAsync(); var userKey = await _cryptoService.GetUserKeyAsync();
var encryptedKey = await _cryptoService.RsaEncryptAsync(userEncKey.Key, publicKey); var encryptedKey = await _cryptoService.RsaEncryptAsync(userKey.Key, publicKey);
// Request // Request
var resetRequest = new OrganizationUserResetPasswordEnrollmentRequest var resetRequest = new OrganizationUserResetPasswordEnrollmentRequest
{ {

View File

@@ -4,6 +4,7 @@ using Bit.App.Controls;
using Bit.App.Models; using Bit.App.Models;
using Bit.App.Utilities; using Bit.App.Utilities;
using Bit.Core.Abstractions; using Bit.Core.Abstractions;
using Bit.Core.Services;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Xamarin.Forms; using Xamarin.Forms;
@@ -17,26 +18,29 @@ namespace Bit.App.Pages
private TwoFactorPageViewModel _vm; private TwoFactorPageViewModel _vm;
private bool _inited; private bool _inited;
private bool _authingWithSso;
private string _orgIdentifier; private string _orgIdentifier;
public TwoFactorPage(bool? authingWithSso = false, AppOptions appOptions = null, string orgIdentifier = null) public TwoFactorPage(bool? authingWithSso = false, AppOptions appOptions = null, string orgIdentifier = null)
{ {
InitializeComponent(); InitializeComponent();
SetActivityIndicator(); SetActivityIndicator();
_authingWithSso = authingWithSso ?? false;
_appOptions = appOptions; _appOptions = appOptions;
_orgIdentifier = orgIdentifier; _orgIdentifier = orgIdentifier;
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>("broadcasterService"); _broadcasterService = ServiceContainer.Resolve<IBroadcasterService>("broadcasterService");
_messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService"); _messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService");
_vm = BindingContext as TwoFactorPageViewModel; _vm = BindingContext as TwoFactorPageViewModel;
_vm.Page = this; _vm.Page = this;
_vm.AuthingWithSso = authingWithSso ?? false;
_vm.StartSetPasswordAction = () => _vm.StartSetPasswordAction = () =>
Device.BeginInvokeOnMainThread(async () => await StartSetPasswordAsync()); Device.BeginInvokeOnMainThread(async () => await StartSetPasswordAsync());
_vm.TwoFactorAuthSuccessAction = () => _vm.TwoFactorAuthSuccessAction = () =>
Device.BeginInvokeOnMainThread(async () => await TwoFactorAuthSuccessAsync()); Device.BeginInvokeOnMainThread(async () => await TwoFactorAuthSuccessToMainAsync());
_vm.LockAction = () =>
Device.BeginInvokeOnMainThread(TwoFactorAuthSuccessWithSSOLocked);
_vm.UpdateTempPasswordAction = _vm.UpdateTempPasswordAction =
() => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync()); () => Device.BeginInvokeOnMainThread(async () => await UpdateTempPasswordAsync());
_vm.StartDeviceApprovalOptionsAction =
() => Device.BeginInvokeOnMainThread(async () => await StartDeviceApprovalOptionsAsync());
_vm.CloseAction = async () => await Navigation.PopModalAsync(); _vm.CloseAction = async () => await Navigation.PopModalAsync();
DuoWebView = _duoWebView; DuoWebView = _duoWebView;
if (Device.RuntimePlatform == Device.Android) if (Device.RuntimePlatform == Device.Android)
@@ -180,21 +184,25 @@ namespace Bit.App.Pages
await Navigation.PushModalAsync(new NavigationPage(page)); await Navigation.PushModalAsync(new NavigationPage(page));
} }
private async Task TwoFactorAuthSuccessAsync() private async Task StartDeviceApprovalOptionsAsync()
{ {
if (_authingWithSso) var page = new LoginApproveDevicePage();
await Navigation.PushModalAsync(new NavigationPage(page));
}
private void TwoFactorAuthSuccessWithSSOLocked()
{
Application.Current.MainPage = new NavigationPage(new LockPage(_appOptions));
}
private async Task TwoFactorAuthSuccessToMainAsync()
{
if (AppHelpers.SetAlternateMainPage(_appOptions))
{ {
Application.Current.MainPage = new NavigationPage(new LockPage(_appOptions)); return;
}
else
{
if (AppHelpers.SetAlternateMainPage(_appOptions))
{
return;
}
var previousPage = await AppHelpers.ClearPreviousPage();
Application.Current.MainPage = new TabsPage(_appOptions, previousPage);
} }
var previousPage = await AppHelpers.ClearPreviousPage();
Application.Current.MainPage = new TabsPage(_appOptions, previousPage);
} }
private void Token_TextChanged(object sender, TextChangedEventArgs e) private void Token_TextChanged(object sender, TextChangedEventArgs e)

View File

@@ -11,6 +11,7 @@ using Bit.Core.Abstractions;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Request; using Bit.Core.Models.Request;
using Bit.Core.Services;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Newtonsoft.Json; using Newtonsoft.Json;
using Xamarin.CommunityToolkit.ObjectModel; using Xamarin.CommunityToolkit.ObjectModel;
@@ -32,12 +33,12 @@ namespace Bit.App.Pages
private readonly IStateService _stateService; private readonly IStateService _stateService;
private readonly II18nService _i18nService; private readonly II18nService _i18nService;
private readonly IAppIdService _appIdService; private readonly IAppIdService _appIdService;
private readonly IVaultTimeoutService _vaultTimeoutService;
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IDeviceTrustCryptoService _deviceTrustCryptoService;
private TwoFactorProviderType? _selectedProviderType; private TwoFactorProviderType? _selectedProviderType;
private string _totpInstruction; private string _totpInstruction;
private string _webVaultUrl = "https://vault.bitwarden.com"; private string _webVaultUrl = "https://vault.bitwarden.com";
private bool _authingWithSso = false;
private bool _enableContinue = false; private bool _enableContinue = false;
private bool _showContinue = true; private bool _showContinue = true;
@@ -54,7 +55,9 @@ namespace Bit.App.Pages
_stateService = ServiceContainer.Resolve<IStateService>("stateService"); _stateService = ServiceContainer.Resolve<IStateService>("stateService");
_i18nService = ServiceContainer.Resolve<II18nService>("i18nService"); _i18nService = ServiceContainer.Resolve<II18nService>("i18nService");
_appIdService = ServiceContainer.Resolve<IAppIdService>("appIdService"); _appIdService = ServiceContainer.Resolve<IAppIdService>("appIdService");
_vaultTimeoutService = ServiceContainer.Resolve<IVaultTimeoutService>();
_logger = ServiceContainer.Resolve<ILogger>(); _logger = ServiceContainer.Resolve<ILogger>();
_deviceTrustCryptoService = ServiceContainer.Resolve<IDeviceTrustCryptoService>();
PageTitle = AppResources.TwoStepLogin; PageTitle = AppResources.TwoStepLogin;
SubmitCommand = new Command(async () => await SubmitAsync()); SubmitCommand = new Command(async () => await SubmitAsync());
@@ -69,6 +72,8 @@ namespace Bit.App.Pages
public bool Remember { get; set; } public bool Remember { get; set; }
public bool AuthingWithSso { get; set; }
public string Token { get; set; } public string Token { get; set; }
public bool DuoMethod => SelectedProviderType == TwoFactorProviderType.Duo || public bool DuoMethod => SelectedProviderType == TwoFactorProviderType.Duo ||
@@ -118,6 +123,8 @@ namespace Bit.App.Pages
public Command SubmitCommand { get; } public Command SubmitCommand { get; }
public ICommand MoreCommand { get; } public ICommand MoreCommand { get; }
public Action TwoFactorAuthSuccessAction { get; set; } public Action TwoFactorAuthSuccessAction { get; set; }
public Action LockAction { get; set; }
public Action StartDeviceApprovalOptionsAction { get; set; }
public Action StartSetPasswordAction { get; set; } public Action StartSetPasswordAction { get; set; }
public Action CloseAction { get; set; } public Action CloseAction { get; set; }
public Action UpdateTempPasswordAction { get; set; } public Action UpdateTempPasswordAction { get; set; }
@@ -136,8 +143,6 @@ namespace Bit.App.Pages
return; return;
} }
_authingWithSso = _authService.AuthingWithSso();
if (!string.IsNullOrWhiteSpace(_environmentService.BaseUrl)) if (!string.IsNullOrWhiteSpace(_environmentService.BaseUrl))
{ {
_webVaultUrl = _environmentService.BaseUrl; _webVaultUrl = _environmentService.BaseUrl;
@@ -315,21 +320,84 @@ namespace Bit.App.Pages
var task = Task.Run(() => _syncService.FullSyncAsync(true)); var task = Task.Run(() => _syncService.FullSyncAsync(true));
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
var decryptOptions = await _stateService.GetAccountDecryptionOptions();
_messagingService.Send("listenYubiKeyOTP", false); _messagingService.Send("listenYubiKeyOTP", false);
_broadcasterService.Unsubscribe(nameof(TwoFactorPage)); _broadcasterService.Unsubscribe(nameof(TwoFactorPage));
if (_authingWithSso && result.ResetMasterPassword) if (decryptOptions?.TrustedDeviceOption != null)
{ {
if (await _deviceTrustCryptoService.IsDeviceTrustedAsync())
{
// If we have a device key but no keys on server, we need to remove the device key
if (decryptOptions.TrustedDeviceOption.EncryptedPrivateKey == null && decryptOptions.TrustedDeviceOption.EncryptedUserKey == null)
{
await _deviceTrustCryptoService.RemoveTrustedDeviceAsync();
StartDeviceApprovalOptionsAction?.Invoke();
return;
}
// If user doesn't have a MP, but has reset password permission, they must set a MP
if (!decryptOptions.HasMasterPassword &&
decryptOptions.TrustedDeviceOption.HasManageResetPasswordPermission)
{
StartSetPasswordAction?.Invoke();
return;
}
// Update temp password only if the device is trusted and therefore has a decrypted User Key set
if (result.ForcePasswordReset)
{
UpdateTempPasswordAction?.Invoke();
return;
}
// Device is trusted and has keys, so we can decrypt
_syncService.FullSyncAsync(true).FireAndForget();
await TwoFactorAuthSuccessAsync();
return;
}
// Check for pending Admin Auth requests before navigating to device approval options
var pendingRequest = await _stateService.GetPendingAdminAuthRequestAsync();
if (pendingRequest != null)
{
var authRequest = await _authService.GetPasswordlessLoginRequestByIdAsync(pendingRequest.Id);
if (authRequest?.RequestApproved == true)
{
var authResult = await _authService.LogInPasswordlessAsync(true, await _stateService.GetActiveUserEmailAsync(), authRequest.RequestAccessCode, pendingRequest.Id, pendingRequest.PrivateKey, authRequest.Key, authRequest.MasterPasswordHash);
if (authResult == null && await _stateService.IsAuthenticatedAsync())
{
await Xamarin.Essentials.MainThread.InvokeOnMainThreadAsync(
() => _platformUtilsService.ShowToast("info", null, AppResources.LoginApproved));
await _stateService.SetPendingAdminAuthRequestAsync(null);
_syncService.FullSyncAsync(true).FireAndForget();
await TwoFactorAuthSuccessAsync();
}
}
else
{
await _stateService.SetPendingAdminAuthRequestAsync(null);
StartDeviceApprovalOptionsAction?.Invoke();
}
}
else
{
StartDeviceApprovalOptionsAction?.Invoke();
}
return;
}
// In the standard, non TDE case, a user must set password if they don't
// have one and they aren't using key connector.
// Note: TDE & Key connector are mutually exclusive org config options.
if (result.ResetMasterPassword || (decryptOptions?.RequireSetPassword ?? false))
{
// TODO: We need to look into how to handle this when Org removes TDE
// Will we have the User Key by now to set a new password?
StartSetPasswordAction?.Invoke(); StartSetPasswordAction?.Invoke();
return;
} }
else if (result.ForcePasswordReset)
{ _syncService.FullSyncAsync(true).FireAndForget();
UpdateTempPasswordAction?.Invoke(); await TwoFactorAuthSuccessAsync();
}
else
{
TwoFactorAuthSuccessAction?.Invoke();
}
} }
catch (ApiException e) catch (ApiException e)
{ {
@@ -398,7 +466,8 @@ namespace Bit.App.Pages
{ {
Email = _authService.Email, Email = _authService.Email,
MasterPasswordHash = _authService.MasterPasswordHash, MasterPasswordHash = _authService.MasterPasswordHash,
DeviceIdentifier = await _appIdService.GetAppIdAsync() DeviceIdentifier = await _appIdService.GetAppIdAsync(),
SsoEmail2FaSessionToken = _authService.SsoEmail2FaSessionToken
}; };
await _apiService.PostTwoFactorEmailAsync(request); await _apiService.PostTwoFactorEmailAsync(request);
if (showLoading) if (showLoading)
@@ -422,5 +491,17 @@ namespace Bit.App.Pages
return false; return false;
} }
} }
public async Task TwoFactorAuthSuccessAsync()
{
if (AuthingWithSso && await _vaultTimeoutService.IsLockedAsync())
{
LockAction?.Invoke();
}
else
{
TwoFactorAuthSuccessAction?.Invoke();
}
}
} }
} }

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<pages:BaseContentPage <pages:BaseContentPage
xmlns="http://xamarin.com/schemas/2014/forms" xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
@@ -48,7 +48,8 @@
<Label <Label
Text="{Binding UpdateMasterPasswordWarningText }" Text="{Binding UpdateMasterPasswordWarningText }"
StyleClass="text-muted, text-sm, text-bold" StyleClass="text-muted, text-sm, text-bold"
HorizontalTextAlignment="Center" /> HorizontalTextAlignment="Center"
AutomationId="UpdatePasswordWarningLabel" />
</Frame> </Frame>
</Grid> </Grid>
<Grid IsVisible="{Binding IsPolicyInEffect}" <Grid IsVisible="{Binding IsPolicyInEffect}"
@@ -71,7 +72,8 @@
<Label <Label
Text="{Binding PolicySummary}" Text="{Binding PolicySummary}"
StyleClass="text-muted, text-sm, text-bold" StyleClass="text-muted, text-sm, text-bold"
HorizontalTextAlignment="Start" /> HorizontalTextAlignment="Start"
AutomationId="PolicySummaryLabel" />
</Frame> </Frame>
</Grid> </Grid>
<Grid StyleClass="box-row" IsVisible="{Binding RequireCurrentPassword }"> <Grid StyleClass="box-row" IsVisible="{Binding RequireCurrentPassword }">
@@ -96,7 +98,8 @@
IsTextPredictionEnabled="False" IsTextPredictionEnabled="False"
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}" IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
Grid.Row="1" Grid.Row="1"
Grid.Column="0" /> Grid.Column="0"
AutomationId="MasterPasswordField" />
<controls:IconButton <controls:IconButton
StyleClass="box-row-button, box-row-button-platform" StyleClass="box-row-button, box-row-button-platform"
Text="{Binding ShowPasswordIcon}" Text="{Binding ShowPasswordIcon}"
@@ -106,7 +109,8 @@
Grid.RowSpan="2" Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True" AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n ToggleVisibility}" AutomationProperties.Name="{u:I18n ToggleVisibility}"
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" /> AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
AutomationId="ToggleMasterPasswordVisibilityButton" />
</Grid> </Grid>
<Grid StyleClass="box-row"> <Grid StyleClass="box-row">
<Grid.RowDefinitions> <Grid.RowDefinitions>
@@ -130,7 +134,8 @@
IsTextPredictionEnabled="False" IsTextPredictionEnabled="False"
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}" IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
Grid.Row="1" Grid.Row="1"
Grid.Column="0" /> Grid.Column="0"
AutomationId="NewPasswordField" />
<controls:IconButton <controls:IconButton
StyleClass="box-row-button, box-row-button-platform" StyleClass="box-row-button, box-row-button-platform"
Text="{Binding ShowPasswordIcon}" Text="{Binding ShowPasswordIcon}"
@@ -140,7 +145,8 @@
Grid.RowSpan="2" Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True" AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n ToggleVisibility}" AutomationProperties.Name="{u:I18n ToggleVisibility}"
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" /> AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
AutomationId="NewPasswordVisibilityButton" />
</Grid> </Grid>
</StackLayout> </StackLayout>
<StackLayout StyleClass="box"> <StackLayout StyleClass="box">
@@ -166,7 +172,8 @@
IsTextPredictionEnabled="False" IsTextPredictionEnabled="False"
IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}" IsPassword="{Binding ShowPassword, Converter={StaticResource inverseBool}}"
Grid.Row="1" Grid.Row="1"
Grid.Column="0" /> Grid.Column="0"
AutomationId="RetypePasswordField" />
<controls:IconButton <controls:IconButton
StyleClass="box-row-button, box-row-button-platform" StyleClass="box-row-button, box-row-button-platform"
Text="{Binding ShowPasswordIcon}" Text="{Binding ShowPasswordIcon}"
@@ -176,7 +183,8 @@
Grid.RowSpan="2" Grid.RowSpan="2"
AutomationProperties.IsInAccessibleTree="True" AutomationProperties.IsInAccessibleTree="True"
AutomationProperties.Name="{u:I18n ToggleVisibility}" AutomationProperties.Name="{u:I18n ToggleVisibility}"
AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}" /> AutomationProperties.HelpText="{Binding PasswordVisibilityAccessibilityText}"
AutomationId="ToggleRetypePasswordVisibilityButton" />
</Grid> </Grid>
<StackLayout StyleClass="box-row"> <StackLayout StyleClass="box-row">
<Label <Label
@@ -187,7 +195,8 @@
Text="{Binding Hint}" Text="{Binding Hint}"
StyleClass="box-value" StyleClass="box-value"
ReturnType="Go" ReturnType="Go"
ReturnCommand="{Binding SubmitCommand}" /> ReturnCommand="{Binding SubmitCommand}"
AutomationId="MasterPasswordHintLabel" />
</StackLayout> </StackLayout>
<Label <Label
Text="{u:I18n MasterPasswordHintDescription}" Text="{u:I18n MasterPasswordHintDescription}"

View File

@@ -93,12 +93,12 @@ namespace Bit.App.Pages
var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile)); var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile));
var email = await _stateService.GetEmailAsync(); var email = await _stateService.GetEmailAsync();
// Create new key and hash new password // Create new master key and hash new password
var key = await _cryptoService.MakeKeyAsync(MasterPassword, email, kdfConfig); var masterKey = await _cryptoService.MakeMasterKeyAsync(MasterPassword, email, kdfConfig);
var masterPasswordHash = await _cryptoService.HashPasswordAsync(MasterPassword, key); var masterPasswordHash = await _cryptoService.HashMasterKeyAsync(MasterPassword, masterKey);
// Create new encKey for the User // Encrypt user key with new master key
var newEncKey = await _cryptoService.RemakeEncKeyAsync(key); var (userKey, newProtectedUserKey) = await _cryptoService.EncryptUserKeyWithMasterKeyAsync(masterKey);
// Initiate API action // Initiate API action
try try
@@ -108,10 +108,10 @@ namespace Bit.App.Pages
switch (_reason) switch (_reason)
{ {
case ForcePasswordResetReason.AdminForcePasswordReset: case ForcePasswordResetReason.AdminForcePasswordReset:
await UpdateTempPasswordAsync(masterPasswordHash, newEncKey.Item2.EncryptedString); await UpdateTempPasswordAsync(masterPasswordHash, newProtectedUserKey.EncryptedString);
break; break;
case ForcePasswordResetReason.WeakMasterPasswordOnLogin: case ForcePasswordResetReason.WeakMasterPasswordOnLogin:
await UpdatePasswordAsync(masterPasswordHash, newEncKey.Item2.EncryptedString); await UpdatePasswordAsync(masterPasswordHash, newProtectedUserKey.EncryptedString);
break; break;
default: default:
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
@@ -155,7 +155,7 @@ namespace Bit.App.Pages
private async Task UpdatePasswordAsync(string newMasterPasswordHash, string newEncKey) private async Task UpdatePasswordAsync(string newMasterPasswordHash, string newEncKey)
{ {
var currentPasswordHash = await _cryptoService.HashPasswordAsync(CurrentMasterPassword, null); var currentPasswordHash = await _cryptoService.HashMasterKeyAsync(CurrentMasterPassword, null);
var request = new PasswordRequest var request = new PasswordRequest
{ {

View File

@@ -150,6 +150,12 @@ namespace Bit.App.Pages
private async Task SaveActivityAsync() private async Task SaveActivityAsync()
{ {
SetServices(); SetServices();
if (await _stateService.GetActiveUserIdAsync() == null)
{
// Fresh install and/or all users logged out won't have an active user, skip saving last active time
return;
}
await _stateService.SetLastActiveTimeAsync(_deviceActionService.GetActiveTime()); await _stateService.SetLastActiveTimeAsync(_deviceActionService.GetActiveTime());
} }
} }

View File

@@ -275,7 +275,7 @@
Margin="0,10,0,0"/> Margin="0,10,0,0"/>
<Entry IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}" <Entry IsVisible="{Binding ForwardedEmailServiceSelected, Converter={StaticResource enumToBool}, ConverterParameter={x:Static enums:ForwardedEmailServiceType.AnonAddy}}"
x:Name="_anonAddyDomainNameEntry" x:Name="_anonAddyDomainNameEntry"
Text="{Binding AnonAddyDomainName}" Text="{Binding AddyIoDomainName}"
StyleClass="box-value" StyleClass="box-value"
AutomationId="AnonAddyDomainNameEntry" /> AutomationId="AnonAddyDomainNameEntry" />
</StackLayout> </StackLayout>

View File

@@ -545,7 +545,7 @@ namespace Bit.App.Pages
set => SetProperty(ref _showForwardedEmailApiSecret, value); set => SetProperty(ref _showForwardedEmailApiSecret, value);
} }
public string AnonAddyDomainName public string AddyIoDomainName
{ {
get => _usernameOptions.AnonAddyDomainName; get => _usernameOptions.AnonAddyDomainName;
set set
@@ -553,7 +553,7 @@ namespace Bit.App.Pages
if (_usernameOptions.AnonAddyDomainName != value) if (_usernameOptions.AnonAddyDomainName != value)
{ {
_usernameOptions.AnonAddyDomainName = value; _usernameOptions.AnonAddyDomainName = value;
TriggerPropertyChanged(nameof(AnonAddyDomainName)); TriggerPropertyChanged(nameof(AddyIoDomainName));
SaveUsernameOptionsAsync(false).FireAndForget(); SaveUsernameOptionsAsync(false).FireAndForget();
} }
} }
@@ -793,7 +793,7 @@ namespace Bit.App.Pages
TriggerPropertyChanged(nameof(CapitalizeRandomWordUsername)); TriggerPropertyChanged(nameof(CapitalizeRandomWordUsername));
TriggerPropertyChanged(nameof(ForwardedEmailApiSecret)); TriggerPropertyChanged(nameof(ForwardedEmailApiSecret));
TriggerPropertyChanged(nameof(ForwardedEmailApiSecretLabel)); TriggerPropertyChanged(nameof(ForwardedEmailApiSecretLabel));
TriggerPropertyChanged(nameof(AnonAddyDomainName)); TriggerPropertyChanged(nameof(AddyIoDomainName));
TriggerPropertyChanged(nameof(CatchAllEmailDomain)); TriggerPropertyChanged(nameof(CatchAllEmailDomain));
TriggerPropertyChanged(nameof(ForwardedEmailServiceSelected)); TriggerPropertyChanged(nameof(ForwardedEmailServiceSelected));
TriggerPropertyChanged(nameof(UsernameTypeSelected)); TriggerPropertyChanged(nameof(UsernameTypeSelected));

View File

@@ -175,7 +175,7 @@
LineBreakMode="CharacterWrap" LineBreakMode="CharacterWrap"
StyleClass="text-sm, text-muted" StyleClass="text-sm, text-muted"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center" HorizontalTextAlignment="Start"
AutomationId="SendNoFileChosenLabel" /> AutomationId="SendNoFileChosenLabel" />
<Label <Label
IsVisible="{Binding FileName, Converter={StaticResource notNull}}" IsVisible="{Binding FileName, Converter={StaticResource notNull}}"
@@ -183,7 +183,7 @@
LineBreakMode="CharacterWrap" LineBreakMode="CharacterWrap"
StyleClass="text-sm, text-muted" StyleClass="text-sm, text-muted"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center" HorizontalTextAlignment="Start"
AutomationId="SendCurrentFileNameLabel" /> AutomationId="SendCurrentFileNameLabel" />
<Button <Button
Text="{u:I18n ChooseFile}" Text="{u:I18n ChooseFile}"
@@ -197,7 +197,7 @@
Text="{u:I18n MaxFileSize}" Text="{u:I18n MaxFileSize}"
StyleClass="text-sm, text-muted" StyleClass="text-sm, text-muted"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center" /> HorizontalTextAlignment="Start" />
</StackLayout> </StackLayout>
<Label <Label
Text="{u:I18n TypeFileInfo}" Text="{u:I18n TypeFileInfo}"
@@ -250,20 +250,6 @@
AutomationId="SendHideTextByDefaultToggle" /> AutomationId="SendHideTextByDefaultToggle" />
</StackLayout> </StackLayout>
</StackLayout> </StackLayout>
<StackLayout
StyleClass="box-row, box-row-switch">
<Label
Text="{Binding ShareOnSaveText}"
StyleClass="box-label-regular"
VerticalOptions="Center"
HorizontalOptions="StartAndExpand" />
<Switch
IsToggled="{Binding ShareOnSave}"
IsEnabled="{Binding SendEnabled}"
HorizontalOptions="End"
Margin="10,0,0,0"
AutomationId="SendShareSendAfterSaveToggle" />
</StackLayout>
<StackLayout <StackLayout
Orientation="Horizontal" Orientation="Horizontal"
Spacing="0" Spacing="0"

View File

@@ -127,10 +127,9 @@ namespace Bit.App.Pages
public SendType? Type { get; set; } public SendType? Type { get; set; }
public byte[] FileData { get; set; } public byte[] FileData { get; set; }
public string NewPassword { get; set; } public string NewPassword { get; set; }
public bool ShareOnSave { get; set; }
public bool DisableHideEmailControl { get; set; } public bool DisableHideEmailControl { get; set; }
public bool IsAddFromShare { get; set; } public bool IsAddFromShare { get; set; }
public string ShareOnSaveText => CopyInsteadOfShareAfterSaving ? AppResources.CopySendLinkOnSave : AppResources.ShareOnSave; public bool CopyInsteadOfShareAfterSaving { get; set; }
public string OptionsAccessilibityText => ShowOptions ? AppResources.OptionsExpanded : AppResources.OptionsCollapsed; public string OptionsAccessilibityText => ShowOptions ? AppResources.OptionsExpanded : AppResources.OptionsCollapsed;
public List<KeyValuePair<string, SendType>> TypeOptions { get; } public List<KeyValuePair<string, SendType>> TypeOptions { get; }
public List<KeyValuePair<string, string>> DeletionTypeOptions { get; } public List<KeyValuePair<string, string>> DeletionTypeOptions { get; }
@@ -184,15 +183,6 @@ namespace Bit.App.Pages
} }
} }
} }
public bool CopyInsteadOfShareAfterSaving
{
get => _copyInsteadOfShareAfterSaving;
set
{
SetProperty(ref _copyInsteadOfShareAfterSaving, value);
TriggerPropertyChanged(nameof(ShareOnSaveText));
}
}
public SendView Send public SendView Send
{ {
get => _send; get => _send;
@@ -412,34 +402,25 @@ namespace Bit.App.Pages
_messagingService.Send("sendUpdated"); _messagingService.Send("sendUpdated");
} }
if (!ShareOnSave)
{
_platformUtilsService.ShowToast("success", null,
EditMode ? AppResources.SendUpdated : AppResources.NewSendCreated);
}
if (!CopyInsteadOfShareAfterSaving) if (!CopyInsteadOfShareAfterSaving)
{ {
await CloseAsync(); await CloseAsync();
} }
if (ShareOnSave) var savedSend = await _sendService.GetAsync(sendId);
if (savedSend != null)
{ {
var savedSend = await _sendService.GetAsync(sendId); var savedSendView = await savedSend.DecryptAsync();
if (savedSend != null) if (CopyInsteadOfShareAfterSaving)
{ {
var savedSendView = await savedSend.DecryptAsync(); await AppHelpers.CopySendUrlAsync(savedSendView);
if (CopyInsteadOfShareAfterSaving)
{
await AppHelpers.CopySendUrlAsync(savedSendView);
// wait so that the user sees the message before the view gets dismissed // wait so that the user sees the message before the view gets dismissed
await Task.Delay(1300); await Task.Delay(1300);
} }
else else
{ {
await AppHelpers.ShareSendUrlAsync(savedSendView); await AppHelpers.ShareSendUrlAsync(savedSendView);
}
} }
} }

View File

@@ -94,13 +94,13 @@
LineBreakMode="CharacterWrap" LineBreakMode="CharacterWrap"
StyleClass="text-sm, text-muted" StyleClass="text-sm, text-muted"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center" /> HorizontalTextAlignment="Start" />
<Label <Label
Margin="0, 5, 0, 0" Margin="0, 5, 0, 0"
Text="{u:I18n MaxFileSize}" Text="{u:I18n MaxFileSize}"
StyleClass="text-sm, text-muted" StyleClass="text-sm, text-muted"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center" /> HorizontalTextAlignment="Start" />
</StackLayout> </StackLayout>
</StackLayout> </StackLayout>
<StackLayout <StackLayout
@@ -145,19 +145,6 @@
Margin="10,0,0,0" /> Margin="10,0,0,0" />
</StackLayout> </StackLayout>
</StackLayout> </StackLayout>
<StackLayout
StyleClass="box-row, box-row-switch">
<Label
Text="{Binding ShareOnSaveText}"
StyleClass="box-label-regular"
VerticalOptions="Center"
HorizontalOptions="StartAndExpand" />
<Switch
IsToggled="{Binding ShareOnSave}"
IsEnabled="{Binding SendEnabled}"
HorizontalOptions="End"
Margin="10,0,0,0" />
</StackLayout>
<StackLayout <StackLayout
Orientation="Horizontal" Orientation="Horizontal"
Spacing="0" Spacing="0"

View File

@@ -21,7 +21,6 @@ namespace Bit.App.Pages
private readonly II18nService _i18nService; private readonly II18nService _i18nService;
private readonly IExportService _exportService; private readonly IExportService _exportService;
private readonly IPolicyService _policyService; private readonly IPolicyService _policyService;
private readonly IKeyConnectorService _keyConnectorService;
private readonly IUserVerificationService _userVerificationService; private readonly IUserVerificationService _userVerificationService;
private readonly IApiService _apiService; private readonly IApiService _apiService;
private readonly ILogger _logger; private readonly ILogger _logger;
@@ -45,8 +44,7 @@ namespace Bit.App.Pages
_i18nService = ServiceContainer.Resolve<II18nService>("i18nService"); _i18nService = ServiceContainer.Resolve<II18nService>("i18nService");
_exportService = ServiceContainer.Resolve<IExportService>("exportService"); _exportService = ServiceContainer.Resolve<IExportService>("exportService");
_policyService = ServiceContainer.Resolve<IPolicyService>("policyService"); _policyService = ServiceContainer.Resolve<IPolicyService>("policyService");
_keyConnectorService = ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService"); _userVerificationService = ServiceContainer.Resolve<IUserVerificationService>();
_userVerificationService = ServiceContainer.Resolve<IUserVerificationService>("userVerificationService");
_apiService = ServiceContainer.Resolve<IApiService>("apiService"); _apiService = ServiceContainer.Resolve<IApiService>("apiService");
_logger = ServiceContainer.Resolve<ILogger>("logger"); _logger = ServiceContainer.Resolve<ILogger>("logger");
@@ -67,7 +65,7 @@ namespace Bit.App.Pages
_initialized = true; _initialized = true;
FileFormatSelectedIndex = FileFormatOptions.FindIndex(k => k.Key == "json"); FileFormatSelectedIndex = FileFormatOptions.FindIndex(k => k.Key == "json");
DisablePrivateVaultPolicyEnabled = await _policyService.PolicyAppliesToUser(PolicyType.DisablePersonalVaultExport); DisablePrivateVaultPolicyEnabled = await _policyService.PolicyAppliesToUser(PolicyType.DisablePersonalVaultExport);
UseOTPVerification = await _keyConnectorService.GetUsesKeyConnector(); UseOTPVerification = !await _userVerificationService.HasMasterPasswordAsync(true);
if (UseOTPVerification) if (UseOTPVerification)
{ {
@@ -165,9 +163,9 @@ namespace Bit.App.Pages
return; return;
} }
var verificationType = await _keyConnectorService.GetUsesKeyConnector() var verificationType = await _userVerificationService.HasMasterPasswordAsync(true)
? VerificationType.OTP ? VerificationType.MasterPassword
: VerificationType.MasterPassword; : VerificationType.OTP;
if (!await _userVerificationService.VerifyUser(Secret, verificationType)) if (!await _userVerificationService.VerifyUser(Secret, verificationType))
{ {
return; return;

View File

@@ -32,7 +32,8 @@
Padding="10, 0" Padding="10, 0"
RowSpacing="0" RowSpacing="0"
RowDefinitions="*, Auto, *, 10" RowDefinitions="*, Auto, *, 10"
ColumnDefinitions="*, *"> ColumnDefinitions="*, *"
AutomationId="LoginRequestCell">
<Label <Label
Text="{u:I18n FingerprintPhrase}" Text="{u:I18n FingerprintPhrase}"
FontSize="Small" FontSize="Small"
@@ -45,20 +46,23 @@
FontSize="Small" FontSize="Small"
Padding="0, 5, 0, 10" Padding="0, 5, 0, 10"
VerticalTextAlignment="Center" VerticalTextAlignment="Center"
TextColor="{DynamicResource FingerprintPhrase}"/> TextColor="{DynamicResource FingerprintPhrase}"
AutomationId="FingerprintPhraseLabel" />
<Label <Label
Grid.Row="2" Grid.Row="2"
HorizontalOptions="Start" HorizontalOptions="Start"
HorizontalTextAlignment="Start" HorizontalTextAlignment="Start"
Text="{Binding RequestDeviceType}" Text="{Binding RequestDeviceType}"
StyleClass="list-header-sub" /> StyleClass="list-header-sub"
AutomationId="RequestDeviceLabel" />
<Label <Label
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
HorizontalOptions="End" HorizontalOptions="End"
HorizontalTextAlignment="End" HorizontalTextAlignment="End"
Text="{Binding CreationDate, Converter={StaticResource dateTime}}" Text="{Binding CreationDate, Converter={StaticResource dateTime}}"
StyleClass="list-header-sub" /> StyleClass="list-header-sub"
AutomationId="RequestDateLabel" />
<BoxView <BoxView
StyleClass="list-section-separator-top, list-section-separator-top-platform" StyleClass="list-section-separator-top, list-section-separator-top-platform"
VerticalOptions="End" VerticalOptions="End"
@@ -94,7 +98,8 @@
Margin="10,0" Margin="10,0"
Icon="{Binding Source={x:Static core:BitwardenIcons.Trash}}" Icon="{Binding Source={x:Static core:BitwardenIcons.Trash}}"
Label="{u:I18n DeclineAllRequests}" Label="{u:I18n DeclineAllRequests}"
ButtonCommand="{Binding DeclineAllRequestsCommand}"/> ButtonCommand="{Binding DeclineAllRequestsCommand}"
AutomationId="DeleteAllRequestsButton" />
</StackLayout> </StackLayout>
</ResourceDictionary> </ResourceDictionary>
</ContentPage.Resources> </ContentPage.Resources>

View File

@@ -29,7 +29,7 @@ namespace Bit.App.Pages
private readonly IBiometricService _biometricService; private readonly IBiometricService _biometricService;
private readonly IPolicyService _policyService; private readonly IPolicyService _policyService;
private readonly ILocalizeService _localizeService; private readonly ILocalizeService _localizeService;
private readonly IKeyConnectorService _keyConnectorService; private readonly IUserVerificationService _userVerificationService;
private readonly IClipboardService _clipboardService; private readonly IClipboardService _clipboardService;
private readonly ILogger _loggerService; private readonly ILogger _loggerService;
private readonly IPushNotificationService _pushNotificationService; private readonly IPushNotificationService _pushNotificationService;
@@ -48,6 +48,7 @@ namespace Bit.App.Pages
private bool _reportLoggingEnabled; private bool _reportLoggingEnabled;
private bool _approvePasswordlessLoginRequests; private bool _approvePasswordlessLoginRequests;
private bool _shouldConnectToWatch; private bool _shouldConnectToWatch;
private bool _hasMasterPassword;
private readonly static List<KeyValuePair<string, int?>> VaultTimeoutOptions = private readonly static List<KeyValuePair<string, int?>> VaultTimeoutOptions =
new List<KeyValuePair<string, int?>> new List<KeyValuePair<string, int?>>
{ {
@@ -88,7 +89,7 @@ namespace Bit.App.Pages
_biometricService = ServiceContainer.Resolve<IBiometricService>("biometricService"); _biometricService = ServiceContainer.Resolve<IBiometricService>("biometricService");
_policyService = ServiceContainer.Resolve<IPolicyService>("policyService"); _policyService = ServiceContainer.Resolve<IPolicyService>("policyService");
_localizeService = ServiceContainer.Resolve<ILocalizeService>("localizeService"); _localizeService = ServiceContainer.Resolve<ILocalizeService>("localizeService");
_keyConnectorService = ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService"); _userVerificationService = ServiceContainer.Resolve<IUserVerificationService>();
_clipboardService = ServiceContainer.Resolve<IClipboardService>("clipboardService"); _clipboardService = ServiceContainer.Resolve<IClipboardService>("clipboardService");
_loggerService = ServiceContainer.Resolve<ILogger>("logger"); _loggerService = ServiceContainer.Resolve<ILogger>("logger");
_pushNotificationService = ServiceContainer.Resolve<IPushNotificationService>(); _pushNotificationService = ServiceContainer.Resolve<IPushNotificationService>();
@@ -100,12 +101,17 @@ namespace Bit.App.Pages
ExecuteSettingItemCommand = new AsyncCommand<SettingsPageListItem>(item => item.ExecuteAsync(), onException: _loggerService.Exception, allowsMultipleExecutions: false); ExecuteSettingItemCommand = new AsyncCommand<SettingsPageListItem>(item => item.ExecuteAsync(), onException: _loggerService.Exception, allowsMultipleExecutions: false);
} }
private bool IsVaultTimeoutActionLockAllowed => _hasMasterPassword || _biometric || _pin;
public ObservableRangeCollection<ISettingsPageListItem> GroupedItems { get; set; } public ObservableRangeCollection<ISettingsPageListItem> GroupedItems { get; set; }
public IAsyncCommand<SettingsPageListItem> ExecuteSettingItemCommand { get; } public IAsyncCommand<SettingsPageListItem> ExecuteSettingItemCommand { get; }
public async Task InitAsync() public async Task InitAsync()
{ {
var decryptionOptions = await _stateService.GetAccountDecryptionOptions();
// set has true for backwards compatibility
_hasMasterPassword = decryptionOptions?.HasMasterPassword ?? true;
_supportsBiometric = await _platformUtilsService.SupportsBiometricAsync(); _supportsBiometric = await _platformUtilsService.SupportsBiometricAsync();
var lastSync = await _syncService.GetLastSyncAsync(); var lastSync = await _syncService.GetLastSyncAsync();
if (lastSync != null) if (lastSync != null)
@@ -124,8 +130,17 @@ namespace Bit.App.Pages
_vaultTimeoutDisplayValue = _vaultTimeoutOptions.FirstOrDefault(o => o.Value == _vaultTimeout).Key; _vaultTimeoutDisplayValue = _vaultTimeoutOptions.FirstOrDefault(o => o.Value == _vaultTimeout).Key;
_vaultTimeoutDisplayValue ??= _vaultTimeoutOptions.Where(o => o.Value == CustomVaultTimeoutValue).First().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; var pinSet = await _vaultTimeoutService.GetPinLockTypeAsync();
_pin = pinSet != PinLockType.Disabled;
_biometric = await _vaultTimeoutService.IsBiometricLockSetAsync();
var timeoutAction = await _vaultTimeoutService.GetVaultTimeoutAction() ?? VaultTimeoutAction.Lock;
if (!IsVaultTimeoutActionLockAllowed && timeoutAction == VaultTimeoutAction.Lock)
{
timeoutAction = VaultTimeoutAction.Logout;
await _vaultTimeoutService.SetVaultTimeoutOptionsAsync(_vaultTimeout, VaultTimeoutAction.Logout);
}
_vaultTimeoutActionDisplayValue = _vaultTimeoutActionOptions.FirstOrDefault(o => o.Value == timeoutAction).Key;
if (await _policyService.PolicyAppliesToUser(PolicyType.MaximumVaultTimeout)) if (await _policyService.PolicyAppliesToUser(PolicyType.MaximumVaultTimeout))
{ {
@@ -137,10 +152,6 @@ namespace Bit.App.Pages
(t.Value > 0 || t.Value == CustomVaultTimeoutValue) && (t.Value > 0 || t.Value == CustomVaultTimeoutValue) &&
t.Value != null).ToList(); t.Value != null).ToList();
} }
var pinSet = await _vaultTimeoutService.IsPinLockSetAsync();
_pin = pinSet.Item1 || pinSet.Item2;
_biometric = await _vaultTimeoutService.IsBiometricLockSetAsync();
_screenCaptureAllowed = await _stateService.GetScreenCaptureAllowedAsync(); _screenCaptureAllowed = await _stateService.GetScreenCaptureAllowedAsync();
if (_vaultTimeoutDisplayValue == null) if (_vaultTimeoutDisplayValue == null)
@@ -148,8 +159,7 @@ namespace Bit.App.Pages
_vaultTimeoutDisplayValue = AppResources.Custom; _vaultTimeoutDisplayValue = AppResources.Custom;
} }
_showChangeMasterPassword = IncludeLinksWithSubscriptionInfo() && _showChangeMasterPassword = IncludeLinksWithSubscriptionInfo() && await _userVerificationService.HasMasterPasswordAsync();
!await _keyConnectorService.GetUsesKeyConnector();
_reportLoggingEnabled = await _loggerService.IsEnabled(); _reportLoggingEnabled = await _loggerService.IsEnabled();
_approvePasswordlessLoginRequests = await _stateService.GetApprovePasswordlessLoginsAsync(); _approvePasswordlessLoginRequests = await _stateService.GetApprovePasswordlessLoginsAsync();
_shouldConnectToWatch = await _stateService.GetShouldConnectToWatchAsync(); _shouldConnectToWatch = await _stateService.GetShouldConnectToWatchAsync();
@@ -323,6 +333,7 @@ namespace Bit.App.Pages
} }
if (oldTimeout != newTimeout) if (oldTimeout != newTimeout)
{ {
await _cryptoService.RefreshKeysAsync();
await Device.InvokeOnMainThreadAsync(BuildList); await Device.InvokeOnMainThreadAsync(BuildList);
} }
} }
@@ -387,8 +398,11 @@ namespace Bit.App.Pages
// do nothing if we have a policy set // do nothing if we have a policy set
return; return;
} }
var options = _vaultTimeoutActionOptions.Select(o =>
o.Key == _vaultTimeoutActionDisplayValue ? $"✓ {o.Key}" : o.Key).ToArray(); var options = IsVaultTimeoutActionLockAllowed
? _vaultTimeoutActionOptions.Select(o => CreateSelectableOption(o.Key, _vaultTimeoutActionDisplayValue == o.Key)).ToArray()
: _vaultTimeoutActionOptions.Where(o => o.Value == VaultTimeoutAction.Logout).Select(v => ToSelectedOption(v.Key)).ToArray();
var selection = await Page.DisplayActionSheet(AppResources.VaultTimeoutAction, var selection = await Page.DisplayActionSheet(AppResources.VaultTimeoutAction,
AppResources.Cancel, null, options); AppResources.Cancel, null, options);
if (selection == null || selection == AppResources.Cancel) if (selection == null || selection == AppResources.Cancel)
@@ -428,7 +442,7 @@ namespace Bit.App.Pages
if (!string.IsNullOrWhiteSpace(pin)) if (!string.IsNullOrWhiteSpace(pin))
{ {
var masterPassOnRestart = false; var masterPassOnRestart = false;
if (!await _keyConnectorService.GetUsesKeyConnector()) if (await _userVerificationService.HasMasterPasswordAsync())
{ {
masterPassOnRestart = await _platformUtilsService.ShowDialogAsync( masterPassOnRestart = await _platformUtilsService.ShowDialogAsync(
AppResources.PINRequireMasterPasswordRestart, AppResources.UnlockWithPIN, AppResources.PINRequireMasterPasswordRestart, AppResources.UnlockWithPIN,
@@ -437,19 +451,20 @@ namespace Bit.App.Pages
var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile)); var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile));
var email = await _stateService.GetEmailAsync(); var email = await _stateService.GetEmailAsync();
var pinKey = await _cryptoService.MakePinKeyAysnc(pin, email, kdfConfig); var pinKey = await _cryptoService.MakePinKeyAsync(pin, email, kdfConfig);
var key = await _cryptoService.GetKeyAsync(); var userKey = await _cryptoService.GetUserKeyAsync();
var pinProtectedKey = await _cryptoService.EncryptAsync(key.Key, pinKey); var protectedPinKey = await _cryptoService.EncryptAsync(userKey.Key, pinKey);
var encPin = await _cryptoService.EncryptAsync(pin);
await _stateService.SetProtectedPinAsync(encPin.EncryptedString);
if (masterPassOnRestart) if (masterPassOnRestart)
{ {
var encPin = await _cryptoService.EncryptAsync(pin); await _stateService.SetPinKeyEncryptedUserKeyEphemeralAsync(protectedPinKey);
await _stateService.SetProtectedPinAsync(encPin.EncryptedString);
await _stateService.SetPinProtectedKeyAsync(pinProtectedKey);
} }
else else
{ {
await _stateService.SetPinProtectedAsync(pinProtectedKey.EncryptedString); await _stateService.SetPinKeyEncryptedUserKeyAsync(protectedPinKey);
} }
} }
else else
@@ -459,8 +474,8 @@ namespace Bit.App.Pages
} }
if (!_pin) if (!_pin)
{ {
await _cryptoService.ClearPinProtectedKeyAsync();
await _vaultTimeoutService.ClearAsync(); await _vaultTimeoutService.ClearAsync();
await UpdateVaultTimeoutActionIfNeededAsync();
} }
BuildList(); BuildList();
} }
@@ -489,9 +504,10 @@ namespace Bit.App.Pages
else else
{ {
await _stateService.SetBiometricUnlockAsync(null); await _stateService.SetBiometricUnlockAsync(null);
await UpdateVaultTimeoutActionIfNeededAsync();
} }
await _stateService.SetBiometricLockedAsync(false); await _stateService.SetBiometricLockedAsync(false);
await _cryptoService.ToggleKeyAsync(); await _cryptoService.RefreshKeysAsync();
BuildList(); BuildList();
} }
@@ -835,9 +851,11 @@ namespace Bit.App.Pages
return _vaultTimeoutOptions.FirstOrDefault(o => o.Key == key).Value; return _vaultTimeoutOptions.FirstOrDefault(o => o.Key == key).Value;
} }
private string CreateSelectableOption(string option, bool selected) => selected ? $"✓ {option}" : option; private string CreateSelectableOption(string option, bool selected) => selected ? ToSelectedOption(option) : option;
private bool CompareSelection(string selection, string compareTo) => selection == compareTo || selection == $"✓ {compareTo}"; private bool CompareSelection(string selection, string compareTo) => selection == compareTo || selection == ToSelectedOption(compareTo);
private string ToSelectedOption(string option) => $"✓ {option}";
public async Task SetScreenCaptureAllowedAsync() public async Task SetScreenCaptureAllowedAsync()
{ {
@@ -869,5 +887,17 @@ namespace Bit.App.Pages
await _watchDeviceService.SetShouldConnectToWatchAsync(_shouldConnectToWatch); await _watchDeviceService.SetShouldConnectToWatchAsync(_shouldConnectToWatch);
BuildList(); BuildList();
} }
private async Task UpdateVaultTimeoutActionIfNeededAsync()
{
if (IsVaultTimeoutActionLockAllowed)
{
return;
}
_vaultTimeoutActionDisplayValue = _vaultTimeoutActionOptions.First(o => o.Value == VaultTimeoutAction.Logout).Key;
await _vaultTimeoutService.SetVaultTimeoutOptionsAsync(_vaultTimeout, VaultTimeoutAction.Logout);
_deviceActionService.Toast(AppResources.VaultTimeoutActionChangedToLogOut);
}
} }
} }

View File

@@ -94,7 +94,7 @@ namespace Bit.App.Pages
} }
}); });
await UpdateVaultButtonTitleAsync(); await UpdateVaultButtonTitleAsync();
if (await _keyConnectorService.UserNeedsMigration()) if (await _keyConnectorService.UserNeedsMigrationAsync())
{ {
_messagingService.Send("convertAccountToKeyConnector"); _messagingService.Send("convertAccountToKeyConnector");
} }

View File

@@ -74,7 +74,7 @@ namespace Bit.App.Pages
_cipherDomain = await _cipherService.GetAsync(CipherId); _cipherDomain = await _cipherService.GetAsync(CipherId);
Cipher = await _cipherDomain.DecryptAsync(); Cipher = await _cipherDomain.DecryptAsync();
LoadAttachments(); LoadAttachments();
_hasUpdatedKey = await _cryptoService.HasEncKeyAsync(); _hasUpdatedKey = await _cryptoService.HasUserKeyAsync();
var canAccessPremium = await _stateService.CanAccessPremiumAsync(); var canAccessPremium = await _stateService.CanAccessPremiumAsync();
_canAccessAttachments = canAccessPremium || Cipher.OrganizationId != null; _canAccessAttachments = canAccessPremium || Cipher.OrganizationId != null;
if (!_canAccessAttachments) if (!_canAccessAttachments)
@@ -123,7 +123,7 @@ namespace Bit.App.Pages
{ {
await _deviceActionService.ShowLoadingAsync(AppResources.Saving); await _deviceActionService.ShowLoadingAsync(AppResources.Saving);
_cipherDomain = await _cipherService.SaveAttachmentRawWithServerAsync( _cipherDomain = await _cipherService.SaveAttachmentRawWithServerAsync(
_cipherDomain, FileName, FileData); _cipherDomain, Cipher, FileName, FileData);
Cipher = await _cipherDomain.DecryptAsync(); Cipher = await _cipherDomain.DecryptAsync();
await _deviceActionService.HideLoadingAsync(); await _deviceActionService.HideLoadingAsync();
_platformUtilsService.ShowToast("success", null, AppResources.AttachementAdded); _platformUtilsService.ShowToast("success", null, AppResources.AttachementAdded);

View File

@@ -82,7 +82,7 @@ namespace Bit.App.Pages
return; return;
} }
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync()) if (!await _passwordRepromptService.PromptAndCheckPasswordIfNeededAsync(cipher.Reprompt))
{ {
return; return;
} }

View File

@@ -21,7 +21,7 @@ namespace Bit.App.Pages
private readonly IDeviceActionService _deviceActionService; private readonly IDeviceActionService _deviceActionService;
private readonly IAutofillHandler _autofillHandler; private readonly IAutofillHandler _autofillHandler;
private readonly IVaultTimeoutService _vaultTimeoutService; private readonly IVaultTimeoutService _vaultTimeoutService;
private readonly IKeyConnectorService _keyConnectorService; private readonly IUserVerificationService _userVerificationService;
private CipherAddEditPageViewModel _vm; private CipherAddEditPageViewModel _vm;
private bool _fromAutofill; private bool _fromAutofill;
@@ -43,7 +43,7 @@ namespace Bit.App.Pages
_deviceActionService = ServiceContainer.Resolve<IDeviceActionService>("deviceActionService"); _deviceActionService = ServiceContainer.Resolve<IDeviceActionService>("deviceActionService");
_autofillHandler = ServiceContainer.Resolve<IAutofillHandler>(); _autofillHandler = ServiceContainer.Resolve<IAutofillHandler>();
_vaultTimeoutService = ServiceContainer.Resolve<IVaultTimeoutService>("vaultTimeoutService"); _vaultTimeoutService = ServiceContainer.Resolve<IVaultTimeoutService>("vaultTimeoutService");
_keyConnectorService = ServiceContainer.Resolve<IKeyConnectorService>("keyConnectorService"); _userVerificationService = ServiceContainer.Resolve<IUserVerificationService>();
_appOptions = appOptions; _appOptions = appOptions;
_fromAutofill = fromAutofill; _fromAutofill = fromAutofill;
@@ -175,8 +175,8 @@ namespace Bit.App.Pages
RequestFocus(_nameEntry); RequestFocus(_nameEntry);
} }
}); });
// Hide password reprompt option if using key connector
_passwordPrompt.IsVisible = !await _keyConnectorService.GetUsesKeyConnector(); _passwordPrompt.IsVisible = await _userVerificationService.HasMasterPasswordAsync();
} }
protected override void OnDisappearing() protected override void OnDisappearing()

View File

@@ -698,12 +698,12 @@ namespace Bit.App.Pages
public async Task<bool> PromptPasswordAsync() public async Task<bool> PromptPasswordAsync()
{ {
if (Cipher.Reprompt == CipherRepromptType.None || _passwordReprompted) if (_passwordReprompted)
{ {
return true; return true;
} }
return _passwordReprompted = await _passwordRepromptService.ShowPasswordPromptAsync(); return _passwordReprompted = await _passwordRepromptService.PromptAndCheckPasswordIfNeededAsync(Cipher.Reprompt);
} }
private async Task<bool> CanCloneAsync() private async Task<bool> CanCloneAsync()

View File

@@ -191,7 +191,7 @@ namespace Bit.App.Pages
if (_appOptions?.OtpData != null) if (_appOptions?.OtpData != null)
{ {
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync()) if (!await _passwordRepromptService.PromptAndCheckPasswordIfNeededAsync(cipher.Reprompt))
{ {
return; return;
} }
@@ -208,7 +208,7 @@ namespace Bit.App.Pages
} }
else if (selection == AppResources.Autofill || selection == AppResources.AutofillAndSave) else if (selection == AppResources.Autofill || selection == AppResources.AutofillAndSave)
{ {
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync()) if (!await _passwordRepromptService.PromptAndCheckPasswordIfNeededAsync(cipher.Reprompt))
{ {
return; return;
} }

View File

@@ -60,7 +60,7 @@ namespace Bit.App.Pages
var cipher = listItem.Cipher; var cipher = listItem.Cipher;
if (cipher.Reprompt != CipherRepromptType.None && !await _passwordRepromptService.ShowPasswordPromptAsync()) if (!await _passwordRepromptService.PromptAndCheckPasswordIfNeededAsync(cipher.Reprompt))
{ {
return; return;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -2413,9 +2413,9 @@ kies u Voeg TOTP toe om die sleutel veilig te bewaar</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Diens</value> <value>Diens</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@ Wil u na die rekening omskakel?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Huidige hoofwagwoord</value> <value>Huidige hoofwagwoord</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Wil u na die rekening omskakel?</value>
<value>Hulpteks vir vra weer vir hoofwagwoord</value> <value>Hulpteks vir vra weer vir hoofwagwoord</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Ontgrendeling kan misluk as daar onvoldoende geheue is. Verminder u KDF-geheue-instellings om dit op te los.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Ongeldige API-sleutel</value> <value>Ongeldige API-sleutel</value>
@@ -2667,6 +2685,24 @@ Wil u na die rekening omskakel?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Ongeldige API-teken</value> <value>Ongeldige API-teken</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Wil u na die rekening omskakel?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -125,14 +125,14 @@
<comment>Add/create a new entity (verb).</comment> <comment>Add/create a new entity (verb).</comment>
</data> </data>
<data name="AddFolder" xml:space="preserve"> <data name="AddFolder" xml:space="preserve">
<value>مجلد مضاف</value> <value>إضافة مجلّد</value>
</data> </data>
<data name="AddItem" xml:space="preserve"> <data name="AddItem" xml:space="preserve">
<value>تمت إضافة العنصر</value> <value>إضافة عنصر</value>
<comment>The title for the add item page.</comment> <comment>The title for the add item page.</comment>
</data> </data>
<data name="AnErrorHasOccurred" xml:space="preserve"> <data name="AnErrorHasOccurred" xml:space="preserve">
<value>كان هناك خطأ.</value> <value>لقد حدث خطأ.</value>
<comment>Alert title when something goes wrong.</comment> <comment>Alert title when something goes wrong.</comment>
</data> </data>
<data name="Back" xml:space="preserve"> <data name="Back" xml:space="preserve">
@@ -140,7 +140,7 @@
<comment>Navigate back to the previous screen.</comment> <comment>Navigate back to the previous screen.</comment>
</data> </data>
<data name="Bitwarden" xml:space="preserve"> <data name="Bitwarden" xml:space="preserve">
<value>bitwarden</value> <value>Bitwarden</value>
<comment>App name. Shouldn't ever change.</comment> <comment>App name. Shouldn't ever change.</comment>
</data> </data>
<data name="Cancel" xml:space="preserve"> <data name="Cancel" xml:space="preserve">
@@ -156,11 +156,11 @@
<comment>The button text that allows a user to copy the login's password to their clipboard.</comment> <comment>The button text that allows a user to copy the login's password to their clipboard.</comment>
</data> </data>
<data name="CopyUsername" xml:space="preserve"> <data name="CopyUsername" xml:space="preserve">
<value>المصادقة باستخدام FIDO2 WebAuthn، يمكنك المصادقة باستخدام مفتاح أمان خارجي.</value> <value>انسخ اسم المستخدم</value>
<comment>The button text that allows a user to copy the login's username to their clipboard.</comment> <comment>The button text that allows a user to copy the login's username to their clipboard.</comment>
</data> </data>
<data name="Credits" xml:space="preserve"> <data name="Credits" xml:space="preserve">
<value>شكر</value> <value>شكر وتقدير</value>
<comment>Title for page that we use to give credit to resources that we use.</comment> <comment>Title for page that we use to give credit to resources that we use.</comment>
</data> </data>
<data name="Delete" xml:space="preserve"> <data name="Delete" xml:space="preserve">
@@ -168,42 +168,42 @@
<comment>Delete an entity (verb).</comment> <comment>Delete an entity (verb).</comment>
</data> </data>
<data name="Deleting" xml:space="preserve"> <data name="Deleting" xml:space="preserve">
<value>حذف ...</value> <value>جارِ الحذف...</value>
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="DoYouReallyWantToDelete" xml:space="preserve"> <data name="DoYouReallyWantToDelete" xml:space="preserve">
<value>هل أنت متأكد من أنك تريد الحذف؟ لا يمكن إلغاؤه</value> <value>هل تريد حقا أن تحذف؟ هذا لا يمكن التراجع عنها.</value>
<comment>Confirmation alert message when deleteing something.</comment> <comment>Confirmation alert message when deleteing something.</comment>
</data> </data>
<data name="Edit" xml:space="preserve"> <data name="Edit" xml:space="preserve">
<value>تعديل</value> <value>تعديل</value>
</data> </data>
<data name="EditFolder" xml:space="preserve"> <data name="EditFolder" xml:space="preserve">
<value>تعديل مجلد</value> <value>تحرير المجلد</value>
</data> </data>
<data name="Email" xml:space="preserve"> <data name="Email" xml:space="preserve">
<value>بريد الكتروني</value> <value>بريد الكتروني</value>
<comment>Short label for an email address.</comment> <comment>Short label for an email address.</comment>
</data> </data>
<data name="EmailAddress" xml:space="preserve"> <data name="EmailAddress" xml:space="preserve">
<value>عنوان بريد الكتروني</value> <value>عنوان البريد الإلكتروني</value>
<comment>Full label for a email address.</comment> <comment>Full label for a email address.</comment>
</data> </data>
<data name="EmailUs" xml:space="preserve"> <data name="EmailUs" xml:space="preserve">
<value>اكتب إلينا</value> <value>راسلنا عبر البريد الإلكتروني</value>
</data> </data>
<data name="EmailUsDescription" xml:space="preserve"> <data name="EmailUsDescription" xml:space="preserve">
<value>اتصل بنا مباشرة للحصول على المساعدة أو التعليق.</value> <value>أرسل لنا رسالة مباشرة للحصول على المساعدة أو ترك ملاحظات.</value>
</data> </data>
<data name="EnterPIN" xml:space="preserve"> <data name="EnterPIN" xml:space="preserve">
<value>أدخل رقم التعريف الشخصي الخاص بك.</value> <value>أدخل رَقم تعريفك الشخصي.</value>
</data> </data>
<data name="Favorites" xml:space="preserve"> <data name="Favorites" xml:space="preserve">
<value>المفضلات</value> <value>المفضلات</value>
<comment>Title for your favorite items in the vault.</comment> <comment>Title for your favorite items in the vault.</comment>
</data> </data>
<data name="FileBugReport" xml:space="preserve"> <data name="FileBugReport" xml:space="preserve">
<value>إرسال تقرير خطأ</value> <value>إرسال تقرير عن خطأ</value>
</data> </data>
<data name="FileBugReportDescription" xml:space="preserve"> <data name="FileBugReportDescription" xml:space="preserve">
<value>افتح تذكرة في مستودع Github لدينا.</value> <value>افتح تذكرة في مستودع Github لدينا.</value>
@@ -212,42 +212,42 @@
<value>استخدم بصمة إصبعك للتعريف بنفسك.</value> <value>استخدم بصمة إصبعك للتعريف بنفسك.</value>
</data> </data>
<data name="Folder" xml:space="preserve"> <data name="Folder" xml:space="preserve">
<value>مجلد</value> <value>المجلد</value>
<comment>Label for a folder.</comment> <comment>Label for a folder.</comment>
</data> </data>
<data name="FolderCreated" xml:space="preserve"> <data name="FolderCreated" xml:space="preserve">
<value>مجلد جديد أنشئ</value> <value>نشأ مجلد جديد.</value>
</data> </data>
<data name="FolderDeleted" xml:space="preserve"> <data name="FolderDeleted" xml:space="preserve">
<value>مجلد محذوف</value> <value>حذفت المجلد.</value>
</data> </data>
<data name="FolderNone" xml:space="preserve"> <data name="FolderNone" xml:space="preserve">
<value>لا مجلد</value> <value>لا مجلد</value>
<comment>Items that have no folder specified go in this special "catch-all" folder.</comment> <comment>Items that have no folder specified go in this special "catch-all" folder.</comment>
</data> </data>
<data name="Folders" xml:space="preserve"> <data name="Folders" xml:space="preserve">
<value>مجلدات</value> <value>المجلدات</value>
</data> </data>
<data name="FolderUpdated" xml:space="preserve"> <data name="FolderUpdated" xml:space="preserve">
<value>مجلد محدّث</value> <value>حُفظ المجلد</value>
</data> </data>
<data name="GoToWebsite" xml:space="preserve"> <data name="GoToWebsite" xml:space="preserve">
<value>زر الموقع الالكتروني</value> <value>الذهاب إلى الموقع الالكتروني</value>
<comment>The button text that allows user to launch the website to their web browser.</comment> <comment>The button text that allows user to launch the website to their web browser.</comment>
</data> </data>
<data name="HelpAndFeedback" xml:space="preserve"> <data name="HelpAndFeedback" xml:space="preserve">
<value>مساعدة ورجوع</value> <value>المساعدة و الملاحظات</value>
</data> </data>
<data name="Hide" xml:space="preserve"> <data name="Hide" xml:space="preserve">
<value>إخفاء</value> <value>إخفاء</value>
<comment>Hide a secret value that is currently shown (password).</comment> <comment>Hide a secret value that is currently shown (password).</comment>
</data> </data>
<data name="InternetConnectionRequiredMessage" xml:space="preserve"> <data name="InternetConnectionRequiredMessage" xml:space="preserve">
<value>عليك الاتصال بالانترنت قبل المواصلة</value> <value>عليك الاتصال بالإنترنت قبل المواصلة.</value>
<comment>Description message for the alert when internet connection is required to continue.</comment> <comment>Description message for the alert when internet connection is required to continue.</comment>
</data> </data>
<data name="InternetConnectionRequiredTitle" xml:space="preserve"> <data name="InternetConnectionRequiredTitle" xml:space="preserve">
<value>اتصال بالانترنت مطلوب</value> <value>الاتصال بالإنترنت مطلوب</value>
<comment>Title for the alert when internet connection is required to continue.</comment> <comment>Title for the alert when internet connection is required to continue.</comment>
</data> </data>
<data name="InvalidMasterPassword" xml:space="preserve"> <data name="InvalidMasterPassword" xml:space="preserve">
@@ -261,11 +261,11 @@
<comment>The button text that allows user to launch the website to their web browser.</comment> <comment>The button text that allows user to launch the website to their web browser.</comment>
</data> </data>
<data name="LogIn" xml:space="preserve"> <data name="LogIn" xml:space="preserve">
<value>تعريف</value> <value>تسجيل الدخول</value>
<comment>The login button text (verb).</comment> <comment>The login button text (verb).</comment>
</data> </data>
<data name="LogInNoun" xml:space="preserve"> <data name="LogInNoun" xml:space="preserve">
<value>اسم المستخدم</value> <value>تسجيل الدخول</value>
<comment>Title for login page. (noun)</comment> <comment>Title for login page. (noun)</comment>
</data> </data>
<data name="LogOut" xml:space="preserve"> <data name="LogOut" xml:space="preserve">
@@ -330,11 +330,11 @@
<value>نقل</value> <value>نقل</value>
</data> </data>
<data name="Saving" xml:space="preserve"> <data name="Saving" xml:space="preserve">
<value>حفظ...</value> <value>جارِ حفظ...</value>
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="Settings" xml:space="preserve"> <data name="Settings" xml:space="preserve">
<value>إعدادات</value> <value>الإعدادات</value>
<comment>The title for the settings page.</comment> <comment>The title for the settings page.</comment>
</data> </data>
<data name="Show" xml:space="preserve"> <data name="Show" xml:space="preserve">
@@ -360,7 +360,7 @@
<comment>The title for the tools page.</comment> <comment>The title for the tools page.</comment>
</data> </data>
<data name="URI" xml:space="preserve"> <data name="URI" xml:space="preserve">
<value>الرابط</value> <value>عنوان الـ URI</value>
<comment>Label for a uri/url.</comment> <comment>Label for a uri/url.</comment>
</data> </data>
<data name="UseFingerprintToUnlock" xml:space="preserve"> <data name="UseFingerprintToUnlock" xml:space="preserve">
@@ -464,7 +464,7 @@
<value>إنشاء حساب</value> <value>إنشاء حساب</value>
</data> </data>
<data name="CreatingAccount" xml:space="preserve"> <data name="CreatingAccount" xml:space="preserve">
<value>إنشاء الحساب...</value> <value>جارِ إنشاء الحساب...</value>
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="EditItem" xml:space="preserve"> <data name="EditItem" xml:space="preserve">
@@ -493,16 +493,16 @@
<value>احصل على إمكانية الوصول الفوري إلى كلمات المرور الخاصة بك!</value> <value>احصل على إمكانية الوصول الفوري إلى كلمات المرور الخاصة بك!</value>
</data> </data>
<data name="ExtensionReady" xml:space="preserve"> <data name="ExtensionReady" xml:space="preserve">
<value>أنت مستعد للتعريف بنفسك!</value> <value>أنت مستعد لتسجيل الدخول!</value>
</data> </data>
<data name="ExtensionSetup" xml:space="preserve"> <data name="ExtensionSetup" xml:space="preserve">
<value>يمكن الآن الوصول إلى المعرفات الخاصة بك بسهولة من Safari وChrome والتطبيقات الأخرى المدعومة.</value> <value>يمكن الآن الوصول إلى المعرفات الخاصة بك بسهولة من Safari وChrome والتطبيقات الأخرى المدعومة.</value>
</data> </data>
<data name="ExtensionSetup2" xml:space="preserve"> <data name="ExtensionSetup2" xml:space="preserve">
<value>في Safari و Chrome، ابحث عن bitwarden باستخدام رمز المشاركة (المساعدة: انتقل إلى اليمين في السطر السفلي من القائمة).</value> <value>في Safari و Chrome، ابحث عن bitwarden باستخدام أيقونة المشاركة (المساعدة: انتقل إلى اليمين في السطر السفلي من القائمة).</value>
</data> </data>
<data name="ExtensionTapIcon" xml:space="preserve"> <data name="ExtensionTapIcon" xml:space="preserve">
<value>اضغط على رمز bitwarden في القائمة لإطلاق الملحق.</value> <value>اضغط على أيقونة Bitwarden في القائمة لإطلاق الملحق.</value>
</data> </data>
<data name="ExtensionTurnOn" xml:space="preserve"> <data name="ExtensionTurnOn" xml:space="preserve">
<value>لتنشيط bitwarden على Safari والتطبيقات الأخرى، اضغط على رمز "المزيد" على السطر السفلي من القائمة.</value> <value>لتنشيط bitwarden على Safari والتطبيقات الأخرى، اضغط على رمز "المزيد" على السطر السفلي من القائمة.</value>
@@ -514,10 +514,10 @@
<value>البصمة</value> <value>البصمة</value>
</data> </data>
<data name="GeneratePassword" xml:space="preserve"> <data name="GeneratePassword" xml:space="preserve">
<value>إنشاء كلمة مرور</value> <value>توليد كلمة مرور</value>
</data> </data>
<data name="GetPasswordHint" xml:space="preserve"> <data name="GetPasswordHint" xml:space="preserve">
<value>الحصول على دليل كلمة المرور الرئيسية</value> <value>احصل على تلميح لكلمة مرورك الرئيسية</value>
</data> </data>
<data name="ImportItems" xml:space="preserve"> <data name="ImportItems" xml:space="preserve">
<value>استيراد العناصر</value> <value>استيراد العناصر</value>
@@ -532,7 +532,7 @@
<value>آخر مزامنة:</value> <value>آخر مزامنة:</value>
</data> </data>
<data name="Length" xml:space="preserve"> <data name="Length" xml:space="preserve">
<value>طول</value> <value>الطول</value>
</data> </data>
<data name="Lock" xml:space="preserve"> <data name="Lock" xml:space="preserve">
<value>قفل</value> <value>قفل</value>
@@ -562,11 +562,11 @@
<value>سيؤدي تسجيل الخروج إلى إزالة جميع الوصول إلى الخزنة الخاصة بك ويتطلب المصادقة عبر الإنترنت بعد انتهاء المهلة. هل أنت متأكد من أنك تريد استخدام هذا الإعداد؟</value> <value>سيؤدي تسجيل الخروج إلى إزالة جميع الوصول إلى الخزنة الخاصة بك ويتطلب المصادقة عبر الإنترنت بعد انتهاء المهلة. هل أنت متأكد من أنك تريد استخدام هذا الإعداد؟</value>
</data> </data>
<data name="LoggingIn" xml:space="preserve"> <data name="LoggingIn" xml:space="preserve">
<value>تعريف...</value> <value>جارِ تسجيل الدخول...</value>
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="LoginOrCreateNewAccount" xml:space="preserve"> <data name="LoginOrCreateNewAccount" xml:space="preserve">
<value>قم بالتسجيل أو إنشاء حساب جديد للوصول إلى خزنتك الآمنة.</value> <value>قم بتسجيل الدخول أو إنشاء حساب جديد للوصول إلى خزنتك الآمنة.</value>
</data> </data>
<data name="Manage" xml:space="preserve"> <data name="Manage" xml:space="preserve">
<value>إدارة</value> <value>إدارة</value>
@@ -598,7 +598,7 @@
<value>المزيد من الإعدادات</value> <value>المزيد من الإعدادات</value>
</data> </data>
<data name="MustLogInMainApp" xml:space="preserve"> <data name="MustLogInMainApp" xml:space="preserve">
<value>تحتاج إلى التعريف بنفسك على التطبيق bitwarden الرئيسي قبل استخدام الامتداد.</value> <value>يجب عليك تسجيل الدخول إلى تطبيق Bitwarden الرئيسي قبل استخدام الامتداد.</value>
</data> </data>
<data name="Never" xml:space="preserve"> <data name="Never" xml:space="preserve">
<value>أبداً</value> <value>أبداً</value>
@@ -623,25 +623,25 @@
<comment>Confirmation, like "Ok, I understand it"</comment> <comment>Confirmation, like "Ok, I understand it"</comment>
</data> </data>
<data name="OptionDefaults" xml:space="preserve"> <data name="OptionDefaults" xml:space="preserve">
<value>يتم تعيين الخيارات الافتراضية من أداة إنشاء كلمة المرور في تطبيق bitwarden الرئيسي.</value> <value>يتم تعيين الخيارات الافتراضية من أداة إنشاء كلمة المرور في تطبيق Bitwarden الرئيسي.</value>
</data> </data>
<data name="Options" xml:space="preserve"> <data name="Options" xml:space="preserve">
<value>خيارات</value> <value>الخيارات</value>
</data> </data>
<data name="Other" xml:space="preserve"> <data name="Other" xml:space="preserve">
<value>الأخرى</value> <value>الأخرى</value>
</data> </data>
<data name="PasswordGenerated" xml:space="preserve"> <data name="PasswordGenerated" xml:space="preserve">
<value>كلمة المرور التي تم إنشاؤها.</value> <value>كلمة المرور المولدة</value>
</data> </data>
<data name="PasswordGenerator" xml:space="preserve"> <data name="PasswordGenerator" xml:space="preserve">
<value>مولد كلمة المرور</value> <value>مولد كلمة المرور</value>
</data> </data>
<data name="PasswordHint" xml:space="preserve"> <data name="PasswordHint" xml:space="preserve">
<value>فهرس كلمة المرور</value> <value>تلميح كلمة المرور</value>
</data> </data>
<data name="PasswordHintAlert" xml:space="preserve"> <data name="PasswordHintAlert" xml:space="preserve">
<value>أرسلنا بريدًا إلكترونيًا مع دليل كلمة المرور الخاص بك.</value> <value>لقد أرسلنا لك رسالة بريد إلكتروني تحتوي على تلميح لكلمة مرورك الرئيسية.</value>
</data> </data>
<data name="PasswordOverrideAlert" xml:space="preserve"> <data name="PasswordOverrideAlert" xml:space="preserve">
<value>هل أنت متأكد من أنك تريد سحق كلمة المرور الموجودة؟</value> <value>هل أنت متأكد من أنك تريد سحق كلمة المرور الموجودة؟</value>
@@ -657,7 +657,7 @@
<value>شكرا على مساعدتنا من خلال كتابة تعليق إيجابي!</value> <value>شكرا على مساعدتنا من خلال كتابة تعليق إيجابي!</value>
</data> </data>
<data name="RegeneratePassword" xml:space="preserve"> <data name="RegeneratePassword" xml:space="preserve">
<value>إعادة إنشاء كلمة مرور</value> <value>إعادة توليد كلمة المرور</value>
</data> </data>
<data name="RetypeMasterPassword" xml:space="preserve"> <data name="RetypeMasterPassword" xml:space="preserve">
<value>إعادة إدخال كلمة المرور الرئيسية</value> <value>إعادة إدخال كلمة المرور الرئيسية</value>
@@ -684,11 +684,11 @@
<value>تم تحديث العنصر</value> <value>تم تحديث العنصر</value>
</data> </data>
<data name="Submitting" xml:space="preserve"> <data name="Submitting" xml:space="preserve">
<value>تقديم...</value> <value>جارِ الإرسال...</value>
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="Syncing" xml:space="preserve"> <data name="Syncing" xml:space="preserve">
<value>المزامنة...</value> <value>جارِ المزامنة...</value>
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="SyncingComplete" xml:space="preserve"> <data name="SyncingComplete" xml:space="preserve">
@@ -701,14 +701,14 @@
<value>مزامنة الخزنة الآن</value> <value>مزامنة الخزنة الآن</value>
</data> </data>
<data name="TouchID" xml:space="preserve"> <data name="TouchID" xml:space="preserve">
<value>Touch ID معرف اتصال</value> <value>Touch ID معرف اتصال البصمة</value>
<comment>What Apple calls their fingerprint reader.</comment> <comment>What Apple calls their fingerprint reader.</comment>
</data> </data>
<data name="TwoStepLogin" xml:space="preserve"> <data name="TwoStepLogin" xml:space="preserve">
<value>تحديد المصادقة الثنائية</value> <value>تحديد المصادقة الثنائية</value>
</data> </data>
<data name="TwoStepLoginConfirmation" xml:space="preserve"> <data name="TwoStepLoginConfirmation" xml:space="preserve">
<value>تجعل المصادقة الثنائية المعامل حسابك أكثر أمانًا من خلال طلب إدخال رمز أمان مع كل معرف من تطبيق المصادقة. يمكن تنشيط تعريف العامل المزدوج في خزنة الويب في bitwarden.com. هل تريد زيارة الموقع الآن؟</value> <value>تجعل المصادقة الثنائية المعامل حسابك أكثر أمانًا من خلال طلب إدخال رمز أمان مع كل معرف من تطبيق المصادقة. يمكن تنشيط تعريف العامل المزدوج في خزنة الويب في bitwarden.com هل تريد زيارة الموقع الآن؟</value>
</data> </data>
<data name="UnlockWith" xml:space="preserve"> <data name="UnlockWith" xml:space="preserve">
<value>فتح مع {0}</value> <value>فتح مع {0}</value>
@@ -879,7 +879,7 @@
<value>لا يمكن لجهازك فتح هذا النوع من الملفات.</value> <value>لا يمكن لجهازك فتح هذا النوع من الملفات.</value>
</data> </data>
<data name="Downloading" xml:space="preserve"> <data name="Downloading" xml:space="preserve">
<value>تحميل...</value> <value>جارِ التحميل...</value>
<comment>Message shown when downloading a file</comment> <comment>Message shown when downloading a file</comment>
</data> </data>
<data name="AttachmentLargeWarning" xml:space="preserve"> <data name="AttachmentLargeWarning" xml:space="preserve">
@@ -1035,7 +1035,7 @@
<value>أغسطس</value> <value>أغسطس</value>
</data> </data>
<data name="Brand" xml:space="preserve"> <data name="Brand" xml:space="preserve">
<value>العلامة</value> <value>العلامة التجارية</value>
</data> </data>
<data name="CardholderName" xml:space="preserve"> <data name="CardholderName" xml:space="preserve">
<value>اسم حامل البطاقة</value> <value>اسم حامل البطاقة</value>
@@ -1077,7 +1077,7 @@
<value>يونيو</value> <value>يونيو</value>
</data> </data>
<data name="LastName" xml:space="preserve"> <data name="LastName" xml:space="preserve">
<value>اسم العائلة</value> <value>الأسم الأخير</value>
</data> </data>
<data name="FullName" xml:space="preserve"> <data name="FullName" xml:space="preserve">
<value>الاسم الكامل</value> <value>الاسم الكامل</value>
@@ -1337,7 +1337,7 @@
<value>الهويات</value> <value>الهويات</value>
</data> </data>
<data name="Logins" xml:space="preserve"> <data name="Logins" xml:space="preserve">
<value>معرفات</value> <value>تسجيلات الدخول</value>
</data> </data>
<data name="SecureNotes" xml:space="preserve"> <data name="SecureNotes" xml:space="preserve">
<value>ملاحظات آمنة</value> <value>ملاحظات آمنة</value>
@@ -1492,7 +1492,7 @@
<value>تعيين رمز PIN الخاص بك لإلغاء قفل Bitwarden. سيتم إعادة تعيين إعدادات PIN الخاصة بك إذا قمت بتسجيل الخروج بالكامل من التطبيق.</value> <value>تعيين رمز PIN الخاص بك لإلغاء قفل Bitwarden. سيتم إعادة تعيين إعدادات PIN الخاصة بك إذا قمت بتسجيل الخروج بالكامل من التطبيق.</value>
</data> </data>
<data name="LoggedInAsOn" xml:space="preserve"> <data name="LoggedInAsOn" xml:space="preserve">
<value>تم تسجيل الدخول كـ {0} في {1}.</value> <value>مسجل الدخول كـ {0} على {1}.</value>
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment> <comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
</data> </data>
<data name="VaultLockedMasterPassword" xml:space="preserve"> <data name="VaultLockedMasterPassword" xml:space="preserve">
@@ -1617,7 +1617,7 @@
<value>إظهار / إخفاء</value> <value>إظهار / إخفاء</value>
</data> </data>
<data name="LoginExpired" xml:space="preserve"> <data name="LoginExpired" xml:space="preserve">
<value>انتهت صلاحية جلسة تسجيل الدخول الخاصة بك.</value> <value>انتهت صَلاحِيَة جَلسة تسجيل دخولك.</value>
</data> </data>
<data name="BiometricsDirection" xml:space="preserve"> <data name="BiometricsDirection" xml:space="preserve">
<value>المصادقة البيومترية</value> <value>المصادقة البيومترية</value>
@@ -2328,7 +2328,7 @@
<value>هل تحاول تسجيل الدخول؟</value> <value>هل تحاول تسجيل الدخول؟</value>
</data> </data>
<data name="LogInAttemptByXOnY" xml:space="preserve"> <data name="LogInAttemptByXOnY" xml:space="preserve">
<value>محاولة تسجيل الدخول بواسطة {0} في {1}</value> <value>محاولة تسجيل الدخول بواسطة {0} على {1}</value>
</data> </data>
<data name="DeviceType" xml:space="preserve"> <data name="DeviceType" xml:space="preserve">
<value>نوع الجهاز</value> <value>نوع الجهاز</value>
@@ -2414,9 +2414,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>الخدمة</value> <value>الخدمة</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>FirefoxRelay</value> <value>FirefoxRelay</value>
@@ -2628,90 +2628,138 @@
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>كلمة المرور الرئيسية الحالية</value> <value>كلمة المرور الرئيسية الحالية</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>سجلت دخولك!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>الموافقة بجهازي الآخر</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>طلب موافقة المسؤول</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>الموافقة بكلمة مرور رئيسية</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>أوقف باستخدام جهاز عمومي</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>تذكر هذا الجهاز</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>مفتاح المرور</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>مفاتيح المرور</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>أُنشِئ {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>تطبيق</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>لا يمكنك تعديل تطبيق مفتاح المرور لأنه سيبطل مفتاح المرور</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>لن يتم نسخ مفتاح المرور</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>لن يتم نسخ مفتاح المرور إلى العنصر المستنسخ. هل تريد الاستمرار في استنساخ هذا العنصر؟</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>نسخ التطبيق</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>متاح لتسجيل الدخول بخطوتين</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Master password re-prompt help</value> <value>مساعدة إعادة طلب كلمة المرور الرئيسية</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>قد يفشل إلغاء القُفْل بسبب عدم كفاية الذاكرة. قم بتقليل إعدادات ذاكرة KDF أو قم بإعداد إلغاء القُفْل البيومتري لحل المشكلة.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>مفتاح API غير صالح</value>
</data> </data>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>رمز API غير صالح</value>
</data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>طلبت موافقة المسؤول</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>أرسلت طلبك إلى مسؤولك.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>سيتم إخطارك بمجرد الموافقة عليها. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>مشكلة في تسجيل الدخول؟</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>تسجيل الدخول كـ {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>تَغيير إجراء مهلة المخزن لتسجيل الخروج</value>
</data> </data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>لا يمكن مشاركة هذا العنصر مع المؤسسة لأنه يوجد بالفعل واحد مع نفس مفتاح المرور.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Block auto-fill</value> <value>حظر التعبئة التلقائية</value>
</data> </data>
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve"> <data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
<value>Auto-fill will not be offered for these URIs.</value> <value>لن يتم تقديم التعبئة التلقائية لعناوين الـ URIs هذه.</value>
</data> </data>
<data name="NewBlockedURI" xml:space="preserve"> <data name="NewBlockedURI" xml:space="preserve">
<value>New blocked URI</value> <value>عنوان URL جديد محظور</value>
</data> </data>
<data name="URISaved" xml:space="preserve"> <data name="URISaved" xml:space="preserve">
<value>URI saved</value> <value>تم حفظ عنوان URI</value>
</data> </data>
<data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve"> <data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve">
<value>Invalid format. Use https://, http://, or androidapp://</value> <value>تنسيق غير صالح. استخدم https:// أو http:// أو androidapp://</value>
<comment>https://, http://, androidapp:// should not be translated</comment> <comment>https://, http://, androidapp:// should not be translated</comment>
</data> </data>
<data name="EditURI" xml:space="preserve"> <data name="EditURI" xml:space="preserve">
<value>Edit URI</value> <value>تعديل عنوان URI</value>
</data> </data>
<data name="EnterURI" xml:space="preserve"> <data name="EnterURI" xml:space="preserve">
<value>Enter URI</value> <value>إدخال URI</value>
</data> </data>
<data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve"> <data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve">
<value>Format: {0}. Separate multiple URIs with a comma.</value> <value>التنسيق: {0}. افصل العديد من عناوين URIs بفاصلة.</value>
</data> </data>
<data name="FormatX" xml:space="preserve"> <data name="FormatX" xml:space="preserve">
<value>Format: {0}</value> <value>التنسيق: {0}</value>
</data> </data>
<data name="InvalidURI" xml:space="preserve"> <data name="InvalidURI" xml:space="preserve">
<value>Invalid URI</value> <value>الرابط غير صالح</value>
</data> </data>
<data name="URIRemoved" xml:space="preserve"> <data name="URIRemoved" xml:space="preserve">
<value>URI removed</value> <value>تم حذف الرابط</value>
</data> </data>
<data name="ThereAreNoBlockedURIs" xml:space="preserve"> <data name="ThereAreNoBlockedURIs" xml:space="preserve">
<value>There are no blocked URIs</value> <value>لا يوجد أي عناوين URIs محظورة</value>
</data> </data>
<data name="TheURIXIsAlreadyBlocked" xml:space="preserve"> <data name="TheURIXIsAlreadyBlocked" xml:space="preserve">
<value>The URI {0} is already blocked</value> <value>تم حظر URI {0} بالفعل</value>
</data> </data>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>لا يمكن تعديل العديد من عناوين URIs في وقت واحد</value>
</data>
<data name="LoginApproved" xml:space="preserve">
<value>تمت الموافقة على تسجيل الدخول</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>يجب إعداد تسجيل الدخول باستخدام الجهاز في إعدادات تطبيق Bitwarden. هل تحتاج إلى خِيار آخر؟</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>تسجيل الدخول بالجهاز</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>جارٍ تسجيل الدخول</value>
</data> </data>
</root> </root>

View File

@@ -2412,9 +2412,9 @@ Skan prosesi avtomatik baş tutacaq.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Xidmət</value> <value>Xidmət</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,6 +2626,24 @@ Bu hesaba keçmək istəyirsiniz?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Hazırkı ana parol</value> <value>Hazırkı ana parol</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Giriş edildi!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Digər cihazımla təsdiqlə</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Admin təsdiqini tələb et</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Ana parolla təsdiqlə</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Hər kəsə açıq bir cihaz istifadə edərək söndür</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Bu cihazı xatırla</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2658,7 +2676,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
<value>Ana parolu təkrar soruş köməyi</value> <value>Ana parolu təkrar soruş köməyi</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Yetərsiz yaddaşa görə kilid açma uğursuz ola bilər. Həll etmək üçün KDF yaddaş tənzimləmələrinizi azaldın</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Yararsız API açarı</value> <value>Yararsız API açarı</value>
@@ -2666,6 +2684,24 @@ Bu hesaba keçmək istəyirsiniz?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Yararsız API tokeni</value> <value>Yararsız API tokeni</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin təsdiqi tələb olunur</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Tələbiniz admininizə göndərildi.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Təsdiqləndikdən sonra məlumatlandırılacaqsınız. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Girişdə problem var?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>{0} olaraq giriş edilir</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Anbar vaxt bitməsi əməliyyatııxış et" olaraq dəyişdirildi</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2712,4 +2748,16 @@ Bu hesaba keçmək istəyirsiniz?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Bir dəfəyə bir neçə URI-a düzəliş etmək mümkün deyil</value> <value>Bir dəfəyə bir neçə URI-a düzəliş etmək mümkün deyil</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Giriş təsdiqləndi</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Cihazla giriş etmə, Bitwarden tətbiqinin tənzimləmələrində quraşdırılmalıdır. Başqa bir seçimə ehtiyacınız var?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Cihazla giriş et</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Giriş edilir</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Сэрвіс</value> <value>Сэрвіс</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Бягучы асноўны пароль</value> <value>Бягучы асноўны пароль</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2638,7 +2656,7 @@
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Праграма</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>You cannot edit passkey application because it would invalidate the passkey</value>
@@ -2659,7 +2677,7 @@
<value>Дапамога з паўторным запытам асноўнага пароля</value> <value>Дапамога з паўторным запытам асноўнага пароля</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Па прычыне недахопу памяці можа адбыцца збой разблакіроўкі. Паменшыце налады памяці KDF, каб вырашыць гэту праблему</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Памылковы ключ API</value> <value>Памылковы ключ API</value>
@@ -2667,6 +2685,24 @@
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Памылковы токен API</value> <value>Памылковы токен API</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Немагчыма рэдагаваць некалькі URI адначасова</value> <value>Немагчыма рэдагаваць некалькі URI адначасова</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Услуга</value> <value>Услуга</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@ select Add TOTP to store the key safely</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Текуща главна парола</value> <value>Текуща главна парола</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Вписахте се!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Одобряване с другото ми устройство</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Подаване на заявка за одобрение от администратор</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Одобряване с главната парола</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Изключване на използването на публично устройство</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Запомняне на това устройство</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2653,13 +2671,13 @@ select Add TOTP to store the key safely</value>
<value>Копиране на приложението</value> <value>Копиране на приложението</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Налично за двустепенно удостоверяване</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Помощ за повторното запитване за главната парола</value> <value>Помощ за повторното запитване за главната парола</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Отключването може да бъде неуспешно заради недостатъчно памет. Намалете настройките на паметта за KDF, за да разрешите проблема.</value> <value>Отключването може да бъде неуспешно заради недостатъчно памет. Намалете настройките на паметта за KDF или настройте отключването чрез биометрични данни, за да разрешите проблема.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Неправилен ключ за ППИ</value> <value>Неправилен ключ за ППИ</value>
@@ -2667,6 +2685,24 @@ select Add TOTP to store the key safely</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Неправилен идентификатор за ППИ</value> <value>Неправилен идентификатор за ППИ</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Заявено е одобрение от администратор</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Вашата заявка беше изпратена до администратора Ви.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Ще получите известие, когато тя бъде одобрена. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Имате проблем с вписването?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Вписване като {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Действието при изтичане на времето за достъп до трезора е променено на отписване</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ select Add TOTP to store the key safely</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Не може да редактирате повече от един адрес едновременно</value> <value>Не може да редактирате повече от един адрес едновременно</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Вписването е одобрено</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Вписването с устройство трябва да е включено в настройките на приложението на Битуорден. Друга настройка ли търсите?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Вписване с устройство</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Вписване в</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2412,9 +2412,9 @@ Skeniranje će biti izvršeno automatski.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,6 +2626,24 @@ Skeniranje će biti izvršeno automatski.</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2658,7 +2676,7 @@ Skeniranje će biti izvršeno automatski.</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2666,6 +2684,24 @@ Skeniranje će biti izvršeno automatski.</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2712,4 +2748,16 @@ Skeniranje će biti izvršeno automatski.</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ seleccioneu Afegeix TOTP per emmagatzemar la clau de manera segura</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Servei</value> <value>Servei</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,39 +2627,57 @@ Voleu canviar a aquest compte?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Contrasenya mestra actual</value> <value>Contrasenya mestra actual</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Connectat!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Aproveu des d'un altre dispositiu vostre</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Sol·liciteu l'aprovació de l'administrador</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Aprova amb contrasenya mestra</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Apagueu amb un dispositiu públic</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Recorda aquest dispositiu</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Clau de pas</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>Claus de pas</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>Creats {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Aplicació</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>No podeu editar l'aplicació de clau de pas perquè invalidaria la clau de pas</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>La clau de pas no es copiarà</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>La clau de pas no es copiarà a l'element clonat. Voleu continuar clonant aquest element?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>Copia la aplicació</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Disponible per iniciar sessió en dos passos</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Ajuda per tornar a demanar la contrasenya mestra</value> <value>Ajuda per tornar a demanar la contrasenya mestra</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>El desbloqueig pot fallar a causa de memòria insuficient. Disminueix la configuració de memòria KDF per resoldre-ho</value> <value>El desbloqueig pot fallar a causa de memòria insuficient. Disminueix la configuració de memòria KDF per resoldre-ho.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Clau API no vàlida</value> <value>Clau API no vàlida</value>
@@ -2667,50 +2685,80 @@ Voleu canviar a aquest compte?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Token API no vàlid</value> <value>Token API no vàlid</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>S'ha sol·licitat l'aprovació de l'administrador</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>La vostra sol·licitud s'ha enviat a l'administrador.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Se us notificarà una vegada aprovat. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Teniu problemes per iniciar la sessió?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Connectat com {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>L'acció de temps d'espera de la caixa forta ha canviat per tancar la sessió</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>Aquest element no es pot compartir amb l'organització perquè ja n'hi ha un amb la mateixa clau de pas.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Block auto-fill</value> <value>Bloqueja l'emplenament automàtic</value>
</data> </data>
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve"> <data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
<value>Auto-fill will not be offered for these URIs.</value> <value>L'emplenament automàtic no s'oferirà per a aquests URI.</value>
</data> </data>
<data name="NewBlockedURI" xml:space="preserve"> <data name="NewBlockedURI" xml:space="preserve">
<value>New blocked URI</value> <value>Nou URI bloquejat</value>
</data> </data>
<data name="URISaved" xml:space="preserve"> <data name="URISaved" xml:space="preserve">
<value>URI saved</value> <value>URI guardat</value>
</data> </data>
<data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve"> <data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve">
<value>Invalid format. Use https://, http://, or androidapp://</value> <value>Format no vàlid. Utilitzeu https://, http:// o androidapp://</value>
<comment>https://, http://, androidapp:// should not be translated</comment> <comment>https://, http://, androidapp:// should not be translated</comment>
</data> </data>
<data name="EditURI" xml:space="preserve"> <data name="EditURI" xml:space="preserve">
<value>Edit URI</value> <value>Edita URI</value>
</data> </data>
<data name="EnterURI" xml:space="preserve"> <data name="EnterURI" xml:space="preserve">
<value>Enter URI</value> <value>Introduex URI</value>
</data> </data>
<data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve"> <data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve">
<value>Format: {0}. Separate multiple URIs with a comma.</value> <value>Format: {0}. Separa diversos URI amb una coma.</value>
</data> </data>
<data name="FormatX" xml:space="preserve"> <data name="FormatX" xml:space="preserve">
<value>Format: {0}</value> <value>Format: {0}</value>
</data> </data>
<data name="InvalidURI" xml:space="preserve"> <data name="InvalidURI" xml:space="preserve">
<value>Invalid URI</value> <value>URI no vàlid</value>
</data> </data>
<data name="URIRemoved" xml:space="preserve"> <data name="URIRemoved" xml:space="preserve">
<value>URI removed</value> <value>URI suprimit</value>
</data> </data>
<data name="ThereAreNoBlockedURIs" xml:space="preserve"> <data name="ThereAreNoBlockedURIs" xml:space="preserve">
<value>There are no blocked URIs</value> <value>No hi ha cap URI bloquejat</value>
</data> </data>
<data name="TheURIXIsAlreadyBlocked" xml:space="preserve"> <data name="TheURIXIsAlreadyBlocked" xml:space="preserve">
<value>The URI {0} is already blocked</value> <value>L'URI {0} ja està bloquejat</value>
</data> </data>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>No es poden editar diversos URI alhora</value>
</data>
<data name="LoginApproved" xml:space="preserve">
<value>S'ha aprovat l'inici de sessió</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>L'inici de sessió amb el dispositiu ha d'estar activat a la configuració de l'aplicació Bitwarden. Necessiteu una altra opció?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Inici de sessió amb dispositiu</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Inici de sessió en</value>
</data> </data>
</root> </root>

View File

@@ -505,7 +505,7 @@
<value>Pro spuštění rozšíření klepněte na ikonu Bitwardenu v menu.</value> <value>Pro spuštění rozšíření klepněte na ikonu Bitwardenu v menu.</value>
</data> </data>
<data name="ExtensionTurnOn" xml:space="preserve"> <data name="ExtensionTurnOn" xml:space="preserve">
<value>Pro zapnutí Bitwardenu v prohlížeči Safari a dalších aplikacích klepněte na ikonu "Více" v dolní části menu.</value> <value>Pro zapnutí Bitwardenu v prohlížeči Safari a dalších aplikacích klepněte na ikonu „Další“ v dolní části menu.</value>
</data> </data>
<data name="Favorite" xml:space="preserve"> <data name="Favorite" xml:space="preserve">
<value>Oblíbené</value> <value>Oblíbené</value>
@@ -1304,22 +1304,22 @@ Načtení proběhne automaticky.</value>
<value>Přistupujte k Vašemu trezoru přímo z Vaší klávesnice pro rychlejší automatické vyplnění hesel.</value> <value>Přistupujte k Vašemu trezoru přímo z Vaší klávesnice pro rychlejší automatické vyplnění hesel.</value>
</data> </data>
<data name="AutofillTurnOn" xml:space="preserve"> <data name="AutofillTurnOn" xml:space="preserve">
<value>Pokyny pro zapnutí automatického vyplňování hesel na Vašem zařízení:</value> <value>Pokyny pro zapnutí automatického vyplňování hesel na vašem zařízení:</value>
</data> </data>
<data name="AutofillTurnOn1" xml:space="preserve"> <data name="AutofillTurnOn1" xml:space="preserve">
<value>1. Přejděte do aplikace "Nastavení" v iOS</value> <value>1. Přejděte do aplikace "Nastavení" v iOS</value>
</data> </data>
<data name="AutofillTurnOn2" xml:space="preserve"> <data name="AutofillTurnOn2" xml:space="preserve">
<value>2. Klepněte na "Hesla" > "Volby hesla"</value> <value>2. Klepněte na Hesla > Volby hesla</value>
</data> </data>
<data name="AutofillTurnOn3" xml:space="preserve"> <data name="AutofillTurnOn3" xml:space="preserve">
<value>3. Zapněte přepínač u položky "Automatické vyplnění hesel"</value> <value>3. Povolte „Automatické vyplnění hesel</value>
</data> </data>
<data name="AutofillTurnOn4" xml:space="preserve"> <data name="AutofillTurnOn4" xml:space="preserve">
<value>4. Najděte sekci "Povolit vyplňování z:"</value> <value>4. Najděte sekci Povolit vyplňování z</value>
</data> </data>
<data name="AutofillTurnOn5" xml:space="preserve"> <data name="AutofillTurnOn5" xml:space="preserve">
<value>5. Zvolte "Bitwarden"</value> <value>5. Zvolte Bitwarden</value>
</data> </data>
<data name="PasswordAutofill" xml:space="preserve"> <data name="PasswordAutofill" xml:space="preserve">
<value>Automatické vyplňování hesel</value> <value>Automatické vyplňování hesel</value>
@@ -2412,9 +2412,9 @@ Načtení proběhne automaticky.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Služba</value> <value>Služba</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,6 +2626,24 @@ Chcete se přepnout na tento účet?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Aktuální hlavní heslo</value> <value>Aktuální hlavní heslo</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Přihlášeno!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Schválit s mým dalším zařízením</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Žádost o schválení správcem</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Schválit hlavním heslem</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Vypnout pomocí veřejného zařízení</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Zapamatovat toto zařízení</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Přístupový klíč</value> <value>Přístupový klíč</value>
</data> </data>
@@ -2658,7 +2676,7 @@ Chcete se přepnout na tento účet?</value>
<value>Nápověda pro znovuzeptání se na hlavní heslo</value> <value>Nápověda pro znovuzeptání se na hlavní heslo</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Odemknutí může selhat z důvodu nedostatku paměti. Pro vyřešení snižte nastavení paměti KDF.</value> <value>Odemknutí může selhat z důvodu nedostatku paměti. Snižte nastavení KDF paměti nebo nastavte odemykání pomocí biometrie.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Neplatný klíč API</value> <value>Neplatný klíč API</value>
@@ -2666,6 +2684,24 @@ Chcete se přepnout na tento účet?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Neplatný token API</value> <value>Neplatný token API</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Bylo vyžádáno schválení správcem</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Váš požadavek byl odeslán Vašemu správci.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Po schválení budete upozorněni. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Potíže s přihlášením?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Přihlášování jako {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Akce časového limitu trezoru byla změněna na odhlášení</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Tuto položku nelze sdílet s organizací, protože již existuje jedna se stejným přístupovým klíčem.</value> <value>Tuto položku nelze sdílet s organizací, protože již existuje jedna se stejným přístupovým klíčem.</value>
</data> </data>
@@ -2712,4 +2748,16 @@ Chcete se přepnout na tento účet?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Najednou nelze upravovat více URI</value> <value>Najednou nelze upravovat více URI</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Přihlášení bylo schváleno</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Přihlášení zařízením musí být nastaveno v aplikaci Bitwarden. Potřebujete další volby?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Přihlásit se zařízením</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Přihlašování na</value>
</data>
</root> </root>

File diff suppressed because it is too large Load Diff

View File

@@ -2413,9 +2413,9 @@ vælg Tilføj TOTP for at gemme nøglen sikkert</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Tjeneste</value> <value>Tjeneste</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,39 +2627,57 @@ Vil du skifte til denne konto?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Aktuel hovedadgangskode</value> <value>Aktuel hovedadgangskode</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Indlogget!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Godkend med min anden enhed</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Anmod om admin-godkendelse</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Godkendt med hovedadgangskode</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Slå fra vha. en offentlig enhed</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Husk denne enhed</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Adgangsnøgle</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>Adgangsnøgler</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>Oprettet {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Applikation</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>Adgangsnøgleapplikationen kan ikke redigeres, da det ville ugyldiggøre adgangsnøglen</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>Adgangsnøglen kopieres ikke</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>Adgangsnøglen kopieres ikke til det klonede emne. Fortsæt med at klone dette emne alligevel?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>Kopiér applikation</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Tilgængelig for totrins-login</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Hjælp til genanmodning om hovedadgangskode</value> <value>Hjælp til genanmodning om hovedadgangskode</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Oplåsning kan fejle grundet utilstrækkelig hukommelse. Reducér KDF-hukommelsesindstillinger for at afhjælpe</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Ugyldig API-nøgle</value> <value>Ugyldig API-nøgle</value>
@@ -2667,8 +2685,26 @@ Vil du skifte til denne konto?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Ugyldigt API-token</value> <value>Ugyldigt API-token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin-godkendelse udbedt</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Din anmodning er sendt til din gruppe-admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Du underrettes, når godkendelse foreligger. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Problemer med at logge ind?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logger ind som {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Boks-timeouthandling ændret til udlogning</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>Dette emne kan ikke deles med organisationen, da der allerede er et med den samme adgangsnøgle.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Blokér autoudfyldning</value> <value>Blokér autoudfyldning</value>
@@ -2713,4 +2749,16 @@ Vil du skifte til denne konto?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Kan ikke redigere flere URI'er på én gang</value> <value>Kan ikke redigere flere URI'er på én gang</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login godkendt</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Indlogning med enhed skal være opsat i indstillingerne i Bitwarden-appen. Behov for en anden mulighed?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log ind med enhed</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logger ind på</value>
</data>
</root> </root>

View File

@@ -598,7 +598,7 @@
<value>Weitere Einstellungen</value> <value>Weitere Einstellungen</value>
</data> </data>
<data name="MustLogInMainApp" xml:space="preserve"> <data name="MustLogInMainApp" xml:space="preserve">
<value>Du musst dich in der Bitwarden App einloggen, bevor du die Erweiterung benutzen kannst.</value> <value>Du musst dich in der Bitwarden App anmelden, bevor du die Erweiterung benutzen kannst.</value>
</data> </data>
<data name="Never" xml:space="preserve"> <data name="Never" xml:space="preserve">
<value>Niemals</value> <value>Niemals</value>
@@ -838,7 +838,7 @@
<comment>For 2FA</comment> <comment>For 2FA</comment>
</data> </data>
<data name="RememberMe" xml:space="preserve"> <data name="RememberMe" xml:space="preserve">
<value>Eingeloggt bleiben</value> <value>Angemeldet bleiben</value>
<comment>Remember my two-step login</comment> <comment>Remember my two-step login</comment>
</data> </data>
<data name="SendVerificationCodeAgain" xml:space="preserve"> <data name="SendVerificationCodeAgain" xml:space="preserve">
@@ -1292,7 +1292,7 @@ Das Scannen erfolgt automatisch.</value>
<value>Auto-Ausfüllen aktiviert!</value> <value>Auto-Ausfüllen aktiviert!</value>
</data> </data>
<data name="MustLogInMainAppAutofill" xml:space="preserve"> <data name="MustLogInMainAppAutofill" xml:space="preserve">
<value>Du musst dich in der Bitwarden App einloggen, bevor du AutoFill nutzen kannst.</value> <value>Du musst dich in der Bitwarden App anmelden, bevor du AutoFill nutzen kannst.</value>
</data> </data>
<data name="AutofillSetup" xml:space="preserve"> <data name="AutofillSetup" xml:space="preserve">
<value>Du kannst nun direkt von der Tastatur auf deine Zugangsdaten zugreifen, wenn du dich auf Webseiten oder in Apps anmeldest.</value> <value>Du kannst nun direkt von der Tastatur auf deine Zugangsdaten zugreifen, wenn du dich auf Webseiten oder in Apps anmeldest.</value>
@@ -2412,9 +2412,9 @@ Das Scannen erfolgt automatisch.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Dienst</value> <value>Dienst</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,6 +2626,24 @@ Möchtest du zu diesem Konto wechseln?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Aktuelles Master-Passwort</value> <value>Aktuelles Master-Passwort</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Angemeldet!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Mit meinem anderen Gerät genehmigen</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Admin-Genehmigung anfordern</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Mit Master-Passwort genehmigen</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Mit einem öffentlichen Gerät ausschalten</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Dieses Gerät merken</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2640,25 +2658,25 @@ Möchtest du zu diesem Konto wechseln?</value>
<value>Anwendung</value> <value>Anwendung</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>Du kannst die Passkey-Anwendung nicht bearbeiten, da dies den Passkey ungültig machen würde.</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey wird nicht kopiert</value> <value>Passkey wird nicht kopiert</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>Der Passkey wird nicht in den duplizierten Eintrag kopiert. Möchtest du mit dem Duplizieren dieses Eintrags fortfahren?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Anwendung kopieren</value> <value>Anwendung kopieren</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Verfügbar für Zwei-Faktor Authentifizierung</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Hilfe zum erneuten Abfragen des Master-Passworts</value> <value>Hilfe zum erneuten Abfragen des Master-Passworts</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Das Entsperren kann aufgrund von unzureichendem Arbeitsspeicher fehlschlagen. Verringere deine KDF-Speichereinstellungen, um das Problem zu beheben.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Ungültiger API-Schlüssel</value> <value>Ungültiger API-Schlüssel</value>
@@ -2666,8 +2684,26 @@ Möchtest du zu diesem Konto wechseln?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Ungültiger API-Token</value> <value>Ungültiger API-Token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin-Genehmigung angefordert</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Deine Anfrage wurde an deinen Administrator gesendet.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Du wirst benachrichtigt, sobald sie genehmigt wurde.</value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Probleme beim Einloggen?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Anmelden als {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>Dieser Eintrag kann nicht mit der Organisation geteilt werden, da bereits einer mit dem gleichen Passkey existiert.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Auto-Ausfüllen blockieren</value> <value>Auto-Ausfüllen blockieren</value>
@@ -2712,4 +2748,16 @@ Möchtest du zu diesem Konto wechseln?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Es können nicht mehrere URIs auf einmal bearbeitet werden</value> <value>Es können nicht mehrere URIs auf einmal bearbeitet werden</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login genehmigt</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Die Anmeldung über ein Gerät muss in den Einstellungen der Bitwarden App eingerichtet werden. Benötigst du eine andere Option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Mit Gerät anmelden</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Anmelden bei</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Υπηρεσία</value> <value>Υπηρεσία</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,45 +2627,81 @@
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Τρέχων κύριος κωδικός</value> <value>Τρέχων κύριος κωδικός</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Συνθηματικό</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>Συνθηματικά</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>Δημιουργήθηκε {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Εφαρμογή</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>Δεν μπορείτε να επεξεργαστείτε την εφαρμογή κλειδιού πρόσβασης επειδή θα ακυρώσει το κλειδί</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>Το κλειδί πρόσβασης δεν θα αντιγραφεί</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>Το κλειδί πρόσβασης δεν θα αντιγραφεί στο κλωνοποιημένο στοιχείο. Θέλετε να συνεχίσετε την κλωνοποίηση αυτού του στοιχείου;</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>Copy application</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Διαθέσιμο για σύνδεση με δύο βήματα</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Το ξεκλείδωμα μπορεί να αποτύχει λόγω ανεπαρκούς μνήμης. Μειώστε τις ρυθμίσεις μνήμης KDF ή ρυθμίστε το βιομετρικό ξεκλείδωμα για επίλυση.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Μη έγκυρο κλειδί API</value>
</data> </data>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Μη έγκυρο API token</value>
</data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data> </data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
@@ -2713,4 +2749,16 @@
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2667,6 +2685,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2427,9 +2427,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2641,6 +2641,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2673,7 +2691,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2681,6 +2699,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2727,4 +2763,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Servicio</value> <value>Servicio</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2628,6 +2628,24 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Contraseña maestra actual</value> <value>Contraseña maestra actual</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Conectado</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Aprobar con mi otro dispositivo</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<value>Ayuda de volver a pedir contraseña maestra</value> <value>Ayuda de volver a pedir contraseña maestra</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>El desbloqueo puede fallar por falta de memoria. Disminuye los ajustes de memoria KDF para resolver</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Clave API no válida</value> <value>Clave API no válida</value>
@@ -2668,6 +2686,24 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Token de API no válido</value> <value>Token de API no válido</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ Skaneerimine toimub automaatselt.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Teenus</value> <value>Teenus</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@ Soovid selle konto peale lülituda?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Praegune ülemparool</value> <value>Praegune ülemparool</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Pääsukood</value> <value>Pääsukood</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Soovid selle konto peale lülituda?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Avamine võib ebapiisava mälu tõttu nurjuda. Probleemi lahendamiseks vähenda KDF mälu seadeid.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Vigane API võti</value> <value>Vigane API võti</value>
@@ -2667,6 +2685,24 @@ Soovid selle konto peale lülituda?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Vigane API token</value> <value>Vigane API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Seda kirjet ei saa organisatsiooniga jagada, sest sama pääsukoodiga kirje juba eksisteerib.</value> <value>Seda kirjet ei saa organisatsiooniga jagada, sest sama pääsukoodiga kirje juba eksisteerib.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Soovid selle konto peale lülituda?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Mitme URI korraga muutmine ei toiminud</value> <value>Mitme URI korraga muutmine ei toiminud</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Sisselogimas kui</value>
</data>
</root> </root>

View File

@@ -2412,9 +2412,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Zerbitzua</value> <value>Zerbitzua</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,6 +2626,24 @@ Kontu honetara aldatu nahi duzu?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Uneko pasahitz nagusia</value> <value>Uneko pasahitz nagusia</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2658,7 +2676,7 @@ Kontu honetara aldatu nahi duzu?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>API giltza baliogabea</value> <value>API giltza baliogabea</value>
@@ -2666,6 +2684,24 @@ Kontu honetara aldatu nahi duzu?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>API kode baliogabia</value> <value>API kode baliogabia</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2712,4 +2748,16 @@ Kontu honetara aldatu nahi duzu?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>سرویس</value> <value>سرویس</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>رله فایرفاکس</value> <value>رله فایرفاکس</value>
@@ -2628,39 +2628,57 @@
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>کلمه عبور اصلی فعلی</value> <value>کلمه عبور اصلی فعلی</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>کلید عبور</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>کلیدهای عبور</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>{0} ایجاد شد</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>درخواست</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>شما نمی‌توانید برنامه کلید عبور را ویرایش کنید زیرا باعث بی اعتباری کلید عبور می‌شود</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>کلید عبور کپی نمی‌شود</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>کلید عبور در مورد شبیه سازی شده کپی نمی‌شود. آیا می‌خواهید به شبیه سازی این مورد ادامه دهید؟</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>درخواست را کپی کنید</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>برای ورود دو مرحله ای موجود است</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>راهنمای درخواست مجدد کلمه عبور اصلی</value> <value>راهنمای درخواست مجدد کلمه عبور اصلی</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>باز کردن قفل ممکن است به دلیل حافظه ناکافی انجام شود. تنظیمات حافظه KDF خود را کاهش دهید تا حل شود.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>کلید API نامعتبر</value> <value>کلید API نامعتبر</value>
@@ -2668,50 +2686,80 @@
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>توکن API نامعتبر</value> <value>توکن API نامعتبر</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>این مورد را نمی‌توان با سازمان به اشتراک گذاشت زیرا قبلاً موردی با کلید عبور یکسان وجود دارد.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Block auto-fill</value> <value>پر کردن خودکار را مسدود کنید</value>
</data> </data>
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve"> <data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
<value>Auto-fill will not be offered for these URIs.</value> <value>پر کردن خودکار برای این نشانی‌های اینترنتی ارائه نمی‌شود.</value>
</data> </data>
<data name="NewBlockedURI" xml:space="preserve"> <data name="NewBlockedURI" xml:space="preserve">
<value>New blocked URI</value> <value>نشانی اینترنتی مسدود شده جدید</value>
</data> </data>
<data name="URISaved" xml:space="preserve"> <data name="URISaved" xml:space="preserve">
<value>URI saved</value> <value>نشانی اینترنتی ذخیره شد</value>
</data> </data>
<data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve"> <data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve">
<value>Invalid format. Use https://, http://, or androidapp://</value> <value>قالب نامعتبر است. از https://، http://، یا androidapp:// استفاده کنید</value>
<comment>https://, http://, androidapp:// should not be translated</comment> <comment>https://, http://, androidapp:// should not be translated</comment>
</data> </data>
<data name="EditURI" xml:space="preserve"> <data name="EditURI" xml:space="preserve">
<value>Edit URI</value> <value>ویرایش نشانی اینترنتی</value>
</data> </data>
<data name="EnterURI" xml:space="preserve"> <data name="EnterURI" xml:space="preserve">
<value>Enter URI</value> <value>ورود نشانی اینترنتی</value>
</data> </data>
<data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve"> <data name="FormatXSeparateMultipleURIsWithAComma" xml:space="preserve">
<value>Format: {0}. Separate multiple URIs with a comma.</value> <value>قالب: {0}. چندین نشانی اینترنتی را با کاما جدا کنید.</value>
</data> </data>
<data name="FormatX" xml:space="preserve"> <data name="FormatX" xml:space="preserve">
<value>Format: {0}</value> <value>قالب: {0}</value>
</data> </data>
<data name="InvalidURI" xml:space="preserve"> <data name="InvalidURI" xml:space="preserve">
<value>Invalid URI</value> <value>نشانی اینترنتی نامعتبر</value>
</data> </data>
<data name="URIRemoved" xml:space="preserve"> <data name="URIRemoved" xml:space="preserve">
<value>URI removed</value> <value>نشانی اینترنتی حذف شد</value>
</data> </data>
<data name="ThereAreNoBlockedURIs" xml:space="preserve"> <data name="ThereAreNoBlockedURIs" xml:space="preserve">
<value>There are no blocked URIs</value> <value>هیچ نشانی اینترنتی مسدود شده ای وجود ندارد</value>
</data> </data>
<data name="TheURIXIsAlreadyBlocked" xml:space="preserve"> <data name="TheURIXIsAlreadyBlocked" xml:space="preserve">
<value>The URI {0} is already blocked</value> <value>{0} نشانی اینترنتی قبلاً مسدود شده است</value>
</data> </data>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>نمی‌توان چندین نشانی اینترنتی را همزمان ویرایش کرد</value>
</data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data> </data>
</root> </root>

View File

@@ -701,7 +701,7 @@
<value>Synkronoi holvi nyt</value> <value>Synkronoi holvi nyt</value>
</data> </data>
<data name="TouchID" xml:space="preserve"> <data name="TouchID" xml:space="preserve">
<value>Touch ID</value> <value>Touch ID:llä</value>
<comment>What Apple calls their fingerprint reader.</comment> <comment>What Apple calls their fingerprint reader.</comment>
</data> </data>
<data name="TwoStepLogin" xml:space="preserve"> <data name="TwoStepLogin" xml:space="preserve">
@@ -711,7 +711,7 @@
<value>Kaksivaiheinen kirjautuminen parantaa tilisi suojausta vaatimalla kirjautumisen vahvistuksen salasanan lisäksi todennuslaitteen, sovelluksen, tekstiviestin, puhelun tai sähköpostin avulla. Voit ottaa kaksivaiheisen kirjautumisen käyttöön bitwarden.comverkkoholvissa. Haluatko avata sen nyt?</value> <value>Kaksivaiheinen kirjautuminen parantaa tilisi suojausta vaatimalla kirjautumisen vahvistuksen salasanan lisäksi todennuslaitteen, sovelluksen, tekstiviestin, puhelun tai sähköpostin avulla. Voit ottaa kaksivaiheisen kirjautumisen käyttöön bitwarden.comverkkoholvissa. Haluatko avata sen nyt?</value>
</data> </data>
<data name="UnlockWith" xml:space="preserve"> <data name="UnlockWith" xml:space="preserve">
<value>Avaustapa: {0}</value> <value>Avaus {0}</value>
</data> </data>
<data name="UnlockWithPIN" xml:space="preserve"> <data name="UnlockWithPIN" xml:space="preserve">
<value>Avaus PIN-koodilla</value> <value>Avaus PIN-koodilla</value>
@@ -766,7 +766,7 @@
<value>1. Valitse esteettömyysasetusten "Palvelut" -otsikon alta ”Bitwarden”.</value> <value>1. Valitse esteettömyysasetusten "Palvelut" -otsikon alta ”Bitwarden”.</value>
</data> </data>
<data name="BitwardenAutofillServiceStep2" xml:space="preserve"> <data name="BitwardenAutofillServiceStep2" xml:space="preserve">
<value>2. Laita asetus päälle ja paina OK-painiketta hyväksyäksesi.</value> <value>2. Kytke asetus käyttöön ja hyväksy painanalla "OK".</value>
</data> </data>
<data name="Disabled" xml:space="preserve"> <data name="Disabled" xml:space="preserve">
<value>Poistettu käytöstä</value> <value>Poistettu käytöstä</value>
@@ -802,7 +802,7 @@
<value>Mahdollisesti tunnistetut kohteet</value> <value>Mahdollisesti tunnistetut kohteet</value>
</data> </data>
<data name="Search" xml:space="preserve"> <data name="Search" xml:space="preserve">
<value>Hae</value> <value>Etsi</value>
</data> </data>
<data name="BitwardenAutofillServiceSearch" xml:space="preserve"> <data name="BitwardenAutofillServiceSearch" xml:space="preserve">
<value>Etsit automaattisesti täytettävää kohdetta osoitteelle ”{0}”.</value> <value>Etsit automaattisesti täytettävää kohdetta osoitteelle ”{0}”.</value>
@@ -860,7 +860,7 @@
<comment>For 2FA</comment> <comment>For 2FA</comment>
</data> </data>
<data name="YubiKeyInstruction" xml:space="preserve"> <data name="YubiKeyInstruction" xml:space="preserve">
<value>Jatka asettamalla YubiKey NEO -todenuslaite laitteen takapuolta vasten tai kytke YubiKey-todennuslaite laitteen USB-porttiin ja paina sen painiketta.</value> <value>Jatka asettamalla YubiKey NEO -todennuslaite laitteen taustaa vasten tai kytke YubiKey-todennuslaite laitteen USB-porttiin ja paina sen painiketta.</value>
</data> </data>
<data name="YubiKeyTitle" xml:space="preserve"> <data name="YubiKeyTitle" xml:space="preserve">
<value>YubiKey-todennuslaite</value> <value>YubiKey-todennuslaite</value>
@@ -916,10 +916,10 @@ Koodi luetaan automaattisesti.</value>
<value>Kopioi TOTP-todennuskoodi</value> <value>Kopioi TOTP-todennuskoodi</value>
</data> </data>
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve"> <data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
<value>Jos kirjautumistieto sisältää kaksivaiheisen todennusmenetelmän avaimen, kopioidaan TOTP-todennuskoodi leikepöydälle kohteen automaattisen täytön yhteydessä.</value> <value>TOTP-todennuskoodi kopioidaan automaattisesti leikepöydälle automaattisen täytön yhteydessä, jos kirjautumistieto sisältää kaksivaiheisen todennusmenetelmän avaimen.</value>
</data> </data>
<data name="CopyTotpAutomatically" xml:space="preserve"> <data name="CopyTotpAutomatically" xml:space="preserve">
<value>Kopioi TOTP-koodi automaattisesti</value> <value>TOTP-koodin kopiointi</value>
</data> </data>
<data name="PremiumRequired" xml:space="preserve"> <data name="PremiumRequired" xml:space="preserve">
<value>Käyttääksesi tätä toimintoa tarvitset Premium-jäsenyyden.</value> <value>Käyttääksesi tätä toimintoa tarvitset Premium-jäsenyyden.</value>
@@ -1140,7 +1140,7 @@ Koodi luetaan automaattisesti.</value>
<value>Erääntymisaika</value> <value>Erääntymisaika</value>
</data> </data>
<data name="ShowWebsiteIcons" xml:space="preserve"> <data name="ShowWebsiteIcons" xml:space="preserve">
<value>Näytä verkkosivustojen kuvakkeet</value> <value>Näytä sivustokuvakkeet</value>
</data> </data>
<data name="ShowWebsiteIconsDescription" xml:space="preserve"> <data name="ShowWebsiteIconsDescription" xml:space="preserve">
<value>Näytä tunnistettava kuva jokaiselle kirjautumistiedolle.</value> <value>Näytä tunnistettava kuva jokaiselle kirjautumistiedolle.</value>
@@ -1182,7 +1182,7 @@ Koodi luetaan automaattisesti.</value>
<value>Avaa "Automaattinen täyttö -palvelu" -asetukset</value> <value>Avaa "Automaattinen täyttö -palvelu" -asetukset</value>
</data> </data>
<data name="FaceID" xml:space="preserve"> <data name="FaceID" xml:space="preserve">
<value>Face ID</value> <value>Face ID:llä</value>
<comment>What Apple calls their facial recognition reader.</comment> <comment>What Apple calls their facial recognition reader.</comment>
</data> </data>
<data name="FaceIDDirection" xml:space="preserve"> <data name="FaceIDDirection" xml:space="preserve">
@@ -1269,13 +1269,13 @@ Koodi luetaan automaattisesti.</value>
<comment>An entity of multiple related people (ex. a team or business organization).</comment> <comment>An entity of multiple related people (ex. a team or business organization).</comment>
</data> </data>
<data name="HoldYubikeyNearTop" xml:space="preserve"> <data name="HoldYubikeyNearTop" xml:space="preserve">
<value>Pidä YubiKey-todenuslaittettasi lähellä laitteen yläosaa.</value> <value>Pidä YubiKey-todennuslaittettasi lähellä laitteen yläosaa.</value>
</data> </data>
<data name="TryAgain" xml:space="preserve"> <data name="TryAgain" xml:space="preserve">
<value>Yritä uudelleen</value> <value>Yritä uudelleen</value>
</data> </data>
<data name="YubiKeyInstructionIos" xml:space="preserve"> <data name="YubiKeyInstructionIos" xml:space="preserve">
<value>Jatka pitämällä YubiKey NEO -todenuslaitetta laitteen takapuolta vasten.</value> <value>Jatka pitämällä YubiKey NEO -todennuslaitetta laitteen taustaa vasten.</value>
</data> </data>
<data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve"> <data name="BitwardenAutofillAccessibilityServiceDescription2" xml:space="preserve">
<value>Esteettömyyspalvelu voi olla hyödyllinen sellaisten sovellusten kanssa, jotka eivät tue tavallista automaattisen täytön palvelua.</value> <value>Esteettömyyspalvelu voi olla hyödyllinen sellaisten sovellusten kanssa, jotka eivät tue tavallista automaattisen täytön palvelua.</value>
@@ -1381,7 +1381,7 @@ Koodi luetaan automaattisesti.</value>
<value>Ei näytettäviä kohteita.</value> <value>Ei näytettäviä kohteita.</value>
</data> </data>
<data name="SearchCollection" xml:space="preserve"> <data name="SearchCollection" xml:space="preserve">
<value>Hae kokoelmasta</value> <value>Etsi kokoelmasta</value>
</data> </data>
<data name="SearchFileSends" xml:space="preserve"> <data name="SearchFileSends" xml:space="preserve">
<value>Etsi tiedosto-Sendeistä</value> <value>Etsi tiedosto-Sendeistä</value>
@@ -1556,7 +1556,7 @@ Koodi luetaan automaattisesti.</value>
<value>Oletusarvoinen tumma teema</value> <value>Oletusarvoinen tumma teema</value>
</data> </data>
<data name="DefaultDarkThemeDescription" xml:space="preserve"> <data name="DefaultDarkThemeDescription" xml:space="preserve">
<value>Valitse Oletus (järjestelmä) -asetuksen oletusarvoinen tumma teema, jota käytetään laitteen tumman tilan ollessa käytössä.</value> <value>Valitse "Oletus (järjestelmä)" -asetuksen oletusarvoinen tumma teema, jota käytetään laitteen tumman tilan ollessa käytössä.</value>
</data> </data>
<data name="CopyNotes" xml:space="preserve"> <data name="CopyNotes" xml:space="preserve">
<value>Kopioi merkinnät</value> <value>Kopioi merkinnät</value>
@@ -1623,7 +1623,7 @@ Koodi luetaan automaattisesti.</value>
<value>Biometrinen todennus</value> <value>Biometrinen todennus</value>
</data> </data>
<data name="Biometrics" xml:space="preserve"> <data name="Biometrics" xml:space="preserve">
<value>Biometria</value> <value>biometrialla</value>
</data> </data>
<data name="UseBiometricsToUnlock" xml:space="preserve"> <data name="UseBiometricsToUnlock" xml:space="preserve">
<value>Avaa biometrialla</value> <value>Avaa biometrialla</value>
@@ -1734,7 +1734,7 @@ Koodi luetaan automaattisesti.</value>
<comment>(noun) Location of deleted items which have not yet been permanently deleted</comment> <comment>(noun) Location of deleted items which have not yet been permanently deleted</comment>
</data> </data>
<data name="SearchTrash" xml:space="preserve"> <data name="SearchTrash" xml:space="preserve">
<value>Hae roskakorista</value> <value>Etsi roskakorista</value>
<comment>(action prompt) Label for the search text field when viewing the trash folder</comment> <comment>(action prompt) Label for the search text field when viewing the trash folder</comment>
</data> </data>
<data name="DoYouReallyWantToPermanentlyDeleteCipher" xml:space="preserve"> <data name="DoYouReallyWantToPermanentlyDeleteCipher" xml:space="preserve">
@@ -1999,7 +1999,7 @@ Koodi luetaan automaattisesti.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SearchSends" xml:space="preserve"> <data name="SearchSends" xml:space="preserve">
<value>Hae Sendeistä</value> <value>Etsi Sendeistä</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="EditSend" xml:space="preserve"> <data name="EditSend" xml:space="preserve">
@@ -2414,9 +2414,9 @@ turvallisesti valitsemalla "Lisää TOTP"</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Palvelu</value> <value>Palvelu</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2628,6 +2628,24 @@ Haluatko vaihtaa tähän tiliin?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Nykyinen pääsalasana</value> <value>Nykyinen pääsalasana</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Kirjautuminen onnistui!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Hyväksy muilta laitteiltasi</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Pyydä hyväksyntää ylläpidolta</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Hyväksy pääsalasanalla</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Poista käytöstä julkisilla laitteilla</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Muista tämä laite</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Suojausavain</value> <value>Suojausavain</value>
</data> </data>
@@ -2648,7 +2666,7 @@ Haluatko vaihtaa tähän tiliin?</value>
<value>Suojausavainta ei kopioida</value> <value>Suojausavainta ei kopioida</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>Suojausavainta ei kopioida kloonattuun kohteeseen. Haluatko jatkaa kloonausta?</value> <value>Suojausavain ei kopioidu kloonattuun kohteeseen. Haluatko jatkaa kloonausta?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Kopioi sovellus</value> <value>Kopioi sovellus</value>
@@ -2668,6 +2686,24 @@ Haluatko vaihtaa tähän tiliin?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Virheellinen API-tunniste</value> <value>Virheellinen API-tunniste</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Hyväksyntää pyydetty ylläpidolta</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Pyyntösi on välitetty ylläpidollesi.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Saat ilmoituksen heti kun se on hyväksytty.</value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Ongelmia kirjautumisessa?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Kirjaudutaan tunnuksella {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Holvin aikakatkaisutoiminnoksi vaihdettiin uloskirjaus</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Kohdetta ei voida jakaa organisaatiolle, koska siellä on jo samaa suojausavainta käyttävä kohde.</value> <value>Kohdetta ei voida jakaa organisaatiolle, koska siellä on jo samaa suojausavainta käyttävä kohde.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Haluatko vaihtaa tähän tiliin?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Useita URI-osoitteita ei ole mahdollista muokata samanaikaisesti</value> <value>Useita URI-osoitteita ei ole mahdollista muokata samanaikaisesti</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Kirjautuminen hyväksyttiin</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Laitteella kirjautuminen on määritettävä Bitwarden-sovelluksen asetuksista. Tarvitsetko eri vaihtoehdon?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Laitteella kirjautuminen</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Kirjaudutaan sijaintiin</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ pindutin ang Magdagdag ng TOTP para ligtas na mai-store ang key</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Serbisyo</value> <value>Serbisyo</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2628,6 +2628,24 @@ Gusto mo bang pumunta sa account na ito?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Gusto mo bang pumunta sa account na ito?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Gusto mo bang pumunta sa account na ito?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Gusto mo bang pumunta sa account na ito?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ sélectionnez Ajouter TOTP pour stocker la clé en toute sécurité</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2628,39 +2628,57 @@ Voulez-vous basculer vers ce compte ?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Mot de passe principal actuel</value> <value>Mot de passe principal actuel</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Clé d'accès</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>Clés d'accès</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>Créée le {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Application</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>Vous ne pouvez modifier l'application associée à la clé d'accès car cela l'invaliderait</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>La clé d'accès ne sera pas copiée</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>L'entrée clonée ne contiendra pas la clé d'accès. Continuer quand même ?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>Copier l'application</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Disponible pour la validation en deux étapes</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Aide sur la ressaisie du mot de passe principal</value> <value>Aide sur la ressaisie du mot de passe principal</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Le déverrouillage peut échouer en raison d'une mémoire insuffisante. Diminuez les paramètres de mémoire KDF pour y remédier</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Clé API invalide</value> <value>Clé API invalide</value>
@@ -2668,8 +2686,26 @@ Voulez-vous basculer vers ce compte ?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Jeton API invalide</value> <value>Jeton API invalide</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>Cet élément ne peut pas être déplacé vers l'organisation, car celle-ci dispose déjà d'un élément avec la même clé d'accès.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Bloquer la saisie automatique</value> <value>Bloquer la saisie automatique</value>
@@ -2714,4 +2750,16 @@ Voulez-vous basculer vers ce compte ?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Impossible de modifier des URI multiples à la fois</value> <value>Impossible de modifier des URI multiples à la fois</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Connexion sur</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2416,9 +2416,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2508,7 +2508,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2630,6 +2630,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2662,7 +2680,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2670,6 +2688,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2716,4 +2752,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>सेवा</value> <value>सेवा</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>एननऐडी</value> <value>एननऐडी</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>फायरफॉक्स रीले</value> <value>फायरफॉक्स रीले</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>चालू मुख्य पासवर्ड</value> <value>चालू मुख्य पासवर्ड</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2411,9 +2411,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Usluga</value> <value>Usluga</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2625,6 +2625,24 @@
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2657,7 +2675,7 @@
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2665,6 +2683,24 @@
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2711,4 +2747,16 @@
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2412,9 +2412,9 @@ TOTP hozzáadása a kulcs biztonságos tárolásához lehetőséget.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Szolgáltatás</value> <value>Szolgáltatás</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,6 +2626,24 @@ Szeretnénk átváltani erre a fiókra?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Jelenlegi mesterjelszó</value> <value>Jelenlegi mesterjelszó</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Megtörtént a bejelentkezés.</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Jóváhagyás másik eszközzel</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Adminisztrátori jóváhagyás kérés</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Jóváhagyás mesterjelszóval</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Kikapcsolás nyilvános eszközzel</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Eszköz megjegyzése</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Hozzáférési kulcs</value> <value>Hozzáférési kulcs</value>
</data> </data>
@@ -2658,7 +2676,7 @@ Szeretnénk átváltani erre a fiókra?</value>
<value>Mesterjelszó újbóli bekérés súgó</value> <value>Mesterjelszó újbóli bekérés súgó</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>A feloldás meghiúsulhat, mert nincs elegendő memória. A megoldáshoz csökkentsül a KDF memóriabeállításait.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Érvénytelen API kulcs</value> <value>Érvénytelen API kulcs</value>
@@ -2666,6 +2684,24 @@ Szeretnénk átváltani erre a fiókra?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Érvénytelen API vezérjel</value> <value>Érvénytelen API vezérjel</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Adminisztrátori jóváhagyás kérés történt</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>A kérés elküldésre került az adminisztrátornak.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>A jóváhagyás után értesítés érkezik.</value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Probléma van a bejelentkezéssel?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Bejelentkezés mint {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>A széf időkifutási művelete kijelentkezésre módosult.</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Ez az elem nem osztható meg a szervezettel, mert már van egy ugyanezzel a hozzáférési kulccsal.</value> <value>Ez az elem nem osztható meg a szervezettel, mert már van egy ugyanezzel a hozzáférési kulccsal.</value>
</data> </data>
@@ -2712,4 +2748,16 @@ Szeretnénk átváltani erre a fiókra?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Nem szerkeszthető több URI egyszerre.</value> <value>Nem szerkeszthető több URI egyszerre.</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>A bejelentkezés jóváhagyásra került.</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Az eszközzel történő bejelentkezést be kell állítani a Bitwarden alkalmazás beállításaiban. Más opcióra van szükség?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Bejelentkezés eszközzel</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Bejelentkezés:</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2505,7 +2505,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2627,6 +2627,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2667,6 +2685,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -172,7 +172,7 @@
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="DoYouReallyWantToDelete" xml:space="preserve"> <data name="DoYouReallyWantToDelete" xml:space="preserve">
<value>Vuoi davvero eliminarlo? Non lo potrai ripristinare.</value> <value>Vuoi davvero eliminarlo? Questa operazione non può essere annullata.</value>
<comment>Confirmation alert message when deleteing something.</comment> <comment>Confirmation alert message when deleteing something.</comment>
</data> </data>
<data name="Edit" xml:space="preserve"> <data name="Edit" xml:space="preserve">
@@ -477,7 +477,7 @@
<value>Inserisci l'indirizzo email del tuo account per ricevere il suggerimento per la password principale.</value> <value>Inserisci l'indirizzo email del tuo account per ricevere il suggerimento per la password principale.</value>
</data> </data>
<data name="ExntesionReenable" xml:space="preserve"> <data name="ExntesionReenable" xml:space="preserve">
<value>Riabilita l'estensione app</value> <value>Riattiva l'estensione app</value>
</data> </data>
<data name="ExtensionAlmostDone" xml:space="preserve"> <data name="ExtensionAlmostDone" xml:space="preserve">
<value>Quasi fatto!</value> <value>Quasi fatto!</value>
@@ -2413,9 +2413,9 @@ clicca Aggiungi TOTP per salvare la chiave in modo sicuro</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Servizio</value> <value>Servizio</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>FirefoxRelay</value> <value>FirefoxRelay</value>
@@ -2505,7 +2505,7 @@ Vuoi passare a questo account?</value>
<value>Accedi con dispositivo</value> <value>Accedi con dispositivo</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Login avviato</value> <value>Accesso avviato</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>Una notifica è stata inviata al tuo dispositivo.</value> <value>Una notifica è stata inviata al tuo dispositivo.</value>
@@ -2627,6 +2627,24 @@ Vuoi passare a questo account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Password principale corrente</value> <value>Password principale corrente</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Accesso effettuato!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approva con un altro mio dispositivo</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Richiedi approvazione dell'amministratore</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approva con password principale</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Deseleziona se stai usando un dispositivo pubblico</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Ricorda questo dispositivo</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Vuoi passare a questo account?</value>
<value>Aiuto per chiedere la password principale di nuovo</value> <value>Aiuto per chiedere la password principale di nuovo</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Lo sblocco potrebbe non riuscire a causa di memoria insufficiente. Riduci le impostazioni della memoria KDF per risolvere il problema.</value> <value>Lo sblocco potrebbe non riuscire a causa di memoria insufficiente. Riduci le impostazioni della memoria KDF o imposta lo sbocco biometrico per risolvere il problema.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Chiave API non valida</value> <value>Chiave API non valida</value>
@@ -2667,6 +2685,24 @@ Vuoi passare a questo account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Token API non valido</value> <value>Token API non valido</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Approvazione dell'amministratore richiesta</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>La tua richiesta è stata inviata al tuo amministratore.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Riceverai una notifica una volta approvato. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Problemi ad accedere?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Accedendo come {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Azione timeout cassaforte impostata su uscire</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Questo elemento non può essere condiviso con l'organizzazione perché ne esiste già uno con la stessa passkey.</value> <value>Questo elemento non può essere condiviso con l'organizzazione perché ne esiste già uno con la stessa passkey.</value>
</data> </data>
@@ -2683,7 +2719,7 @@ Vuoi passare a questo account?</value>
<value>URI salvato</value> <value>URI salvato</value>
</data> </data>
<data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve"> <data name="InvalidFormatUseHttpsHttpOrAndroidApp" xml:space="preserve">
<value>Formato non valido. Usa https://, http://, or androidapp://</value> <value>Formato non valido. Usa https://, http://, o androidapp://</value>
<comment>https://, http://, androidapp:// should not be translated</comment> <comment>https://, http://, androidapp:// should not be translated</comment>
</data> </data>
<data name="EditURI" xml:space="preserve"> <data name="EditURI" xml:space="preserve">
@@ -2713,4 +2749,16 @@ Vuoi passare a questo account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Non puoi modificare più URI contemporaneamente</value> <value>Non puoi modificare più URI contemporaneamente</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Accesso approvato</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>L'accesso con dispositivo deve essere abilitato nelle impostazioni dell'app Bitwarden. Ti serve un'altra opzione?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Accedi con dispositivo</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Accedendo su</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>サービス</value> <value>サービス</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>現在のマスターパスワード</value> <value>現在のマスターパスワード</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>ログインしました!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>他のデバイスで承認する</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>管理者の承認を要求する</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>マスターパスワードで承認する</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>パブリックデバイスを使用してオフにする</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>このデバイスを記憶する</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>パスキー</value> <value>パスキー</value>
</data> </data>
@@ -2659,7 +2677,7 @@
<value>マスターパスワードの再プロンプトヘルプ</value> <value>マスターパスワードの再プロンプトヘルプ</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>メモリ不足のためロック解除に失敗することがあります。KDF のメモリ設定を減らして解決してください</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>無効な API キー</value> <value>無効な API キー</value>
@@ -2667,6 +2685,24 @@
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>無効な API トークン</value> <value>無効な API トークン</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>管理者の承認を要求しました</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>要求が管理者に送信されました。</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>承認されると通知されます。 </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>ログインできない場合</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>{0} としてログイン中</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>保管庫のタイムアウトアクションがログアウトに変更されました</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>すでに同じパスキーを持つものがあるため、このアイテムは組織と共有することはできません。</value> <value>すでに同じパスキーを持つものがあるため、このアイテムは組織と共有することはできません。</value>
</data> </data>
@@ -2713,4 +2749,16 @@
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>一度に複数の URI を編集することはできません</value> <value>一度に複数の URI を編集することはできません</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>ログインの承認</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Bitwarden アプリで「デバイスでログイン」の設定をする必要があります。別のオプションが必要ですか?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>デバイスでログイン</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>ログイン先</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>서비스</value> <value>서비스</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2505,7 +2505,7 @@ Do you want to switch to this account?</value>
<value>기기로 로그인</value> <value>기기로 로그인</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>기기에 알림이 전송되었습니다.</value> <value>기기에 알림이 전송되었습니다.</value>
@@ -2627,6 +2627,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2667,6 +2685,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ pasirinkite Pridėti TOTP, kad raktas būtų saugiai išsaugotas</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Paslauga</value> <value>Paslauga</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2628,6 +2628,24 @@ Ar norite pereiti prie šios paskyros?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Dabartinis pagrindinis slaptažodis</value> <value>Dabartinis pagrindinis slaptažodis</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Ar norite pereiti prie šios paskyros?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Ar norite pereiti prie šios paskyros?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Ar norite pereiti prie šios paskyros?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -1384,10 +1384,10 @@ Nolasīšana notiks automātiski.</value>
<value>Meklēt krājumā</value> <value>Meklēt krājumā</value>
</data> </data>
<data name="SearchFileSends" xml:space="preserve"> <data name="SearchFileSends" xml:space="preserve">
<value>Meklēt datņu Sūtījumus</value> <value>Meklēt datņu Send</value>
</data> </data>
<data name="SearchTextSends" xml:space="preserve"> <data name="SearchTextSends" xml:space="preserve">
<value>Meklēt teksta Sūtījumus</value> <value>Meklēt teksta Send</value>
</data> </data>
<data name="SearchGroup" xml:space="preserve"> <data name="SearchGroup" xml:space="preserve">
<value>Meklēt {0}</value> <value>Meklēt {0}</value>
@@ -1496,13 +1496,13 @@ Nolasīšana notiks automātiski.</value>
<comment>ex: Logged in as user@example.com on bitwarden.com.</comment> <comment>ex: Logged in as user@example.com on bitwarden.com.</comment>
</data> </data>
<data name="VaultLockedMasterPassword" xml:space="preserve"> <data name="VaultLockedMasterPassword" xml:space="preserve">
<value>Glabātava ir slēgta. Nepieciešams norādīt galveno paroli, lai turpinātu.</value> <value>Glabātava ir aizslēgta. Nepieciešams norādīt galveno paroli, lai turpinātu.</value>
</data> </data>
<data name="VaultLockedPIN" xml:space="preserve"> <data name="VaultLockedPIN" xml:space="preserve">
<value>Glabātava ir slēgta. Nepieciešams norādīt PIN kodu, lai turpinātu.</value> <value>Glabātava ir aizslēgta. Nepieciešams norādīt PIN kodu, lai turpinātu.</value>
</data> </data>
<data name="VaultLockedIdentity" xml:space="preserve"> <data name="VaultLockedIdentity" xml:space="preserve">
<value>Glabātava ir slēgta. Jāapstiprina identitāte, lai turpinātu.</value> <value>Glabātava ir aizslēgta. Jāapstiprina identitāte, lai turpinātu.</value>
</data> </data>
<data name="Dark" xml:space="preserve"> <data name="Dark" xml:space="preserve">
<value>Tumšs</value> <value>Tumšs</value>
@@ -1662,7 +1662,7 @@ Nolasīšana notiks automātiski.</value>
<value>Kods nosūtīts</value> <value>Kods nosūtīts</value>
</data> </data>
<data name="ConfirmYourIdentity" xml:space="preserve"> <data name="ConfirmYourIdentity" xml:space="preserve">
<value>Lai turpinātu, apstipriniet savu identitāti.</value> <value>apstiprina identitāte, lai turpinātu.</value>
</data> </data>
<data name="ExportVaultWarning" xml:space="preserve"> <data name="ExportVaultWarning" xml:space="preserve">
<value>Šī izguve satur glabātavas datus nešifrētā veidā. Izdoto datni nevajadzētu glabāt vai sūtīt nedrošos veidos (piemēram, e-pastā). Izdzēst to uzreiz pēc izmantošanas.</value> <value>Šī izguve satur glabātavas datus nešifrētā veidā. Izdoto datni nevajadzētu glabāt vai sūtīt nedrošos veidos (piemēram, e-pastā). Izdzēst to uzreiz pēc izmantošanas.</value>
@@ -1746,7 +1746,7 @@ Nolasīšana notiks automātiski.</value>
<comment>Confirmation alert message when restoring a soft-deleted cipher.</comment> <comment>Confirmation alert message when restoring a soft-deleted cipher.</comment>
</data> </data>
<data name="DoYouReallyWantToSoftDeleteCipher" xml:space="preserve"> <data name="DoYouReallyWantToSoftDeleteCipher" xml:space="preserve">
<value>Vai tiešām vēlaties sūtīt uz atkritni?</value> <value>Vai tiešām pārvietot uz atkritni?</value>
<comment>Confirmation alert message when soft-deleting a cipher.</comment> <comment>Confirmation alert message when soft-deleting a cipher.</comment>
</data> </data>
<data name="AccountBiometricInvalidated" xml:space="preserve"> <data name="AccountBiometricInvalidated" xml:space="preserve">
@@ -1813,7 +1813,7 @@ Nolasīšana notiks automātiski.</value>
<value>Ieslēdzot šo slēdzi, Tu piekrīti sekojošajam:</value> <value>Ieslēdzot šo slēdzi, Tu piekrīti sekojošajam:</value>
</data> </data>
<data name="AcceptPoliciesError" xml:space="preserve"> <data name="AcceptPoliciesError" xml:space="preserve">
<value>Nav pieņemti izmantošanas nosacījumi un privātuma politika.</value> <value>Nav apstiprināti izmantošanas noteikumi un privātuma nosacījumi.</value>
</data> </data>
<data name="TermsOfService" xml:space="preserve"> <data name="TermsOfService" xml:space="preserve">
<value>Izmantošanas nosacījumi</value> <value>Izmantošanas nosacījumi</value>
@@ -1867,19 +1867,19 @@ Nolasīšana notiks automātiski.</value>
<value>Apvienības nosacījumi ietekmē Tavas īpašumtiesību iespējas.</value> <value>Apvienības nosacījumi ietekmē Tavas īpašumtiesību iespējas.</value>
</data> </data>
<data name="Send" xml:space="preserve"> <data name="Send" xml:space="preserve">
<value>Sūtīt</value> <value>Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AllSends" xml:space="preserve"> <data name="AllSends" xml:space="preserve">
<value>Visi Sūtījumi</value> <value>Visi Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="Sends" xml:space="preserve"> <data name="Sends" xml:space="preserve">
<value>Sūtījumi</value> <value>Send vienumi</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="NameInfo" xml:space="preserve"> <data name="NameInfo" xml:space="preserve">
<value>Draudzīgs nosaukums, lai raksturotu šo Sūtījumu.</value> <value>Lasāms nosaukums, kas apraksta šo Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="Text" xml:space="preserve"> <data name="Text" xml:space="preserve">
@@ -1920,7 +1920,7 @@ Nolasīšana notiks automātiski.</value>
<value>Dzēšanas laiks</value> <value>Dzēšanas laiks</value>
</data> </data>
<data name="DeletionDateInfo" xml:space="preserve"> <data name="DeletionDateInfo" xml:space="preserve">
<value>Sūtījums tiks neatgriezeniski dzēsts norādītajā datumā un laikā.</value> <value>Send tiks neatgriezeniski izdzēsts norādītajā datumā un laikā.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="PendingDelete" xml:space="preserve"> <data name="PendingDelete" xml:space="preserve">
@@ -1933,21 +1933,21 @@ Nolasīšana notiks automātiski.</value>
<value>Derīguma beigu laiks</value> <value>Derīguma beigu laiks</value>
</data> </data>
<data name="ExpirationDateInfo" xml:space="preserve"> <data name="ExpirationDateInfo" xml:space="preserve">
<value>Ja tas ir iestatīts, piekļuve šim Sūtījumam beigsies norādītajā datumā un laikā.</value> <value>Ja iestatīts, piekļuve šim Send beigsies norādītajā datumā un laikā.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="Expired" xml:space="preserve"> <data name="Expired" xml:space="preserve">
<value>Beidzies izmantošanas laiks</value> <value>Beidzies izmantošanas laiks</value>
</data> </data>
<data name="MaximumAccessCount" xml:space="preserve"> <data name="MaximumAccessCount" xml:space="preserve">
<value>Lielākais pieļaujamais piekļuvju skaits</value> <value>Lielākais pieļaujamais piekļuves reižu skaits</value>
</data> </data>
<data name="MaximumAccessCountInfo" xml:space="preserve"> <data name="MaximumAccessCountInfo" xml:space="preserve">
<value>Ja tas ir iestatīts, lietotāji vairs nevarēs piekļūt šim Sūtījumam, tiklīdz būs sasniegts maksimālais piekļuves skaits.</value> <value>Ja iestatīts, lietotāji nevarēs piekļūt šim Send, kad tiks sasniegts lielākais pieļaujamais piekļūšanas reižu skaits.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="MaximumAccessCountReached" xml:space="preserve"> <data name="MaximumAccessCountReached" xml:space="preserve">
<value>Sasniegts lielākais pieļaujamais piekļuvju skaits</value> <value>Sasniegts lielākais pieļaujamais piekļuves reižu skaits</value>
</data> </data>
<data name="CurrentAccessCount" xml:space="preserve"> <data name="CurrentAccessCount" xml:space="preserve">
<value>Pašreizējais piekļuvju skaits</value> <value>Pašreizējais piekļuvju skaits</value>
@@ -1956,14 +1956,14 @@ Nolasīšana notiks automātiski.</value>
<value>Jauna parole</value> <value>Jauna parole</value>
</data> </data>
<data name="PasswordInfo" xml:space="preserve"> <data name="PasswordInfo" xml:space="preserve">
<value>Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Sūtījumam.</value> <value>Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="RemovePassword" xml:space="preserve"> <data name="RemovePassword" xml:space="preserve">
<value>Noņemt paroli</value> <value>Noņemt paroli</value>
</data> </data>
<data name="AreYouSureRemoveSendPassword" xml:space="preserve"> <data name="AreYouSureRemoveSendPassword" xml:space="preserve">
<value>Vai tiešām vēlaties noņemt paroli?</value> <value>Vai tiešām noņemt paroli?</value>
</data> </data>
<data name="RemovingSendPassword" xml:space="preserve"> <data name="RemovingSendPassword" xml:space="preserve">
<value>Noņem paroli</value> <value>Noņem paroli</value>
@@ -1972,19 +1972,19 @@ Nolasīšana notiks automātiski.</value>
<value>Parole ir noņemta</value> <value>Parole ir noņemta</value>
</data> </data>
<data name="NotesInfo" xml:space="preserve"> <data name="NotesInfo" xml:space="preserve">
<value>Privātas piezīmes par šo Sūtījumu.</value> <value>Personīgas piezīmes par šo Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="DisableSend" xml:space="preserve"> <data name="DisableSend" xml:space="preserve">
<value>Deaktivizēt šo Sūtījumu, lai neviens tam nevarētu piekļūt</value> <value>Izslēgt šo Send, lai neviens tam nevarētu piekļūt</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="NoSends" xml:space="preserve"> <data name="NoSends" xml:space="preserve">
<value>Jūsu kontā nav neviena Sūtījuma.</value> <value>Kontā nav neviena Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AddASend" xml:space="preserve"> <data name="AddASend" xml:space="preserve">
<value>Pievienot Sūtījumu</value> <value>Pievienot Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="CopyLink" xml:space="preserve"> <data name="CopyLink" xml:space="preserve">
@@ -1994,35 +1994,35 @@ Nolasīšana notiks automātiski.</value>
<value>Kopīgot saiti</value> <value>Kopīgot saiti</value>
</data> </data>
<data name="SendLink" xml:space="preserve"> <data name="SendLink" xml:space="preserve">
<value>Sūtījuma saite</value> <value>Send saite</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SearchSends" xml:space="preserve"> <data name="SearchSends" xml:space="preserve">
<value>Meklēt Sūtījumus</value> <value>Meklēt Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="EditSend" xml:space="preserve"> <data name="EditSend" xml:space="preserve">
<value>Labot Sūtījumu</value> <value>Labot Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AddSend" xml:space="preserve"> <data name="AddSend" xml:space="preserve">
<value>Jauns Sūtījums</value> <value>Jauns Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AreYouSureDeleteSend" xml:space="preserve"> <data name="AreYouSureDeleteSend" xml:space="preserve">
<value>Vai tiešām vēlaties dzēst šo Sūtījumu?</value> <value>Vai tiešām izdzēst šo Send?</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendDeleted" xml:space="preserve"> <data name="SendDeleted" xml:space="preserve">
<value>Sūtījums dzēsts</value> <value>Send izdzēsts</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendUpdated" xml:space="preserve"> <data name="SendUpdated" xml:space="preserve">
<value>Sūtījums saglabāts</value> <value>Send saglabāts</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="NewSendCreated" xml:space="preserve"> <data name="NewSendCreated" xml:space="preserve">
<value>Sūtījums izveidots</value> <value>Send izveidots</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="OneDay" xml:space="preserve"> <data name="OneDay" xml:space="preserve">
@@ -2044,30 +2044,30 @@ Nolasīšana notiks automātiski.</value>
<value>Pielāgots</value> <value>Pielāgots</value>
</data> </data>
<data name="ShareOnSave" xml:space="preserve"> <data name="ShareOnSave" xml:space="preserve">
<value>Kopīgojiet šo Sūtījumu pēc saglabāšanas</value> <value>Kopīgot šo Send pēc saglabāšanas</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendDisabledWarning" xml:space="preserve"> <data name="SendDisabledWarning" xml:space="preserve">
<value>Organizācijas politikas dēļ jūs varat dzēst tikai esošu Sūtījumu.</value> <value>Uzņēmuma nosacījumu dēļ ir iespējams dzēst tikai esošu Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AboutSend" xml:space="preserve"> <data name="AboutSend" xml:space="preserve">
<value>Par Sūtījumu</value> <value>Par Send</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="HideEmail" xml:space="preserve"> <data name="HideEmail" xml:space="preserve">
<value>Slēpt e-pasta adresi no saņēmējiem.</value> <value>Slēpt e-pasta adresi no saņēmējiem.</value>
</data> </data>
<data name="SendOptionsPolicyInEffect" xml:space="preserve"> <data name="SendOptionsPolicyInEffect" xml:space="preserve">
<value>Viena vai vairākas organizācijas politikas ietekmē jūsu Sūtījuma opcijas.</value> <value>Viens vai vairāki apvienības nosacījumi ietekmē Send iespējas.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendFilePremiumRequired" xml:space="preserve"> <data name="SendFilePremiumRequired" xml:space="preserve">
<value>Bezmaksas kontos var kopīgot tikai tekstu. Lai izmantotu failus ar Sūtījumu, ir nepieciešama Premium dalība.</value> <value>Ar bezmaksas kontu ir iespējams kopīgot tikai tekstu. Ir nepieciešama Premium dalība, lai Send izmantotu datnes.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendFileEmailVerificationRequired" xml:space="preserve"> <data name="SendFileEmailVerificationRequired" xml:space="preserve">
<value>Jums ir jāapstiprina savs e-pasts, lai izmantotu failus ar Sūtījumu. Jūs varat verificēt savu e-pastu tīmekļa glabātuvē.</value> <value>Ir jāapstiprina e-pasta adrese, lai izmantotu datnes ar Send. E-pasta edresi var apstiprināt tīmekļa glabātavā.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="PasswordPrompt" xml:space="preserve"> <data name="PasswordPrompt" xml:space="preserve">
@@ -2203,7 +2203,7 @@ Nolasīšana notiks automātiski.</value>
<value>Sūta</value> <value>Sūta</value>
</data> </data>
<data name="CopySendLinkOnSave" xml:space="preserve"> <data name="CopySendLinkOnSave" xml:space="preserve">
<value>Kopēt Sūtījuma saiti saglabāšanas laikā</value> <value>Saglabāšanas laikā ievietot Send saiti starpliktuvē</value>
</data> </data>
<data name="SendingCode" xml:space="preserve"> <data name="SendingCode" xml:space="preserve">
<value>Sūta kodu</value> <value>Sūta kodu</value>
@@ -2212,13 +2212,13 @@ Nolasīšana notiks automātiski.</value>
<value>Pārbauda</value> <value>Pārbauda</value>
</data> </data>
<data name="ResendCode" xml:space="preserve"> <data name="ResendCode" xml:space="preserve">
<value>Nosūtīt kodu vēlreiz</value> <value>Atkārtoti nosūtīt kodu</value>
</data> </data>
<data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve"> <data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve">
<value>Pārbaudes kods tika nosūtīts e-pastā</value> <value>Pārbaudes kods tika nosūtīts e-pastā</value>
</data> </data>
<data name="AnErrorOccurredWhileSendingAVerificationCodeToYourEmailPleaseTryAgain" xml:space="preserve"> <data name="AnErrorOccurredWhileSendingAVerificationCodeToYourEmailPleaseTryAgain" xml:space="preserve">
<value>Nosūtot verifikācijas kodu uz jūsu e-pastu, radās kļūda. Lūdzu mēģiniet vēlreiz</value> <value>Atgadījās kļūda, kad apliecinājuma kods tika sūtīts uz e-pastu. Lūgums mēģināt vēlreiz</value>
</data> </data>
<data name="EnterTheVerificationCodeThatWasSentToYourEmail" xml:space="preserve"> <data name="EnterTheVerificationCodeThatWasSentToYourEmail" xml:space="preserve">
<value>Ievadīt pārbaudes kodu, kas tika nosūtīts e-pastā</value> <value>Ievadīt pārbaudes kodu, kas tika nosūtīts e-pastā</value>
@@ -2413,9 +2413,9 @@ jāizvēlas "Pievienot TOTP", lai droši glabātu atslēgu.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Pakalpojums</value> <value>Pakalpojums</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2511,7 +2511,7 @@ Vai pārslēgties uz šo kontu?</value>
<value>Uz ierīci ir nosūtīts paziņojums.</value> <value>Uz ierīci ir nosūtīts paziņojums.</value>
</data> </data>
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve"> <data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
<value>pārliecinās, ka glabātava ir atslēgta un atpazīšanas vārdkopa ir tāda pati arī citā ierīcē.</value> <value>Lūgums pārliecināties, ka glabātava ir atslēgta un atpazīšanas vārdkopa ir tāda pati arī citā ierīcē.</value>
</data> </data>
<data name="ResendNotification" xml:space="preserve"> <data name="ResendNotification" xml:space="preserve">
<value>Atkārtoti nosūtīt paziņojumu</value> <value>Atkārtoti nosūtīt paziņojumu</value>
@@ -2627,6 +2627,24 @@ Vai pārslēgties uz šo kontu?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Pašreizējā galvenā parole</value> <value>Pašreizējā galvenā parole</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Pieteicies.</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Apstiprināt ar citu savu ierīci</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Pieprasīt pārvaldītāja apstiprinājumu</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Apstiprināt ar galveno paroli</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Izslēgt izmantojot publisku ierīci</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Atcerēties šo ierīci</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Paroļatslēga</value> <value>Paroļatslēga</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Vai pārslēgties uz šo kontu?</value>
<value>Galvenās paroles pārvaicāšanas palīdzība</value> <value>Galvenās paroles pārvaicāšanas palīdzība</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Atslēgšana var neizdoties nepietiekamas atmiņas dēļ. Lai to novērstu, jāsamazina KDF atmiņas iestatījmi</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Nederīga API atslēga</value> <value>Nederīga API atslēga</value>
@@ -2667,6 +2685,24 @@ Vai pārslēgties uz šo kontu?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Nederīga API pilnvara</value> <value>Nederīga API pilnvara</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Pieprasīts pārvaldītāja apstiprinājums</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Pieprasījums tika nosūtīts pārvaldītājam.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Tiks saņemts paziņojums, tiklīdz būs apstiprināts. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Neizdodas pieteikties?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Piesakās kā {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Glabātavas noildzes darbība nomainīta uz atteikšanos</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Šo vienumu nevar kopīgot ar apvienību, jo tur jau ir tāds ar to pašu paroļatslēgu.</value> <value>Šo vienumu nevar kopīgot ar apvienību, jo tur jau ir tāds ar to pašu paroļatslēgu.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Vai pārslēgties uz šo kontu?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Nevar labot vairākus URI vienlaicīgi</value> <value>Nevar labot vairākus URI vienlaicīgi</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Pieteikšanās apstiprināta</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Ir jāuzstāda pieteikšanās ar ierīci Bitwarden lietotnes iestatījumos. Nepieciešama cita iespēja?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Pieteikties ar ierīci</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Piesakās</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2505,7 +2505,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2627,6 +2627,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2667,6 +2685,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -514,7 +514,7 @@
<value>अंगुलिमुद्रा</value> <value>अंगुलिमुद्रा</value>
</data> </data>
<data name="GeneratePassword" xml:space="preserve"> <data name="GeneratePassword" xml:space="preserve">
<value>Generate password</value> <value>पासवर्ड निर्माण करा</value>
</data> </data>
<data name="GetPasswordHint" xml:space="preserve"> <data name="GetPasswordHint" xml:space="preserve">
<value>Get your master password hint</value> <value>Get your master password hint</value>
@@ -587,11 +587,11 @@
<value>Master password must be at least {0} characters long.</value> <value>Master password must be at least {0} characters long.</value>
</data> </data>
<data name="MinNumbers" xml:space="preserve"> <data name="MinNumbers" xml:space="preserve">
<value>Minimum numbers</value> <value>किमान अंक</value>
<comment>Minimum numeric characters for password generator settings</comment> <comment>Minimum numeric characters for password generator settings</comment>
</data> </data>
<data name="MinSpecial" xml:space="preserve"> <data name="MinSpecial" xml:space="preserve">
<value>Minimum special</value> <value>किमान विशेष</value>
<comment>Minimum special characters for password generator settings</comment> <comment>Minimum special characters for password generator settings</comment>
</data> </data>
<data name="MoreSettings" xml:space="preserve"> <data name="MoreSettings" xml:space="preserve">
@@ -632,10 +632,10 @@
<value>Other</value> <value>Other</value>
</data> </data>
<data name="PasswordGenerated" xml:space="preserve"> <data name="PasswordGenerated" xml:space="preserve">
<value>Password generated</value> <value>पासवर्ड निर्माण झाला</value>
</data> </data>
<data name="PasswordGenerator" xml:space="preserve"> <data name="PasswordGenerator" xml:space="preserve">
<value>Password generator</value> <value>पासवर्ड जनित्र</value>
</data> </data>
<data name="PasswordHint" xml:space="preserve"> <data name="PasswordHint" xml:space="preserve">
<value>Password hint</value> <value>Password hint</value>
@@ -657,7 +657,7 @@
<value>Please consider helping us out with a good review!</value> <value>Please consider helping us out with a good review!</value>
</data> </data>
<data name="RegeneratePassword" xml:space="preserve"> <data name="RegeneratePassword" xml:space="preserve">
<value>Regenerate password</value> <value>पासवर्ड पुनर्जनित करा</value>
</data> </data>
<data name="RetypeMasterPassword" xml:space="preserve"> <data name="RetypeMasterPassword" xml:space="preserve">
<value>Re-type master password</value> <value>Re-type master password</value>
@@ -1008,16 +1008,16 @@ Scanning will happen automatically.</value>
<value>Security code</value> <value>Security code</value>
</data> </data>
<data name="TypeCard" xml:space="preserve"> <data name="TypeCard" xml:space="preserve">
<value>Card</value> <value>कार्ड</value>
</data> </data>
<data name="TypeIdentity" xml:space="preserve"> <data name="TypeIdentity" xml:space="preserve">
<value>Identity</value> <value>ओळख</value>
</data> </data>
<data name="TypeLogin" xml:space="preserve"> <data name="TypeLogin" xml:space="preserve">
<value>Login</value> <value>प्रवेश</value>
</data> </data>
<data name="TypeSecureNote" xml:space="preserve"> <data name="TypeSecureNote" xml:space="preserve">
<value>Secure note</value> <value>संरक्षित चिठ्ठी</value>
</data> </data>
<data name="Address1" xml:space="preserve"> <data name="Address1" xml:space="preserve">
<value>Address 1</value> <value>Address 1</value>
@@ -1038,7 +1038,7 @@ Scanning will happen automatically.</value>
<value>Brand</value> <value>Brand</value>
</data> </data>
<data name="CardholderName" xml:space="preserve"> <data name="CardholderName" xml:space="preserve">
<value>Cardholder name</value> <value>कार्डधारकाचे नाव</value>
</data> </data>
<data name="CityTown" xml:space="preserve"> <data name="CityTown" xml:space="preserve">
<value>City / Town</value> <value>City / Town</value>
@@ -1158,16 +1158,16 @@ Scanning will happen automatically.</value>
<value>Go to my vault</value> <value>Go to my vault</value>
</data> </data>
<data name="Collections" xml:space="preserve"> <data name="Collections" xml:space="preserve">
<value>Collections</value> <value>संग्रह</value>
</data> </data>
<data name="NoItemsCollection" xml:space="preserve"> <data name="NoItemsCollection" xml:space="preserve">
<value>There are no items in this collection.</value> <value>ह्या संग्रहात एकही वस्तू नाही.</value>
</data> </data>
<data name="NoItemsFolder" xml:space="preserve"> <data name="NoItemsFolder" xml:space="preserve">
<value>There are no items in this folder.</value> <value>There are no items in this folder.</value>
</data> </data>
<data name="NoItemsTrash" xml:space="preserve"> <data name="NoItemsTrash" xml:space="preserve">
<value>There are no items in the trash.</value> <value>कचराकुंडी रिकामी आहे.</value>
</data> </data>
<data name="AutofillAccessibilityService" xml:space="preserve"> <data name="AutofillAccessibilityService" xml:space="preserve">
<value>Auto-fill Accessibility Service</value> <value>Auto-fill Accessibility Service</value>
@@ -1331,7 +1331,7 @@ Scanning will happen automatically.</value>
<value>Invalid email address.</value> <value>Invalid email address.</value>
</data> </data>
<data name="Cards" xml:space="preserve"> <data name="Cards" xml:space="preserve">
<value>Cards</value> <value>कार्ड</value>
</data> </data>
<data name="Identities" xml:space="preserve"> <data name="Identities" xml:space="preserve">
<value>Identities</value> <value>Identities</value>
@@ -1340,7 +1340,7 @@ Scanning will happen automatically.</value>
<value>Logins</value> <value>Logins</value>
</data> </data>
<data name="SecureNotes" xml:space="preserve"> <data name="SecureNotes" xml:space="preserve">
<value>Secure notes</value> <value>संरक्षित चिठ्ठ्या</value>
</data> </data>
<data name="AllItems" xml:space="preserve"> <data name="AllItems" xml:space="preserve">
<value>All items</value> <value>All items</value>
@@ -1372,7 +1372,7 @@ Scanning will happen automatically.</value>
<value>Password history</value> <value>Password history</value>
</data> </data>
<data name="Types" xml:space="preserve"> <data name="Types" xml:space="preserve">
<value>Types</value> <value>प्रकार</value>
</data> </data>
<data name="NoPasswordsToList" xml:space="preserve"> <data name="NoPasswordsToList" xml:space="preserve">
<value>No passwords to list.</value> <value>No passwords to list.</value>
@@ -1381,7 +1381,7 @@ Scanning will happen automatically.</value>
<value>There are no items to list.</value> <value>There are no items to list.</value>
</data> </data>
<data name="SearchCollection" xml:space="preserve"> <data name="SearchCollection" xml:space="preserve">
<value>Search collection</value> <value>संग्रहात शोधा</value>
</data> </data>
<data name="SearchFileSends" xml:space="preserve"> <data name="SearchFileSends" xml:space="preserve">
<value>Search file Sends</value> <value>Search file Sends</value>
@@ -1422,7 +1422,7 @@ Scanning will happen automatically.</value>
<value>Item has been shared.</value> <value>Item has been shared.</value>
</data> </data>
<data name="SelectOneCollection" xml:space="preserve"> <data name="SelectOneCollection" xml:space="preserve">
<value>You must select at least one collection.</value> <value>किमान एक संग्रह तरी निवडला पाहिजे.</value>
</data> </data>
<data name="Share" xml:space="preserve"> <data name="Share" xml:space="preserve">
<value>Share</value> <value>Share</value>
@@ -1440,7 +1440,7 @@ Scanning will happen automatically.</value>
<value>Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved.</value> <value>Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved.</value>
</data> </data>
<data name="NumberOfWords" xml:space="preserve"> <data name="NumberOfWords" xml:space="preserve">
<value>Number of words</value> <value>शब्दांची संख्या</value>
</data> </data>
<data name="Passphrase" xml:space="preserve"> <data name="Passphrase" xml:space="preserve">
<value>Passphrase</value> <value>Passphrase</value>
@@ -1453,7 +1453,7 @@ Scanning will happen automatically.</value>
<comment>To clear something out. example: To clear browser history.</comment> <comment>To clear something out. example: To clear browser history.</comment>
</data> </data>
<data name="Generator" xml:space="preserve"> <data name="Generator" xml:space="preserve">
<value>Generator</value> <value>जनित्र</value>
<comment>Short for "Password Generator"</comment> <comment>Short for "Password Generator"</comment>
</data> </data>
<data name="NoFoldersToList" xml:space="preserve"> <data name="NoFoldersToList" xml:space="preserve">
@@ -1601,11 +1601,11 @@ Scanning will happen automatically.</value>
<value>Your theme changes will apply when the app is restarted.</value> <value>Your theme changes will apply when the app is restarted.</value>
</data> </data>
<data name="Capitalize" xml:space="preserve"> <data name="Capitalize" xml:space="preserve">
<value>Capitalize</value> <value>पहिले अक्षर मोठे करा</value>
<comment>ex. Uppercase the first character of a word.</comment> <comment>ex. Uppercase the first character of a word.</comment>
</data> </data>
<data name="IncludeNumber" xml:space="preserve"> <data name="IncludeNumber" xml:space="preserve">
<value>Include number</value> <value>अंक समविष्ट करा</value>
</data> </data>
<data name="Download" xml:space="preserve"> <data name="Download" xml:space="preserve">
<value>Download</value> <value>Download</value>
@@ -1684,7 +1684,7 @@ Scanning will happen automatically.</value>
<value>There was a problem exporting your vault. If the problem persists, you'll need to export from the web vault.</value> <value>There was a problem exporting your vault. If the problem persists, you'll need to export from the web vault.</value>
</data> </data>
<data name="ExportVaultSuccess" xml:space="preserve"> <data name="ExportVaultSuccess" xml:space="preserve">
<value>Vault exported successfully</value> <value>तिजोरी निर्यात यशस्वी</value>
</data> </data>
<data name="Clone" xml:space="preserve"> <data name="Clone" xml:space="preserve">
<value>Clone</value> <value>Clone</value>
@@ -1730,7 +1730,7 @@ Scanning will happen automatically.</value>
<comment>Confirmation message after successfully restoring a soft-deleted item</comment> <comment>Confirmation message after successfully restoring a soft-deleted item</comment>
</data> </data>
<data name="Trash" xml:space="preserve"> <data name="Trash" xml:space="preserve">
<value>Trash</value> <value>कचराकुंडी</value>
<comment>(noun) Location of deleted items which have not yet been permanently deleted</comment> <comment>(noun) Location of deleted items which have not yet been permanently deleted</comment>
</data> </data>
<data name="SearchTrash" xml:space="preserve"> <data name="SearchTrash" xml:space="preserve">
@@ -1868,15 +1868,15 @@ Scanning will happen automatically.</value>
<value>An organization policy is affecting your ownership options.</value> <value>An organization policy is affecting your ownership options.</value>
</data> </data>
<data name="Send" xml:space="preserve"> <data name="Send" xml:space="preserve">
<value>Send</value> <value>पाठवणी</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AllSends" xml:space="preserve"> <data name="AllSends" xml:space="preserve">
<value>All Sends</value> <value>सर्व पाठवण्या</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="Sends" xml:space="preserve"> <data name="Sends" xml:space="preserve">
<value>Sends</value> <value>पाठवण्या</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="NameInfo" xml:space="preserve"> <data name="NameInfo" xml:space="preserve">
@@ -1985,7 +1985,7 @@ Scanning will happen automatically.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="AddASend" xml:space="preserve"> <data name="AddASend" xml:space="preserve">
<value>Add a Send</value> <value>पाठवणी जोडा</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="CopyLink" xml:space="preserve"> <data name="CopyLink" xml:space="preserve">
@@ -2261,10 +2261,10 @@ Scanning will happen automatically.</value>
<value>Filter items by vault</value> <value>Filter items by vault</value>
</data> </data>
<data name="AllVaults" xml:space="preserve"> <data name="AllVaults" xml:space="preserve">
<value>All vaults</value> <value>सर्व तिजोऱ्या</value>
</data> </data>
<data name="Vaults" xml:space="preserve"> <data name="Vaults" xml:space="preserve">
<value>Vaults</value> <value>तिजोऱ्या</value>
</data> </data>
<data name="VaultFilterDescription" xml:space="preserve"> <data name="VaultFilterDescription" xml:space="preserve">
<value>Vault: {0}</value> <value>Vault: {0}</value>
@@ -2385,7 +2385,7 @@ select Add TOTP to store the key safely</value>
<value>Password type</value> <value>Password type</value>
</data> </data>
<data name="WhatWouldYouLikeToGenerate" xml:space="preserve"> <data name="WhatWouldYouLikeToGenerate" xml:space="preserve">
<value>What would you like to generate?</value> <value>काय निर्माण करायचे?</value>
</data> </data>
<data name="UsernameType" xml:space="preserve"> <data name="UsernameType" xml:space="preserve">
<value>Username type</value> <value>Username type</value>
@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2441,7 +2441,7 @@ select Add TOTP to store the key safely</value>
<value>Are you sure you want to overwrite the current username?</value> <value>Are you sure you want to overwrite the current username?</value>
</data> </data>
<data name="GenerateUsername" xml:space="preserve"> <data name="GenerateUsername" xml:space="preserve">
<value>Generate username</value> <value>वापरकर्ता नाव निर्माण करा</value>
</data> </data>
<data name="EmailType" xml:space="preserve"> <data name="EmailType" xml:space="preserve">
<value>Email Type</value> <value>Email Type</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ velg Legg til TOTP for å lagre nøkkelen sikkert</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Tjeneste</value> <value>Tjeneste</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2628,6 +2628,24 @@ Vil du bytte til denne kontoen?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Nåværende hovedpassord</value> <value>Nåværende hovedpassord</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logget inn!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Godkjenn med min andre enhet</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Be om administratorgodkjenning</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Godkjenn med hovedpassord</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Skru av ved hjelp av en offentlig enhet</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Husk denne enheten</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passnøkkel</value> <value>Passnøkkel</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Vil du bytte til denne kontoen?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Vil du bytte til denne kontoen?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin-godkjenning forespurt</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Forespørselen din er sendt til administratoren din.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Du vil bli varslet når det er godkjent. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Problemer med å logge inn?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logger inn som {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Vil du bytte til denne kontoen?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Innlogging godkjent</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Logg inn med enhet</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logger inn på</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ kies je TOTP toevoegen om de sleutel veilig op te slaan</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Dienst</value> <value>Dienst</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@ Wilt u naar dit account wisselen?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Huidig hoofdwachtwoord</value> <value>Huidig hoofdwachtwoord</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2659,7 +2677,7 @@ Wilt u naar dit account wisselen?</value>
<value>Hulptekst hoofdwachtwoord opnieuw vragen</value> <value>Hulptekst hoofdwachtwoord opnieuw vragen</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Ontgrendelen kan mislukken als er onvoldoende geheugen is. Verminder je KDF-geheugeninstellingen om dit op te lossen</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Ongeldige API-sleutel</value> <value>Ongeldige API-sleutel</value>
@@ -2667,6 +2685,24 @@ Wilt u naar dit account wisselen?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Ongeldige API-token</value> <value>Ongeldige API-token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Je kunt dit item niet delen met de organisatie omdat er al een met dezelfde passkey is.</value> <value>Je kunt dit item niet delen met de organisatie omdat er al een met dezelfde passkey is.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Wilt u naar dit account wisselen?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Meerdere URIs in één keer bewerken kan niet</value> <value>Meerdere URIs in één keer bewerken kan niet</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passnøkkel</value> <value>Passnøkkel</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Kunne ikkje låse opp på grunn av utilstrekkeleg minnekapasitet. Reduser KDF-minne-innstillingane for å løyse dette</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Denne gjenstanden kan ikkje delast med organisasjonen fordi det allereie finst ein med same passnøkkel.</value> <value>Denne gjenstanden kan ikkje delast med organisasjonen fordi det allereie finst ein med same passnøkkel.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2414,9 +2414,9 @@ select Add TOTP to store the key safely</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Service</value> <value>Service</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2506,7 +2506,7 @@ Do you want to switch to this account?</value>
<value>Log in with device</value> <value>Log in with device</value>
</data> </data>
<data name="LogInInitiated" xml:space="preserve"> <data name="LogInInitiated" xml:space="preserve">
<value>Log in initiated</value> <value>Login initiated</value>
</data> </data>
<data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve"> <data name="ANotificationHasBeenSentToYourDevice" xml:space="preserve">
<value>A notification has been sent to your device.</value> <value>A notification has been sent to your device.</value>
@@ -2628,6 +2628,24 @@ Do you want to switch to this account?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Current master password</value> <value>Current master password</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Logged in!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Approve with my other device</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Request admin approval</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Approve with master password</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Turn off using a public device</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Remember this device</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2660,7 +2678,7 @@ Do you want to switch to this account?</value>
<value>Master password re-prompt help</value> <value>Master password re-prompt help</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings to resolve.</value> <value>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Invalid API key</value> <value>Invalid API key</value>
@@ -2668,6 +2686,24 @@ Do you want to switch to this account?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Invalid API token</value> <value>Invalid API token</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Admin approval requested</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Your request has been sent to your admin.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>You will be notified once approved. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Trouble logging in?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logging in as {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>This item cannot be shared with the organization because there is one already with the same passkey.</value>
</data> </data>
@@ -2714,4 +2750,16 @@ Do you want to switch to this account?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Cannot edit multiple URIs at once</value> <value>Cannot edit multiple URIs at once</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login approved</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Log in with device must be set up in the settings of the Bitwarden app. Need another option?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Log in with device</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logging in on</value>
</data>
</root> </root>

View File

@@ -2413,9 +2413,9 @@ wybierz Dodaj TOTP, aby bezpiecznie przechowywać klucz</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Usługa</value> <value>Usługa</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2627,6 +2627,24 @@ Czy chcesz przełączyć się na to konto?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Aktualne hasło główne</value> <value>Aktualne hasło główne</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Zalogowano!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Zatwierdź za pomocą mojego innego urządzenia</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Poproś administratora o zatwierdzenie</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Zatwierdź przy użyciu hasła głównego</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Wyłącz za pomocą urządzenia publicznego</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Zapamiętaj to urządzenie</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Passkey</value>
</data> </data>
@@ -2656,10 +2674,10 @@ Czy chcesz przełączyć się na to konto?</value>
<value>Dostępne dla dwustopniowego logowania</value> <value>Dostępne dla dwustopniowego logowania</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Master password re-prompt help</value> <value>Pomoc dotycząca potwierdzania hasłem głównym</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>Odblokowanie może się nie powieść z powodu niewystarczającej ilości pamięci. Zmniejsz ustawienia pamięci KDF, aby to rozwiązać</value> <value>Odblokowanie może się nie udać z powodu niewystarczającej ilości pamięci. Zmniejsz ustawienia pamięci KDF lub ustaw odblokowanie biometryczne, aby rozwiązać ten problem.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Nieprawidłowy klucz API</value> <value>Nieprawidłowy klucz API</value>
@@ -2667,6 +2685,24 @@ Czy chcesz przełączyć się na to konto?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Nieprawidłowy token API.</value> <value>Nieprawidłowy token API.</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Poproszono administratora o zatwierdzenie</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Twoja prośba została wysłana do Twojego administratora.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Zostaniesz powiadomiony po zatwierdzeniu. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Problem z zalogowaniem?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Logowanie jako {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Vault timeout action changed to log out</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>Ten element nie może być współdzielony z organizacją, ponieważ jest już z tym samym passkey'em.</value> <value>Ten element nie może być współdzielony z organizacją, ponieważ jest już z tym samym passkey'em.</value>
</data> </data>
@@ -2713,4 +2749,16 @@ Czy chcesz przełączyć się na to konto?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Nie można edytować wielu URI na raz</value> <value>Nie można edytować wielu URI na raz</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Logowanie zatwierdzone</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Logowanie za pomocą urządzenia musi być włączone w ustawieniach aplikacji Bitwarden. Potrzebujesz innej opcji?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Zaloguj się za pomocą urządzenia</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Logowanie do</value>
</data>
</root> </root>

View File

@@ -152,11 +152,11 @@
<comment>Copy some value to your clipboard.</comment> <comment>Copy some value to your clipboard.</comment>
</data> </data>
<data name="CopyPassword" xml:space="preserve"> <data name="CopyPassword" xml:space="preserve">
<value>Copiar Senha</value> <value>Copiar senha</value>
<comment>The button text that allows a user to copy the login's password to their clipboard.</comment> <comment>The button text that allows a user to copy the login's password to their clipboard.</comment>
</data> </data>
<data name="CopyUsername" xml:space="preserve"> <data name="CopyUsername" xml:space="preserve">
<value>Copiar o Nome de Usuário</value> <value>Copiar o nome de usuário</value>
<comment>The button text that allows a user to copy the login's username to their clipboard.</comment> <comment>The button text that allows a user to copy the login's username to their clipboard.</comment>
</data> </data>
<data name="Credits" xml:space="preserve"> <data name="Credits" xml:space="preserve">
@@ -179,7 +179,7 @@
<value>Editar</value> <value>Editar</value>
</data> </data>
<data name="EditFolder" xml:space="preserve"> <data name="EditFolder" xml:space="preserve">
<value>Editar Pasta</value> <value>Editar pasta</value>
</data> </data>
<data name="Email" xml:space="preserve"> <data name="Email" xml:space="preserve">
<value>E-Mail</value> <value>E-Mail</value>
@@ -229,14 +229,14 @@
<value>Pastas</value> <value>Pastas</value>
</data> </data>
<data name="FolderUpdated" xml:space="preserve"> <data name="FolderUpdated" xml:space="preserve">
<value>Pasta atualizada.</value> <value>Pasta salva</value>
</data> </data>
<data name="GoToWebsite" xml:space="preserve"> <data name="GoToWebsite" xml:space="preserve">
<value>Ir para o website</value> <value>Ir para o Site</value>
<comment>The button text that allows user to launch the website to their web browser.</comment> <comment>The button text that allows user to launch the website to their web browser.</comment>
</data> </data>
<data name="HelpAndFeedback" xml:space="preserve"> <data name="HelpAndFeedback" xml:space="preserve">
<value>Ajuda e Feedback</value> <value>Ajuda e feedback</value>
</data> </data>
<data name="Hide" xml:space="preserve"> <data name="Hide" xml:space="preserve">
<value>Ocultar</value> <value>Ocultar</value>
@@ -251,7 +251,7 @@
<comment>Title for the alert when internet connection is required to continue.</comment> <comment>Title for the alert when internet connection is required to continue.</comment>
</data> </data>
<data name="InvalidMasterPassword" xml:space="preserve"> <data name="InvalidMasterPassword" xml:space="preserve">
<value>Senha mestra inválida. Tentar novamente.</value> <value>Senha mestra inválida. Tente novamente.</value>
</data> </data>
<data name="InvalidPIN" xml:space="preserve"> <data name="InvalidPIN" xml:space="preserve">
<value>PIN inválido. Tente novamente.</value> <value>PIN inválido. Tente novamente.</value>
@@ -269,7 +269,7 @@
<comment>Title for login page. (noun)</comment> <comment>Title for login page. (noun)</comment>
</data> </data>
<data name="LogOut" xml:space="preserve"> <data name="LogOut" xml:space="preserve">
<value>Encerrar Sessão</value> <value>Encerrar sessão</value>
<comment>The log out button text (verb).</comment> <comment>The log out button text (verb).</comment>
</data> </data>
<data name="LogoutConfirmation" xml:space="preserve"> <data name="LogoutConfirmation" xml:space="preserve">
@@ -288,7 +288,7 @@
<value>Você gostaria de mudar para ela agora?</value> <value>Você gostaria de mudar para ela agora?</value>
</data> </data>
<data name="MasterPassword" xml:space="preserve"> <data name="MasterPassword" xml:space="preserve">
<value>Senha Mestra</value> <value>Senha mestra</value>
<comment>Label for a master password.</comment> <comment>Label for a master password.</comment>
</data> </data>
<data name="More" xml:space="preserve"> <data name="More" xml:space="preserve">
@@ -296,7 +296,7 @@
<comment>Text to define that there are more options things to see.</comment> <comment>Text to define that there are more options things to see.</comment>
</data> </data>
<data name="MyVault" xml:space="preserve"> <data name="MyVault" xml:space="preserve">
<value>Meu Cofre</value> <value>Meu cofre</value>
<comment>The title for the vault page.</comment> <comment>The title for the vault page.</comment>
</data> </data>
<data name="Authenticator" xml:space="preserve"> <data name="Authenticator" xml:space="preserve">
@@ -342,7 +342,7 @@
<comment>Reveal a hidden value (password).</comment> <comment>Reveal a hidden value (password).</comment>
</data> </data>
<data name="ItemDeleted" xml:space="preserve"> <data name="ItemDeleted" xml:space="preserve">
<value>O item foi apagado.</value> <value>Item excluído</value>
<comment>Confirmation message after successfully deleting a login.</comment> <comment>Confirmation message after successfully deleting a login.</comment>
</data> </data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
@@ -422,7 +422,7 @@
<value>Utilize o serviço de acessibilidade do Bitwarden para autopreencher as suas credenciais entre aplicativos e a web.</value> <value>Utilize o serviço de acessibilidade do Bitwarden para autopreencher as suas credenciais entre aplicativos e a web.</value>
</data> </data>
<data name="AutofillService" xml:space="preserve"> <data name="AutofillService" xml:space="preserve">
<value>Serviço de Autopreenchimento</value> <value>Serviço de autopreenchimento</value>
</data> </data>
<data name="AvoidAmbiguousCharacters" xml:space="preserve"> <data name="AvoidAmbiguousCharacters" xml:space="preserve">
<value>Evitar Caracteres Ambíguos</value> <value>Evitar Caracteres Ambíguos</value>
@@ -468,7 +468,7 @@
<comment>Message shown when interacting with the server</comment> <comment>Message shown when interacting with the server</comment>
</data> </data>
<data name="EditItem" xml:space="preserve"> <data name="EditItem" xml:space="preserve">
<value>Editar Item</value> <value>Editar item</value>
</data> </data>
<data name="EnableAutomaticSyncing" xml:space="preserve"> <data name="EnableAutomaticSyncing" xml:space="preserve">
<value>Ativar Sincronização Automática</value> <value>Ativar Sincronização Automática</value>
@@ -556,7 +556,7 @@
<value>Tempo Limite do Cofre</value> <value>Tempo Limite do Cofre</value>
</data> </data>
<data name="VaultTimeoutAction" xml:space="preserve"> <data name="VaultTimeoutAction" xml:space="preserve">
<value>Ação de Tempo Limite do Cofre</value> <value>Ação de tempo limite do cofre</value>
</data> </data>
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve"> <data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
<value>Sair irá remover todo o acesso ao seu cofre e requer autenticação online após o período de tempo limite. Tem certeza de que deseja usar esta configuração?</value> <value>Sair irá remover todo o acesso ao seu cofre e requer autenticação online após o período de tempo limite. Tem certeza de que deseja usar esta configuração?</value>
@@ -587,7 +587,7 @@
<value>A senha mestra deve ter pelo menos {0} caracteres.</value> <value>A senha mestra deve ter pelo menos {0} caracteres.</value>
</data> </data>
<data name="MinNumbers" xml:space="preserve"> <data name="MinNumbers" xml:space="preserve">
<value>Números Mínimos</value> <value>Números mínimos</value>
<comment>Minimum numeric characters for password generator settings</comment> <comment>Minimum numeric characters for password generator settings</comment>
</data> </data>
<data name="MinSpecial" xml:space="preserve"> <data name="MinSpecial" xml:space="preserve">
@@ -651,19 +651,19 @@
<comment>Push notifications for apple products</comment> <comment>Push notifications for apple products</comment>
</data> </data>
<data name="RateTheApp" xml:space="preserve"> <data name="RateTheApp" xml:space="preserve">
<value>Avalie o Aplicativo</value> <value>Avalie o aplicativo</value>
</data> </data>
<data name="RateTheAppDescription" xml:space="preserve"> <data name="RateTheAppDescription" xml:space="preserve">
<value>Por favor considere ajudar-nos com uma boa avaliação!</value> <value>Por favor considere ajudar-nos com uma boa avaliação!</value>
</data> </data>
<data name="RegeneratePassword" xml:space="preserve"> <data name="RegeneratePassword" xml:space="preserve">
<value>Gerar Nova Senha</value> <value>Gerar nova senha</value>
</data> </data>
<data name="RetypeMasterPassword" xml:space="preserve"> <data name="RetypeMasterPassword" xml:space="preserve">
<value>Digite novamente a Senha Mestra</value> <value>Digite novamente a Senha Mestra</value>
</data> </data>
<data name="SearchVault" xml:space="preserve"> <data name="SearchVault" xml:space="preserve">
<value>Pesquisar Cofre</value> <value>Pesquisar cofre</value>
</data> </data>
<data name="Security" xml:space="preserve"> <data name="Security" xml:space="preserve">
<value>Segurança</value> <value>Segurança</value>
@@ -681,7 +681,7 @@
<value>Informação do Item</value> <value>Informação do Item</value>
</data> </data>
<data name="ItemUpdated" xml:space="preserve"> <data name="ItemUpdated" xml:space="preserve">
<value>Item atualizado.</value> <value>Item salvo</value>
</data> </data>
<data name="Submitting" xml:space="preserve"> <data name="Submitting" xml:space="preserve">
<value>Enviando...</value> <value>Enviando...</value>
@@ -799,7 +799,7 @@
<value>Itens Correspondentes</value> <value>Itens Correspondentes</value>
</data> </data>
<data name="PossibleMatchingItems" xml:space="preserve"> <data name="PossibleMatchingItems" xml:space="preserve">
<value>Itens Correspondentes Possíveis</value> <value>Itens correspondentes possíveis</value>
</data> </data>
<data name="Search" xml:space="preserve"> <data name="Search" xml:space="preserve">
<value>Pesquisar</value> <value>Pesquisar</value>
@@ -867,7 +867,7 @@
<comment>"YubiKey" is the product name and should not be translated.</comment> <comment>"YubiKey" is the product name and should not be translated.</comment>
</data> </data>
<data name="AddNewAttachment" xml:space="preserve"> <data name="AddNewAttachment" xml:space="preserve">
<value>Adicionar Novo Anexo</value> <value>Adicionar novo anexo</value>
</data> </data>
<data name="Attachments" xml:space="preserve"> <data name="Attachments" xml:space="preserve">
<value>Anexos</value> <value>Anexos</value>
@@ -961,7 +961,7 @@ A leitura será feita automaticamente.</value>
<value>URL do Servidor da API</value> <value>URL do Servidor da API</value>
</data> </data>
<data name="CustomEnvironment" xml:space="preserve"> <data name="CustomEnvironment" xml:space="preserve">
<value>Ambiente Personalizado</value> <value>Ambiente personalizado</value>
</data> </data>
<data name="CustomEnvironmentFooter" xml:space="preserve"> <data name="CustomEnvironmentFooter" xml:space="preserve">
<value>Para usuários avançados. Você pode especificar a URL de base de cada serviço independentemente.</value> <value>Para usuários avançados. Você pode especificar a URL de base de cada serviço independentemente.</value>
@@ -978,7 +978,7 @@ A leitura será feita automaticamente.</value>
<comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment> <comment>"Identity" refers to an identity server. See more context here https://en.wikipedia.org/wiki/Identity_management</comment>
</data> </data>
<data name="SelfHostedEnvironment" xml:space="preserve"> <data name="SelfHostedEnvironment" xml:space="preserve">
<value>Ambiente Auto-hospedado</value> <value>Ambiente auto-hospedado</value>
</data> </data>
<data name="SelfHostedEnvironmentFooter" xml:space="preserve"> <data name="SelfHostedEnvironmentFooter" xml:space="preserve">
<value>Especifique a URL de base da sua instalação local do Bitwarden.</value> <value>Especifique a URL de base da sua instalação local do Bitwarden.</value>
@@ -987,25 +987,25 @@ A leitura será feita automaticamente.</value>
<value>URL do Servidor</value> <value>URL do Servidor</value>
</data> </data>
<data name="WebVaultUrl" xml:space="preserve"> <data name="WebVaultUrl" xml:space="preserve">
<value>URL do Servidor do Cofre Web</value> <value>URL do servidor do Cofre Web</value>
</data> </data>
<data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve"> <data name="BitwardenAutofillServiceNotificationContentOld" xml:space="preserve">
<value>Toque nesta notificação para visualizar as credenciais do seu cofre.</value> <value>Toque nesta notificação para visualizar as credenciais do seu cofre.</value>
</data> </data>
<data name="CustomFields" xml:space="preserve"> <data name="CustomFields" xml:space="preserve">
<value>Campos Personalizados</value> <value>Campos personalizados</value>
</data> </data>
<data name="CopyNumber" xml:space="preserve"> <data name="CopyNumber" xml:space="preserve">
<value>Copiar Número</value> <value>Copiar Número</value>
</data> </data>
<data name="CopySecurityCode" xml:space="preserve"> <data name="CopySecurityCode" xml:space="preserve">
<value>Copiar Código de Segurança</value> <value>Copiar código de segurança</value>
</data> </data>
<data name="Number" xml:space="preserve"> <data name="Number" xml:space="preserve">
<value>Número</value> <value>Número</value>
</data> </data>
<data name="SecurityCode" xml:space="preserve"> <data name="SecurityCode" xml:space="preserve">
<value>Código de Segurança</value> <value>Código de segurança</value>
</data> </data>
<data name="TypeCard" xml:space="preserve"> <data name="TypeCard" xml:space="preserve">
<value>Cartão</value> <value>Cartão</value>
@@ -1017,7 +1017,7 @@ A leitura será feita automaticamente.</value>
<value>Credencial</value> <value>Credencial</value>
</data> </data>
<data name="TypeSecureNote" xml:space="preserve"> <data name="TypeSecureNote" xml:space="preserve">
<value>Nota Segura</value> <value>Nota segura</value>
</data> </data>
<data name="Address1" xml:space="preserve"> <data name="Address1" xml:space="preserve">
<value>Endereço 1</value> <value>Endereço 1</value>
@@ -1038,7 +1038,7 @@ A leitura será feita automaticamente.</value>
<value>Bandeira</value> <value>Bandeira</value>
</data> </data>
<data name="CardholderName" xml:space="preserve"> <data name="CardholderName" xml:space="preserve">
<value>Titular do Cartão</value> <value>Titular do cartão</value>
</data> </data>
<data name="CityTown" xml:space="preserve"> <data name="CityTown" xml:space="preserve">
<value>Cidade / Localidade</value> <value>Cidade / Localidade</value>
@@ -1056,10 +1056,10 @@ A leitura será feita automaticamente.</value>
<value>Dr</value> <value>Dr</value>
</data> </data>
<data name="ExpirationMonth" xml:space="preserve"> <data name="ExpirationMonth" xml:space="preserve">
<value>Mês de Vencimento</value> <value>Mês de vencimento</value>
</data> </data>
<data name="ExpirationYear" xml:space="preserve"> <data name="ExpirationYear" xml:space="preserve">
<value>Ano de Vencimento</value> <value>Ano de vencimento</value>
</data> </data>
<data name="February" xml:space="preserve"> <data name="February" xml:space="preserve">
<value>Fevereiro</value> <value>Fevereiro</value>
@@ -1384,10 +1384,10 @@ A leitura será feita automaticamente.</value>
<value>Pesquisar coleção</value> <value>Pesquisar coleção</value>
</data> </data>
<data name="SearchFileSends" xml:space="preserve"> <data name="SearchFileSends" xml:space="preserve">
<value>Pesquisar Sends de Arquivo</value> <value>Pesquisar arquivo do Sends</value>
</data> </data>
<data name="SearchTextSends" xml:space="preserve"> <data name="SearchTextSends" xml:space="preserve">
<value>Pesquisar Sends de Texto</value> <value>Pesquisar texto do Sends</value>
</data> </data>
<data name="SearchGroup" xml:space="preserve"> <data name="SearchGroup" xml:space="preserve">
<value>Pesquisar {0}</value> <value>Pesquisar {0}</value>
@@ -1471,10 +1471,10 @@ A leitura será feita automaticamente.</value>
<value>O Bitwarden permite que você compartilhe os itens do seu cofre com outros ao usar uma conta da organização. Você gostaria de visitar o site bitwarden.com para saber mais?</value> <value>O Bitwarden permite que você compartilhe os itens do seu cofre com outros ao usar uma conta da organização. Você gostaria de visitar o site bitwarden.com para saber mais?</value>
</data> </data>
<data name="ExportVault" xml:space="preserve"> <data name="ExportVault" xml:space="preserve">
<value>Exportar Cofre</value> <value>Exportar cofre</value>
</data> </data>
<data name="LockNow" xml:space="preserve"> <data name="LockNow" xml:space="preserve">
<value>Bloquear Agora</value> <value>Bloquear agora</value>
</data> </data>
<data name="PIN" xml:space="preserve"> <data name="PIN" xml:space="preserve">
<value>PIN</value> <value>PIN</value>
@@ -1483,7 +1483,7 @@ A leitura será feita automaticamente.</value>
<value>Desbloquear</value> <value>Desbloquear</value>
</data> </data>
<data name="UnlockVault" xml:space="preserve"> <data name="UnlockVault" xml:space="preserve">
<value>Desbloquear Cofre</value> <value>Desbloquear cofre</value>
</data> </data>
<data name="ThirtyMinutes" xml:space="preserve"> <data name="ThirtyMinutes" xml:space="preserve">
<value>30 minutos</value> <value>30 minutos</value>
@@ -1592,7 +1592,7 @@ A leitura será feita automaticamente.</value>
<value>Pedir para adicionar um item se um não for encontrado no seu cofre.</value> <value>Pedir para adicionar um item se um não for encontrado no seu cofre.</value>
</data> </data>
<data name="OnRestart" xml:space="preserve"> <data name="OnRestart" xml:space="preserve">
<value>Ao Reiniciar o App</value> <value>Ao reiniciar o App</value>
</data> </data>
<data name="AutofillServiceNotEnabled" xml:space="preserve"> <data name="AutofillServiceNotEnabled" xml:space="preserve">
<value>O autopreenchimento facilita o acesso seguro ao seu cofre Bitwarden a partir de outros sites e aplicativos. Parece que você não ativou um serviço de autopreenchimento para o Bitwarden. Ative o autopreenchimento para o Bitwarden na tela "Configurações".</value> <value>O autopreenchimento facilita o acesso seguro ao seu cofre Bitwarden a partir de outros sites e aplicativos. Parece que você não ativou um serviço de autopreenchimento para o Bitwarden. Ative o autopreenchimento para o Bitwarden na tela "Configurações".</value>
@@ -1614,7 +1614,7 @@ A leitura será feita automaticamente.</value>
<value>Compartilhado</value> <value>Compartilhado</value>
</data> </data>
<data name="ToggleVisibility" xml:space="preserve"> <data name="ToggleVisibility" xml:space="preserve">
<value>Alterar Visiblidade</value> <value>Alternar visibilidade</value>
</data> </data>
<data name="LoginExpired" xml:space="preserve"> <data name="LoginExpired" xml:space="preserve">
<value>A sua sessão expirou.</value> <value>A sua sessão expirou.</value>
@@ -1650,7 +1650,7 @@ A leitura será feita automaticamente.</value>
<value>Concedido</value> <value>Concedido</value>
</data> </data>
<data name="FileFormat" xml:space="preserve"> <data name="FileFormat" xml:space="preserve">
<value>Formato do Arquivo</value> <value>Formato do arquivo</value>
</data> </data>
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve"> <data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
<value>Digite sua senha mestra para exportar os dados do seu cofre.</value> <value>Digite sua senha mestra para exportar os dados do seu cofre.</value>
@@ -1768,7 +1768,7 @@ A leitura será feita automaticamente.</value>
<value>Faça o login rapidamente usando o portal de login único da sua organização. Por favor, insira o identificador da sua organização para começar.</value> <value>Faça o login rapidamente usando o portal de login único da sua organização. Por favor, insira o identificador da sua organização para começar.</value>
</data> </data>
<data name="OrgIdentifier" xml:space="preserve"> <data name="OrgIdentifier" xml:space="preserve">
<value>Identificador da Organização</value> <value>Identificador da organização</value>
</data> </data>
<data name="LoginSsoError" xml:space="preserve"> <data name="LoginSsoError" xml:space="preserve">
<value>Atualmente incapaz de acessar com SSO</value> <value>Atualmente incapaz de acessar com SSO</value>
@@ -1826,7 +1826,7 @@ A leitura será feita automaticamente.</value>
<value>O Bitwarden precisa de atenção - Ative "Sobrepor a" em "Serviços de Autopreenchimento" nas Configurações do Bitwarden</value> <value>O Bitwarden precisa de atenção - Ative "Sobrepor a" em "Serviços de Autopreenchimento" nas Configurações do Bitwarden</value>
</data> </data>
<data name="AutofillServices" xml:space="preserve"> <data name="AutofillServices" xml:space="preserve">
<value>Serviços de Autopreenchimento</value> <value>Serviços de autopreenchimento</value>
</data> </data>
<data name="InlineAutofill" xml:space="preserve"> <data name="InlineAutofill" xml:space="preserve">
<value>Usar Autopreenchimento em Linha</value> <value>Usar Autopreenchimento em Linha</value>
@@ -1835,7 +1835,7 @@ A leitura será feita automaticamente.</value>
<value>Usar autopreenchimento nativo se o IME selecionado (teclado) o suporta. Se sua configuração não for suportada (ou esta opção estiver desativada), será usada a sobreposição de Autopreenchimento padrão.</value> <value>Usar autopreenchimento nativo se o IME selecionado (teclado) o suporta. Se sua configuração não for suportada (ou esta opção estiver desativada), será usada a sobreposição de Autopreenchimento padrão.</value>
</data> </data>
<data name="Accessibility" xml:space="preserve"> <data name="Accessibility" xml:space="preserve">
<value>Usar Acessibilidade</value> <value>Usar acessibilidade</value>
</data> </data>
<data name="AccessibilityDescription" xml:space="preserve"> <data name="AccessibilityDescription" xml:space="preserve">
<value>Utilize o Serviço de Acessibilidade do Bitwarden para autopreencher as suas credenciais entre aplicativos e a web. Quando ativado, exibiremos um pop-up quando os campos de credenciais forem selecionados.</value> <value>Utilize o Serviço de Acessibilidade do Bitwarden para autopreencher as suas credenciais entre aplicativos e a web. Quando ativado, exibiremos um pop-up quando os campos de credenciais forem selecionados.</value>
@@ -1853,13 +1853,13 @@ A leitura será feita automaticamente.</value>
<value>Usar Sobrepor a</value> <value>Usar Sobrepor a</value>
</data> </data>
<data name="DrawOverDescription" xml:space="preserve"> <data name="DrawOverDescription" xml:space="preserve">
<value>Quando ativado, permite que o Serviço de Acessibilidade do Bitwarden exiba uma janela quando os campos de login forem selecionados.</value> <value>Quando ativado, permite que o Serviço de Acessibilidade do Bitwarden exiba uma janela quando os campos de "login" são selecionados.</value>
</data> </data>
<data name="DrawOverDescription2" xml:space="preserve"> <data name="DrawOverDescription2" xml:space="preserve">
<value>Se ativado, o Serviço de Acessibilidade do Bitwarden exibirá um pop-up quando os campos de login forem selecionados para ajudar a preencher automaticamente suas credenciais.</value> <value>Se ativado, o Serviço de Acessibilidade do Bitwarden exibirá um "pop-up" quando os campos de "login" são selecionados para ajudar a preencher automaticamente suas credenciais.</value>
</data> </data>
<data name="DrawOverDescription3" xml:space="preserve"> <data name="DrawOverDescription3" xml:space="preserve">
<value>Se ativado, a acessibilidade mostrará um pop-up para aumentar o Serviço de Autopreenchimento para aplicativos mais antigos que não suportam a Estrutura de Autopreenchimento do Android.</value> <value>Se ativado, a acessibilidade mostrará um "pop-up" para aumentar o Serviço de Autopreenchimento para aplicativos mais antigos que não suportam a Estrutura de Autopreenchimento do Android.</value>
</data> </data>
<data name="PersonalOwnershipSubmitError" xml:space="preserve"> <data name="PersonalOwnershipSubmitError" xml:space="preserve">
<value>Devido a uma Política Empresarial, você está restrito de salvar itens para seu cofre pessoal. Altere a opção de propriedade para uma organização e escolha entre Coleções disponíveis.</value> <value>Devido a uma Política Empresarial, você está restrito de salvar itens para seu cofre pessoal. Altere a opção de propriedade para uma organização e escolha entre Coleções disponíveis.</value>
@@ -1915,10 +1915,10 @@ A leitura será feita automaticamente.</value>
<value>O tipo de texto não está selecionado, toque para selecionar.</value> <value>O tipo de texto não está selecionado, toque para selecionar.</value>
</data> </data>
<data name="DeletionDate" xml:space="preserve"> <data name="DeletionDate" xml:space="preserve">
<value>Data de Exclusão</value> <value>Data de exclusão</value>
</data> </data>
<data name="DeletionTime" xml:space="preserve"> <data name="DeletionTime" xml:space="preserve">
<value>Hora da Exclusão</value> <value>Hora da exclusão</value>
</data> </data>
<data name="DeletionDateInfo" xml:space="preserve"> <data name="DeletionDateInfo" xml:space="preserve">
<value>O envio será eliminado permanentemente na data e hora especificadas.</value> <value>O envio será eliminado permanentemente na data e hora especificadas.</value>
@@ -1928,7 +1928,7 @@ A leitura será feita automaticamente.</value>
<value>Exclusão pendente</value> <value>Exclusão pendente</value>
</data> </data>
<data name="ExpirationDate" xml:space="preserve"> <data name="ExpirationDate" xml:space="preserve">
<value>Data de Validade</value> <value>Data de validade</value>
</data> </data>
<data name="ExpirationTime" xml:space="preserve"> <data name="ExpirationTime" xml:space="preserve">
<value>Hora da Expiração</value> <value>Hora da Expiração</value>
@@ -1954,14 +1954,14 @@ A leitura será feita automaticamente.</value>
<value>Contagem Atual de Acessos</value> <value>Contagem Atual de Acessos</value>
</data> </data>
<data name="NewPassword" xml:space="preserve"> <data name="NewPassword" xml:space="preserve">
<value>Nova Senha</value> <value>Nova senha</value>
</data> </data>
<data name="PasswordInfo" xml:space="preserve"> <data name="PasswordInfo" xml:space="preserve">
<value>Exigir opcionalmente uma senha para os usuários acessarem este Send.</value> <value>Exigir opcionalmente uma senha para os usuários acessarem este Send.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="RemovePassword" xml:space="preserve"> <data name="RemovePassword" xml:space="preserve">
<value>Remover Senha</value> <value>Remover senha</value>
</data> </data>
<data name="AreYouSureRemoveSendPassword" xml:space="preserve"> <data name="AreYouSureRemoveSendPassword" xml:space="preserve">
<value>Você tem certeza que deseja remover a senha?</value> <value>Você tem certeza que deseja remover a senha?</value>
@@ -1989,10 +1989,10 @@ A leitura será feita automaticamente.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="CopyLink" xml:space="preserve"> <data name="CopyLink" xml:space="preserve">
<value>Copiar Link</value> <value>Copiar link</value>
</data> </data>
<data name="ShareLink" xml:space="preserve"> <data name="ShareLink" xml:space="preserve">
<value>Compartilhar Link</value> <value>Compartilhar link</value>
</data> </data>
<data name="SendLink" xml:space="preserve"> <data name="SendLink" xml:space="preserve">
<value>Link do Send</value> <value>Link do Send</value>
@@ -2015,15 +2015,15 @@ A leitura será feita automaticamente.</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendDeleted" xml:space="preserve"> <data name="SendDeleted" xml:space="preserve">
<value>O Send foi excluído.</value> <value>Send excluído</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="SendUpdated" xml:space="preserve"> <data name="SendUpdated" xml:space="preserve">
<value>Send atualizado.</value> <value>Send atualizado</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="NewSendCreated" xml:space="preserve"> <data name="NewSendCreated" xml:space="preserve">
<value>Novo Send criado.</value> <value>Send criado</value>
<comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment> <comment>'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.</comment>
</data> </data>
<data name="OneDay" xml:space="preserve"> <data name="OneDay" xml:space="preserve">
@@ -2081,28 +2081,28 @@ A leitura será feita automaticamente.</value>
<value>Esta ação é protegida, para continuar por favor reinsira a sua senha mestra para verificar a sua identidade.</value> <value>Esta ação é protegida, para continuar por favor reinsira a sua senha mestra para verificar a sua identidade.</value>
</data> </data>
<data name="CaptchaRequired" xml:space="preserve"> <data name="CaptchaRequired" xml:space="preserve">
<value>Captcha Obrigatório</value> <value>Captcha obrigatório</value>
</data> </data>
<data name="CaptchaFailed" xml:space="preserve"> <data name="CaptchaFailed" xml:space="preserve">
<value>Captcha Errado. Por favor, tente novamente.</value> <value>Captcha falhou. Por favor, tente novamente.</value>
</data> </data>
<data name="UpdatedMasterPassword" xml:space="preserve"> <data name="UpdatedMasterPassword" xml:space="preserve">
<value>Senha Mestra Atualizada</value> <value>Senha mestra atualizada</value>
</data> </data>
<data name="UpdateMasterPassword" xml:space="preserve"> <data name="UpdateMasterPassword" xml:space="preserve">
<value>Atualizar Senha Mestra</value> <value>Atualizar senha mestra</value>
</data> </data>
<data name="UpdateMasterPasswordWarning" xml:space="preserve"> <data name="UpdateMasterPasswordWarning" xml:space="preserve">
<value>Sua Senha Mestra foi alterada recentemente por um administrador de sua organização. Para acessar o cofre, você precisa atualizar sua Senha Mestra agora. O processo desconectará você da sessão atual, exigindo que você inicie a sessão novamente. Sessões ativas em outros dispositivos podem continuar ativas por até uma hora.</value> <value>A sua senha mestra foi alterada recentemente por um administrador na sua organização. Para acessar o cofre, você precisa atualizar sua senha mestra agora. O processo desconectará você da sessão atual, exigindo que você inicie a sessão novamente. Sessões ativas em outros dispositivos podem continuar ativas por até uma hora.</value>
</data> </data>
<data name="UpdatingPassword" xml:space="preserve"> <data name="UpdatingPassword" xml:space="preserve">
<value>Atualizando Senha</value> <value>Atualizando senha</value>
</data> </data>
<data name="UpdatePasswordError" xml:space="preserve"> <data name="UpdatePasswordError" xml:space="preserve">
<value>No momento não é possível atualizar a senha</value> <value>No momento não é possível atualizar a senha</value>
</data> </data>
<data name="RemoveMasterPassword" xml:space="preserve"> <data name="RemoveMasterPassword" xml:space="preserve">
<value>Remover Senha Mestra</value> <value>Remover senha mestra</value>
</data> </data>
<data name="RemoveMasterPasswordWarning" xml:space="preserve"> <data name="RemoveMasterPasswordWarning" xml:space="preserve">
<value>{0} está usando o SSO com criptografia gerenciada pelo cliente. Ao continuar, isso removerá sua Senha Mestra da sua conta e exigirá o SSO para acessar.</value> <value>{0} está usando o SSO com criptografia gerenciada pelo cliente. Ao continuar, isso removerá sua Senha Mestra da sua conta e exigirá o SSO para acessar.</value>
@@ -2111,7 +2111,7 @@ A leitura será feita automaticamente.</value>
<value>Se não quiser remover sua Senha Mestra, você pode sair desta organização.</value> <value>Se não quiser remover sua Senha Mestra, você pode sair desta organização.</value>
</data> </data>
<data name="LeaveOrganization" xml:space="preserve"> <data name="LeaveOrganization" xml:space="preserve">
<value>Sair da Organização</value> <value>Sair da organização</value>
</data> </data>
<data name="LeaveOrganizationName" xml:space="preserve"> <data name="LeaveOrganizationName" xml:space="preserve">
<value>Sair de {0}?</value> <value>Sair de {0}?</value>
@@ -2168,7 +2168,7 @@ A leitura será feita automaticamente.</value>
<value>Alterada para a próxima conta disponível</value> <value>Alterada para a próxima conta disponível</value>
</data> </data>
<data name="AccountLockedSuccessfully" xml:space="preserve"> <data name="AccountLockedSuccessfully" xml:space="preserve">
<value>Conta Bloqueada</value> <value>Conta bloqueada</value>
</data> </data>
<data name="AccountLoggedOutSuccessfully" xml:space="preserve"> <data name="AccountLoggedOutSuccessfully" xml:space="preserve">
<value>Conta desconectada com sucesso</value> <value>Conta desconectada com sucesso</value>
@@ -2213,7 +2213,7 @@ A leitura será feita automaticamente.</value>
<value>Verificando</value> <value>Verificando</value>
</data> </data>
<data name="ResendCode" xml:space="preserve"> <data name="ResendCode" xml:space="preserve">
<value>Reenviar Código</value> <value>Reenviar código</value>
</data> </data>
<data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve"> <data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve">
<value>Um código de verificação foi enviado para o seu e-mail</value> <value>Um código de verificação foi enviado para o seu e-mail</value>
@@ -2316,7 +2316,7 @@ selecione Adicionar TOTP para armazenar a chave de forma segura</value>
<value>Não foi possível processar o seu pedido. Por favor, tente novamente ou entre em contato conosco.</value> <value>Não foi possível processar o seu pedido. Por favor, tente novamente ou entre em contato conosco.</value>
</data> </data>
<data name="AllowScreenCapture" xml:space="preserve"> <data name="AllowScreenCapture" xml:space="preserve">
<value>Permitir Captura de Tela</value> <value>Permitir captura de tela</value>
</data> </data>
<data name="AreYouSureYouWantToEnableScreenCapture" xml:space="preserve"> <data name="AreYouSureYouWantToEnableScreenCapture" xml:space="preserve">
<value>Tem certeza de que deseja ativar a Captura de Tela?</value> <value>Tem certeza de que deseja ativar a Captura de Tela?</value>
@@ -2414,9 +2414,9 @@ selecione Adicionar TOTP para armazenar a chave de forma segura</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Serviço</value> <value>Serviço</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2471,7 +2471,7 @@ selecione Adicionar TOTP para armazenar a chave de forma segura</value>
<value>Aviso sobre o Serviço de Acessibilidade</value> <value>Aviso sobre o Serviço de Acessibilidade</value>
</data> </data>
<data name="AccessibilityDisclosureText" xml:space="preserve"> <data name="AccessibilityDisclosureText" xml:space="preserve">
<value>O Bitwarden utiliza o Serviço de Acessibilidade para procurar campos de login em aplicativos e sites, então estabelecer os IDs de campo apropriados para digitar um nome de usuário e senha quando uma correspondência para o aplicativo ou site for encontrada. Não armazenamos nenhuma das informações que nos são apresentadas pelo serviço nem fazemos qualquer tentativa de controlar quaisquer elementos na tela além da entrada de credenciais em texto.</value> <value>O Bitwarden utiliza o Serviço de Acessibilidade para procurar campos de login em aplicativos e sites, então estabelece os IDs de campo apropriados para digitar um nome de usuário e senha quando uma correspondência para o aplicativo ou site for encontrada. Não armazenamos nenhuma das informações que nos são apresentadas pelo serviço, nem fazemos qualquer tentativa de controlar quaisquer elementos na tela além da entrada de credenciais em texto.</value>
</data> </data>
<data name="Accept" xml:space="preserve"> <data name="Accept" xml:space="preserve">
<value>Aceitar</value> <value>Aceitar</value>
@@ -2628,39 +2628,57 @@ Você deseja mudar para esta conta?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Senha mestra atual</value> <value>Senha mestra atual</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Conectado!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Aprovar com meu outro dispositivo</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Solicitar aprovação do administrador</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Aprovar com senha mestra</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Desativar usando um dispositivo público</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Lembrar deste dispositivo</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Chave de acesso</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>Chaves de acesso</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>Criado {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Aplicação</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>Você não pode editar a aplicação da chave de acesso porque ela invalidaria a chave de acesso</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>A senha não será copiada</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>A senha não será copiada para o item clonado. Deseja continuar clonando este item?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>Copiar aplicação</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Disponível para login em duas etapas</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Ajuda com Nova solicitação de senha mestra</value> <value>Ajuda com Nova solicitação de senha mestra</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>O desbloqueio pode falhar devido à memória insuficiente. Diminua suas configurações de memória KDF para resolver.</value> <value>O desbloqueio pode falhar devido à memória insuficiente. Diminua suas configurações de memória KDF ou configure o desbloqueio biométrico para resolver.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Chave da API inválida</value> <value>Chave da API inválida</value>
@@ -2668,8 +2686,26 @@ Você deseja mudar para esta conta?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Token de API inválido</value> <value>Token de API inválido</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Aprovação do administrador necessária</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>Seu pedido foi enviado para seu administrador.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Será notificado assim que for aprovado. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Problemas para acessar?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>Entrando como {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>A ação ao acabar o tempo do Cofre mudada para encerrar a sessão</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>Este item não pode ser compartilhado com a organização porque já existe um com a mesma senha.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Bloquear preenchimento automático</value> <value>Bloquear preenchimento automático</value>
@@ -2714,4 +2750,16 @@ Você deseja mudar para esta conta?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Não é possível editar várias URIs de uma vez</value> <value>Não é possível editar várias URIs de uma vez</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Login aprovado</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>Fazer login com o dispositivo deve ser configurado nas configurações do aplicativo Bitwarden. Precisa de outra opção?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Fazer login com dispositivo</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>Entrando em</value>
</data>
</root> </root>

View File

@@ -2412,9 +2412,9 @@ A leitura será efetuada automaticamente.</value>
<data name="Service" xml:space="preserve"> <data name="Service" xml:space="preserve">
<value>Serviço</value> <value>Serviço</value>
</data> </data>
<data name="AnonAddy" xml:space="preserve"> <data name="AddyIo" xml:space="preserve">
<value>AnonAddy</value> <value>addy.io</value>
<comment>"AnonAddy" is the product name and should not be translated.</comment> <comment>"addy.io" is the product name and should not be translated.</comment>
</data> </data>
<data name="FirefoxRelay" xml:space="preserve"> <data name="FirefoxRelay" xml:space="preserve">
<value>Firefox Relay</value> <value>Firefox Relay</value>
@@ -2626,39 +2626,57 @@ Deseja mudar para esta conta?</value>
<data name="CurrentMasterPassword" xml:space="preserve"> <data name="CurrentMasterPassword" xml:space="preserve">
<value>Palavra-passe mestra atual</value> <value>Palavra-passe mestra atual</value>
</data> </data>
<data name="LoggedIn" xml:space="preserve">
<value>Sessão iniciada!</value>
</data>
<data name="ApproveWithMyOtherDevice" xml:space="preserve">
<value>Aprovado com o meu outro dispositivo</value>
</data>
<data name="RequestAdminApproval" xml:space="preserve">
<value>Pedir aprovação do administrador</value>
</data>
<data name="ApproveWithMasterPassword" xml:space="preserve">
<value>Aprovar com a palavra-passe mestra</value>
</data>
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
<value>Desativar a utilização de um dispositivo público</value>
</data>
<data name="RememberThisDevice" xml:space="preserve">
<value>Lembrar este dispositivo</value>
</data>
<data name="Passkey" xml:space="preserve"> <data name="Passkey" xml:space="preserve">
<value>Passkey</value> <value>Chave de acesso</value>
</data> </data>
<data name="Passkeys" xml:space="preserve"> <data name="Passkeys" xml:space="preserve">
<value>Passkeys</value> <value>Chaves de acesso</value>
</data> </data>
<data name="CreatedX" xml:space="preserve"> <data name="CreatedX" xml:space="preserve">
<value>Created {0}</value> <value>Criada a {0}</value>
<comment>To state the date in which the cipher was created: Created 03/21/2023</comment> <comment>To state the date in which the cipher was created: Created 03/21/2023</comment>
</data> </data>
<data name="Application" xml:space="preserve"> <data name="Application" xml:space="preserve">
<value>Application</value> <value>Aplicação</value>
</data> </data>
<data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve"> <data name="YouCannotEditPasskeyApplicationBecauseItWouldInvalidateThePasskey" xml:space="preserve">
<value>You cannot edit passkey application because it would invalidate the passkey</value> <value>Não é possível editar a aplicação da chave de acesso porque invalidaria a mesma</value>
</data> </data>
<data name="PasskeyWillNotBeCopied" xml:space="preserve"> <data name="PasskeyWillNotBeCopied" xml:space="preserve">
<value>Passkey will not be copied</value> <value>A chave de acesso não será copiada</value>
</data> </data>
<data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve"> <data name="ThePasskeyWillNotBeCopiedToTheClonedItemDoYouWantToContinueCloningThisItem" xml:space="preserve">
<value>The passkey will not be copied to the cloned item. Do you want to continue cloning this item?</value> <value>A chave de acesso não será copiada para o item duplicado. Pretende ainda assim duplicar este item?</value>
</data> </data>
<data name="CopyApplication" xml:space="preserve"> <data name="CopyApplication" xml:space="preserve">
<value>Copy application</value> <value>Copiar aplicação</value>
</data> </data>
<data name="AvailableForTwoStepLogin" xml:space="preserve"> <data name="AvailableForTwoStepLogin" xml:space="preserve">
<value>Available for two-step login</value> <value>Disponível para a verificação de dois passos</value>
</data> </data>
<data name="MasterPasswordRePromptHelp" xml:space="preserve"> <data name="MasterPasswordRePromptHelp" xml:space="preserve">
<value>Ajuda para pedir novamente a palavra-passe mestra</value> <value>Ajuda para pedir novamente a palavra-passe mestra</value>
</data> </data>
<data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve"> <data name="UnlockingMayFailDueToInsufficientMemoryDecreaseYourKDFMemorySettingsToResolve" xml:space="preserve">
<value>O desbloqueio pode falhar devido a memória insuficiente. Diminua as definições de memória do KDF para resolver o problema.</value> <value>O desbloqueio pode falhar devido a memória insuficiente. Diminua as definições de memória do KDF ou configure o desbloqueio por biometria para resolver o problema.</value>
</data> </data>
<data name="InvalidAPIKey" xml:space="preserve"> <data name="InvalidAPIKey" xml:space="preserve">
<value>Chave da API inválida</value> <value>Chave da API inválida</value>
@@ -2666,8 +2684,26 @@ Deseja mudar para esta conta?</value>
<data name="InvalidAPIToken" xml:space="preserve"> <data name="InvalidAPIToken" xml:space="preserve">
<value>Token da API inválido</value> <value>Token da API inválido</value>
</data> </data>
<data name="AdminApprovalRequested" xml:space="preserve">
<value>Aprovação do administrador pedida</value>
</data>
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
<value>O seu pedido foi enviado ao seu administrador.</value>
</data>
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
<value>Será notificado quando for aprovado. </value>
</data>
<data name="TroubleLoggingIn" xml:space="preserve">
<value>Problemas a iniciar sessão?</value>
</data>
<data name="LoggingInAsX" xml:space="preserve">
<value>A iniciar sessão como {0}</value>
</data>
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
<value>Ação de tempo limite do cofre alterada para terminar sessão</value>
</data>
<data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve"> <data name="ThisItemCannotBeSharedWithTheOrganizationBecauseThereIsOneAlreadyWithTheSamePasskey" xml:space="preserve">
<value>This item cannot be shared with the organization because there is one already with the same passkey.</value> <value>Este item não pode ser partilhado com a organização porque já existe um com a mesma chave de acesso.</value>
</data> </data>
<data name="BlockAutoFill" xml:space="preserve"> <data name="BlockAutoFill" xml:space="preserve">
<value>Bloquear preenchimento automático</value> <value>Bloquear preenchimento automático</value>
@@ -2712,4 +2748,16 @@ Deseja mudar para esta conta?</value>
<data name="CannotEditMultipleURIsAtOnce" xml:space="preserve"> <data name="CannotEditMultipleURIsAtOnce" xml:space="preserve">
<value>Não é possível editar vários URIs ao mesmo tempo</value> <value>Não é possível editar vários URIs ao mesmo tempo</value>
</data> </data>
<data name="LoginApproved" xml:space="preserve">
<value>Início de sessão aprovado</value>
</data>
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
<value>O início de sessão com o dispositivo deve ser ativado nas definições da aplicação Bitwarden. Precisa de outra opção?</value>
</data>
<data name="LogInWithDevice" xml:space="preserve">
<value>Iniciar sessão com o dispositivo</value>
</data>
<data name="LoggingInOn" xml:space="preserve">
<value>A iniciar sessão em</value>
</data>
</root> </root>

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