mirror of
https://github.com/bitwarden/mobile
synced 2025-12-11 13:53:29 +00:00
Compare commits
62 Commits
feature/ma
...
feature/ma
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca95ada8e8 | ||
|
|
fa022a1a4f | ||
|
|
6011b63958 | ||
|
|
7d79b98bf2 | ||
|
|
bf35d1f2dc | ||
|
|
c01a8f8d93 | ||
|
|
8484b4af30 | ||
|
|
6b9faed45f | ||
|
|
770a1c5dfe | ||
|
|
e6635564aa | ||
|
|
6c078fe343 | ||
|
|
3a40a4cda8 | ||
|
|
9bcd2e51f7 | ||
|
|
741214a1cc | ||
|
|
aad87dfdce | ||
|
|
8fc1e9a3b9 | ||
|
|
2a8e15146e | ||
|
|
8559d5908e | ||
|
|
f60c4d94fe | ||
|
|
4bf695d18c | ||
|
|
9ccd0834ff | ||
|
|
743e71ff92 | ||
|
|
a806f17d3b | ||
|
|
436a162df2 | ||
|
|
7b579b7aa5 | ||
|
|
fe10fd7766 | ||
|
|
3c0de8aacc | ||
|
|
18d9a77f25 | ||
|
|
9eca82a62b | ||
|
|
b90e030b8f | ||
|
|
b5dbb9ae5e | ||
|
|
7a5f7c0274 | ||
|
|
9a28419a4e | ||
|
|
5803635f44 | ||
|
|
19c393842f | ||
|
|
15a306490d | ||
|
|
a4a3d31c19 | ||
|
|
f4c468e6a1 | ||
|
|
922dc683af | ||
|
|
2c346eb710 | ||
|
|
9c0908f7b7 | ||
|
|
827fbbc9ce | ||
|
|
bae1b3e891 | ||
|
|
a5888827c9 | ||
|
|
0348940a12 | ||
|
|
5b249bed67 | ||
|
|
4c2998337d | ||
|
|
7ea86380f4 | ||
|
|
406f4425c8 | ||
|
|
95ca911444 | ||
|
|
fa62510e09 | ||
|
|
65dc73495d | ||
|
|
02a2e41118 | ||
|
|
bd6f8295e7 | ||
|
|
0a0cb7093b | ||
|
|
465e5eff76 | ||
|
|
5b756aaf7a | ||
|
|
afbcb212f6 | ||
|
|
d168a7b750 | ||
|
|
a71c28536d | ||
|
|
ba5fa8a518 | ||
|
|
65ea5574de |
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@@ -32,3 +32,6 @@ src/App/Resources/AppResources.resx
|
|||||||
src/watchOS/bitwarden/bitwarden\ WatchKit\ Extension/Localization/en.lproj
|
src/watchOS/bitwarden/bitwarden\ WatchKit\ Extension/Localization/en.lproj
|
||||||
store/apple/en
|
store/apple/en
|
||||||
store/google/en
|
store/google/en
|
||||||
|
|
||||||
|
## Utils ##
|
||||||
|
store/google/Publisher
|
||||||
|
|||||||
29
.github/workflows/_cut_rc.yml
vendored
Normal file
29
.github/workflows/_cut_rc.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
name: Cut RC Branch
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cut-rc:
|
||||||
|
name: Cut RC branch
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout Branch
|
||||||
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
|
||||||
|
- name: Check if RC branch exists
|
||||||
|
run: |
|
||||||
|
remote_rc_branch_check=$(git ls-remote --heads origin rc | wc -l)
|
||||||
|
if [[ "${remote_rc_branch_check}" -gt 0 ]]; then
|
||||||
|
echo "Remote RC branch exists."
|
||||||
|
echo "Please delete current RC branch before running again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Cut RC branch
|
||||||
|
run: |
|
||||||
|
git switch --quiet --create rc
|
||||||
|
git push --quiet --set-upstream origin rc
|
||||||
360
.github/workflows/build.yml
vendored
360
.github/workflows/build.yml
vendored
@@ -9,7 +9,6 @@ on:
|
|||||||
paths-ignore:
|
paths-ignore:
|
||||||
- ".github/workflows/**"
|
- ".github/workflows/**"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs: {}
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
main_app_folder_path: src/App
|
main_app_folder_path: src/App
|
||||||
@@ -17,31 +16,30 @@ env:
|
|||||||
target-net-version: net8.0
|
target-net-version: net8.0
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# cloc:
|
cloc:
|
||||||
# name: CLOC
|
name: CLOC
|
||||||
# runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
# steps:
|
steps:
|
||||||
# - name: Checkout repo
|
- name: Checkout repo
|
||||||
# uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
|
|
||||||
# - name: Set up CLOC
|
- name: Set up CLOC
|
||||||
# run: |
|
run: |
|
||||||
# sudo apt-get update
|
sudo apt-get update
|
||||||
# sudo apt-get -y install cloc
|
sudo apt-get -y install cloc
|
||||||
|
|
||||||
# - name: Print lines of code
|
|
||||||
# run: cloc --vcs git --exclude-dir Resources,store,test,Properties --include-lang C#,XAML
|
|
||||||
|
|
||||||
|
- name: Print lines of code
|
||||||
|
run: cloc --vcs git --exclude-dir Resources,store,test,Properties --include-lang C#,XAML
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
name: Setup
|
name: Setup
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
outputs:
|
outputs:
|
||||||
rc_branch_exists: ${{ steps.branch-check.outputs.rc_branch_exists }}
|
rc_branch_exists: ${{ steps.branch-check.outputs.rc_branch_exists }}
|
||||||
hotfix_branch_exists: ${{ steps.branch-check.outputs.hotfix_branch_exists }}
|
hotfix_branch_exists: ${{ steps.branch-check.outputs.hotfix_branch_exists }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
|
|
||||||
@@ -59,7 +57,6 @@ jobs:
|
|||||||
else
|
else
|
||||||
echo "hotfix_branch_exists=0" >> $GITHUB_OUTPUT
|
echo "hotfix_branch_exists=0" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
shell: bash
|
|
||||||
|
|
||||||
android:
|
android:
|
||||||
name: Android
|
name: Android
|
||||||
@@ -93,6 +90,12 @@ jobs:
|
|||||||
- name: Setup Windows builder
|
- name: Setup Windows builder
|
||||||
run: choco install checksum --no-progress
|
run: choco install checksum --no-progress
|
||||||
|
|
||||||
|
- name: Install Microsoft OpenJDK 11
|
||||||
|
run: |
|
||||||
|
choco install microsoft-openjdk11 --no-progress
|
||||||
|
Write-Output "JAVA_HOME=$(Get-ChildItem -Path 'C:\Program Files\Microsoft\jdk*' | Select -First 1 -ExpandProperty FullName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
|
Write-Output "Java Home: $env:JAVA_HOME"
|
||||||
|
|
||||||
- name: Print environment
|
- name: Print environment
|
||||||
run: |
|
run: |
|
||||||
nuget help | grep Version
|
nuget help | grep Version
|
||||||
@@ -102,9 +105,10 @@ jobs:
|
|||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Decrypt secrets
|
- name: Decrypt secrets
|
||||||
env:
|
env:
|
||||||
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
DECRYPT_FILE_PASSWORD: ${{ secrets.DECRYPT_FILE_PASSWORD }}
|
||||||
@@ -118,6 +122,7 @@ jobs:
|
|||||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||||
--output $HOME/secrets/play_creds.json ./.github/secrets/play_creds.json.gpg
|
--output $HOME/secrets/play_creds.json ./.github/secrets/play_creds.json.gpg
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Decrypt secrets - Google Services
|
- name: Decrypt secrets - Google Services
|
||||||
if: ${{ matrix.variant == 'prod' }}
|
if: ${{ matrix.variant == 'prod' }}
|
||||||
env:
|
env:
|
||||||
@@ -126,6 +131,7 @@ jobs:
|
|||||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||||
--output ./${{ env.android_folder_path }}/google-services.json ./.github/secrets/google-services.json.gpg
|
--output ./${{ env.android_folder_path }}/google-services.json ./.github/secrets/google-services.json.gpg
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Increment version
|
- name: Increment version
|
||||||
run: |
|
run: |
|
||||||
BUILD_NUMBER=$((3000 + $GITHUB_RUN_NUMBER))
|
BUILD_NUMBER=$((3000 + $GITHUB_RUN_NUMBER))
|
||||||
@@ -143,15 +149,12 @@ jobs:
|
|||||||
|
|
||||||
- name: Restore tools
|
- name: Restore tools
|
||||||
run: dotnet tool restore
|
run: dotnet tool restore
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
# - name: Verify Format
|
# - name: Verify Format
|
||||||
# run: dotnet tool run dotnet-format --check
|
# run: dotnet tool run dotnet-format --check
|
||||||
# shell: pwsh
|
|
||||||
|
|
||||||
#- name: Run Core tests
|
# - name: Run Core tests
|
||||||
# run: dotnet test test/Core.Test/Core.Test.csproj --logger "trx;LogFileName=test-results.trx"
|
# run: dotnet test test/Core.Test/Core.Test.csproj --logger "trx;LogFileName=test-results.trx"
|
||||||
# shell: pwsh
|
|
||||||
|
|
||||||
#- name: Report test results
|
#- name: Report test results
|
||||||
# uses: dorny/test-reporter@c9b3d0e2bd2a4e96aaf424dbaa31c46b42318226 # v1.6.0
|
# uses: dorny/test-reporter@c9b3d0e2bd2a4e96aaf424dbaa31c46b42318226 # v1.6.0
|
||||||
@@ -179,7 +182,6 @@ jobs:
|
|||||||
Write-Output "########################################"
|
Write-Output "########################################"
|
||||||
|
|
||||||
dotnet build $projToBuild -c $configuration -f ${{ env.target-net-version }}-android
|
dotnet build $projToBuild -c $configuration -f ${{ env.target-net-version }}-android
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Sign Android Build
|
- name: Sign Android Build
|
||||||
env:
|
env:
|
||||||
@@ -221,10 +223,10 @@ jobs:
|
|||||||
$signedApkDestPath = $($env:GITHUB_WORKSPACE + "/$($packageName).apk");
|
$signedApkDestPath = $($env:GITHUB_WORKSPACE + "/$($packageName).apk");
|
||||||
|
|
||||||
Copy-Item $signedApkPath $signedApkDestPath
|
Copy-Item $signedApkPath $signedApkDestPath
|
||||||
shell: pwsh
|
|
||||||
- name: Upload Prod .aab artifact
|
- name: Upload Prod .aab artifact
|
||||||
if: ${{ matrix.variant == 'prod' }}
|
if: ${{ matrix.variant == 'prod' }}
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: com.x8bit.bitwarden.aab
|
name: com.x8bit.bitwarden.aab
|
||||||
path: ./com.x8bit.bitwarden.aab
|
path: ./com.x8bit.bitwarden.aab
|
||||||
@@ -232,7 +234,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Prod .apk artifact
|
- name: Upload Prod .apk artifact
|
||||||
if: ${{ matrix.variant == 'prod' }}
|
if: ${{ matrix.variant == 'prod' }}
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: com.x8bit.bitwarden.apk
|
name: com.x8bit.bitwarden.apk
|
||||||
path: ./com.x8bit.bitwarden.apk
|
path: ./com.x8bit.bitwarden.apk
|
||||||
@@ -240,7 +242,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Other .apk artifact
|
- name: Upload Other .apk artifact
|
||||||
if: ${{ matrix.variant != 'prod' }}
|
if: ${{ matrix.variant != 'prod' }}
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: com.x8bit.bitwarden.${{ matrix.variant }}.apk
|
name: com.x8bit.bitwarden.${{ matrix.variant }}.apk
|
||||||
path: ./com.x8bit.bitwarden.${{ matrix.variant }}.apk
|
path: ./com.x8bit.bitwarden.${{ matrix.variant }}.apk
|
||||||
@@ -260,7 +262,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload .apk sha file for prod
|
- name: Upload .apk sha file for prod
|
||||||
if: ${{ matrix.variant == 'prod' }}
|
if: ${{ matrix.variant == 'prod' }}
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: bw-android-apk-sha256.txt
|
name: bw-android-apk-sha256.txt
|
||||||
path: ./bw-android-apk-sha256.txt
|
path: ./bw-android-apk-sha256.txt
|
||||||
@@ -268,20 +270,20 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload .apk sha file for other
|
- name: Upload .apk sha file for other
|
||||||
if: ${{ matrix.variant != 'prod' }}
|
if: ${{ matrix.variant != 'prod' }}
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: bw-android-${{ matrix.variant }}-apk-sha256.txt
|
name: bw-android-${{ matrix.variant }}-apk-sha256.txt
|
||||||
path: ./bw-android-${{ matrix.variant }}-apk-sha256.txt
|
path: ./bw-android-${{ matrix.variant }}-apk-sha256.txt
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Deploy to Play Store
|
- name: Deploy to Play Store
|
||||||
if: ${{ matrix.variant == 'prod' && (( github.ref == 'refs/heads/master'
|
if: ${{ matrix.variant == 'prod' && (( github.ref == 'refs/heads/main'
|
||||||
&& needs.setup.outputs.rc_branch_exists == 0
|
&& needs.setup.outputs.rc_branch_exists == 0
|
||||||
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
|| github.ref == 'refs/heads/hotfix-rc' ) }}
|
|| github.ref == 'refs/heads/hotfix-rc' ) }}
|
||||||
run: |
|
run: |
|
||||||
PUBLISHER_PATH="$GITHUB_WORKSPACE/store/google/Publisher/bin/Release/netcoreapp3.1/Publisher.dll"
|
PUBLISHER_PATH="$GITHUB_WORKSPACE/store/google/Publisher/bin/Release/net7.0/Publisher.dll"
|
||||||
CREDS_PATH="$HOME/secrets/play_creds.json"
|
CREDS_PATH="$HOME/secrets/play_creds.json"
|
||||||
AAB_PATH="$GITHUB_WORKSPACE/com.x8bit.bitwarden.aab"
|
AAB_PATH="$GITHUB_WORKSPACE/com.x8bit.bitwarden.aab"
|
||||||
TRACK="internal"
|
TRACK="internal"
|
||||||
@@ -318,6 +320,12 @@ jobs:
|
|||||||
- name: Setup Windows builder
|
- name: Setup Windows builder
|
||||||
run: choco install checksum --no-progress
|
run: choco install checksum --no-progress
|
||||||
|
|
||||||
|
- name: Install Microsoft OpenJDK 11
|
||||||
|
run: |
|
||||||
|
choco install microsoft-openjdk11 --no-progress
|
||||||
|
Write-Output "JAVA_HOME=$(Get-ChildItem -Path 'C:\Program Files\Microsoft\jdk*' | Select -First 1 -ExpandProperty FullName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
|
Write-Output "Java Home: $env:JAVA_HOME"
|
||||||
|
|
||||||
- name: Print environment
|
- name: Print environment
|
||||||
run: |
|
run: |
|
||||||
nuget help | grep Version
|
nuget help | grep Version
|
||||||
@@ -327,7 +335,7 @@ jobs:
|
|||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
|
|
||||||
- name: Decrypt secrets
|
- name: Decrypt secrets
|
||||||
env:
|
env:
|
||||||
@@ -419,7 +427,6 @@ jobs:
|
|||||||
# $appCenterNode.ParentNode.RemoveChild($appCenterNode);
|
# $appCenterNode.ParentNode.RemoveChild($appCenterNode);
|
||||||
|
|
||||||
# $xml.Save($corePath);
|
# $xml.Save($corePath);
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Restore packages
|
- name: Restore packages
|
||||||
run: dotnet restore
|
run: dotnet restore
|
||||||
@@ -435,8 +442,6 @@ jobs:
|
|||||||
|
|
||||||
dotnet build $projToBuild -c $configuration -f ${{ env.target-net-version }}-android /p:CustomConstants="FDROID"
|
dotnet build $projToBuild -c $configuration -f ${{ env.target-net-version }}-android /p:CustomConstants="FDROID"
|
||||||
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Sign for F-Droid
|
- name: Sign for F-Droid
|
||||||
env:
|
env:
|
||||||
FDROID_KEYSTORE_PASSWORD: ${{ secrets.FDROID_KEYSTORE_PASSWORD }}
|
FDROID_KEYSTORE_PASSWORD: ${{ secrets.FDROID_KEYSTORE_PASSWORD }}
|
||||||
@@ -458,10 +463,9 @@ jobs:
|
|||||||
$signedApkDestPath = $($env:GITHUB_WORKSPACE + "/com.x8bit.bitwarden-fdroid.apk");
|
$signedApkDestPath = $($env:GITHUB_WORKSPACE + "/com.x8bit.bitwarden-fdroid.apk");
|
||||||
|
|
||||||
Copy-Item $signedApkPath $signedApkDestPath
|
Copy-Item $signedApkPath $signedApkDestPath
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Upload F-Droid .apk artifact
|
- name: Upload F-Droid .apk artifact
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: com.x8bit.bitwarden-fdroid.apk
|
name: com.x8bit.bitwarden-fdroid.apk
|
||||||
path: ./com.x8bit.bitwarden-fdroid.apk
|
path: ./com.x8bit.bitwarden-fdroid.apk
|
||||||
@@ -473,25 +477,23 @@ jobs:
|
|||||||
-t sha256 | Out-File -Encoding ASCII ./bw-fdroid-apk-sha256.txt
|
-t sha256 | Out-File -Encoding ASCII ./bw-fdroid-apk-sha256.txt
|
||||||
|
|
||||||
- name: Upload F-Droid sha file
|
- name: Upload F-Droid sha file
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: bw-fdroid-apk-sha256.txt
|
name: bw-fdroid-apk-sha256.txt
|
||||||
path: ./bw-fdroid-apk-sha256.txt
|
path: ./bw-fdroid-apk-sha256.txt
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
# Disabling iOS build from this branch until fixing publish/build
|
|
||||||
# really long time
|
|
||||||
ios:
|
ios:
|
||||||
name: Apple iOS
|
name: Apple iOS
|
||||||
if: github.ref == 'refs/heads/master'
|
|
||||||
runs-on: macos-13
|
runs-on: macos-13
|
||||||
needs: setup
|
needs: setup
|
||||||
env:
|
env:
|
||||||
ios_folder_path: src/App/Platforms/iOS
|
ios_folder_path: src/App/Platforms/iOS
|
||||||
app_output_name: App
|
app_output_name: App
|
||||||
|
app_ci_output_filename: App_x64_Debug
|
||||||
steps:
|
steps:
|
||||||
- name: Set XCode version
|
- name: Set XCode version
|
||||||
uses: maxim-lobanov/setup-xcode@v1
|
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||||
with:
|
with:
|
||||||
xcode-version: 15.0.1
|
xcode-version: 15.0.1
|
||||||
|
|
||||||
@@ -518,7 +520,7 @@ jobs:
|
|||||||
echo "GitHub event: $GITHUB_EVENT"
|
echo "GitHub event: $GITHUB_EVENT"
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
|
|
||||||
@@ -529,17 +531,10 @@ jobs:
|
|||||||
|
|
||||||
- name: Retrieve secrets
|
- name: Retrieve secrets
|
||||||
id: retrieve-secrets
|
id: retrieve-secrets
|
||||||
env:
|
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||||
KEYVAULT: bitwarden-ci
|
with:
|
||||||
SECRETS: |
|
keyvault: "bitwarden-ci"
|
||||||
appcenter-ios-token
|
secrets: "appcenter-ios-token"
|
||||||
run: |
|
|
||||||
for i in ${SECRETS//,/ }
|
|
||||||
do
|
|
||||||
VALUE=$(az keyvault secret show --vault-name $KEYVAULT --name $i --query value --output tsv)
|
|
||||||
echo "::add-mask::$VALUE"
|
|
||||||
echo "$i=$VALUE" >> $GITHUB_OUTPUT
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Decrypt secrets
|
- name: Decrypt secrets
|
||||||
env:
|
env:
|
||||||
@@ -568,7 +563,6 @@ jobs:
|
|||||||
./.github/secrets/dist_watch_app_extension.mobileprovision.gpg
|
./.github/secrets/dist_watch_app_extension.mobileprovision.gpg
|
||||||
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
gpg --quiet --batch --yes --decrypt --passphrase="$DECRYPT_FILE_PASSWORD" \
|
||||||
--output ./src/watchOS/bitwarden/GoogleService-Info.plist ./.github/secrets/GoogleService-Info.plist.gpg
|
--output ./src/watchOS/bitwarden/GoogleService-Info.plist ./.github/secrets/GoogleService-Info.plist.gpg
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Increment version
|
- name: Increment version
|
||||||
run: |
|
run: |
|
||||||
@@ -584,8 +578,6 @@ jobs:
|
|||||||
perl -0777 -pi.bak -e 's/<key>CFBundleVersion<\/key>\s*<string>1<\/string>/<key>CFBundleVersion<\/key>\n\t<string>'"$BUILD_NUMBER"'<\/string>/' ./src/iOS.ShareExtension/Info.plist
|
perl -0777 -pi.bak -e 's/<key>CFBundleVersion<\/key>\s*<string>1<\/string>/<key>CFBundleVersion<\/key>\n\t<string>'"$BUILD_NUMBER"'<\/string>/' ./src/iOS.ShareExtension/Info.plist
|
||||||
cd src/watchOS/bitwarden
|
cd src/watchOS/bitwarden
|
||||||
agvtool new-version -all $BUILD_NUMBER
|
agvtool new-version -all $BUILD_NUMBER
|
||||||
cd ../../..
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Update Entitlements
|
- name: Update Entitlements
|
||||||
run: |
|
run: |
|
||||||
@@ -594,8 +586,7 @@ jobs:
|
|||||||
echo "########################################"
|
echo "########################################"
|
||||||
|
|
||||||
perl -0777 -pi.bak -e 's/<key>aps-environment<\/key>\s*<string>development<\/string>/<key>aps-environment<\/key>\n\t<string>production<\/string>/' ./${{ env.ios_folder_path }}/Entitlements.plist
|
perl -0777 -pi.bak -e 's/<key>aps-environment<\/key>\s*<string>development<\/string>/<key>aps-environment<\/key>\n\t<string>production<\/string>/' ./${{ env.ios_folder_path }}/Entitlements.plist
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Set up Keychain
|
- name: Set up Keychain
|
||||||
env:
|
env:
|
||||||
KEYCHAIN_PASSWORD: ${{ secrets.IOS_KEYCHAIN_PASSWORD }}
|
KEYCHAIN_PASSWORD: ${{ secrets.IOS_KEYCHAIN_PASSWORD }}
|
||||||
@@ -611,7 +602,6 @@ jobs:
|
|||||||
security import ~/secrets/iphone-distribution-cert.p12 -k build.keychain -P $DIST_CERT_PASSWORD \
|
security import ~/secrets/iphone-distribution-cert.p12 -k build.keychain -P $DIST_CERT_PASSWORD \
|
||||||
-T /usr/bin/codesign -T /usr/bin/security
|
-T /usr/bin/codesign -T /usr/bin/security
|
||||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Set up provisioning profiles
|
- name: Set up provisioning profiles
|
||||||
run: |
|
run: |
|
||||||
@@ -642,7 +632,6 @@ jobs:
|
|||||||
|
|
||||||
WATCH_APP_EXTENSION_UUID=$(grep UUID -A1 -a $WATCH_APP_EXTENSION_PROFILE_PATH | grep -io "[-A-F0-9]\{36\}")
|
WATCH_APP_EXTENSION_UUID=$(grep UUID -A1 -a $WATCH_APP_EXTENSION_PROFILE_PATH | grep -io "[-A-F0-9]\{36\}")
|
||||||
cp $WATCH_APP_EXTENSION_PROFILE_PATH "$PROFILES_DIR_PATH/$WATCH_APP_EXTENSION_UUID.mobileprovision"
|
cp $WATCH_APP_EXTENSION_PROFILE_PATH "$PROFILES_DIR_PATH/$WATCH_APP_EXTENSION_UUID.mobileprovision"
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Restore packages
|
- name: Restore packages
|
||||||
run: dotnet restore
|
run: dotnet restore
|
||||||
@@ -658,7 +647,6 @@ jobs:
|
|||||||
echo "########################################"
|
echo "########################################"
|
||||||
echo "##### Done"
|
echo "##### Done"
|
||||||
echo "########################################"
|
echo "########################################"
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Archive Build for App Store
|
- name: Archive Build for App Store
|
||||||
run: |
|
run: |
|
||||||
@@ -666,7 +654,7 @@ jobs:
|
|||||||
Write-Output "##### Archive for Release ios-arm64
|
Write-Output "##### Archive for Release ios-arm64
|
||||||
Write-Output "########################################"
|
Write-Output "########################################"
|
||||||
|
|
||||||
dotnet publish ${{ env.main_app_project_path }} -c Release -f ${{ env.target-net-version }}-ios /p:RuntimeIdentifier=ios-arm64 /p:ArchiveOnBuild=true
|
dotnet publish ${{ env.main_app_project_path }} -c Release -f ${{ env.target-net-version }}-ios /p:RuntimeIdentifier=ios-arm64 /p:ArchiveOnBuild=true /p:MtouchUseLlvm=false
|
||||||
|
|
||||||
Write-Output "########################################"
|
Write-Output "########################################"
|
||||||
Write-Output "##### Done"
|
Write-Output "##### Done"
|
||||||
@@ -676,10 +664,10 @@ jobs:
|
|||||||
- name: Archive Build for Mobile Automation
|
- name: Archive Build for Mobile Automation
|
||||||
run: |
|
run: |
|
||||||
Write-Output "########################################"
|
Write-Output "########################################"
|
||||||
Write-Output "##### Archive Releae for iossimulator-arm64
|
Write-Output "##### Archive Debug for iossimulator-x64
|
||||||
Write-Output "########################################"
|
Write-Output "########################################"
|
||||||
|
|
||||||
dotnet publish ${{ env.main_app_project_path }} -c Release -f ${{ env.target-net-version }}-ios /p:RuntimeIdentifier=iossimulator-arm64 /p:ArchiveOnBuild=true
|
dotnet build ${{ env.main_app_project_path }} -c Debug -f ${{ env.target-net-version }}-ios /p:RuntimeIdentifier=iossimulator-x64 /p:ArchiveOnBuild=true /p:MtouchUseLlvm=false
|
||||||
|
|
||||||
Write-Output "########################################"
|
Write-Output "########################################"
|
||||||
Write-Output "##### Done"
|
Write-Output "##### Done"
|
||||||
@@ -695,16 +683,14 @@ jobs:
|
|||||||
|
|
||||||
xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath $EXPORT_PATH \
|
xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath $EXPORT_PATH \
|
||||||
-exportOptionsPlist $EXPORT_OPTIONS_PATH
|
-exportOptionsPlist $EXPORT_OPTIONS_PATH
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Export .app for Automation CI
|
- name: Export .app for Automation CI
|
||||||
run: |
|
run: |
|
||||||
ARCHIVE_PATH="./${{ env.main_app_folder_path }}/bin/Release/iossimulator-arm64/publish/${{ env.app_output_name }}.app"
|
ARCHIVE_PATH="./${{ env.main_app_folder_path }}/bin/Debug/${{ env.target-net-version }}-ios/iossimulator-x64"
|
||||||
EXPORT_PATH="./bitwarden-export"
|
EXPORT_PATH="./bitwarden-export"
|
||||||
|
|
||||||
zip -r -q ${{ env.app_output_name }}.app.zip $ARCHIVE_PATH
|
zip -r -q ${{ env.app_ci_output_filename }}.app.zip $ARCHIVE_PATH
|
||||||
mv ${{ env.app_output_name }}.app.zip $EXPORT_PATH
|
mv ${{ env.app_ci_output_filename }}.app.zip $EXPORT_PATH
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Copy all dSYMs files to upload
|
- name: Copy all dSYMs files to upload
|
||||||
run: |
|
run: |
|
||||||
@@ -717,27 +703,26 @@ jobs:
|
|||||||
cp -r -v $ARCHIVE_DSYMS_PATH $EXPORT_PATH
|
cp -r -v $ARCHIVE_DSYMS_PATH $EXPORT_PATH
|
||||||
mkdir $WATCH_DSYMS_EXPORT_PATH
|
mkdir $WATCH_DSYMS_EXPORT_PATH
|
||||||
cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH
|
cp -r -v $WATCH_ARCHIVE_DSYMS_PATH $WATCH_DSYMS_EXPORT_PATH
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Upload App Store .ipa & dSYMs artifacts
|
- name: Upload App Store .ipa & dSYMs artifacts
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: Bitwarden iOS
|
name: Bitwarden iOS
|
||||||
path: |
|
path: |
|
||||||
./bitwarden-export/${{ env.app_output_name }}.ipa
|
./bitwarden-export/Bitwarden.ipa
|
||||||
./bitwarden-export/dSYMs/*.*
|
./bitwarden-export/dSYMs/*.*
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Upload .app file for Automation CI
|
- name: Upload .app file for Automation CI
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
|
||||||
with:
|
with:
|
||||||
name: ${{ env.app_output_name }}.app.zip
|
name: ${{ env.app_ci_output_filename }}.app.zip
|
||||||
path: ./bitwarden-export/${{ env.app_output_name }}.app.zip
|
path: ./bitwarden-export/${{ env.app_ci_output_filename }}.app.zip
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Install AppCenter CLI
|
- name: Install AppCenter CLI
|
||||||
if: |
|
if: |
|
||||||
(github.ref == 'refs/heads/master'
|
(github.ref == 'refs/heads/main'
|
||||||
&& needs.setup.outputs.rc_branch_exists == 0
|
&& needs.setup.outputs.rc_branch_exists == 0
|
||||||
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
@@ -746,7 +731,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload dSYMs to App Center
|
- name: Upload dSYMs to App Center
|
||||||
if: |
|
if: |
|
||||||
(github.ref == 'refs/heads/master'
|
(github.ref == 'refs/heads/main'
|
||||||
&& needs.setup.outputs.rc_branch_exists == 0
|
&& needs.setup.outputs.rc_branch_exists == 0
|
||||||
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
@@ -754,25 +739,22 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
APPCENTER_IOS_TOKEN: ${{ steps.retrieve-secrets.outputs.appcenter-ios-token }}
|
APPCENTER_IOS_TOKEN: ${{ steps.retrieve-secrets.outputs.appcenter-ios-token }}
|
||||||
run: appcenter crashes upload-symbols -a bitwarden/bitwarden -s "./bitwarden-export/dSYMs" --token $APPCENTER_IOS_TOKEN
|
run: appcenter crashes upload-symbols -a bitwarden/bitwarden -s "./bitwarden-export/dSYMs" --token $APPCENTER_IOS_TOKEN
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Upload Watch dSYMs to Firebase Crashlytics
|
- name: Upload Watch dSYMs to Firebase Crashlytics
|
||||||
if: |
|
if: |
|
||||||
(github.ref == 'refs/heads/master'
|
(github.ref == 'refs/heads/main'
|
||||||
&& needs.setup.outputs.rc_branch_exists == 0
|
&& needs.setup.outputs.rc_branch_exists == 0
|
||||||
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
|| github.ref == 'refs/heads/hotfix-rc'
|
|| github.ref == 'refs/heads/hotfix-rc'
|
||||||
run: |
|
run: |
|
||||||
|
|
||||||
echo "########################################"
|
echo "########################################"
|
||||||
echo "##### Uploading Watch dSYMs to Firebase"
|
echo "##### Uploading Watch dSYMs to Firebase"
|
||||||
echo "########################################"
|
echo "########################################"
|
||||||
|
|
||||||
find "$HOME/Library/Developer/XCode/DerivedData" -name "upload-symbols" -exec chmod +x {} \; -exec {} -gsp "./src/watchOS/bitwarden/GoogleService-Info.plist" -p ios "./bitwarden-export/Watch_dSYMs" \;
|
find "$HOME/Library/Developer/XCode/DerivedData" -name "upload-symbols" -exec chmod +x {} \; -exec {} -gsp "./src/watchOS/bitwarden/GoogleService-Info.plist" -p ios "./bitwarden-export/Watch_dSYMs" \;
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Deploy to App Store
|
- name: Validate app in App Store
|
||||||
if: |
|
if: |
|
||||||
(github.ref == 'refs/heads/master'
|
(github.ref == 'refs/heads/master'
|
||||||
&& needs.setup.outputs.rc_branch_exists == 0
|
&& needs.setup.outputs.rc_branch_exists == 0
|
||||||
@@ -783,116 +765,116 @@ jobs:
|
|||||||
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
||||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||||
run: |
|
run: |
|
||||||
xcrun altool --upload-app --type ios --file "./bitwarden-export/${{ env.app_output_name }}.ipa" \
|
xcrun altool --validate-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \
|
||||||
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
- name: Deploy to App Store
|
||||||
# crowdin-push:
|
if: |
|
||||||
# name: Crowdin Push
|
(github.ref == 'refs/heads/main'
|
||||||
# if: github.ref == 'refs/heads/master'
|
&& needs.setup.outputs.rc_branch_exists == 0
|
||||||
# needs:
|
&& needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
# - android
|
|| (github.ref == 'refs/heads/rc' && needs.setup.outputs.hotfix_branch_exists == 0)
|
||||||
# - f-droid
|
|| github.ref == 'refs/heads/hotfix-rc'
|
||||||
# - ios
|
env:
|
||||||
# runs-on: ubuntu-20.04
|
APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }}
|
||||||
# env:
|
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||||
# _CROWDIN_PROJECT_ID: "269690"
|
run: |
|
||||||
# steps:
|
xcrun altool --upload-app --type ios --file "./bitwarden-export/Bitwarden.ipa" \
|
||||||
# - name: Checkout repo
|
--username "$APPLE_ID_USERNAME" --password "$APPLE_ID_PASSWORD"
|
||||||
# uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
|
||||||
|
|
||||||
# - name: Login to Azure - CI Subscription
|
|
||||||
# uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
|
|
||||||
# with:
|
|
||||||
# creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
|
||||||
|
|
||||||
# - name: Retrieve secrets
|
|
||||||
# id: retrieve-secrets
|
|
||||||
# env:
|
|
||||||
# KEYVAULT: bitwarden-ci
|
|
||||||
# SECRETS: |
|
|
||||||
# crowdin-api-token
|
|
||||||
# run: |
|
|
||||||
# for i in ${SECRETS//,/ }
|
|
||||||
# do
|
|
||||||
# VALUE=$(az keyvault secret show --vault-name $KEYVAULT --name $i --query value --output tsv)
|
|
||||||
# echo "::add-mask::$VALUE"
|
|
||||||
# echo "$i=$VALUE" >> $GITHUB_OUTPUT
|
|
||||||
# done
|
|
||||||
|
|
||||||
# - name: Upload Sources
|
|
||||||
# uses: crowdin/github-action@965d501f160af7b1f88aed4c29154b0caf1e94b9 # v1.9.0
|
|
||||||
# env:
|
|
||||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
# CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
|
||||||
# with:
|
|
||||||
# config: crowdin.yml
|
|
||||||
# crowdin_branch_name: master
|
|
||||||
# upload_sources: true
|
|
||||||
# upload_translations: false
|
|
||||||
|
|
||||||
|
|
||||||
# check-failures:
|
crowdin-push:
|
||||||
# name: Check for failures
|
name: Crowdin Push
|
||||||
# if: always()
|
if: github.ref == 'refs/heads/main'
|
||||||
# runs-on: ubuntu-20.04
|
needs:
|
||||||
# needs:
|
- android
|
||||||
# - cloc
|
- f-droid
|
||||||
# - android
|
- ios
|
||||||
# - f-droid
|
runs-on: ubuntu-22.04
|
||||||
# - ios
|
env:
|
||||||
# - crowdin-push
|
_CROWDIN_PROJECT_ID: "269690"
|
||||||
# steps:
|
steps:
|
||||||
# - name: Check if any job failed
|
- name: Checkout repo
|
||||||
# if: |
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
# (github.ref == 'refs/heads/master')
|
|
||||||
# || (github.ref == 'refs/heads/rc')
|
|
||||||
# || (github.ref == 'refs/heads/hotfix-rc')
|
|
||||||
# env:
|
|
||||||
# CLOC_STATUS: ${{ needs.cloc.result }}
|
|
||||||
# ANDROID_STATUS: ${{ needs.android.result }}
|
|
||||||
# F_DROID_STATUS: ${{ needs.f-droid.result }}
|
|
||||||
# IOS_STATUS: ${{ needs.ios.result }}
|
|
||||||
# CROWDIN_PUSH_STATUS: ${{ needs.crowdin-push.result }}
|
|
||||||
# run: |
|
|
||||||
# if [ "$CLOC_STATUS" = "failure" ]; then
|
|
||||||
# exit 1
|
|
||||||
# elif [ "$ANDROID_STATUS" = "failure" ]; then
|
|
||||||
# exit 1
|
|
||||||
# elif [ "$F_DROID_STATUS" = "failure" ]; then
|
|
||||||
# exit 1
|
|
||||||
# elif [ "$IOS_STATUS" = "failure" ]; then
|
|
||||||
# exit 1
|
|
||||||
# elif [ "$CROWDIN_PUSH_STATUS" = "failure" ]; then
|
|
||||||
# exit 1
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# - name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
# uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
|
uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
|
||||||
# if: failure()
|
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
|
||||||
# if: failure()
|
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||||
# env:
|
with:
|
||||||
# KEYVAULT: bitwarden-ci
|
keyvault: "bitwarden-ci"
|
||||||
# SECRETS: |
|
secrets: "crowdin-api-token"
|
||||||
# devops-alerts-slack-webhook-url
|
|
||||||
# run: |
|
|
||||||
# for i in ${SECRETS//,/ }
|
|
||||||
# do
|
|
||||||
# VALUE=$(az keyvault secret show --vault-name $KEYVAULT --name $i --query value --output tsv)
|
|
||||||
# echo "::add-mask::$VALUE"
|
|
||||||
# echo "$i=$VALUE" >> $GITHUB_OUTPUT
|
|
||||||
# done
|
|
||||||
|
|
||||||
# - name: Notify Slack on failure
|
- name: Upload Sources
|
||||||
# uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f # v2.0.0
|
uses: crowdin/github-action@965d501f160af7b1f88aed4c29154b0caf1e94b9 # v1.9.0
|
||||||
# if: failure()
|
env:
|
||||||
# env:
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }}
|
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||||
# with:
|
with:
|
||||||
# status: ${{ job.status }}
|
config: crowdin.yml
|
||||||
|
crowdin_branch_name: main
|
||||||
|
upload_sources: true
|
||||||
|
upload_translations: false
|
||||||
|
|
||||||
|
|
||||||
|
check-failures:
|
||||||
|
name: Check for failures
|
||||||
|
if: always()
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
needs:
|
||||||
|
- cloc
|
||||||
|
- android
|
||||||
|
- f-droid
|
||||||
|
- ios
|
||||||
|
- crowdin-push
|
||||||
|
steps:
|
||||||
|
- name: Check if any job failed
|
||||||
|
if: |
|
||||||
|
(github.ref == 'refs/heads/main')
|
||||||
|
|| (github.ref == 'refs/heads/rc')
|
||||||
|
|| (github.ref == 'refs/heads/hotfix-rc')
|
||||||
|
env:
|
||||||
|
CLOC_STATUS: ${{ needs.cloc.result }}
|
||||||
|
ANDROID_STATUS: ${{ needs.android.result }}
|
||||||
|
F_DROID_STATUS: ${{ needs.f-droid.result }}
|
||||||
|
IOS_STATUS: ${{ needs.ios.result }}
|
||||||
|
CROWDIN_PUSH_STATUS: ${{ needs.crowdin-push.result }}
|
||||||
|
run: |
|
||||||
|
if [ "$CLOC_STATUS" = "failure" ]; then
|
||||||
|
exit 1
|
||||||
|
elif [ "$ANDROID_STATUS" = "failure" ]; then
|
||||||
|
exit 1
|
||||||
|
elif [ "$F_DROID_STATUS" = "failure" ]; then
|
||||||
|
exit 1
|
||||||
|
elif [ "$IOS_STATUS" = "failure" ]; then
|
||||||
|
exit 1
|
||||||
|
elif [ "$CROWDIN_PUSH_STATUS" = "failure" ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Login to Azure - CI Subscription
|
||||||
|
uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
|
||||||
|
|
||||||
|
- name: Retrieve secrets
|
||||||
|
id: retrieve-secrets
|
||||||
|
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
keyvault: "bitwarden-ci"
|
||||||
|
secrets: "devops-alerts-slack-webhook-url"
|
||||||
|
|
||||||
|
- name: Notify Slack on failure
|
||||||
|
uses: act10ns/slack@ed1309ab9862e57e9e583e51c7889486b9a00b0f # v2.0.0
|
||||||
|
if: failure()
|
||||||
|
env:
|
||||||
|
SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }}
|
||||||
|
with:
|
||||||
|
status: ${{ job.status }}
|
||||||
|
|||||||
2
.github/workflows/crowdin-pull.yml
vendored
2
.github/workflows/crowdin-pull.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
|||||||
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
|
||||||
with:
|
with:
|
||||||
config: crowdin.yml
|
config: crowdin.yml
|
||||||
crowdin_branch_name: master
|
crowdin_branch_name: main
|
||||||
upload_sources: false
|
upload_sources: false
|
||||||
upload_translations: false
|
upload_translations: false
|
||||||
download_translations: true
|
download_translations: true
|
||||||
|
|||||||
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -80,7 +80,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
branch: master
|
branch: main
|
||||||
|
|
||||||
- name: Prep Bitwarden iOS release asset
|
- name: Prep Bitwarden iOS release asset
|
||||||
run: zip -r Bitwarden\ iOS.zip Bitwarden\ iOS
|
run: zip -r Bitwarden\ iOS.zip Bitwarden\ iOS
|
||||||
@@ -143,7 +143,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
workflow: build.yml
|
workflow: build.yml
|
||||||
workflow_conclusion: success
|
workflow_conclusion: success
|
||||||
branch: master
|
branch: main
|
||||||
name: com.x8bit.bitwarden-fdroid.apk
|
name: com.x8bit.bitwarden-fdroid.apk
|
||||||
|
|
||||||
- name: Set up Node
|
- name: Set up Node
|
||||||
|
|||||||
2
.github/workflows/stale-bot.yml
vendored
2
.github/workflows/stale-bot.yml
vendored
@@ -27,4 +27,4 @@ jobs:
|
|||||||
|
|
||||||
If you’re still working on this, please respond here after you’ve made the changes we’ve requested and our team will re-open it for further review.
|
If you’re still working on this, please respond here after you’ve made the changes we’ve requested and our team will re-open it for further review.
|
||||||
|
|
||||||
Please make sure to resolve any conflicts with the master branch before requesting another review.
|
Please make sure to resolve any conflicts with the main branch before requesting another review.
|
||||||
|
|||||||
1
.github/workflows/version-auto-bump.yml
vendored
1
.github/workflows/version-auto-bump.yml
vendored
@@ -37,3 +37,4 @@ jobs:
|
|||||||
uses: ./.github/workflows/version-bump.yml
|
uses: ./.github/workflows/version-bump.yml
|
||||||
with:
|
with:
|
||||||
version_number: ${{ needs.setup.outputs.version_number }}
|
version_number: ${{ needs.setup.outputs.version_number }}
|
||||||
|
secrets: inherit
|
||||||
122
.github/workflows/version-bump.yml
vendored
122
.github/workflows/version-bump.yml
vendored
@@ -1,26 +1,23 @@
|
|||||||
---
|
---
|
||||||
name: Version Bump
|
name: Version Bump
|
||||||
|
run-name: Version Bump - v${{ inputs.version_number }}
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version_number:
|
version_number:
|
||||||
description: "New Version"
|
description: "New version (example: '2024.1.0')"
|
||||||
required: true
|
required: true
|
||||||
workflow_call:
|
cut_rc_branch:
|
||||||
inputs:
|
description: "Cut RC branch?"
|
||||||
version_number:
|
default: true
|
||||||
required: true
|
type: boolean
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
bump_version:
|
bump_version:
|
||||||
name: "Create version_bump_${{ github.event.inputs.version_number }} branch"
|
name: "Bump Version to v${{ inputs.version_number }}"
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Branch
|
|
||||||
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
|
|
||||||
|
|
||||||
- name: Login to Azure - CI Subscription
|
- name: Login to Azure - CI Subscription
|
||||||
uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7
|
uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7
|
||||||
with:
|
with:
|
||||||
@@ -31,7 +28,15 @@ jobs:
|
|||||||
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
uses: bitwarden/gh-actions/get-keyvault-secrets@main
|
||||||
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,
|
||||||
|
github-pat-bitwarden-devops-bot-repo-scope"
|
||||||
|
|
||||||
|
- name: Checkout Branch
|
||||||
|
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
repository: bitwarden/mobile
|
||||||
|
|
||||||
- name: Import GPG key
|
- name: Import GPG key
|
||||||
uses: crazy-max/ghaction-import-gpg@d6f3f49f3345e29369fe57596a3ca8f94c4d2ca7 # v5.4.0
|
uses: crazy-max/ghaction-import-gpg@d6f3f49f3345e29369fe57596a3ca8f94c4d2ca7 # v5.4.0
|
||||||
@@ -42,37 +47,68 @@ jobs:
|
|||||||
git_commit_gpgsign: true
|
git_commit_gpgsign: true
|
||||||
|
|
||||||
- name: Create Version Branch
|
- name: Create Version Branch
|
||||||
run: git switch -c version_bump_${{ github.event.inputs.version_number }}
|
id: create-branch
|
||||||
|
run: |
|
||||||
|
NAME=version_bump_${{ github.ref_name }}_${{ inputs.version_number }}
|
||||||
|
git switch -c $NAME
|
||||||
|
echo "name=$NAME" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Install xmllint
|
||||||
|
run: sudo apt install -y libxml2-utils
|
||||||
|
|
||||||
|
- name: Verify input version
|
||||||
|
env:
|
||||||
|
NEW_VERSION: ${{ inputs.version_number }}
|
||||||
|
run: |
|
||||||
|
CURRENT_VERSION=$(xmllint --xpath '
|
||||||
|
string(/manifest/@*[local-name()="versionName"
|
||||||
|
and namespace-uri()="http://schemas.android.com/apk/res/android"])
|
||||||
|
' src/Android/Properties/AndroidManifest.xml)
|
||||||
|
|
||||||
|
# Error if version has not changed.
|
||||||
|
if [[ "$NEW_VERSION" == "$CURRENT_VERSION" ]]; then
|
||||||
|
echo "Version has not changed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if version is newer.
|
||||||
|
printf '%s\n' "${CURRENT_VERSION}" "${NEW_VERSION}" | sort -C -V
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Version check successful."
|
||||||
|
else
|
||||||
|
echo "Version check failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Bump Version - Android XML
|
- name: Bump Version - Android XML
|
||||||
uses: bitwarden/gh-actions/version-bump@main
|
uses: bitwarden/gh-actions/version-bump@main
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ 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@main
|
uses: bitwarden/gh-actions/version-bump@main
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ 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@main
|
uses: bitwarden/gh-actions/version-bump@main
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ 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@main
|
uses: bitwarden/gh-actions/version-bump@main
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ 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@main
|
uses: bitwarden/gh-actions/version-bump@main
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ inputs.version_number }}
|
||||||
file_path: "./src/iOS/Info.plist"
|
file_path: "src/iOS/Info.plist"
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup git
|
||||||
run: |
|
run: |
|
||||||
@@ -91,22 +127,24 @@ jobs:
|
|||||||
|
|
||||||
- name: Commit files
|
- name: Commit files
|
||||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||||
run: git commit -m "Bumped version to ${{ github.event.inputs.version_number }}" -a
|
run: git commit -m "Bumped version to ${{ inputs.version_number }}" -a
|
||||||
|
|
||||||
- name: Push changes
|
- name: Push changes
|
||||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||||
run: git push -u origin version_bump_${{ github.event.inputs.version_number }}
|
env:
|
||||||
|
PR_BRANCH: ${{ steps.create-branch.outputs.name }}
|
||||||
|
run: git push -u origin $PR_BRANCH
|
||||||
|
|
||||||
- name: Create Version PR
|
- name: Create Version PR
|
||||||
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }}
|
||||||
|
id: create-pr
|
||||||
env:
|
env:
|
||||||
PR_BRANCH: "version_bump_${{ github.event.inputs.version_number }}"
|
GH_TOKEN: ${{ steps.retrieve-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
|
||||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
PR_BRANCH: ${{ steps.create-branch.outputs.name }}
|
||||||
BASE_BRANCH: master
|
TITLE: "Bump version to ${{ inputs.version_number }}"
|
||||||
TITLE: "Bump version to ${{ github.event.inputs.version_number }}"
|
|
||||||
run: |
|
run: |
|
||||||
gh pr create --title "$TITLE" \
|
PR_URL=$(gh pr create --title "$TITLE" \
|
||||||
--base "$BASE" \
|
--base "main" \
|
||||||
--head "$PR_BRANCH" \
|
--head "$PR_BRANCH" \
|
||||||
--label "version update" \
|
--label "version update" \
|
||||||
--label "automated pr" \
|
--label "automated pr" \
|
||||||
@@ -119,4 +157,24 @@ jobs:
|
|||||||
- [X] Other
|
- [X] Other
|
||||||
|
|
||||||
## Objective
|
## Objective
|
||||||
Automated version bump to ${{ github.event.inputs.version_number }}"
|
Automated version bump to ${{ inputs.version_number }}")
|
||||||
|
echo "pr_number=${PR_URL##*/}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Approve PR
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PR_NUMBER: ${{ steps.create-pr.outputs.pr_number }}
|
||||||
|
run: gh pr review $PR_NUMBER --approve
|
||||||
|
|
||||||
|
- name: Merge PR
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.retrieve-secrets.outputs.github-pat-bitwarden-devops-bot-repo-scope }}
|
||||||
|
PR_NUMBER: ${{ steps.create-pr.outputs.pr_number }}
|
||||||
|
run: gh pr merge $PR_NUMBER --squash --auto --delete-branch
|
||||||
|
|
||||||
|
cut_rc:
|
||||||
|
name: Cut RC Branch
|
||||||
|
if: ${{ inputs.cut_rc_branch == true }}
|
||||||
|
needs: bump_version
|
||||||
|
uses: ./.github/workflows/_cut_rc.yml
|
||||||
|
secrets: inherit
|
||||||
|
|||||||
@@ -53,24 +53,26 @@
|
|||||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
|
||||||
<CreatePackage>false</CreatePackage>
|
<CreatePackage>false</CreatePackage>
|
||||||
<CodesignProvision>Automatic</CodesignProvision>
|
<CodesignProvision>Automatic</CodesignProvision>
|
||||||
<CodesignKey>iPhone Developer</CodesignKey>
|
<CodesignKey>iPhone Developer</CodesignKey>
|
||||||
<CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
|
<CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
|
||||||
<MtouchInterpreter>all</MtouchInterpreter>
|
<UseInterpreter>true</UseInterpreter>
|
||||||
<MtouchLink>None</MtouchLink>
|
<!--TODO: add argon2id load when library is built with the corresponding architecture for iOS Simulator-->
|
||||||
<!--TODO: add argon2id load when library is built with the corresponding architecture for iOS Simulator-->
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(RuntimeIdentifier)'=='Debug|net8.0-ios|ios-arm64'">
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(RuntimeIdentifier)'=='Debug|net8.0-ios|ios-arm64'">
|
||||||
<MtouchExtraArgs>-gcc_flags "-L$(ProjectDir)../../lib/ios -largon2 -force_load $(ProjectDir)../../lib/ios/libargon2.a"</MtouchExtraArgs>
|
<MtouchExtraArgs>-gcc_flags "-L$(ProjectDir)../../lib/ios -largon2 -force_load $(ProjectDir)../../lib/ios/libargon2.a"</MtouchExtraArgs>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'">
|
||||||
<CreatePackage>false</CreatePackage>
|
<CreatePackage>false</CreatePackage>
|
||||||
<CodesignProvision>Automatic:AppStore</CodesignProvision>
|
<CodesignProvision>Automatic:AppStore</CodesignProvision>
|
||||||
<CodesignKey>iPhone Distribution</CodesignKey>
|
<CodesignKey>iPhone Distribution</CodesignKey>
|
||||||
<CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
|
<CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
|
||||||
<MtouchInterpreter>all</MtouchInterpreter>
|
<UseInterpreter>true</UseInterpreter>
|
||||||
<MtouchLink>None</MtouchLink>
|
<MtouchExtraArgs>-gcc_flags "-L$(ProjectDir)../../lib/ios -largon2 -force_load $(ProjectDir)../../lib/ios/libargon2.a"</MtouchExtraArgs>
|
||||||
<MtouchExtraArgs>--weak-framework=NewsstandKit.framework/NewsstandKit --linkskip=LiteDB --linkskip=CsvHelper --linkskip=Core --linkskip=iOS.Core --linkskip=iOS.Autofill --linkskip=iOS.Extension --linkskip=iOS.ShareExtension --linkskip=App -gcc_flags "-L$(ProjectDir)../../lib/ios -largon2 -force_load $(ProjectDir)../../lib/ios/libargon2.a"</MtouchExtraArgs>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
|
||||||
|
<!--This is needed for PCLCrypto to work correctly-->
|
||||||
|
<TrimmerRootAssembly Include="System.Security.Cryptography" />
|
||||||
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AndroidNativeLibrary Include="Platforms\Android\lib\arm64-v8a\libargon2.so" />
|
<AndroidNativeLibrary Include="Platforms\Android\lib\arm64-v8a\libargon2.so" />
|
||||||
<AndroidNativeLibrary Include="Platforms\Android\lib\armeabi-v7a\libargon2.so" />
|
<AndroidNativeLibrary Include="Platforms\Android\lib\armeabi-v7a\libargon2.so" />
|
||||||
@@ -92,7 +94,7 @@
|
|||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="zxcvbn-core" Version="7.0.92" />
|
<PackageReference Include="zxcvbn-core" Version="7.0.92" />
|
||||||
<PackageReference Include="CommunityToolkit.Maui" Version="5.2.0" />
|
<PackageReference Include="CommunityToolkit.Maui" Version="5.2.0" />
|
||||||
<PackageReference Include="Plugin.Fingerprint" Version="2.1.5" />
|
<PackageReference Include="Plugin.Fingerprint" Version="3.0.0-beta.1" />
|
||||||
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="2.88.4-preview.84" />
|
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="2.88.4-preview.84" />
|
||||||
<PackageReference Include="SkiaSharp.Views.Maui.Controls.Compatibility" Version="2.88.4-preview.84" />
|
<PackageReference Include="SkiaSharp.Views.Maui.Controls.Compatibility" Version="2.88.4-preview.84" />
|
||||||
<PackageReference Include="FFImageLoadingCompat.Maui" Version="0.1.1" />
|
<PackageReference Include="FFImageLoadingCompat.Maui" Version="0.1.1" />
|
||||||
@@ -115,7 +117,6 @@
|
|||||||
<Folder Include="Platforms\Android\Utilities\" />
|
<Folder Include="Platforms\Android\Utilities\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
|
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
|
||||||
<PackageReference Include="Plugin.CurrentActivity" Version="2.1.0.4" />
|
|
||||||
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.18" />
|
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.18" />
|
||||||
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.7.2.1" />
|
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.7.2.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -219,8 +220,8 @@
|
|||||||
<WatchAppBuildPath Condition=" '$(Configuration)' == 'Debug' ">$(Home)/Library/Developer/Xcode/DerivedData/bitwarden-acgkbpwvmebfiofokotvoerzkqcl/Build/Products</WatchAppBuildPath>
|
<WatchAppBuildPath Condition=" '$(Configuration)' == 'Debug' ">$(Home)/Library/Developer/Xcode/DerivedData/bitwarden-acgkbpwvmebfiofokotvoerzkqcl/Build/Products</WatchAppBuildPath>
|
||||||
<WatchAppBuildPath Condition=" '$(Configuration)' != 'Debug' ">$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..'))/watchOS/bitwarden.xcarchive/Products/Applications/bitwarden.app/Watch</WatchAppBuildPath>
|
<WatchAppBuildPath Condition=" '$(Configuration)' != 'Debug' ">$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..'))/watchOS/bitwarden.xcarchive/Products/Applications/bitwarden.app/Watch</WatchAppBuildPath>
|
||||||
<WatchAppBundle>Bitwarden.app</WatchAppBundle>
|
<WatchAppBundle>Bitwarden.app</WatchAppBundle>
|
||||||
<WatchAppConfiguration Condition="'$(RuntimeIdentifier)'!='ios-arm64'"> >watchsimulator</WatchAppConfiguration>
|
<WatchAppConfiguration Condition="'$(RuntimeIdentifier)'!='ios-arm64'">watchsimulator</WatchAppConfiguration>
|
||||||
<WatchAppConfiguration Condition="'$(RuntimeIdentifier)'=='ios-arm64'"> >watchos</WatchAppConfiguration>
|
<WatchAppConfiguration Condition="'$(RuntimeIdentifier)'=='ios-arm64'">watchos</WatchAppConfiguration>
|
||||||
<WatchAppBundleFullPath Condition=" '$(Configuration)' == 'Debug' ">$(WatchAppBuildPath)/$(Configuration)-$(WatchAppConfiguration)/$(WatchAppBundle)</WatchAppBundleFullPath>
|
<WatchAppBundleFullPath Condition=" '$(Configuration)' == 'Debug' ">$(WatchAppBuildPath)/$(Configuration)-$(WatchAppConfiguration)/$(WatchAppBundle)</WatchAppBundleFullPath>
|
||||||
<WatchAppBundleFullPath Condition=" '$(Configuration)' != 'Debug' ">$(WatchAppBuildPath)/$(WatchAppBundle)</WatchAppBundleFullPath>
|
<WatchAppBundleFullPath Condition=" '$(Configuration)' != 'Debug' ">$(WatchAppBuildPath)/$(WatchAppBundle)</WatchAppBundleFullPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ namespace Bit.Droid.Accessibility
|
|||||||
new Browser("org.bromite.chromium", "url_bar"),
|
new Browser("org.bromite.chromium", "url_bar"),
|
||||||
new Browser("org.chromium.chrome", "url_bar"),
|
new Browser("org.chromium.chrome", "url_bar"),
|
||||||
new Browser("org.codeaurora.swe.browser", "url_bar"),
|
new Browser("org.codeaurora.swe.browser", "url_bar"),
|
||||||
|
new Browser("org.cromite.cromite", "url_bar"),
|
||||||
new Browser("org.gnu.icecat", "url_bar_title,mozac_browser_toolbar_url_view"), // 2nd = Anticipation
|
new Browser("org.gnu.icecat", "url_bar_title,mozac_browser_toolbar_url_view"), // 2nd = Anticipation
|
||||||
new Browser("org.mozilla.fenix", "mozac_browser_toolbar_url_view"),
|
new Browser("org.mozilla.fenix", "mozac_browser_toolbar_url_view"),
|
||||||
new Browser("org.mozilla.fenix.nightly", "mozac_browser_toolbar_url_view"), // [DEPRECATED ENTRY]
|
new Browser("org.mozilla.fenix.nightly", "mozac_browser_toolbar_url_view"), // [DEPRECATED ENTRY]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?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.10.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.12.1" android:installLocation="internalOnly" package="com.x8bit.bitwarden">
|
||||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
|
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
|
||||||
<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" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ namespace Bit.Droid.Autofill
|
|||||||
"org.bromite.chromium",
|
"org.bromite.chromium",
|
||||||
"org.chromium.chrome",
|
"org.chromium.chrome",
|
||||||
"org.codeaurora.swe.browser",
|
"org.codeaurora.swe.browser",
|
||||||
|
"org.cromite.cromite",
|
||||||
"org.gnu.icecat",
|
"org.gnu.icecat",
|
||||||
"org.mozilla.fenix",
|
"org.mozilla.fenix",
|
||||||
"org.mozilla.fenix.nightly",
|
"org.mozilla.fenix.nightly",
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ using Bit.Core.Abstractions;
|
|||||||
using Bit.Core.Services;
|
using Bit.Core.Services;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Bit.Droid.Services;
|
using Bit.Droid.Services;
|
||||||
using Plugin.CurrentActivity;
|
|
||||||
using Plugin.Fingerprint;
|
using Plugin.Fingerprint;
|
||||||
using Xamarin.Android.Net;
|
using Xamarin.Android.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
@@ -101,7 +100,6 @@ namespace Bit.Droid
|
|||||||
{
|
{
|
||||||
base.OnCreate();
|
base.OnCreate();
|
||||||
Bootstrap();
|
Bootstrap();
|
||||||
CrossCurrentActivity.Current.Init(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnProviderInstallFailed(int errorCode, Intent recoveryIntent)
|
public void OnProviderInstallFailed(int errorCode, Intent recoveryIntent)
|
||||||
@@ -136,7 +134,7 @@ namespace Bit.Droid
|
|||||||
// });
|
// });
|
||||||
// ZXing.Net.Mobile.Forms.Android.Platform.Init();
|
// ZXing.Net.Mobile.Forms.Android.Platform.Init();
|
||||||
//});
|
//});
|
||||||
CrossFingerprint.SetCurrentActivityResolver(() => CrossCurrentActivity.Current.Activity);
|
CrossFingerprint.SetCurrentActivityResolver(() => Microsoft.Maui.ApplicationModel.Platform.CurrentActivity);
|
||||||
|
|
||||||
var preferencesStorage = new PreferencesStorageService(null);
|
var preferencesStorage = new PreferencesStorageService(null);
|
||||||
var localAppDataFolderPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
|
var localAppDataFolderPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_screen_round</item>
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_screen_round</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="BaseTheme" parent="Theme.AppCompat">
|
<style name="BaseTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
|
||||||
<item name="windowNoTitle">true</item>
|
<item name="windowNoTitle">true</item>
|
||||||
<item name="windowActionBar">false</item>
|
<item name="windowActionBar">false</item>
|
||||||
<item name="colorPrimaryDark">@color/dark_notificationBar</item>
|
<item name="colorPrimaryDark">@color/dark_notificationBar</item>
|
||||||
@@ -18,10 +18,6 @@
|
|||||||
<item name="android:colorActivatedHighlight">@android:color/transparent</item>
|
<item name="android:colorActivatedHighlight">@android:color/transparent</item>
|
||||||
<item name="android:textCursorDrawable">@null</item>
|
<item name="android:textCursorDrawable">@null</item>
|
||||||
<item name="popupTheme">@style/ThemeOverlay.AppCompat</item>
|
<item name="popupTheme">@style/ThemeOverlay.AppCompat</item>
|
||||||
<item name="buttonStyle">@style/ButtonStyle</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="ButtonStyle" parent="Widget.AppCompat.Button">
|
|
||||||
<item name="android:textAllCaps">false</item>
|
<item name="android:textAllCaps">false</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -20,11 +20,6 @@
|
|||||||
<item name="android:colorActivatedHighlight">@android:color/transparent</item>
|
<item name="android:colorActivatedHighlight">@android:color/transparent</item>
|
||||||
<item name="android:textCursorDrawable">@null</item>
|
<item name="android:textCursorDrawable">@null</item>
|
||||||
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
<item name="buttonStyle">@style/ButtonStyle</item>
|
|
||||||
<item name="android:textAllCaps">false</item>
|
<item name="android:textAllCaps">false</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="ButtonStyle" parent="Widget.AppCompat.Button">
|
|
||||||
<item name="android:textAllCaps">false</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -236,6 +236,9 @@
|
|||||||
<compatibility-package
|
<compatibility-package
|
||||||
android:name="org.codeaurora.swe.browser"
|
android:name="org.codeaurora.swe.browser"
|
||||||
android:maxLongVersionCode="10000000000"/>
|
android:maxLongVersionCode="10000000000"/>
|
||||||
|
<compatibility-package
|
||||||
|
android:name="org.cromite.cromite"
|
||||||
|
android:maxLongVersionCode="10000000000"/>
|
||||||
<compatibility-package
|
<compatibility-package
|
||||||
android:name="org.gnu.icecat"
|
android:name="org.gnu.icecat"
|
||||||
android:maxLongVersionCode="10000000000"/>
|
android:maxLongVersionCode="10000000000"/>
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ using Bit.Core.Enums;
|
|||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Bit.Droid.Autofill;
|
using Bit.Droid.Autofill;
|
||||||
using Plugin.CurrentActivity;
|
|
||||||
using Application = Android.App.Application;
|
using Application = Android.App.Application;
|
||||||
|
|
||||||
namespace Bit.Droid.Services
|
namespace Bit.Droid.Services
|
||||||
@@ -46,7 +45,7 @@ namespace Bit.Droid.Services
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var afm = (AutofillManager)activity.GetSystemService(
|
var afm = (AutofillManager)activity.GetSystemService(
|
||||||
Java.Lang.Class.FromType(typeof(AutofillManager)));
|
Java.Lang.Class.FromType(typeof(AutofillManager)));
|
||||||
return afm.IsEnabled && afm.HasEnabledAutofillServices;
|
return afm.IsEnabled && afm.HasEnabledAutofillServices;
|
||||||
@@ -65,7 +64,7 @@ namespace Bit.Droid.Services
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var type = Java.Lang.Class.FromType(typeof(AutofillManager));
|
var type = Java.Lang.Class.FromType(typeof(AutofillManager));
|
||||||
var manager = activity.GetSystemService(type) as AutofillManager;
|
var manager = activity.GetSystemService(type) as AutofillManager;
|
||||||
return manager.IsAutofillSupported;
|
return manager.IsAutofillSupported;
|
||||||
@@ -78,7 +77,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public void Autofill(CipherView cipher)
|
public void Autofill(CipherView cipher)
|
||||||
{
|
{
|
||||||
var activity = CrossCurrentActivity.Current.Activity as MauiAppCompatActivity;
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity as MauiAppCompatActivity;
|
||||||
if (activity == null)
|
if (activity == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -170,7 +169,7 @@ namespace Bit.Droid.Services
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var type = Java.Lang.Class.FromType(typeof(AutofillManager));
|
var type = Java.Lang.Class.FromType(typeof(AutofillManager));
|
||||||
var manager = activity.GetSystemService(type) as AutofillManager;
|
var manager = activity.GetSystemService(type) as AutofillManager;
|
||||||
manager.DisableAutofillServices();
|
manager.DisableAutofillServices();
|
||||||
|
|||||||
@@ -41,13 +41,13 @@ namespace Bit.Droid.Services
|
|||||||
JavaSystem.LoadLibrary("argon2");
|
JavaSystem.LoadLibrary("argon2");
|
||||||
int keySize = 32;
|
int keySize = 32;
|
||||||
var key = new byte[keySize];
|
var key = new byte[keySize];
|
||||||
//argon2id_hash_raw(iterations, memory, parallelism,
|
argon2id_hash_raw(iterations, memory, parallelism,
|
||||||
// password, password.Length, salt, salt.Length, key, key.Length);
|
password, password.Length, salt, salt.Length, key, key.Length);
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
//[DllImport("argon2", EntryPoint = "argon2id_hash_raw")]
|
[DllImport("argon2", EntryPoint = "argon2id_hash_raw")]
|
||||||
//private static extern int argon2id_hash_raw(int timeCost, int memoryCost, int parallelism,
|
private static extern int argon2id_hash_raw(int timeCost, int memoryCost, int parallelism,
|
||||||
// byte[] pwd, int pwdlen, byte[] salt, int saltlen, byte[] hash, int hashlen);
|
byte[] pwd, int pwdlen, byte[] salt, int saltlen, byte[] hash, int hashlen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ using Bit.App.Utilities.Prompts;
|
|||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.App.Droid.Utilities;
|
using Bit.App.Droid.Utilities;
|
||||||
using Plugin.CurrentActivity;
|
|
||||||
using Microsoft.Maui.Controls.Compatibility.Platform.Android;
|
using Microsoft.Maui.Controls.Compatibility.Platform.Android;
|
||||||
using Resource = Bit.Core.Resource;
|
using Resource = Bit.Core.Resource;
|
||||||
using Application = Android.App.Application;
|
using Application = Android.App.Application;
|
||||||
@@ -66,7 +65,7 @@ namespace Bit.Droid.Services
|
|||||||
_toast.Dispose();
|
_toast.Dispose();
|
||||||
_toast = null;
|
_toast = null;
|
||||||
}
|
}
|
||||||
_toast = Android.Widget.Toast.MakeText(CrossCurrentActivity.Current.Activity, text,
|
_toast = Android.Widget.Toast.MakeText(Microsoft.Maui.ApplicationModel.Platform.CurrentActivity, text,
|
||||||
longDuration ? ToastLength.Long : ToastLength.Short);
|
longDuration ? ToastLength.Long : ToastLength.Short);
|
||||||
_toast.Show();
|
_toast.Show();
|
||||||
}
|
}
|
||||||
@@ -79,7 +78,7 @@ namespace Bit.Droid.Services
|
|||||||
// https://developer.android.com/reference/android/content/pm/PackageManager#getLaunchIntentSenderForPackage(java.lang.String)
|
// https://developer.android.com/reference/android/content/pm/PackageManager#getLaunchIntentSenderForPackage(java.lang.String)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var activity = CrossCurrentActivity.Current.Activity;
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
appName = appName.Replace("androidapp://", string.Empty);
|
appName = appName.Replace("androidapp://", string.Empty);
|
||||||
var launchIntentSender = activity?.PackageManager?.GetLaunchIntentSenderForPackage(appName);
|
var launchIntentSender = activity?.PackageManager?.GetLaunchIntentSenderForPackage(appName);
|
||||||
launchIntentSender?.SendIntent(activity, Result.Ok, null, null, null);
|
launchIntentSender?.SendIntent(activity, Result.Ok, null, null, null);
|
||||||
@@ -93,7 +92,7 @@ namespace Bit.Droid.Services
|
|||||||
await HideLoadingAsync();
|
await HideLoadingAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
var activity = CrossCurrentActivity.Current.Activity;
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var inflater = (LayoutInflater)activity.GetSystemService(Context.LayoutInflaterService);
|
var inflater = (LayoutInflater)activity.GetSystemService(Context.LayoutInflaterService);
|
||||||
var dialogView = inflater.Inflate(Resource.Layout.progress_dialog_layout, null);
|
var dialogView = inflater.Inflate(Resource.Layout.progress_dialog_layout, null);
|
||||||
|
|
||||||
@@ -159,7 +158,7 @@ namespace Bit.Droid.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Finally if all else fails, let's see if current activity is MainActivity
|
// Finally if all else fails, let's see if current activity is MainActivity
|
||||||
if (CrossCurrentActivity.Current.Activity is MainActivity activity && IsAlive(activity))
|
if (Microsoft.Maui.ApplicationModel.Platform.CurrentActivity is MainActivity activity && IsAlive(activity))
|
||||||
{
|
{
|
||||||
activity.RunOnUiThread(actionDismiss);
|
activity.RunOnUiThread(actionDismiss);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@@ -193,7 +192,7 @@ namespace Bit.Droid.Services
|
|||||||
string text = null, string okButtonText = null, string cancelButtonText = null,
|
string text = null, string okButtonText = null, string cancelButtonText = null,
|
||||||
bool numericKeyboard = false, bool autofocus = true, bool password = false)
|
bool numericKeyboard = false, bool autofocus = true, bool password = false)
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
if (activity == null)
|
if (activity == null)
|
||||||
{
|
{
|
||||||
return Task.FromResult<string>(null);
|
return Task.FromResult<string>(null);
|
||||||
@@ -250,7 +249,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public Task<ValidatablePromptResponse?> DisplayValidatablePromptAsync(ValidatablePromptConfig config)
|
public Task<ValidatablePromptResponse?> DisplayValidatablePromptAsync(ValidatablePromptConfig config)
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
if (activity == null)
|
if (activity == null)
|
||||||
{
|
{
|
||||||
return Task.FromResult<ValidatablePromptResponse?>(null);
|
return Task.FromResult<ValidatablePromptResponse?>(null);
|
||||||
@@ -327,7 +326,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public void RateApp()
|
public void RateApp()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var rateIntent = RateIntentForUrl("market://details", activity);
|
var rateIntent = RateIntentForUrl("market://details", activity);
|
||||||
@@ -360,14 +359,14 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public bool SupportsNfc()
|
public bool SupportsNfc()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var manager = activity.GetSystemService(Context.NfcService) as NfcManager;
|
var manager = activity.GetSystemService(Context.NfcService) as NfcManager;
|
||||||
return manager.DefaultAdapter?.IsEnabled ?? false;
|
return manager.DefaultAdapter?.IsEnabled ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SupportsCamera()
|
public bool SupportsCamera()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
return activity.PackageManager.HasSystemFeature(PackageManager.FeatureCamera);
|
return activity.PackageManager.HasSystemFeature(PackageManager.FeatureCamera);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,7 +382,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public Task<string> DisplayAlertAsync(string title, string message, string cancel, params string[] buttons)
|
public Task<string> DisplayAlertAsync(string title, string message, string cancel, params string[] buttons)
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
if (activity == null)
|
if (activity == null)
|
||||||
{
|
{
|
||||||
return Task.FromResult<string>(null);
|
return Task.FromResult<string>(null);
|
||||||
@@ -464,7 +463,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public void OpenAccessibilityOverlayPermissionSettings()
|
public void OpenAccessibilityOverlayPermissionSettings()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var intent = new Intent(Settings.ActionManageOverlayPermission);
|
var intent = new Intent(Settings.ActionManageOverlayPermission);
|
||||||
@@ -495,7 +494,7 @@ namespace Bit.Droid.Services
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var intent = new Intent(Settings.ActionAccessibilitySettings);
|
var intent = new Intent(Settings.ActionAccessibilitySettings);
|
||||||
activity.StartActivity(intent);
|
activity.StartActivity(intent);
|
||||||
}
|
}
|
||||||
@@ -504,7 +503,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public void OpenAutofillSettings()
|
public void OpenAutofillSettings()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var intent = new Intent(Settings.ActionRequestSetAutofillService);
|
var intent = new Intent(Settings.ActionRequestSetAutofillService);
|
||||||
@@ -535,7 +534,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public void CloseMainApp()
|
public void CloseMainApp()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
if (activity == null)
|
if (activity == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -574,7 +573,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public float GetSystemFontSizeScale()
|
public float GetSystemFontSizeScale()
|
||||||
{
|
{
|
||||||
var activity = CrossCurrentActivity.Current?.Activity as MainActivity;
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity as MainActivity;
|
||||||
return activity?.Resources?.Configuration?.FontScale ?? 1;
|
return activity?.Resources?.Configuration?.FontScale ?? 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -585,7 +584,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public async Task SetScreenCaptureAllowedAsync()
|
public async Task SetScreenCaptureAllowedAsync()
|
||||||
{
|
{
|
||||||
var activity = CrossCurrentActivity.Current?.Activity;
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
if (await _stateService.GetScreenCaptureAllowedAsync())
|
if (await _stateService.GetScreenCaptureAllowedAsync())
|
||||||
{
|
{
|
||||||
activity.RunOnUiThread(() => activity.Window.ClearFlags(WindowManagerFlags.Secure));
|
activity.RunOnUiThread(() => activity.Window.ClearFlags(WindowManagerFlags.Secure));
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ using AndroidX.Core.Content;
|
|||||||
using Bit.Core.Resources.Localization;
|
using Bit.Core.Resources.Localization;
|
||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Plugin.CurrentActivity;
|
|
||||||
using FileProvider = AndroidX.Core.Content.FileProvider;
|
using FileProvider = AndroidX.Core.Content.FileProvider;
|
||||||
|
|
||||||
namespace Bit.Droid.Services
|
namespace Bit.Droid.Services
|
||||||
@@ -43,7 +42,7 @@ namespace Bit.Droid.Services
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var intent = BuildOpenFileIntent(fileData, fileName);
|
var intent = BuildOpenFileIntent(fileData, fileName);
|
||||||
if (intent == null)
|
if (intent == null)
|
||||||
{
|
{
|
||||||
@@ -60,7 +59,7 @@ namespace Bit.Droid.Services
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var intent = BuildOpenFileIntent(new byte[0], string.Concat("opentest_", fileName));
|
var intent = BuildOpenFileIntent(new byte[0], string.Concat("opentest_", fileName));
|
||||||
if (intent == null)
|
if (intent == null)
|
||||||
{
|
{
|
||||||
@@ -87,7 +86,7 @@ namespace Bit.Droid.Services
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var cachePath = activity.CacheDir;
|
var cachePath = activity.CacheDir;
|
||||||
var filePath = Path.Combine(cachePath.Path, fileName);
|
var filePath = Path.Combine(cachePath.Path, fileName);
|
||||||
File.WriteAllBytes(filePath, fileData);
|
File.WriteAllBytes(filePath, fileData);
|
||||||
@@ -114,7 +113,7 @@ namespace Bit.Droid.Services
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
|
|
||||||
if (contentUri != null)
|
if (contentUri != null)
|
||||||
{
|
{
|
||||||
@@ -162,7 +161,7 @@ namespace Bit.Droid.Services
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DeleteDir(CrossCurrentActivity.Current.Activity.CacheDir);
|
DeleteDir(Microsoft.Maui.ApplicationModel.Platform.CurrentActivity?.CacheDir);
|
||||||
await _stateService.SetLastFileCacheClearAsync(DateTime.UtcNow);
|
await _stateService.SetLastFileCacheClearAsync(DateTime.UtcNow);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
@@ -170,7 +169,7 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
public Task SelectFileAsync()
|
public Task SelectFileAsync()
|
||||||
{
|
{
|
||||||
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
var activity = (MainActivity)Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
var hasStorageWritePermission = !_cameraPermissionsDenied &&
|
var hasStorageWritePermission = !_cameraPermissionsDenied &&
|
||||||
HasPermission(Manifest.Permission.WriteExternalStorage);
|
HasPermission(Manifest.Permission.WriteExternalStorage);
|
||||||
var additionalIntents = new List<IParcelable>();
|
var additionalIntents = new List<IParcelable>();
|
||||||
@@ -249,20 +248,30 @@ namespace Bit.Droid.Services
|
|||||||
|
|
||||||
private bool HasPermission(string permission)
|
private bool HasPermission(string permission)
|
||||||
{
|
{
|
||||||
return ContextCompat.CheckSelfPermission(
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
CrossCurrentActivity.Current.Activity, permission) == Permission.Granted;
|
if (activity != null)
|
||||||
|
{
|
||||||
|
return ContextCompat.CheckSelfPermission(activity, permission) == Permission.Granted;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AskPermission(string permission)
|
private void AskPermission(string permission)
|
||||||
{
|
{
|
||||||
ActivityCompat.RequestPermissions(CrossCurrentActivity.Current.Activity, new string[] { permission },
|
var activity = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
|
||||||
Core.Constants.SelectFilePermissionRequestCode);
|
if (activity != null)
|
||||||
|
{
|
||||||
|
ActivityCompat.RequestPermissions(activity, new string[] { permission }, Core.Constants.SelectFilePermissionRequestCode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<IParcelable> GetCameraIntents(Android.Net.Uri outputUri)
|
private List<IParcelable> GetCameraIntents(Android.Net.Uri outputUri)
|
||||||
{
|
{
|
||||||
var intents = new List<IParcelable>();
|
var intents = new List<IParcelable>();
|
||||||
var pm = CrossCurrentActivity.Current.Activity.PackageManager;
|
var pm = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity?.PackageManager;
|
||||||
var captureIntent = new Intent(MediaStore.ActionImageCapture);
|
var captureIntent = new Intent(MediaStore.ActionImageCapture);
|
||||||
var listCam = pm.QueryIntentActivities(captureIntent, 0);
|
var listCam = pm.QueryIntentActivities(captureIntent, 0);
|
||||||
foreach (var res in listCam)
|
foreach (var res in listCam)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>com.8bit.bitwarden</string>
|
<string>com.8bit.bitwarden</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>2023.9.2</string>
|
<string>2023.12.1</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>CFBundleIconName</key>
|
<key>CFBundleIconName</key>
|
||||||
|
|||||||
@@ -463,6 +463,7 @@ namespace Bit.App
|
|||||||
{
|
{
|
||||||
UpdateThemeAsync();
|
UpdateThemeAsync();
|
||||||
};
|
};
|
||||||
|
_isResumed = true;
|
||||||
MainPage = new NavigationPage(new HomePage(Options));
|
MainPage = new NavigationPage(new HomePage(Options));
|
||||||
_accountsManager.NavigateOnAccountChangeAsync().FireAndForget();
|
_accountsManager.NavigateOnAccountChangeAsync().FireAndForget();
|
||||||
ServiceContainer.Resolve<MobilePlatformUtilsService>("platformUtilsService").Init();
|
ServiceContainer.Resolve<MobilePlatformUtilsService>("platformUtilsService").Init();
|
||||||
|
|||||||
@@ -58,10 +58,6 @@
|
|||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Text="{Binding AccountView.Email}"
|
Text="{Binding AccountView.Email}"
|
||||||
|
|||||||
@@ -1,68 +1,10 @@
|
|||||||
using System;
|
namespace Bit.App.Controls
|
||||||
using Bit.App.Pages;
|
|
||||||
using Bit.App.Utilities;
|
|
||||||
using Bit.Core.Models.View;
|
|
||||||
using Bit.Core.Utilities;
|
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Controls
|
|
||||||
{
|
{
|
||||||
public partial class AuthenticatorViewCell : ExtendedGrid
|
public partial class AuthenticatorViewCell : ExtendedGrid
|
||||||
{
|
{
|
||||||
public static readonly BindableProperty CipherProperty = BindableProperty.Create(
|
|
||||||
nameof(Cipher), typeof(CipherView), typeof(AuthenticatorViewCell), default(CipherView), BindingMode.TwoWay);
|
|
||||||
|
|
||||||
public static readonly BindableProperty WebsiteIconsEnabledProperty = BindableProperty.Create(
|
|
||||||
nameof(WebsiteIconsEnabled), typeof(bool?), typeof(AuthenticatorViewCell));
|
|
||||||
|
|
||||||
public static readonly BindableProperty TotpSecProperty = BindableProperty.Create(
|
|
||||||
nameof(TotpSec), typeof(long), typeof(AuthenticatorViewCell));
|
|
||||||
|
|
||||||
public AuthenticatorViewCell()
|
public AuthenticatorViewCell()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Command CopyCommand { get; set; }
|
|
||||||
|
|
||||||
public CipherView Cipher
|
|
||||||
{
|
|
||||||
get => GetValue(CipherProperty) as CipherView;
|
|
||||||
set => SetValue(CipherProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool? WebsiteIconsEnabled
|
|
||||||
{
|
|
||||||
get => (bool)GetValue(WebsiteIconsEnabledProperty);
|
|
||||||
set => SetValue(WebsiteIconsEnabledProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public long TotpSec
|
|
||||||
{
|
|
||||||
get => (long)GetValue(TotpSecProperty);
|
|
||||||
set => SetValue(TotpSecProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowIconImage
|
|
||||||
{
|
|
||||||
get => WebsiteIconsEnabled ?? false
|
|
||||||
&& !string.IsNullOrWhiteSpace(Cipher.Login?.Uri)
|
|
||||||
&& IconImageSource != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string _iconImageSource = string.Empty;
|
|
||||||
public string IconImageSource
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_iconImageSource == string.Empty) // default value since icon source can return null
|
|
||||||
{
|
|
||||||
_iconImageSource = IconImageHelper.GetLoginIconImage(Cipher);
|
|
||||||
}
|
|
||||||
return _iconImageSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,14 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
x:Class="Bit.App.Controls.CipherViewCell"
|
x:Class="Bit.App.Controls.CipherViewCell"
|
||||||
xmlns:controls="clr-namespace:Bit.App.Controls"
|
xmlns:controls="clr-namespace:Bit.App.Controls"
|
||||||
|
xmlns:pages="clr-namespace:Bit.App.Pages"
|
||||||
xmlns:u="clr-namespace:Bit.App.Utilities"
|
xmlns:u="clr-namespace:Bit.App.Utilities"
|
||||||
xmlns:ff="clr-namespace:FFImageLoading.Maui;assembly=FFImageLoading.Compat.Maui"
|
xmlns:ff="clr-namespace:FFImageLoading.Maui;assembly=FFImageLoading.Compat.Maui"
|
||||||
xmlns:core="clr-namespace:Bit.Core"
|
xmlns:core="clr-namespace:Bit.Core"
|
||||||
StyleClass="list-row, list-row-platform"
|
StyleClass="list-row, list-row-platform"
|
||||||
RowSpacing="0"
|
RowSpacing="0"
|
||||||
ColumnSpacing="0"
|
ColumnSpacing="0"
|
||||||
x:DataType="controls:CipherViewCellViewModel"
|
x:DataType="pages:CipherItemViewModel"
|
||||||
AutomationId="CipherCell">
|
AutomationId="CipherCell">
|
||||||
|
|
||||||
<Grid.Resources>
|
<Grid.Resources>
|
||||||
@@ -64,23 +65,23 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
LineBreakMode="TailTruncation"
|
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
|
LineBreakMode="TailTruncation"
|
||||||
StyleClass="list-title, list-title-platform"
|
StyleClass="list-title, list-title-platform"
|
||||||
Text="{Binding Cipher.Name}"
|
Text="{Binding Cipher.Name}"
|
||||||
AutomationId="CipherNameLabel" />
|
AutomationId="CipherNameLabel" />
|
||||||
<Label
|
<Label
|
||||||
LineBreakMode="TailTruncation"
|
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.ColumnSpan="3"
|
Grid.ColumnSpan="3"
|
||||||
|
LineBreakMode="TailTruncation"
|
||||||
StyleClass="list-subtitle, list-subtitle-platform"
|
StyleClass="list-subtitle, list-subtitle-platform"
|
||||||
Text="{Binding Cipher.SubTitle}"
|
Text="{Binding Cipher.SubTitle}"
|
||||||
IsVisible="{Binding Source={RelativeSource Self}, Path=Text,
|
IsVisible="{Binding Source={RelativeSource Self}, Path=Text,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Bit.App.Abstractions;
|
using Bit.App.Abstractions;
|
||||||
using Bit.Core.Models.View;
|
using Bit.App.Pages;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
namespace Bit.App.Controls
|
namespace Bit.App.Controls
|
||||||
@@ -10,12 +10,6 @@ namespace Bit.App.Controls
|
|||||||
private const int ICON_COLUMN_DEFAULT_WIDTH = 40;
|
private const int ICON_COLUMN_DEFAULT_WIDTH = 40;
|
||||||
private const int ICON_IMAGE_DEFAULT_WIDTH = 22;
|
private const int ICON_IMAGE_DEFAULT_WIDTH = 22;
|
||||||
|
|
||||||
public static readonly BindableProperty CipherProperty = BindableProperty.Create(
|
|
||||||
nameof(Cipher), typeof(CipherView), typeof(CipherViewCell), default(CipherView), BindingMode.OneWay);
|
|
||||||
|
|
||||||
public static readonly BindableProperty WebsiteIconsEnabledProperty = BindableProperty.Create(
|
|
||||||
nameof(WebsiteIconsEnabled), typeof(bool?), typeof(CipherViewCell));
|
|
||||||
|
|
||||||
public static readonly BindableProperty ButtonCommandProperty = BindableProperty.Create(
|
public static readonly BindableProperty ButtonCommandProperty = BindableProperty.Create(
|
||||||
nameof(ButtonCommand), typeof(ICommand), typeof(CipherViewCell));
|
nameof(ButtonCommand), typeof(ICommand), typeof(CipherViewCell));
|
||||||
|
|
||||||
@@ -29,40 +23,17 @@ namespace Bit.App.Controls
|
|||||||
_iconImage.HeightRequest = ICON_IMAGE_DEFAULT_WIDTH * fontScale;
|
_iconImage.HeightRequest = ICON_IMAGE_DEFAULT_WIDTH * fontScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool? WebsiteIconsEnabled
|
|
||||||
{
|
|
||||||
get => (bool)GetValue(WebsiteIconsEnabledProperty);
|
|
||||||
set => SetValue(WebsiteIconsEnabledProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CipherView Cipher
|
|
||||||
{
|
|
||||||
get => GetValue(CipherProperty) as CipherView;
|
|
||||||
set => SetValue(CipherProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICommand ButtonCommand
|
public ICommand ButtonCommand
|
||||||
{
|
{
|
||||||
get => GetValue(ButtonCommandProperty) as ICommand;
|
get => GetValue(ButtonCommandProperty) as ICommand;
|
||||||
set => SetValue(ButtonCommandProperty, value);
|
set => SetValue(ButtonCommandProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPropertyChanged(string propertyName = null)
|
|
||||||
{
|
|
||||||
base.OnPropertyChanged(propertyName);
|
|
||||||
|
|
||||||
if (BindingContext is CipherViewCellViewModel cipherViewCellViewModel && propertyName == WebsiteIconsEnabledProperty.PropertyName)
|
|
||||||
{
|
|
||||||
cipherViewCellViewModel.WebsiteIconsEnabled = WebsiteIconsEnabled ?? false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MoreButton_Clicked(object sender, EventArgs e)
|
private void MoreButton_Clicked(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var cipher = ((sender as MiButton)?.BindingContext as CipherViewCellViewModel)?.Cipher;
|
if (BindingContext is CipherItemViewModel cipherItem)
|
||||||
if (cipher != null)
|
|
||||||
{
|
{
|
||||||
ButtonCommand?.Execute(cipher);
|
ButtonCommand?.Execute(cipherItem.Cipher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
using System.Globalization;
|
|
||||||
using Bit.App.Utilities;
|
|
||||||
using Bit.Core.Models.View;
|
|
||||||
using Bit.Core.Utilities;
|
|
||||||
|
|
||||||
namespace Bit.App.Controls
|
|
||||||
{
|
|
||||||
public class CipherViewToCipherViewCellViewModelConverter : IValueConverter
|
|
||||||
{
|
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
||||||
{
|
|
||||||
if (value is CipherView cipher)
|
|
||||||
{
|
|
||||||
return new CipherViewCellViewModel(cipher, false);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CipherViewCellViewModel : ExtendedViewModel
|
|
||||||
{
|
|
||||||
private CipherView _cipher;
|
|
||||||
private bool _websiteIconsEnabled;
|
|
||||||
private string _iconImageSource = string.Empty;
|
|
||||||
|
|
||||||
public CipherViewCellViewModel(CipherView cipherView, bool websiteIconsEnabled)
|
|
||||||
{
|
|
||||||
Cipher = cipherView;
|
|
||||||
WebsiteIconsEnabled = websiteIconsEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CipherView Cipher
|
|
||||||
{
|
|
||||||
get => _cipher;
|
|
||||||
set => SetProperty(ref _cipher, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool WebsiteIconsEnabled
|
|
||||||
{
|
|
||||||
get => _websiteIconsEnabled;
|
|
||||||
set => SetProperty(ref _websiteIconsEnabled, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowIconImage
|
|
||||||
{
|
|
||||||
get => WebsiteIconsEnabled
|
|
||||||
&& !string.IsNullOrWhiteSpace(Cipher.LaunchUri)
|
|
||||||
&& IconImageSource != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string IconImageSource
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_iconImageSource == string.Empty) // default value since icon source can return null
|
|
||||||
{
|
|
||||||
_iconImageSource = IconImageHelper.GetIconImage(Cipher);
|
|
||||||
}
|
|
||||||
return _iconImageSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,7 +11,8 @@ namespace Bit.App.Controls
|
|||||||
// TODO: [TouchEffect] When this TouchBehavior is replaced we can delete the existing TouchBehavior support files (which is all the files and folders inside "Core.Behaviors.PlatformBehaviors.MCTTouch.*")
|
// TODO: [TouchEffect] When this TouchBehavior is replaced we can delete the existing TouchBehavior support files (which is all the files and folders inside "Core.Behaviors.PlatformBehaviors.MCTTouch.*")
|
||||||
var touchBehavior = new TouchBehavior()
|
var touchBehavior = new TouchBehavior()
|
||||||
{
|
{
|
||||||
NativeAnimation = true
|
NativeAnimation = true,
|
||||||
|
ShouldMakeChildrenInputTransparent = false
|
||||||
};
|
};
|
||||||
Behaviors.Add(touchBehavior);
|
Behaviors.Add(touchBehavior);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ namespace Bit.App.Controls
|
|||||||
// TODO: [TouchEffect] When this TouchBehavior is replaced we can delete the existing TouchBehavior support files (which is all the files and folders inside "Core.Behaviors.PlatformBehaviors.MCTTouch.*")
|
// TODO: [TouchEffect] When this TouchBehavior is replaced we can delete the existing TouchBehavior support files (which is all the files and folders inside "Core.Behaviors.PlatformBehaviors.MCTTouch.*")
|
||||||
var touchBehavior = new TouchBehavior()
|
var touchBehavior = new TouchBehavior()
|
||||||
{
|
{
|
||||||
NativeAnimation = true
|
NativeAnimation = true,
|
||||||
|
ShouldMakeChildrenInputTransparent = false
|
||||||
};
|
};
|
||||||
Behaviors.Add(touchBehavior);
|
Behaviors.Add(touchBehavior);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="CommunityToolkit.Maui" Version="5.2.0" />
|
<PackageReference Include="CommunityToolkit.Maui" Version="5.2.0" />
|
||||||
<PackageReference Include="Plugin.Fingerprint" Version="2.1.5" />
|
<PackageReference Include="Plugin.Fingerprint" Version="3.0.0-beta.1" />
|
||||||
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="2.88.4-preview.84" />
|
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="2.88.4-preview.84" />
|
||||||
<PackageReference Include="SkiaSharp.Views.Maui.Controls.Compatibility" Version="2.88.4-preview.84" />
|
<PackageReference Include="SkiaSharp.Views.Maui.Controls.Compatibility" Version="2.88.4-preview.84" />
|
||||||
<PackageReference Include="FFImageLoadingCompat.Maui" Version="0.1.1" />
|
<PackageReference Include="FFImageLoadingCompat.Maui" Version="0.1.1" />
|
||||||
@@ -47,7 +47,6 @@
|
|||||||
<PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
|
<PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
|
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
|
||||||
<PackageReference Include="Plugin.CurrentActivity" Version="2.1.0.4" />
|
|
||||||
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.18" />
|
<PackageReference Include="Xamarin.AndroidX.AutoFill" Version="1.1.0.18" />
|
||||||
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.7.2.1" />
|
<PackageReference Include="Xamarin.AndroidX.Activity.Ktx" Version="1.7.2.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
StyleClass="btn-danger"
|
StyleClass="btn-danger"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
VerticalOptions="Start"
|
VerticalOptions="Start"
|
||||||
Margin="0,20,0,0"
|
Margin="0,20,6,0"
|
||||||
Padding="16,0"
|
Padding="16,0"
|
||||||
CornerRadius="2"
|
CornerRadius="2"
|
||||||
TextTransform="Uppercase"
|
TextTransform="Uppercase"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<pages:BaseContentPage
|
<pages:BaseContentPage
|
||||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
@@ -21,6 +21,10 @@
|
|||||||
<ScrollView>
|
<ScrollView>
|
||||||
<StackLayout Spacing="20">
|
<StackLayout Spacing="20">
|
||||||
<StackLayout StyleClass="box">
|
<StackLayout StyleClass="box">
|
||||||
|
<StackLayout StyleClass="box-row-header">
|
||||||
|
<Label Text="MAUI APP"
|
||||||
|
StyleClass="box-header, box-header-platform" />
|
||||||
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row-header">
|
<StackLayout StyleClass="box-row-header">
|
||||||
<Label Text="{u:I18n SelfHostedEnvironment, Header=True}"
|
<Label Text="{u:I18n SelfHostedEnvironment, Header=True}"
|
||||||
StyleClass="box-header, box-header-platform" />
|
StyleClass="box-header, box-header-platform" />
|
||||||
|
|||||||
@@ -72,6 +72,7 @@
|
|||||||
Command="{Binding ShowEnvironmentPickerCommand}" />
|
Command="{Binding ShowEnvironmentPickerCommand}" />
|
||||||
</StackLayout.GestureRecognizers>
|
</StackLayout.GestureRecognizers>
|
||||||
<Label
|
<Label
|
||||||
|
Margin="0,0,6,0"
|
||||||
Text="{Binding RegionText}"
|
Text="{Binding RegionText}"
|
||||||
FontSize="13"
|
FontSize="13"
|
||||||
TextColor="{DynamicResource MutedColor}"
|
TextColor="{DynamicResource MutedColor}"
|
||||||
|
|||||||
@@ -93,7 +93,8 @@
|
|||||||
IsSpellCheckEnabled="False"
|
IsSpellCheckEnabled="False"
|
||||||
IsTextPredictionEnabled="False"
|
IsTextPredictionEnabled="False"
|
||||||
ReturnType="Go"
|
ReturnType="Go"
|
||||||
ReturnCommand="{Binding SubmitCommand}" />
|
ReturnCommand="{Binding SubmitCommand}"
|
||||||
|
TextChanged="Token_TextChanged" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<StackLayout StyleClass="box-row, box-row-switch">
|
<StackLayout StyleClass="box-row, box-row-switch">
|
||||||
<Label
|
<Label
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var appInfo = string.Format("{0}: {1} ({2})",
|
// TODO: REMOVE WHEN MERGED INTO MAIN BRANCH
|
||||||
|
var appInfo = string.Format("MAUI {0}: {1} ({2})",
|
||||||
AppResources.Version,
|
AppResources.Version,
|
||||||
_platformUtilsService.GetApplicationVersion(),
|
_platformUtilsService.GetApplicationVersion(),
|
||||||
_deviceActionService.GetBuildNumber());
|
_deviceActionService.GetBuildNumber());
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using Bit.App.Models;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Bit.App.Models;
|
|
||||||
using Bit.Core.Resources.Localization;
|
|
||||||
using Bit.App.Utilities;
|
using Bit.App.Utilities;
|
||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Exceptions;
|
using Bit.Core.Exceptions;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
|
using Bit.Core.Resources.Localization;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@@ -48,7 +43,7 @@ namespace Bit.App.Pages
|
|||||||
var groupedItems = new List<GroupingsPageListGroup>();
|
var groupedItems = new List<GroupingsPageListGroup>();
|
||||||
var ciphers = await _cipherService.GetAllDecryptedByUrlAsync(Uri, null);
|
var ciphers = await _cipherService.GetAllDecryptedByUrlAsync(Uri, null);
|
||||||
|
|
||||||
var matching = ciphers.Item1?.Select(c => new GroupingsPageListItem { Cipher = c }).ToList();
|
var matching = ciphers.Item1?.Select(c => new CipherItemViewModel(c, WebsiteIconsEnabled)).ToList();
|
||||||
var hasMatching = matching?.Any() ?? false;
|
var hasMatching = matching?.Any() ?? false;
|
||||||
if (matching?.Any() ?? false)
|
if (matching?.Any() ?? false)
|
||||||
{
|
{
|
||||||
@@ -57,7 +52,7 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
|
|
||||||
var fuzzy = ciphers.Item2?.Select(c =>
|
var fuzzy = ciphers.Item2?.Select(c =>
|
||||||
new GroupingsPageListItem { Cipher = c, FuzzyAutofill = true }).ToList();
|
new CipherItemViewModel(c, WebsiteIconsEnabled, true)).ToList();
|
||||||
if (fuzzy?.Any() ?? false)
|
if (fuzzy?.Any() ?? false)
|
||||||
{
|
{
|
||||||
groupedItems.Add(
|
groupedItems.Add(
|
||||||
@@ -70,7 +65,7 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
protected override async Task SelectCipherAsync(IGroupingsPageListItem item)
|
protected override async Task SelectCipherAsync(IGroupingsPageListItem item)
|
||||||
{
|
{
|
||||||
if (!(item is GroupingsPageListItem listItem) || listItem.Cipher is null)
|
if (!(item is CipherItemViewModel listItem) || listItem.Cipher is null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -282,7 +282,7 @@
|
|||||||
StyleClass="box-row-button, box-row-button-platform"
|
StyleClass="box-row-button, box-row-button-platform"
|
||||||
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
Text="{Binding Source={x:Static core:BitwardenIcons.Clone}}"
|
||||||
Command="{Binding CopyCommand}"
|
Command="{Binding CopyCommand}"
|
||||||
IsVisible="{Binding HasTotpValue}"
|
IsVisible="{Binding AllowTotpCopy}"
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Grid.RowSpan="2"
|
Grid.RowSpan="2"
|
||||||
|
|||||||
@@ -312,6 +312,7 @@ namespace Bit.App.Pages
|
|||||||
public bool PasswordPrompt => Cipher != null && Cipher.Reprompt != CipherRepromptType.None;
|
public bool PasswordPrompt => Cipher != null && Cipher.Reprompt != CipherRepromptType.None;
|
||||||
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
|
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
|
||||||
public bool HasTotpValue => IsLogin && !string.IsNullOrEmpty(Cipher?.Login?.Totp);
|
public bool HasTotpValue => IsLogin && !string.IsNullOrEmpty(Cipher?.Login?.Totp);
|
||||||
|
public bool AllowTotpCopy => HasTotpValue && Cipher.ViewPassword;
|
||||||
public string SetupTotpText => $"{BitwardenIcons.Camera} {AppResources.SetupTotp}";
|
public string SetupTotpText => $"{BitwardenIcons.Camera} {AppResources.SetupTotp}";
|
||||||
public bool ShowPasskeyInfo => Cipher?.HasFido2Credential == true && !CloneMode;
|
public bool ShowPasskeyInfo => Cipher?.HasFido2Credential == true && !CloneMode;
|
||||||
|
|
||||||
|
|||||||
42
src/Core/Pages/Vault/CipherItemViewModel.cs
Normal file
42
src/Core/Pages/Vault/CipherItemViewModel.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using Bit.App.Utilities;
|
||||||
|
using Bit.Core.Models.View;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
|
namespace Bit.App.Pages
|
||||||
|
{
|
||||||
|
public class CipherItemViewModel : ExtendedViewModel, IGroupingsPageListItem
|
||||||
|
{
|
||||||
|
private readonly bool _websiteIconsEnabled;
|
||||||
|
private string _iconImageSource = string.Empty;
|
||||||
|
|
||||||
|
public CipherItemViewModel(CipherView cipherView, bool websiteIconsEnabled, bool fuzzyAutofill = false)
|
||||||
|
{
|
||||||
|
Cipher = cipherView;
|
||||||
|
_websiteIconsEnabled = websiteIconsEnabled;
|
||||||
|
FuzzyAutofill = fuzzyAutofill;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CipherView Cipher { get; }
|
||||||
|
|
||||||
|
public bool FuzzyAutofill { get; }
|
||||||
|
|
||||||
|
public bool ShowIconImage
|
||||||
|
{
|
||||||
|
get => _websiteIconsEnabled
|
||||||
|
&& !string.IsNullOrWhiteSpace(Cipher.LaunchUri)
|
||||||
|
&& IconImageSource != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string IconImageSource
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_iconImageSource == string.Empty) // default value since icon source can return null
|
||||||
|
{
|
||||||
|
_iconImageSource = IconImageHelper.GetIconImage(Cipher);
|
||||||
|
}
|
||||||
|
return _iconImageSource;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -28,7 +28,6 @@
|
|||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<u:InverseBoolConverter x:Key="inverseBool" />
|
<u:InverseBoolConverter x:Key="inverseBool" />
|
||||||
<controls:SelectionChangedEventArgsConverter x:Key="SelectionChangedEventArgsConverter" />
|
<controls:SelectionChangedEventArgsConverter x:Key="SelectionChangedEventArgsConverter" />
|
||||||
<controls:CipherViewToCipherViewCellViewModelConverter x:Key="cipherViewToCipherViewCellViewModel" />
|
|
||||||
|
|
||||||
<ToolbarItem
|
<ToolbarItem
|
||||||
x:Name="_closeItem"
|
x:Name="_closeItem"
|
||||||
@@ -46,9 +45,7 @@
|
|||||||
<DataTemplate x:Key="cipherTemplate"
|
<DataTemplate x:Key="cipherTemplate"
|
||||||
x:DataType="pages:GroupingsPageListItem">
|
x:DataType="pages:GroupingsPageListItem">
|
||||||
<controls:CipherViewCell
|
<controls:CipherViewCell
|
||||||
BindingContext="{Binding Cipher, Converter={StaticResource cipherViewToCipherViewCellViewModel}}"
|
ButtonCommand="{Binding BindingContext.CipherOptionsCommand, Source={x:Reference _page}}" />
|
||||||
ButtonCommand="{Binding BindingContext.CipherOptionsCommand, Source={x:Reference _page}}"
|
|
||||||
WebsiteIconsEnabled="{Binding BindingContext.WebsiteIconsEnabled, Source={x:Reference _page}}" />
|
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate
|
<DataTemplate
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
using System;
|
using Bit.App.Abstractions;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Bit.App.Abstractions;
|
|
||||||
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.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Services;
|
using Bit.Core.Services;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@@ -37,12 +33,10 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
// TODO Xamarin.Forms.Device.RuntimePlatform is no longer supported. Use Microsoft.Maui.Devices.DeviceInfo.Platform instead. For more details see https://learn.microsoft.com/en-us/dotnet/maui/migration/forms-projects#device-changes
|
#if IOS
|
||||||
if (Device.RuntimePlatform == Device.iOS)
|
ToolbarItems.Add(_closeItem);
|
||||||
{
|
ToolbarItems.Add(_addItem);
|
||||||
ToolbarItems.Add(_closeItem);
|
#endif
|
||||||
ToolbarItems.Add(_addItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
SetActivityIndicator(_mainContent);
|
SetActivityIndicator(_mainContent);
|
||||||
_vm = BindingContext as CipherSelectionPageViewModel;
|
_vm = BindingContext as CipherSelectionPageViewModel;
|
||||||
@@ -88,12 +82,12 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
if (message.Command == "syncStarted")
|
if (message.Command == "syncStarted")
|
||||||
{
|
{
|
||||||
Device.BeginInvokeOnMainThread(() => IsBusy = true);
|
MainThread.BeginInvokeOnMainThread(() => IsBusy = true);
|
||||||
}
|
}
|
||||||
else if (message.Command == "syncCompleted")
|
else if (message.Command == "syncCompleted")
|
||||||
{
|
{
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
Device.BeginInvokeOnMainThread(() =>
|
MainThread.BeginInvokeOnMainThread(() =>
|
||||||
{
|
{
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
if (_vm.LoadedOnce)
|
if (_vm.LoadedOnce)
|
||||||
@@ -130,11 +124,10 @@ namespace Bit.App.Pages
|
|||||||
_accountListOverlay.HideAsync().FireAndForget();
|
_accountListOverlay.HideAsync().FireAndForget();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// TODO Xamarin.Forms.Device.RuntimePlatform is no longer supported. Use Microsoft.Maui.Devices.DeviceInfo.Platform instead. For more details see https://learn.microsoft.com/en-us/dotnet/maui/migration/forms-projects#device-changes
|
|
||||||
if (Device.RuntimePlatform == Device.Android)
|
#if ANDROID
|
||||||
{
|
_appOptions.Uri = null;
|
||||||
_appOptions.Uri = null;
|
#endif
|
||||||
}
|
|
||||||
return base.OnBackButtonPressed();
|
return base.OnBackButtonPressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System.Windows.Input;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Bit.App.Abstractions;
|
using Bit.App.Abstractions;
|
||||||
using Bit.App.Controls;
|
using Bit.App.Controls;
|
||||||
using Bit.App.Models;
|
|
||||||
using Bit.Core.Resources.Localization;
|
|
||||||
using Bit.App.Utilities;
|
using Bit.App.Utilities;
|
||||||
using Bit.Core;
|
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
public abstract class CipherSelectionPageViewModel : BaseViewModel
|
public abstract class CipherSelectionPageViewModel : BaseViewModel
|
||||||
@@ -108,10 +99,7 @@ namespace Bit.App.Pages
|
|||||||
var groupedItems = await LoadGroupedItemsAsync();
|
var groupedItems = await LoadGroupedItemsAsync();
|
||||||
|
|
||||||
// TODO: refactor this
|
// TODO: refactor this
|
||||||
// TODO Xamarin.Forms.Device.RuntimePlatform is no longer supported. Use Microsoft.Maui.Devices.DeviceInfo.Platform instead. For more details see https://learn.microsoft.com/en-us/dotnet/maui/migration/forms-projects#device-changes
|
if (DeviceInfo.Platform == DevicePlatform.Android || GroupedItems.Any())
|
||||||
if (Device.RuntimePlatform == Device.Android
|
|
||||||
||
|
|
||||||
GroupedItems.Any())
|
|
||||||
{
|
{
|
||||||
var items = new List<IGroupingsPageListItem>();
|
var items = new List<IGroupingsPageListItem>();
|
||||||
foreach (var itemGroup in groupedItems)
|
foreach (var itemGroup in groupedItems)
|
||||||
@@ -140,7 +128,7 @@ namespace Bit.App.Pages
|
|||||||
items.AddRange(itemGroup);
|
items.AddRange(itemGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Device.InvokeOnMainThreadAsync(() =>
|
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||||
{
|
{
|
||||||
if (groupedItems.Any())
|
if (groupedItems.Any())
|
||||||
{
|
{
|
||||||
@@ -153,7 +141,7 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
await Device.InvokeOnMainThreadAsync(() =>
|
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||||
{
|
{
|
||||||
ShowList = groupedItems.Any();
|
ShowList = groupedItems.Any();
|
||||||
ShowNoData = !ShowList;
|
ShowNoData = !ShowList;
|
||||||
|
|||||||
@@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<controls:CipherViewToCipherViewCellViewModelConverter x:Key="cipherViewToCipherViewCellViewModel" />
|
|
||||||
|
|
||||||
<ToolbarItem Text="{u:I18n Close}" Clicked="Close_Clicked" Order="Primary" Priority="-1"
|
<ToolbarItem Text="{u:I18n Close}" Clicked="Close_Clicked" Order="Primary" Priority="-1"
|
||||||
x:Name="_closeItem" x:Key="closeItem" />
|
x:Name="_closeItem" x:Key="closeItem" />
|
||||||
<StackLayout
|
<StackLayout
|
||||||
@@ -55,7 +53,7 @@
|
|||||||
IsVisible="{Binding ShowVaultFilter}"
|
IsVisible="{Binding ShowVaultFilter}"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
Margin="0,5,0,0">
|
Margin="{OnPlatform Android='0,5,0,0', iOS='0,15'}">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding VaultFilterDescription}"
|
Text="{Binding VaultFilterDescription}"
|
||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
@@ -112,10 +110,7 @@
|
|||||||
<!--Binding context is not applied if the cell is the direct child, check for context https://github.com/dotnet/maui/issues/9131-->
|
<!--Binding context is not applied if the cell is the direct child, check for context https://github.com/dotnet/maui/issues/9131-->
|
||||||
<Grid>
|
<Grid>
|
||||||
<controls:CipherViewCell
|
<controls:CipherViewCell
|
||||||
BindingContext="{Binding ., Converter={StaticResource cipherViewToCipherViewCellViewModel}}"
|
ButtonCommand="{Binding BindingContext.CipherOptionsCommand, Source={x:Reference _page}}" />
|
||||||
ButtonCommand="{Binding BindingContext.CipherOptionsCommand, Source={x:Reference _page}}"
|
|
||||||
WebsiteIconsEnabled="{Binding BindingContext.WebsiteIconsEnabled, Source={x:Reference _page}}"
|
|
||||||
/>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</CollectionView.ItemTemplate>
|
</CollectionView.ItemTemplate>
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
using System;
|
using Bit.App.Controls;
|
||||||
using System.Linq;
|
|
||||||
using Bit.App.Controls;
|
|
||||||
using Bit.App.Models;
|
using Bit.App.Models;
|
||||||
using Bit.Core.Resources.Localization;
|
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
|
using Bit.Core.Resources.Localization;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@@ -41,8 +37,7 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
_vm.VaultFilterDescription = vaultFilterSelection;
|
_vm.VaultFilterDescription = vaultFilterSelection;
|
||||||
|
|
||||||
// TODO Xamarin.Forms.Device.RuntimePlatform is no longer supported. Use Microsoft.Maui.Devices.DeviceInfo.Platform instead. For more details see https://learn.microsoft.com/en-us/dotnet/maui/migration/forms-projects#device-changes
|
if (DeviceInfo.Platform == DevicePlatform.iOS)
|
||||||
if (Device.RuntimePlatform == Device.iOS)
|
|
||||||
{
|
{
|
||||||
ToolbarItems.Add(_closeItem);
|
ToolbarItems.Add(_closeItem);
|
||||||
_searchBar.Placeholder = AppResources.Search;
|
_searchBar.Placeholder = AppResources.Search;
|
||||||
@@ -59,7 +54,7 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
public SearchBar SearchBar => _searchBar;
|
public SearchBar SearchBar => _searchBar;
|
||||||
|
|
||||||
protected async override void OnAppearing()
|
protected override async void OnAppearing()
|
||||||
{
|
{
|
||||||
base.OnAppearing();
|
base.OnAppearing();
|
||||||
await _vm.InitAsync();
|
await _vm.InitAsync();
|
||||||
@@ -125,9 +120,9 @@ namespace Bit.App.Pages
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.CurrentSelection?.FirstOrDefault() is CipherView cipher)
|
if (e.CurrentSelection?.FirstOrDefault() is CipherItemViewModel cipherIteemVM)
|
||||||
{
|
{
|
||||||
await _vm.SelectCipherAsync(cipher);
|
await _vm.SelectCipherAsync(cipherIteemVM.Cipher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
using System.Windows.Input;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Bit.App.Abstractions;
|
using Bit.App.Abstractions;
|
||||||
using Bit.App.Models;
|
using Bit.App.Models;
|
||||||
using Bit.Core.Resources.Localization;
|
using Bit.Core.Resources.Localization;
|
||||||
@@ -13,10 +8,6 @@ using Bit.Core.Exceptions;
|
|||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
using Bit.App.Utilities;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
public class CiphersPageViewModel : VaultFilterViewModel
|
public class CiphersPageViewModel : VaultFilterViewModel
|
||||||
@@ -51,7 +42,7 @@ namespace Bit.App.Pages
|
|||||||
_policyService = ServiceContainer.Resolve<IPolicyService>("policyService");
|
_policyService = ServiceContainer.Resolve<IPolicyService>("policyService");
|
||||||
_logger = ServiceContainer.Resolve<ILogger>("logger");
|
_logger = ServiceContainer.Resolve<ILogger>("logger");
|
||||||
|
|
||||||
Ciphers = new ExtendedObservableCollection<CipherView>();
|
Ciphers = new ExtendedObservableCollection<CipherItemViewModel>();
|
||||||
CipherOptionsCommand = CreateDefaultAsyncRelayCommand<CipherView>(cipher => Utilities.AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService),
|
CipherOptionsCommand = CreateDefaultAsyncRelayCommand<CipherView>(cipher => Utilities.AppHelpers.CipherListOptions(Page, cipher, _passwordRepromptService),
|
||||||
onException: ex => HandleException(ex),
|
onException: ex => HandleException(ex),
|
||||||
allowsMultipleExecutions: false);
|
allowsMultipleExecutions: false);
|
||||||
@@ -62,7 +53,7 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
public ICommand CipherOptionsCommand { get; }
|
public ICommand CipherOptionsCommand { get; }
|
||||||
public ICommand AddCipherCommand { get; }
|
public ICommand AddCipherCommand { get; }
|
||||||
public ExtendedObservableCollection<CipherView> Ciphers { get; set; }
|
public ExtendedObservableCollection<CipherItemViewModel> Ciphers { get; set; }
|
||||||
public Func<CipherView, bool> Filter { get; set; }
|
public Func<CipherView, bool> Filter { get; set; }
|
||||||
public string AutofillUrl { get; set; }
|
public string AutofillUrl { get; set; }
|
||||||
public bool Deleted { get; set; }
|
public bool Deleted { get; set; }
|
||||||
@@ -96,12 +87,6 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
public bool ShowAddCipher => ShowNoData && _appOptions?.OtpData != null;
|
public bool ShowAddCipher => ShowNoData && _appOptions?.OtpData != null;
|
||||||
|
|
||||||
public bool WebsiteIconsEnabled
|
|
||||||
{
|
|
||||||
get => _websiteIconsEnabled;
|
|
||||||
set => SetProperty(ref _websiteIconsEnabled, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void Prepare(Func<CipherView, bool> filter, bool deleted, AppOptions appOptions)
|
internal void Prepare(Func<CipherView, bool> filter, bool deleted, AppOptions appOptions)
|
||||||
{
|
{
|
||||||
Filter = filter;
|
Filter = filter;
|
||||||
@@ -114,7 +99,7 @@ namespace Bit.App.Pages
|
|||||||
public async Task InitAsync()
|
public async Task InitAsync()
|
||||||
{
|
{
|
||||||
await InitVaultFilterAsync(true);
|
await InitVaultFilterAsync(true);
|
||||||
WebsiteIconsEnabled = !(await _stateService.GetDisableFaviconAsync()).GetValueOrDefault();
|
_websiteIconsEnabled = await _stateService.GetDisableFaviconAsync() != true;
|
||||||
PerformSearchIfPopulated();
|
PerformSearchIfPopulated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,9 +149,9 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
ciphers = new List<CipherView>();
|
ciphers = new List<CipherView>();
|
||||||
}
|
}
|
||||||
Device.BeginInvokeOnMainThread(() =>
|
MainThread.BeginInvokeOnMainThread(() =>
|
||||||
{
|
{
|
||||||
Ciphers.ResetWithRange(ciphers);
|
Ciphers.ResetWithRange(ciphers.Select(c => new CipherItemViewModel(c, _websiteIconsEnabled)).ToList());
|
||||||
ShowNoData = !shouldShowAllWhenEmpty && searchable && Ciphers.Count == 0;
|
ShowNoData = !shouldShowAllWhenEmpty && searchable && Ciphers.Count == 0;
|
||||||
ShowList = (searchable || shouldShowAllWhenEmpty) && !ShowNoData;
|
ShowList = (searchable || shouldShowAllWhenEmpty) && !ShowNoData;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -32,8 +32,6 @@
|
|||||||
|
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<controls:CipherViewToCipherViewCellViewModelConverter x:Key="cipherViewToCipherViewCellViewModel" />
|
|
||||||
|
|
||||||
<ToolbarItem x:Name="_syncItem" x:Key="syncItem" Text="{u:I18n Sync}"
|
<ToolbarItem x:Name="_syncItem" x:Key="syncItem" Text="{u:I18n Sync}"
|
||||||
Clicked="Sync_Clicked" Order="Secondary" />
|
Clicked="Sync_Clicked" Order="Secondary" />
|
||||||
<ToolbarItem x:Name="_lockItem" x:Key="lockItem" Text="{u:I18n Lock}"
|
<ToolbarItem x:Name="_lockItem" x:Key="lockItem" Text="{u:I18n Lock}"
|
||||||
@@ -45,19 +43,14 @@
|
|||||||
SemanticProperties.Description="{u:I18n AddItem}" />
|
SemanticProperties.Description="{u:I18n AddItem}" />
|
||||||
|
|
||||||
<DataTemplate x:Key="cipherTemplate"
|
<DataTemplate x:Key="cipherTemplate"
|
||||||
x:DataType="pages:GroupingsPageListItem">
|
x:DataType="pages:CipherItemViewModel">
|
||||||
<controls:CipherViewCell
|
<controls:CipherViewCell
|
||||||
BindingContext="{Binding Cipher, Converter={StaticResource cipherViewToCipherViewCellViewModel}}"
|
ButtonCommand="{Binding BindingContext.CipherOptionsCommand, Source={x:Reference _page}}" />
|
||||||
ButtonCommand="{Binding BindingContext.CipherOptionsCommand, Source={x:Reference _page}}"
|
|
||||||
WebsiteIconsEnabled="{Binding BindingContext.WebsiteIconsEnabled, Source={x:Reference _page}}" />
|
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate x:Key="authenticatorTemplate"
|
<DataTemplate x:Key="authenticatorTemplate"
|
||||||
x:DataType="pages:GroupingsPageTOTPListItem">
|
x:DataType="pages:GroupingsPageTOTPListItem">
|
||||||
<controls:AuthenticatorViewCell
|
<controls:AuthenticatorViewCell />
|
||||||
Cipher="{Binding Cipher}"
|
|
||||||
WebsiteIconsEnabled="{Binding BindingContext.WebsiteIconsEnabled, Source={x:Reference _page}}"
|
|
||||||
TotpSec="{Binding TotpSec}" />
|
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate x:Key="groupTemplate"
|
<DataTemplate x:Key="groupTemplate"
|
||||||
@@ -124,7 +117,7 @@
|
|||||||
IsVisible="{Binding ShowVaultFilter}"
|
IsVisible="{Binding ShowVaultFilter}"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
HorizontalOptions="FillAndExpand"
|
HorizontalOptions="FillAndExpand"
|
||||||
Margin="0,5,0,0">
|
Margin="{OnPlatform Android='0,5,0,0', iOS='0,15'}">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding VaultFilterDescription}"
|
Text="{Binding VaultFilterDescription}"
|
||||||
LineBreakMode="TailTruncation"
|
LineBreakMode="TailTruncation"
|
||||||
|
|||||||
@@ -215,13 +215,21 @@ namespace Bit.App.Pages
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.CurrentSelection?.FirstOrDefault() is GroupingsPageTOTPListItem totpItem)
|
var selection = e.CurrentSelection?.FirstOrDefault();
|
||||||
|
|
||||||
|
if (selection is GroupingsPageTOTPListItem totpItem)
|
||||||
{
|
{
|
||||||
await _vm.SelectCipherAsync(totpItem.Cipher);
|
await _vm.SelectCipherAsync(totpItem.Cipher);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(e.CurrentSelection?.FirstOrDefault() is GroupingsPageListItem item))
|
if (selection is CipherItemViewModel cipherItemVM)
|
||||||
|
{
|
||||||
|
await _vm.SelectCipherAsync(cipherItemVM.Cipher);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(selection is GroupingsPageListItem item))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -234,10 +242,6 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
await _vm.SelectTotpCodesAsync();
|
await _vm.SelectTotpCodesAsync();
|
||||||
}
|
}
|
||||||
else if (item.Cipher != null)
|
|
||||||
{
|
|
||||||
await _vm.SelectCipherAsync(item.Cipher);
|
|
||||||
}
|
|
||||||
else if (item.Folder != null)
|
else if (item.Folder != null)
|
||||||
{
|
{
|
||||||
await _vm.SelectFolderAsync(item.Folder);
|
await _vm.SelectFolderAsync(item.Folder);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using Bit.Core.Resources.Localization;
|
using Bit.App.Utilities.Automation;
|
||||||
using Bit.App.Utilities.Automation;
|
|
||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
|
using Bit.Core.Resources.Localization;
|
||||||
using CollectionView = Bit.Core.Models.View.CollectionView;
|
using CollectionView = Bit.Core.Models.View.CollectionView;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
@@ -14,10 +14,8 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
public FolderView Folder { get; set; }
|
public FolderView Folder { get; set; }
|
||||||
public CollectionView Collection { get; set; }
|
public CollectionView Collection { get; set; }
|
||||||
public CipherView Cipher { get; set; }
|
|
||||||
public CipherType? Type { get; set; }
|
public CipherType? Type { get; set; }
|
||||||
public string ItemCount { get; set; }
|
public string ItemCount { get; set; }
|
||||||
public bool FuzzyAutofill { get; set; }
|
|
||||||
public bool IsTrash { get; set; }
|
public bool IsTrash { get; set; }
|
||||||
public bool IsTotpCode { get; set; }
|
public bool IsTotpCode { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using Microsoft.Maui.Controls;
|
namespace Bit.App.Pages
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
|
||||||
{
|
{
|
||||||
public class GroupingsPageListItemSelector : DataTemplateSelector
|
public class GroupingsPageListItemSelector : DataTemplateSelector
|
||||||
{
|
{
|
||||||
@@ -12,19 +9,24 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
|
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
|
||||||
{
|
{
|
||||||
if (item is GroupingsPageHeaderListItem)
|
|
||||||
{
|
|
||||||
return HeaderTemplate;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item is GroupingsPageTOTPListItem)
|
if (item is GroupingsPageTOTPListItem)
|
||||||
{
|
{
|
||||||
return AuthenticatorTemplate;
|
return AuthenticatorTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item is GroupingsPageListItem listItem)
|
if (item is CipherItemViewModel)
|
||||||
{
|
{
|
||||||
return listItem.Cipher != null ? CipherTemplate : GroupTemplate;
|
return CipherTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item is GroupingsPageHeaderListItem)
|
||||||
|
{
|
||||||
|
return HeaderTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item is GroupingsPageListItem)
|
||||||
|
{
|
||||||
|
return GroupTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -1,56 +1,34 @@
|
|||||||
using System;
|
using Bit.App.Utilities;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Bit.Core.Resources.Localization;
|
|
||||||
using Bit.App.Utilities;
|
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
|
using Bit.Core.Resources.Localization;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using Microsoft.Maui.ApplicationModel;
|
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
public class GroupingsPageTOTPListItem : ExtendedViewModel, IGroupingsPageListItem
|
public class GroupingsPageTOTPListItem : CipherItemViewModel, IGroupingsPageListItem
|
||||||
{
|
{
|
||||||
private readonly LazyResolve<ILogger> _logger = new LazyResolve<ILogger>("logger");
|
|
||||||
private readonly ITotpService _totpService;
|
|
||||||
private readonly IPlatformUtilsService _platformUtilsService;
|
|
||||||
private readonly IClipboardService _clipboardService;
|
private readonly IClipboardService _clipboardService;
|
||||||
private CipherView _cipher;
|
|
||||||
|
|
||||||
private bool _websiteIconsEnabled;
|
|
||||||
private string _iconImageSource = string.Empty;
|
|
||||||
|
|
||||||
private double _progress;
|
private double _progress;
|
||||||
private string _totpSec;
|
private string _totpSec;
|
||||||
private string _totpCodeFormatted;
|
private string _totpCodeFormatted;
|
||||||
private TotpHelper _totpTickHelper;
|
private readonly TotpHelper _totpTickHelper;
|
||||||
|
|
||||||
|
|
||||||
public GroupingsPageTOTPListItem(CipherView cipherView, bool websiteIconsEnabled)
|
public GroupingsPageTOTPListItem(CipherView cipherView, bool websiteIconsEnabled)
|
||||||
|
:base(cipherView, websiteIconsEnabled)
|
||||||
{
|
{
|
||||||
_totpService = ServiceContainer.Resolve<ITotpService>("totpService");
|
_clipboardService = ServiceContainer.Resolve<IClipboardService>();
|
||||||
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
|
|
||||||
_clipboardService = ServiceContainer.Resolve<IClipboardService>("clipboardService");
|
|
||||||
|
|
||||||
Cipher = cipherView;
|
|
||||||
WebsiteIconsEnabled = websiteIconsEnabled;
|
|
||||||
CopyCommand = CreateDefaultAsyncRelayCommand(CopyToClipboardAsync,
|
CopyCommand = CreateDefaultAsyncRelayCommand(CopyToClipboardAsync,
|
||||||
onException: ex => _logger.Value.Exception(ex),
|
onException: _logger.Value.Exception,
|
||||||
allowsMultipleExecutions: false);
|
allowsMultipleExecutions: false);
|
||||||
_totpTickHelper = new TotpHelper(cipherView);
|
_totpTickHelper = new TotpHelper(cipherView);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AsyncRelayCommand CopyCommand { get; set; }
|
public AsyncRelayCommand CopyCommand { get; set; }
|
||||||
|
|
||||||
public CipherView Cipher
|
|
||||||
{
|
|
||||||
get => _cipher;
|
|
||||||
set => SetProperty(ref _cipher, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string TotpCodeFormatted
|
public string TotpCodeFormatted
|
||||||
{
|
{
|
||||||
get => _totpCodeFormatted;
|
get => _totpCodeFormatted;
|
||||||
@@ -72,31 +50,6 @@ namespace Bit.App.Pages
|
|||||||
get => _progress;
|
get => _progress;
|
||||||
set => SetProperty(ref _progress, value);
|
set => SetProperty(ref _progress, value);
|
||||||
}
|
}
|
||||||
public bool WebsiteIconsEnabled
|
|
||||||
{
|
|
||||||
get => _websiteIconsEnabled;
|
|
||||||
set => SetProperty(ref _websiteIconsEnabled, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ShowIconImage
|
|
||||||
{
|
|
||||||
get => WebsiteIconsEnabled
|
|
||||||
&& !string.IsNullOrWhiteSpace(Cipher.Login?.Uri)
|
|
||||||
&& IconImageSource != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string IconImageSource
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_iconImageSource == string.Empty) // default value since icon source can return null
|
|
||||||
{
|
|
||||||
_iconImageSource = IconImageHelper.GetLoginIconImage(Cipher);
|
|
||||||
}
|
|
||||||
return _iconImageSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public string TotpCodeFormattedStart => TotpCodeFormatted?.Split(' ')[0];
|
public string TotpCodeFormattedStart => TotpCodeFormatted?.Split(' ')[0];
|
||||||
|
|
||||||
@@ -105,7 +58,7 @@ namespace Bit.App.Pages
|
|||||||
public async Task CopyToClipboardAsync()
|
public async Task CopyToClipboardAsync()
|
||||||
{
|
{
|
||||||
await _clipboardService.CopyTextAsync(TotpCodeFormatted?.Replace(" ", string.Empty));
|
await _clipboardService.CopyTextAsync(TotpCodeFormatted?.Replace(" ", string.Empty));
|
||||||
_platformUtilsService.ShowToast("info", null, string.Format(AppResources.ValueHasBeenCopied, AppResources.VerificationCodeTotp));
|
_platformUtilsService.Value.ShowToast("info", null, string.Format(AppResources.ValueHasBeenCopied, AppResources.VerificationCodeTotp));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task TotpTickAsync()
|
public async Task TotpTickAsync()
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ namespace Bit.App.Pages
|
|||||||
private bool _websiteIconsEnabled;
|
private bool _websiteIconsEnabled;
|
||||||
private bool _syncRefreshing;
|
private bool _syncRefreshing;
|
||||||
private bool _showTotpFilter;
|
private bool _showTotpFilter;
|
||||||
private bool _totpFilterEnable;
|
|
||||||
private string _noDataText;
|
private string _noDataText;
|
||||||
private List<CipherView> _allCiphers;
|
private List<CipherView> _allCiphers;
|
||||||
private Dictionary<string, int> _folderCounts = new Dictionary<string, int>();
|
private Dictionary<string, int> _folderCounts = new Dictionary<string, int>();
|
||||||
@@ -150,11 +149,6 @@ namespace Bit.App.Pages
|
|||||||
get => _showList;
|
get => _showList;
|
||||||
set => SetProperty(ref _showList, value);
|
set => SetProperty(ref _showList, value);
|
||||||
}
|
}
|
||||||
public bool WebsiteIconsEnabled
|
|
||||||
{
|
|
||||||
get => _websiteIconsEnabled;
|
|
||||||
set => SetProperty(ref _websiteIconsEnabled, value);
|
|
||||||
}
|
|
||||||
public bool ShowTotp
|
public bool ShowTotp
|
||||||
{
|
{
|
||||||
get => _showTotpFilter;
|
get => _showTotpFilter;
|
||||||
@@ -206,7 +200,7 @@ namespace Bit.App.Pages
|
|||||||
var groupedItems = new List<GroupingsPageListGroup>();
|
var groupedItems = new List<GroupingsPageListGroup>();
|
||||||
var page = Page as GroupingsPage;
|
var page = Page as GroupingsPage;
|
||||||
|
|
||||||
WebsiteIconsEnabled = !(await _stateService.GetDisableFaviconAsync()).GetValueOrDefault();
|
_websiteIconsEnabled = await _stateService.GetDisableFaviconAsync() != true;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await LoadDataAsync();
|
await LoadDataAsync();
|
||||||
@@ -225,7 +219,7 @@ namespace Bit.App.Pages
|
|||||||
var hasFavorites = FavoriteCiphers?.Any() ?? false;
|
var hasFavorites = FavoriteCiphers?.Any() ?? false;
|
||||||
if (hasFavorites)
|
if (hasFavorites)
|
||||||
{
|
{
|
||||||
var favListItems = FavoriteCiphers.Select(c => new GroupingsPageListItem { Cipher = c }).ToList();
|
var favListItems = FavoriteCiphers.Select(c => new CipherItemViewModel(c, _websiteIconsEnabled)).ToList();
|
||||||
groupedItems.Add(new GroupingsPageListGroup(favListItems, AppResources.Favorites,
|
groupedItems.Add(new GroupingsPageListGroup(favListItems, AppResources.Favorites,
|
||||||
favListItems.Count, uppercaseGroupNames, true));
|
favListItems.Count, uppercaseGroupNames, true));
|
||||||
}
|
}
|
||||||
@@ -282,7 +276,7 @@ namespace Bit.App.Pages
|
|||||||
if (ShowNoFolderCipherGroup)
|
if (ShowNoFolderCipherGroup)
|
||||||
{
|
{
|
||||||
var noFolderCiphersListItems = NoFolderCiphers.Select(
|
var noFolderCiphersListItems = NoFolderCiphers.Select(
|
||||||
c => new GroupingsPageListItem { Cipher = c }).ToList();
|
c => new CipherItemViewModel(c, _websiteIconsEnabled)).ToList();
|
||||||
groupedItems.Add(new GroupingsPageListGroup(noFolderCiphersListItems, AppResources.FolderNone,
|
groupedItems.Add(new GroupingsPageListGroup(noFolderCiphersListItems, AppResources.FolderNone,
|
||||||
noFolderCiphersListItems.Count, uppercaseGroupNames, false));
|
noFolderCiphersListItems.Count, uppercaseGroupNames, false));
|
||||||
}
|
}
|
||||||
@@ -399,7 +393,7 @@ namespace Bit.App.Pages
|
|||||||
_totpTickCts?.Cancel();
|
_totpTickCts?.Cancel();
|
||||||
if (ShowTotp)
|
if (ShowTotp)
|
||||||
{
|
{
|
||||||
var ciphersListItems = TOTPCiphers.Select(c => new GroupingsPageTOTPListItem(c, true)).ToList();
|
var ciphersListItems = TOTPCiphers.Select(c => new GroupingsPageTOTPListItem(c, _websiteIconsEnabled)).ToList();
|
||||||
groupedItems.Add(new GroupingsPageListGroup(ciphersListItems, AppResources.Items,
|
groupedItems.Add(new GroupingsPageListGroup(ciphersListItems, AppResources.Items,
|
||||||
ciphersListItems.Count, uppercaseGroupNames, !MainPage && !groupedItems.Any()));
|
ciphersListItems.Count, uppercaseGroupNames, !MainPage && !groupedItems.Any()));
|
||||||
|
|
||||||
@@ -408,7 +402,7 @@ namespace Bit.App.Pages
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var ciphersListItems = Ciphers.Where(c => c.IsDeleted == Deleted)
|
var ciphersListItems = Ciphers.Where(c => c.IsDeleted == Deleted)
|
||||||
.Select(c => new GroupingsPageListItem { Cipher = c }).ToList();
|
.Select(c => new CipherItemViewModel(c, _websiteIconsEnabled)).ToList();
|
||||||
groupedItems.Add(new GroupingsPageListGroup(ciphersListItems, AppResources.Items,
|
groupedItems.Add(new GroupingsPageListGroup(ciphersListItems, AppResources.Items,
|
||||||
ciphersListItems.Count, uppercaseGroupNames, !MainPage && !groupedItems.Any()));
|
ciphersListItems.Count, uppercaseGroupNames, !MainPage && !groupedItems.Any()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
using System;
|
using Bit.Core.Abstractions;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Bit.Core.Resources.Localization;
|
|
||||||
using Bit.Core.Abstractions;
|
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Resources.Localization;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Microsoft.Maui.Controls;
|
|
||||||
using Microsoft.Maui;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@@ -42,7 +36,7 @@ namespace Bit.App.Pages
|
|||||||
if (ciphers?.Any() ?? false)
|
if (ciphers?.Any() ?? false)
|
||||||
{
|
{
|
||||||
groupedItems.Add(
|
groupedItems.Add(
|
||||||
new GroupingsPageListGroup(ciphers.Select(c => new GroupingsPageListItem { Cipher = c }).ToList(),
|
new GroupingsPageListGroup(ciphers.Select(c => new CipherItemViewModel(c, WebsiteIconsEnabled)).ToList(),
|
||||||
AppResources.MatchingItems,
|
AppResources.MatchingItems,
|
||||||
ciphers.Count,
|
ciphers.Count,
|
||||||
false,
|
false,
|
||||||
@@ -54,7 +48,7 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
protected override async Task SelectCipherAsync(IGroupingsPageListItem item)
|
protected override async Task SelectCipherAsync(IGroupingsPageListItem item)
|
||||||
{
|
{
|
||||||
if (!(item is GroupingsPageListItem listItem) || listItem.Cipher is null)
|
if (!(item is CipherItemViewModel listItem) || listItem.Cipher is null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2863,12 +2863,12 @@
|
|||||||
<value>تم تسجيل الخروج من الحساب.</value>
|
<value>تم تسجيل الخروج من الحساب.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Your organization permissions were updated, requiring you to set a master password.</value>
|
<value>تم تحديث أذونات مؤسستك ، مما يتطلب عليك تعيين كلمة مرور رئيسية.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Your organization requires you to set a master password.</value>
|
<value>تتطلب مؤسستك تعيين كلمة مرور رئيسية.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Set up an unlock option to change your vault timeout action.</value>
|
<value>أعدنّ ميزة إلغاء القُفْل لتغيير إجراء مهلة المخزن الخاص بك.</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -209,7 +209,7 @@
|
|||||||
<value>GitHub repository-də problemi bildirin.</value>
|
<value>GitHub repository-də problemi bildirin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FingerprintDirection" xml:space="preserve">
|
<data name="FingerprintDirection" xml:space="preserve">
|
||||||
<value>Təsdiqləmək üçün barmaq izinizi istifadə edin.</value>
|
<value>Doğrulamaq üçün barmaq izinizi istifadə edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Folder" xml:space="preserve">
|
<data name="Folder" xml:space="preserve">
|
||||||
<value>Qovluq</value>
|
<value>Qovluq</value>
|
||||||
@@ -236,14 +236,14 @@
|
|||||||
<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>Kömək və əks əlaqə</value>
|
<value>Kömək və əks-əlaqə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Hide" xml:space="preserve">
|
<data name="Hide" xml:space="preserve">
|
||||||
<value>Gizlət</value>
|
<value>Gizlət</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>Davam etməzdən əvvəl zəhmət olmasa internetə bağlanın.</value>
|
<value>Davam etməzdən əvvəl lütfən internetə bağlanın.</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">
|
||||||
@@ -300,7 +300,7 @@
|
|||||||
<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">
|
||||||
<value>Kimlik təsdiqləyici</value>
|
<value>Kimlik doğrulayıcı</value>
|
||||||
<comment>Authenticator TOTP feature</comment>
|
<comment>Authenticator TOTP feature</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Name" xml:space="preserve">
|
<data name="Name" xml:space="preserve">
|
||||||
@@ -334,7 +334,7 @@
|
|||||||
<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>Tənzimləmələr</value>
|
<value>Ayarlar</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">
|
||||||
@@ -379,13 +379,13 @@
|
|||||||
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyFingerprint" xml:space="preserve">
|
<data name="VerifyFingerprint" xml:space="preserve">
|
||||||
<value>Barmaq izini təsdiqlə</value>
|
<value>Barmaq izini doğrula</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyMasterPassword" xml:space="preserve">
|
<data name="VerifyMasterPassword" xml:space="preserve">
|
||||||
<value>Ana parolu təsdiqlə</value>
|
<value>Ana parolu doğrula</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyPIN" xml:space="preserve">
|
<data name="VerifyPIN" xml:space="preserve">
|
||||||
<value>PIN-i təsdiqlə</value>
|
<value>PIN-i doğrula</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Version" xml:space="preserve">
|
<data name="Version" xml:space="preserve">
|
||||||
<value>Versiya</value>
|
<value>Versiya</value>
|
||||||
@@ -413,7 +413,7 @@
|
|||||||
<value>Element əlavə et</value>
|
<value>Element əlavə et</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AppExtension" xml:space="preserve">
|
<data name="AppExtension" xml:space="preserve">
|
||||||
<value>Tətbiq genişləndirməsi</value>
|
<value>Tətbiq uzantısı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
||||||
<value>Tətbiq və veb saytda giriş məlumatlarının avto-doldurulması üçün Bitwarden əlçatımlılıq xidmətini istifadə edin.</value>
|
<value>Tətbiq və veb saytda giriş məlumatlarının avto-doldurulması üçün Bitwarden əlçatımlılıq xidmətini istifadə edin.</value>
|
||||||
@@ -425,10 +425,10 @@
|
|||||||
<value>Anlaşılmaz simvollardan çəkinin</value>
|
<value>Anlaşılmaz simvollardan çəkinin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtension" xml:space="preserve">
|
<data name="BitwardenAppExtension" xml:space="preserve">
|
||||||
<value>Bitwarden tətbiq genişləndirməsi</value>
|
<value>Bitwarden tətbiq uzantısı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>Anbarınıza yeni hesab əlavə etməyin ən asan yolu, Bitwarden tətbiq genişləndirməsidir. Bu genişləndirmə haqqında daha ətraflı məlumat üçün "Tənzimləmələr" ekranına gedin.</value>
|
<value>Anbarınıza yeni hesab əlavə etməyin ən asan yolu, Bitwarden tətbiq uzantısıdır. Bu uzantı haqqında daha ətraflı məlumat üçün "Ayarlar" ekranına gedin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||||
<value>Giriş məlumatlarının avto-doldurulması üçün Safari-də və digər tətbiqlərdə Bitwarden-i istifadə edin.</value>
|
<value>Giriş məlumatlarının avto-doldurulması üçün Safari-də və digər tətbiqlərdə Bitwarden-i istifadə edin.</value>
|
||||||
@@ -471,13 +471,13 @@
|
|||||||
<value>Ana parol məsləhətini alacağınız hesabınızın e-poçt ünvanını daxil edin.</value>
|
<value>Ana parol məsləhətini alacağınız hesabınızın e-poçt ünvanını daxil edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExntesionReenable" xml:space="preserve">
|
<data name="ExntesionReenable" xml:space="preserve">
|
||||||
<value>Tətbiq genişləndirməsini təkrar fəallaşdır</value>
|
<value>Tətbiq uzantısını təkrar aktivləşdir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionAlmostDone" xml:space="preserve">
|
<data name="ExtensionAlmostDone" xml:space="preserve">
|
||||||
<value>Demək olar ki, hazırdır!</value>
|
<value>Demək olar ki, hazırdır!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionEnable" xml:space="preserve">
|
<data name="ExtensionEnable" xml:space="preserve">
|
||||||
<value>Tətbiq genişləndirməsini fəallaşdır</value>
|
<value>Tətbiq uzantısını aktivləşdir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionInSafari" xml:space="preserve">
|
<data name="ExtensionInSafari" xml:space="preserve">
|
||||||
<value>Safari-də paylaş nişanını istifadə edərək Bitwarden-i tapın (məsləhət: Menyunun ən alt sətrinin sağ hissəsinə baxın).</value>
|
<value>Safari-də paylaş nişanını istifadə edərək Bitwarden-i tapın (məsləhət: Menyunun ən alt sətrinin sağ hissəsinə baxın).</value>
|
||||||
@@ -496,7 +496,7 @@
|
|||||||
<value>Safari və Chrome-da paylaş nişanını istifadə edərək Bitwarden-i tapın (məsləhət: Paylaş menyusunun ən alt sətrinin sağ hissəsinə baxın).</value>
|
<value>Safari və Chrome-da paylaş nişanını istifadə edərək Bitwarden-i tapın (məsləhət: Paylaş menyusunun ən alt sətrinin sağ hissəsinə baxın).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionTapIcon" xml:space="preserve">
|
<data name="ExtensionTapIcon" xml:space="preserve">
|
||||||
<value>Genişləndirməni başlatmaq üçün menyudakı Bitwarden nişanına toxunun.</value>
|
<value>Uzantını başlatmaq üçün menyudakı Bitwarden nişanına toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionTurnOn" xml:space="preserve">
|
<data name="ExtensionTurnOn" xml:space="preserve">
|
||||||
<value>Safari və digər tətbiqlərdə Bitwarden-i işə salmaq üçün menyunun ən alt sətrindəki "daha çox" nişanına toxunun.</value>
|
<value>Safari və digər tətbiqlərdə Bitwarden-i işə salmaq üçün menyunun ən alt sətrindəki "daha çox" nişanına toxunun.</value>
|
||||||
@@ -514,13 +514,13 @@
|
|||||||
<value>Ana parolunuz üçün məsləhət alın</value>
|
<value>Ana parolunuz üçün məsləhət alın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItems" xml:space="preserve">
|
<data name="ImportItems" xml:space="preserve">
|
||||||
<value>Elementləri idxal et</value>
|
<value>Elementləri daxilə köçür</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItemsConfirmation" xml:space="preserve">
|
<data name="ImportItemsConfirmation" xml:space="preserve">
|
||||||
<value>bitwarden.com veb anbarından elementləri toplu formada idxal edə bilərsiniz. Veb saytı indi ziyarət etmək istəyirsiniz?</value>
|
<value>bitwarden.com veb anbarından elementləri toplu formada daxilə köçürə bilərsiniz. Veb saytı indi ziyarət etmək istəyirsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItemsDescription" xml:space="preserve">
|
<data name="ImportItemsDescription" xml:space="preserve">
|
||||||
<value>Digər parol idarəetmə tətbiqlərindəki elementləri cəld və toplu formada idxal edin.</value>
|
<value>Digər parol idarəetmə tətbiqlərindəki elementləri cəld və toplu formada daxilə köçürün.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LastSync" xml:space="preserve">
|
<data name="LastSync" xml:space="preserve">
|
||||||
<value>Son eyniləşdirmə:</value>
|
<value>Son eyniləşdirmə:</value>
|
||||||
@@ -553,7 +553,7 @@
|
|||||||
<value>Anbara müraciət vaxtının bitmə əməliyyatı</value>
|
<value>Anbara müraciət vaxtının bitmə əməliyyatı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||||
<value>Çıxış edəndə, anbarınıza bütün müraciətiniz dayanacaq və vaxt bitməsindən sonra onlayn kimlik təsdiqləməsi tələb olunacaq. Bu tənzimləməni istifadə etmək istədiyinizə əminsiniz?</value>
|
<value>Çıxış edəndə, anbarınıza bütün müraciətiniz dayanacaq və vaxt bitməsindən sonra onlayn kimlik doğrulaması tələb olunacaq. Bu ayarı istifadə etmək istədiyinizə əminsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingIn" xml:space="preserve">
|
<data name="LoggingIn" xml:space="preserve">
|
||||||
<value>Giriş edilir...</value>
|
<value>Giriş edilir...</value>
|
||||||
@@ -589,10 +589,10 @@
|
|||||||
<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">
|
||||||
<value>Daha çox tənzimləmə</value>
|
<value>Daha çox ayar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MustLogInMainApp" xml:space="preserve">
|
<data name="MustLogInMainApp" xml:space="preserve">
|
||||||
<value>Genişləndirməni istifadə edə bilmək üçün Bitwarden tətbiqində giriş etməlisiniz.</value>
|
<value>Uzantını istifadə edə bilmək üçün Bitwarden tətbiqində giriş etməlisiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Never" xml:space="preserve">
|
<data name="Never" xml:space="preserve">
|
||||||
<value>Heç vaxt</value>
|
<value>Heç vaxt</value>
|
||||||
@@ -617,7 +617,7 @@
|
|||||||
<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>İlkin tənzimləmələr, əsas Bitwarden tətbiqinin parol yaratma alətindən tənzimlənir.</value>
|
<value>İlkin seçim dəyərləri, əsas Bitwarden tətbiqinin parol yaratma alətindən ayarlanır.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Options" xml:space="preserve">
|
<data name="Options" xml:space="preserve">
|
||||||
<value>Seçimlər</value>
|
<value>Seçimlər</value>
|
||||||
@@ -708,11 +708,11 @@
|
|||||||
<value>PIN kod ilə kilidi açın</value>
|
<value>PIN kod ilə kilidi açın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Validating" xml:space="preserve">
|
<data name="Validating" xml:space="preserve">
|
||||||
<value>Təsdiqlənir</value>
|
<value>Doğrulanır</value>
|
||||||
<comment>Message shown when interacting with the server</comment>
|
<comment>Message shown when interacting with the server</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationCode" xml:space="preserve">
|
<data name="VerificationCode" xml:space="preserve">
|
||||||
<value>Təsdiqləmə kodu</value>
|
<value>Doğrulama kodu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ViewItem" xml:space="preserve">
|
<data name="ViewItem" xml:space="preserve">
|
||||||
<value>Elementə bax</value>
|
<value>Elementə bax</value>
|
||||||
@@ -721,14 +721,14 @@
|
|||||||
<value>Bitwarden veb anbarı</value>
|
<value>Bitwarden veb anbarı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Lost2FAApp" xml:space="preserve">
|
<data name="Lost2FAApp" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici tətbiqini itirmisiniz?</value>
|
<value>Kimlik doğrulayıcı tətbiqini itirmisiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Items" xml:space="preserve">
|
<data name="Items" xml:space="preserve">
|
||||||
<value>Elementlər</value>
|
<value>Elementlər</value>
|
||||||
<comment>Screen title</comment>
|
<comment>Screen title</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionActivated" xml:space="preserve">
|
<data name="ExtensionActivated" xml:space="preserve">
|
||||||
<value>Genişləndirmə aktivləşdirildi!</value>
|
<value>Uzantı aktivləşdirildi!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Icons" xml:space="preserve">
|
<data name="Icons" xml:space="preserve">
|
||||||
<value>Nişanlar</value>
|
<value>Nişanlar</value>
|
||||||
@@ -751,13 +751,13 @@
|
|||||||
<value>Anbarınızdakı bir elementi avto-doldurmaq üçün bu bildirişə toxunun.</value>
|
<value>Anbarınızdakı bir elementi avto-doldurmaq üçün bu bildirişə toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
||||||
<value>Əlçatımlılıq tənzimləmələrini açın</value>
|
<value>Əlçatımlılıq Ayarlarını aç</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
|
<data name="BitwardenAutofillServiceStep1" xml:space="preserve">
|
||||||
<value>1. Android əlçatımlılıq xidmətləri ekranında Xidmətlər başlığı altındakı "Bitwarden"ə toxunun.</value>
|
<value>1. Android əlçatımlılıq xidmətləri ekranında Xidmətlər başlığı altındakı "Bitwarden"ə toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
|
<data name="BitwardenAutofillServiceStep2" xml:space="preserve">
|
||||||
<value>2. Tənzimləməni açın və Olduya basaraq qəbul edin.</value>
|
<value>2. Ayarı açın və Olduya basaraq qəbul edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Disabled" xml:space="preserve">
|
<data name="Disabled" xml:space="preserve">
|
||||||
<value>Sıradan çıxarıldı</value>
|
<value>Sıradan çıxarıldı</value>
|
||||||
@@ -775,7 +775,7 @@
|
|||||||
<value>Vəziyyət</value>
|
<value>Vəziyyət</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
||||||
<value>Anbarınıza yeni hesab əlavə etməyin ən asan yolu, Bitwarden avto-doldurma xidmətidir. Bu xidmət haqqında daha ətraflı məlumat üçün "Tənzimləmələr" ekranına gedin.</value>
|
<value>Anbarınıza yeni hesab əlavə etməyin ən asan yolu, Bitwarden avto-doldurma xidmətidir. Bu xidmət haqqında daha ətraflı məlumat üçün "Ayarlar" ekranına gedin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Autofill" xml:space="preserve">
|
<data name="Autofill" xml:space="preserve">
|
||||||
<value>Avto-doldurma</value>
|
<value>Avto-doldurma</value>
|
||||||
@@ -806,15 +806,15 @@
|
|||||||
<comment>Message shown when trying to launch an app that does not exist on the user's device.</comment>
|
<comment>Message shown when trying to launch an app that does not exist on the user's device.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AuthenticatorAppTitle" xml:space="preserve">
|
<data name="AuthenticatorAppTitle" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici tətbiqi</value>
|
<value>Kimlik doğrulayıcı tətbiqi</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
<data name="EnterVerificationCodeApp" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici tətbiqindən 6 rəqəmli təsdiqləmə kodunu daxil edin.</value>
|
<value>Kimlik doğrulayıcı tətbiqindən 6 rəqəmli doğrulama kodunu daxil edin.</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
<data name="EnterVerificationCodeEmail" xml:space="preserve">
|
||||||
<value>{0} ünvanına göndərilən e-poçtdakı 6 rəqəmli təsdiqləmə kodunu daxil edin.</value>
|
<value>{0} ünvanına göndərilən e-poçtdakı 6 rəqəmli doğrulama kodunu daxil edin.</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginUnavailable" xml:space="preserve">
|
<data name="LoginUnavailable" xml:space="preserve">
|
||||||
@@ -822,7 +822,7 @@
|
|||||||
<comment>For 2FA whenever there are no available providers on this device.</comment>
|
<comment>For 2FA whenever there are no available providers on this device.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoTwoStepAvailable" xml:space="preserve">
|
<data name="NoTwoStepAvailable" xml:space="preserve">
|
||||||
<value>Bu hesabda ikir mərhələli giriş fəaldır, ancaq konfiqurasiya edilmiş iki mərhələli təchizatçıların heç biri bu cihazda dəstəklənmir. Zəhmət olmasa dəstəklənən cihaz istifadə edin və/və ya fərqli cihazda dəstəklənən yeni provayderlər əlavə edin (məs. kimlik təsdiqləyici tətbiqi).</value>
|
<value>Bu hesabda iki addımlı giriş qurulub, ancaq konfiqurasiya edilmiş iki addımlı provayderlərin heç biri bu cihazda dəstəklənmir. Lütfən dəstəklənən cihaz istifadə edin və/və ya fərqli cihazda dəstəklənən yeni provayderlər əlavə edin (məs. kimlik doğrulayıcı tətbiq).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RecoveryCodeTitle" xml:space="preserve">
|
<data name="RecoveryCodeTitle" xml:space="preserve">
|
||||||
<value>Bərpa kodu</value>
|
<value>Bərpa kodu</value>
|
||||||
@@ -833,7 +833,7 @@
|
|||||||
<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">
|
||||||
<value>Təsdiqləmə kodu olan e-poçtu yenidən göndər</value>
|
<value>Doğrulama kodu olan e-poçtu yenidən göndər</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginOptions" xml:space="preserve">
|
<data name="TwoStepLoginOptions" xml:space="preserve">
|
||||||
@@ -843,11 +843,11 @@
|
|||||||
<value>Başqa bir iki mərhələli giriş metodu istifadə edin</value>
|
<value>Başqa bir iki mərhələli giriş metodu istifadə edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailNotSent" xml:space="preserve">
|
<data name="VerificationEmailNotSent" xml:space="preserve">
|
||||||
<value>Təsdiqləmə e-poçtu göndərilə bilmədi. Yenidən sınayın.</value>
|
<value>Doğrulama e-poçtu göndərilə bilmədi. Yenidən sınayın.</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailSent" xml:space="preserve">
|
<data name="VerificationEmailSent" xml:space="preserve">
|
||||||
<value>Təsdiqləmə e-poçtu göndərildi.</value>
|
<value>Doğrulama e-poçtu göndərildi</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="YubiKeyInstruction" xml:space="preserve">
|
<data name="YubiKeyInstruction" xml:space="preserve">
|
||||||
@@ -878,17 +878,17 @@
|
|||||||
<comment>The placeholder will show the file size of the attachment. Ex "25 MB"</comment>
|
<comment>The placeholder will show the file size of the attachment. Ex "25 MB"</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AuthenticatorKey" xml:space="preserve">
|
<data name="AuthenticatorKey" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici açarı (TOTP)</value>
|
<value>Kimlik doğrulayıcı açarı (TOTP)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationCodeTotp" xml:space="preserve">
|
<data name="VerificationCodeTotp" xml:space="preserve">
|
||||||
<value>Təsdiqləmə kodu (TOTP)</value>
|
<value>Doğrulama kodu (TOTP)</value>
|
||||||
<comment>Totp code label</comment>
|
<comment>Totp code label</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AuthenticatorKeyAdded" xml:space="preserve">
|
<data name="AuthenticatorKeyAdded" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici açarı əlavə edildi.</value>
|
<value>Kimlik doğrulayıcı açarı əlavə edildi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AuthenticatorKeyReadError" xml:space="preserve">
|
<data name="AuthenticatorKeyReadError" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici açarı oxuna bilmir.</value>
|
<value>Kimlik doğrulayıcı açarı oxuna bilmir.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
||||||
<value>Kameranızı QR koduna yönəldin.
|
<value>Kameranızı QR koduna yönəldin.
|
||||||
@@ -907,7 +907,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>TOTP-ni kopyala</value>
|
<value>TOTP-ni kopyala</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
||||||
<value>Bir girişin, kimlik təsdiqləyici açarı varsa, giriş məlumatları avto-doldurulanda TOTP təsdiqləmə kodunu kopyalayın.</value>
|
<value>Bir giriş prosesinin kimlik doğrulayıcı açarı varsa, giriş məlumatları avto-doldurulanda TOTP doğrulama kodunu kopyalayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomatically" xml:space="preserve">
|
<data name="CopyTotpAutomatically" xml:space="preserve">
|
||||||
<value>TOTP-ni avtomatik kopyala</value>
|
<value>TOTP-ni avtomatik kopyala</value>
|
||||||
@@ -946,7 +946,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Şifrələmə açarınızı güncəlləyənə qədər bu özəlliyi istifadə edə bilməzsiniz.</value>
|
<value>Şifrələmə açarınızı güncəlləyənə qədər bu özəlliyi istifadə edə bilməzsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||||
<value>Şifrələmə açarının daşınması tələb olunur. Şifrələmə açarınızı güncəlləmək üçün zəhmət olmasa veb anbar üzərindən giriş edin.</value>
|
<value>Şifrələmə açarının daşınması tələb olunur. Şifrələmə açarınızı güncəlləmək üçün lütfən veb anbar üzərindən giriş edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMore" xml:space="preserve">
|
<data name="LearnMore" xml:space="preserve">
|
||||||
<value>Daha ətraflı</value>
|
<value>Daha ətraflı</value>
|
||||||
@@ -1173,26 +1173,26 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Digər tətbiqlərdəki giriş məlumatlarının, kredit kartlarının və kimlik məlumatlarının doldurulması üçün Bitwarden avto-doldurma xidmətini istifadə edin.</value>
|
<value>Digər tətbiqlərdəki giriş məlumatlarının, kredit kartlarının və kimlik məlumatlarının doldurulması üçün Bitwarden avto-doldurma xidmətini istifadə edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
|
||||||
<value>Avto-doldurma tənzimləmələrini açın</value>
|
<value>Avto-doldurma ayarlarını aç</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FaceID" xml:space="preserve">
|
<data name="FaceID" xml:space="preserve">
|
||||||
<value>Face ID</value>
|
<value>Face ID</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">
|
||||||
<value>Təsdiqləmə üçün Face ID istifadə edin.</value>
|
<value>Doğrulamaq üçün Face ID istifadə edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseFaceIDToUnlock" xml:space="preserve">
|
<data name="UseFaceIDToUnlock" xml:space="preserve">
|
||||||
<value>Kilidi açmaq üçün Face ID istifadə edin</value>
|
<value>Kilidi açmaq üçün Face ID istifadə edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyFaceID" xml:space="preserve">
|
<data name="VerifyFaceID" xml:space="preserve">
|
||||||
<value>Face ID-ni təsdiqlə</value>
|
<value>Face ID-ni doğrula</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WindowsHello" xml:space="preserve">
|
<data name="WindowsHello" xml:space="preserve">
|
||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
<data name="BitwardenAutofillGoToSettings" xml:space="preserve">
|
||||||
<value>Android avto-doldurma tənzimləmələri menyusunu avtomatik aça bilmədik. Bu menyunu tapmaq üçün Android Tənzimləmələri > Sistem > Dillər və daxiletmə > Qabaqcıl > "Avto-doldurma xidməti"nə gedin.</value>
|
<value>Android avto-doldurma ayarları menyusunu avtomatik aça bilmədik. Bu menyunu tapmaq üçün Android Ayarları > Sistem > Dillər və giriş > Qabaqcıl > "Avto-doldurma xidməti"nə gedin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CustomFieldName" xml:space="preserve">
|
<data name="CustomFieldName" xml:space="preserve">
|
||||||
<value>Özəl sahə adı</value>
|
<value>Özəl sahə adı</value>
|
||||||
@@ -1292,7 +1292,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Tətbiqlərdə və veb saytlarda giriş edərkən giriş etmə məlumatlarınıza klaviaturadan asanlıqla müraciət edə bilərsiniz.</value>
|
<value>Tətbiqlərdə və veb saytlarda giriş edərkən giriş etmə məlumatlarınıza klaviaturadan asanlıqla müraciət edə bilərsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillSetup2" xml:space="preserve">
|
<data name="AutofillSetup2" xml:space="preserve">
|
||||||
<value>Digər Avto-doldurma tətbiqləriniz varssa və onları istifadə etməyi düşünmürsünüzsə, Tənzimləmələrdə sıradan çıxara bilərsiniz.</value>
|
<value>İstifadə etməyi düşünmürsünüzsə, digər Avto-doldurma tətbiqlərini Ayarlarda sıradan çıxartmağı tövsiyə edirik.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
<data name="BitwardenAutofillDescription" xml:space="preserve">
|
||||||
<value>Parollarınızın cəld avto-doldurulması üçün anbarınıza birbaşa klaviaturanızdan müraciət edin.</value>
|
<value>Parollarınızın cəld avto-doldurulması üçün anbarınıza birbaşa klaviaturanızdan müraciət edin.</value>
|
||||||
@@ -1301,7 +1301,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Cihazınızda parolun avto-doldurulması üçün aşağıdakı təlimatları izləyin:</value>
|
<value>Cihazınızda parolun avto-doldurulması üçün aşağıdakı təlimatları izləyin:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn1" xml:space="preserve">
|
<data name="AutofillTurnOn1" xml:space="preserve">
|
||||||
<value>1. iOS "Tənzimləmələri"nə gedin</value>
|
<value>1. iOS "Ayarları"na gedin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn2" xml:space="preserve">
|
<data name="AutofillTurnOn2" xml:space="preserve">
|
||||||
<value>2. "Parollar və Hesablar"a toxunun.</value>
|
<value>2. "Parollar və Hesablar"a toxunun.</value>
|
||||||
@@ -1319,7 +1319,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Parolun avto-doldurulması</value>
|
<value>Parolun avto-doldurulması</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
||||||
<value>Anbarınıza yeni giriş məlumatlarını əlavə etməyin ən asan yolu, Bitwarden parol avto-doldurma genişləndirməsidir. Bu genişləndirmə haqqında daha ətraflı məlumat almaq üçün "Tənzimləmələr" ekranına gedin.</value>
|
<value>Anbarınıza yeni giriş məlumatlarını əlavə etməyin ən asan yolu, Bitwarden parol avto-doldurma uzantısıdır. Bu uzantı haqqında daha ətraflı məlumat almaq üçün "Ayarlar" ekranına gedin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidEmail" xml:space="preserve">
|
<data name="InvalidEmail" xml:space="preserve">
|
||||||
<value>Yararsız e-poçt ünvanı.</value>
|
<value>Yararsız e-poçt ünvanı.</value>
|
||||||
@@ -1465,7 +1465,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Bitwarden, bir təşkilat hesabı istifadə edərək anbar elementlərinizi başqaları ilə paylaşmağınıza icazə verər. Daha ətraflı məlumat üçün bitwarden.com saytını ziyarət etmək istəyirsiniz?</value>
|
<value>Bitwarden, bir təşkilat hesabı istifadə edərək anbar elementlərinizi başqaları ilə paylaşmağınıza icazə verər. Daha ətraflı məlumat üçün bitwarden.com saytını ziyarət etmək istəyirsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVault" xml:space="preserve">
|
<data name="ExportVault" xml:space="preserve">
|
||||||
<value>Anbarı ixrac et</value>
|
<value>Anbarı xaricə köçür</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LockNow" xml:space="preserve">
|
<data name="LockNow" xml:space="preserve">
|
||||||
<value>İndi kilidlə</value>
|
<value>İndi kilidlə</value>
|
||||||
@@ -1483,20 +1483,20 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>30 dəqiqə</value>
|
<value>30 dəqiqə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetPINDescription" xml:space="preserve">
|
<data name="SetPINDescription" xml:space="preserve">
|
||||||
<value>Bitwarden-in kilidini açmaq üçün PIN kod tənzimləyin. Hər tətbiqdən tam çıxış edəndə PIN tənzimləmələriniz sıfırlanacaq.</value>
|
<value>Bitwarden-in kilidini açmaq üçün PIN kodunuzu ayarlayın. Tətbiqdən tam çıxış etdikdə PIN ayarlarınız sıfırlanacaq.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggedInAsOn" xml:space="preserve">
|
<data name="LoggedInAsOn" xml:space="preserve">
|
||||||
<value>{1} saytında {0} kimi giriş edildi.</value>
|
<value>{1} saytında {0} kimi giriş edildi.</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>Anbarınız kilidlənib. Davam etmək üçün ana parolunuzu təsdiqləyin.</value>
|
<value>Anbarınız kilidlənib. Davam etmək üçün ana parolunuzu doğrulayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedPIN" xml:space="preserve">
|
<data name="VaultLockedPIN" xml:space="preserve">
|
||||||
<value>Anbarınız kilidlənib. Davam etmək üçün PIN kodunuzu təsdiqləyin.</value>
|
<value>Anbarınız kilidlənib. Davam etmək üçün PIN kodunuzu doğrulayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultLockedIdentity" xml:space="preserve">
|
<data name="VaultLockedIdentity" xml:space="preserve">
|
||||||
<value>Anbarınız kilidlənib. Davam etmək üçün kimliyinizi təsdiqləyin.</value>
|
<value>Anbarınız kilidlənib. Davam etmək üçün kimliyinizi doğrulayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Dark" xml:space="preserve">
|
<data name="Dark" xml:space="preserve">
|
||||||
<value>Tünd</value>
|
<value>Tünd</value>
|
||||||
@@ -1586,7 +1586,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Tətbiq yenidən başladılanda</value>
|
<value>Tətbiq yenidən başladılanda</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||||
<value>Avto-doldurma, veb sayt və tətbiqlərdən Bitwarden anbarınıza güvənli şəkildə müraciət etməyinizi asanlaşdırır. Deyəsən, Bitwarden üçün avto-doldurma xidmətini fəallaşdırmamısınız. "Tənzimləmələr" ekranında Bitwarden üçün avto-doldurma xidmətini fəallaşdırın.</value>
|
<value>Avto-doldurma, veb sayt və tətbiqlərdən Bitwarden anbarınıza güvənli şəkildə müraciət etməyinizi asanlaşdırır. Deyəsən, Bitwarden üçün avto-doldurma xidmətini qurmamısınız. "Ayarlar" ekranında Bitwarden üçün avto-doldurma xidmətini qurun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||||
<value>Tema dəyişiklikləriniz tətbiq yenidən başladılanda tətbiq ediləcək.</value>
|
<value>Tema dəyişiklikləriniz tətbiq yenidən başladılanda tətbiq ediləcək.</value>
|
||||||
@@ -1611,7 +1611,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Seansın müddəti bitdi.</value>
|
<value>Seansın müddəti bitdi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BiometricsDirection" xml:space="preserve">
|
<data name="BiometricsDirection" xml:space="preserve">
|
||||||
<value>Biometrik təsdiqləmə</value>
|
<value>Biometrik doğrulama</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Biometrics" xml:space="preserve">
|
<data name="Biometrics" xml:space="preserve">
|
||||||
<value>Biometrik</value>
|
<value>Biometrik</value>
|
||||||
@@ -1620,19 +1620,19 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Kilidi biometriklə aç</value>
|
<value>Kilidi biometriklə aç</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityOverlayPermissionAlert" xml:space="preserve">
|
<data name="AccessibilityOverlayPermissionAlert" xml:space="preserve">
|
||||||
<value>Bitwarden diqqətinizi tələb edir - Bitwarden Tənzimləmələrində "Avto-doldurma əlçatımlılıq xidməti"nə baxın</value>
|
<value>Bitwarden diqqətinizi tələb edir - Bitwarden ayarlarında "Avto-doldurma əlçatımlılıq xidməti"nə baxın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
||||||
<value>3. Android tətbiq tənzimləmələrində Bitwarden-i tapın və "Digər tətbiqlərin üzərində göstər" seçini açın ("Qabaqcıl" seçimin altında ola bilər).</value>
|
<value>3. Android tətbiq ayarlarında Bitwarden-i tapın və "Digər tətbiqlərin üzərində göstər" seçiminə ("Qabaqcıl" seçimin altında ola bilər) gedin və örtük dəstəyinə icazə vermək üçün açara toxunun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OverlayPermission" xml:space="preserve">
|
<data name="OverlayPermission" xml:space="preserve">
|
||||||
<value>İcazə</value>
|
<value>İcazə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOpenOverlayPermissionSettings" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOpenOverlayPermissionSettings" xml:space="preserve">
|
||||||
<value>Üzərində göstərmə icazə tənzimləmələrini açın</value>
|
<value>Üzərində göstərmə icazə ayarlarını açın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceStep3" xml:space="preserve">
|
<data name="BitwardenAutofillServiceStep3" xml:space="preserve">
|
||||||
<value>3. Android tətbiq tənzimləmələrində Bitwarden-i tapın və "Digər tətbiqlərin üzərində göstər" seçini açın ("Qabaqcıl" seçimin altında ola bilər).</value>
|
<value>3. Android tətbiq ayarlarında Bitwarden-i tapın və "Digər tətbiqlərin üzərində göstər" seçin ("Qabaqcıl" seçimin altında ola bilər) və örtüyə icazə vermək üçün açarı açın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Denied" xml:space="preserve">
|
<data name="Denied" xml:space="preserve">
|
||||||
<value>Rədd edildi</value>
|
<value>Rədd edildi</value>
|
||||||
@@ -1644,38 +1644,38 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Fayl formatı</value>
|
<value>Fayl formatı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
<data name="ExportVaultMasterPasswordDescription" xml:space="preserve">
|
||||||
<value>Anbar verilənlərinizi ixrac etmək üçün ana parolunuzu daxil edin.</value>
|
<value>Anbar datanızı xaricə köçürmək üçün ana parolunuzu daxil edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendVerificationCodeToEmail" xml:space="preserve">
|
<data name="SendVerificationCodeToEmail" xml:space="preserve">
|
||||||
<value>E-poçtunuza bir təsdiqləmə kodu göndərin</value>
|
<value>Doğrulama kodunu e-poçtunuza göndərin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CodeSent" xml:space="preserve">
|
<data name="CodeSent" xml:space="preserve">
|
||||||
<value>Kod göndərildi!</value>
|
<value>Kod göndərildi!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ConfirmYourIdentity" xml:space="preserve">
|
<data name="ConfirmYourIdentity" xml:space="preserve">
|
||||||
<value>Davam etmək üçün kimliyinizi təsdiqləyin.</value>
|
<value>Davam etmək üçün kimliyinizi doğrulayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultWarning" xml:space="preserve">
|
<data name="ExportVaultWarning" xml:space="preserve">
|
||||||
<value>Bu ixrac faylındakı anbar verilənləriniz şifrələnməmiş formatdadır. İxrac edilən faylı, güvənli olmayan kanallar üzərində saxlamamalı və ya göndərməməlisiniz (e-poçt kimi). Bu faylı işiniz bitdikdən sonra dərhal silin.</value>
|
<value>Xaricə köçürdüyünüz bu fayldakı datanız şifrələnməmiş formatdadır. Bu faylı güvənli olmayan kanallar (e-poçt kimi) üzərində saxlamamalı və ya göndərməməlisiniz. İşiniz bitdikdən sonra faylı dərhal silin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncExportKeyWarning" xml:space="preserve">
|
<data name="EncExportKeyWarning" xml:space="preserve">
|
||||||
<value>Bu ixrac faylı, hesabınızın şifrələmə açarını istifadə edərək verilənlərinizi şifrələyir. Hesabınızın şifrələmə açarını döndərsəniz, bu ixrac faylının şifrəsini aça bilməyəcəyiniz üçün yenidən ixrac etməli olacaqsınız.</value>
|
<value>Xaricə köçürdüyünüz bu fayldakı data, hesabınızın şifrələmə açarı istifadə edilərək şifrələnir. Hesabınızın şifrələmə açarını dəyişdirsəniz, bu faylın şifrəsini aça bilməyəcəksiniz və onu yenidən xaricə köçürməli olacaqsınız.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncExportAccountWarning" xml:space="preserve">
|
<data name="EncExportAccountWarning" xml:space="preserve">
|
||||||
<value>Hesab şifrələmə açarları, hər Bitwarden istifadəçi hesabı üçün unikaldır, buna görə də şifrələnmiş bir ixracı, fərqli bir hesaba idxal edə bilməzsiniz.</value>
|
<value>Hesab şifrələmə açarları, hər Bitwarden istifadəçi hesabı üçün unikaldır, buna görə də şifrələnmiş bir xaricə köçürməni, fərqli bir hesaba köçürə bilməzsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
<data name="ExportVaultConfirmationTitle" xml:space="preserve">
|
||||||
<value>Anbarın ixracını təsdiqləyin</value>
|
<value>Anbarın xaricə köçürülməsini təsdiqlə</value>
|
||||||
<comment>Title for the alert to confirm vault exports.</comment>
|
<comment>Title for the alert to confirm vault exports.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Warning" xml:space="preserve">
|
<data name="Warning" xml:space="preserve">
|
||||||
<value>Xəbərdarlıq</value>
|
<value>Xəbərdarlıq</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultFailure" xml:space="preserve">
|
<data name="ExportVaultFailure" xml:space="preserve">
|
||||||
<value>Anbarınızın ixracında problem yarandı. Əgər problem davam edərsə, veb anbarından ixrac etməli olacaqsınız.</value>
|
<value>Anbarınızın xaricə köçürülməsi zamanı problem yarandı. Əgər problem davam edərsə, veb anbarından xaricə köçürməli olacaqsınız.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExportVaultSuccess" xml:space="preserve">
|
<data name="ExportVaultSuccess" xml:space="preserve">
|
||||||
<value>Anbar uğurla ixrac edildi</value>
|
<value>Anbar uğurla xaricə köçürüldü</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Clone" xml:space="preserve">
|
<data name="Clone" xml:space="preserve">
|
||||||
<value>Klonla</value>
|
<value>Klonla</value>
|
||||||
@@ -1695,7 +1695,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Qoşma uğurla saxlanıldı</value>
|
<value>Qoşma uğurla saxlanıldı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTileAccessibilityRequired" xml:space="preserve">
|
<data name="AutofillTileAccessibilityRequired" xml:space="preserve">
|
||||||
<value>Avto-doldurma qutusunu istifadə etmək üçün zəhmət olmasa "Bitwarden" tənzimləmələrində "Avto-doldurma əlçatımlılıq xidməti"ni fəallaşdırın.</value>
|
<value>Avto-doldurma qutusunu istifadə etmək üçün lütfən "Bitwarden" ayarlarında "Avto-doldurma əlçatımlılıq xidməti"ni fəallaşdırın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTileUriNotFound" xml:space="preserve">
|
<data name="AutofillTileUriNotFound" xml:space="preserve">
|
||||||
<value>Heç bir parol sahəsi aşkarlanmadı</value>
|
<value>Heç bir parol sahəsi aşkarlanmadı</value>
|
||||||
@@ -1741,10 +1741,10 @@ Skan prosesi avtomatik baş tutacaq.</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">
|
||||||
<value>Ana parolun təsdiqlənməsi gözlənildiyi üçün bu hesab üzrə biometrik kilid açma sıradan çıxarıldı.</value>
|
<value>Ana parolun doğrulanması gözlənildiyi üçün bu hesab üzrə biometrik kilid açma sıradan çıxarıldı.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
||||||
<value>Ana parolun təsdiqlənməsi gözlənildiyi üçün bu hesab üzrə avto-doldurma biometrik kilid açma sıradan çıxarıldı.</value>
|
<value>Ana parolun doğrulanması gözlənildiyi üçün bu hesab üzrə avto-doldurma biometrik kilid açma sıradan çıxarıldı.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
<data name="EnableSyncOnRefresh" xml:space="preserve">
|
||||||
<value>Təzələmə əsnasında eyniləşdirməni fəallaşdır</value>
|
<value>Təzələmə əsnasında eyniləşdirməni fəallaşdır</value>
|
||||||
@@ -1756,7 +1756,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Müəssisə üçün tək daxil olma</value>
|
<value>Müəssisə üçün tək daxil olma</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInSsoSummary" xml:space="preserve">
|
<data name="LogInSsoSummary" xml:space="preserve">
|
||||||
<value>Təşkilatınızın tək daxil olma portalını istifadə edərək daha tez giriş edə bilərsiniz. Başlatmaq üçün zəhmət olmasa təşkilatınızın identifikatorunu daxil edin.</value>
|
<value>Təşkilatınızın tək daxil olma portalını istifadə edərək daha tez giriş edə bilərsiniz. Başlatmaq üçün lütfən təşkilatınızın identifikatorunu daxil edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OrgIdentifier" xml:space="preserve">
|
<data name="OrgIdentifier" xml:space="preserve">
|
||||||
<value>Təşkilat identifikatoru</value>
|
<value>Təşkilat identifikatoru</value>
|
||||||
@@ -1765,10 +1765,10 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Hazırda SSO ilə giriş edilə bilmir</value>
|
<value>Hazırda SSO ilə giriş edilə bilmir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetMasterPassword" xml:space="preserve">
|
<data name="SetMasterPassword" xml:space="preserve">
|
||||||
<value>Ana parolu tənzimlə</value>
|
<value>Ana parolu ayarla</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
<data name="SetMasterPasswordSummary" xml:space="preserve">
|
||||||
<value>SSO ilə giriş prosesini tamamlamaq üçün zəhmət olmasa anbarınıza müraciət etmək və onu qorumaq üçün bir ana şifrə tənzimləyin.</value>
|
<value>SSO ilə giriş prosesini tamamlamaq üçün lütfən anbarınıza müraciət etmək və onu qorumaq üçün bir ana parol ayarlayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
|
<data name="MasterPasswordPolicyInEffect" xml:space="preserve">
|
||||||
<value>Bir və ya daha çox təşkilat siyasəti, aşağıdakı tələbləri qarşılamaq üçün ana parolunuzu tələb edir:</value>
|
<value>Bir və ya daha çox təşkilat siyasəti, aşağıdakı tələbləri qarşılamaq üçün ana parolunuzu tələb edir:</value>
|
||||||
@@ -1795,7 +1795,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Yararsız parol</value>
|
<value>Yararsız parol</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordPolicyValidationMessage" xml:space="preserve">
|
<data name="MasterPasswordPolicyValidationMessage" xml:space="preserve">
|
||||||
<value>Parol, şirkət tələblərini qarşılamır. Zəhmət olmasa siyasət məlumatlarını yoxlayıb yenidən sınayın.</value>
|
<value>Parol, şirkət tələblərini qarşılamır. Lütfən siyasət məlumatlarını yoxlayıb yenidən sınayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Loading" xml:space="preserve">
|
<data name="Loading" xml:space="preserve">
|
||||||
<value>Yüklənir</value>
|
<value>Yüklənir</value>
|
||||||
@@ -1813,7 +1813,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Gizlilik Siyasəti</value>
|
<value>Gizlilik Siyasəti</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
|
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
|
||||||
<value>Bitwarden diqqətinizi tələb edir - Bitwarden Tənzimləmələrində "Avto-doldurma xidməti"ndə "Üzərindən göstər"i fəallaşdırın</value>
|
<value>Bitwarden diqqətinizi tələb edir - Bitwarden Ayarlarında "Avto-doldurma xidməti"ndə "Üzərindən göstər"i işə salın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Avto-doldurma xidmətləri</value>
|
<value>Avto-doldurma xidmətləri</value>
|
||||||
@@ -1924,7 +1924,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Bitmə vaxtı</value>
|
<value>Bitmə vaxtı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExpirationDateInfo" xml:space="preserve">
|
<data name="ExpirationDateInfo" xml:space="preserve">
|
||||||
<value>Əgər tənzimlənsə, göstərilən tarix və vaxtda "Send"ə müraciət başa çatacaq.</value>
|
<value>Əgər ayarlanıbsa, göstərilən tarix və vaxtda "Send"ə müraciət başa çatacaq.</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">
|
||||||
@@ -1934,7 +1934,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Maksimal müraciət sayı</value>
|
<value>Maksimal müraciət sayı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MaximumAccessCountInfo" xml:space="preserve">
|
<data name="MaximumAccessCountInfo" xml:space="preserve">
|
||||||
<value>Əgər tənzimlənsə, istifadəçilər maksimal müraciət sayına çatdıqdan sonra bu "Send"ə müraciət edə bilməyəcək.</value>
|
<value>Əgər ayarlanıbsa, istifadəçilər maksimal müraciət sayına çatdıqdan sonra bu "Send"ə müraciət edə bilməyəcək.</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">
|
||||||
@@ -2058,7 +2058,7 @@ Skan prosesi avtomatik baş tutacaq.</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>"Send" ilə faylları istifadə etmək üçün e-poçtunuzu təsdiqləməlisiniz. E-poçtunuzu veb anbarında təsdiqləyə bilərsiniz.</value>
|
<value>Faylları "Send" ilə istifadə etmək üçün e-poçtunuzu doğrulamalısınız. E-poçtunuzu veb anbarında doğrulaya bilərsiniz.</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">
|
||||||
@@ -2068,13 +2068,13 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Ana parol təsdiqi</value>
|
<value>Ana parol təsdiqi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordConfirmationDesc" xml:space="preserve">
|
<data name="PasswordConfirmationDesc" xml:space="preserve">
|
||||||
<value>Bu əməliyyat qorumalıdır, davam etmək üçün zəhmət olmasa kimliyinizi təsdiqləmək üçün ana parolunuzu təkrar daxil edin.</value>
|
<value>Bu əməliyyat qorumalıdır, davam etmək üçün lütfən kimliyinizi doğrulamaq üçün ana parolunuzu təkrar daxil edin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CaptchaRequired" xml:space="preserve">
|
<data name="CaptchaRequired" xml:space="preserve">
|
||||||
<value>Captcha tələb olunur</value>
|
<value>Captcha tələb olunur</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CaptchaFailed" xml:space="preserve">
|
<data name="CaptchaFailed" xml:space="preserve">
|
||||||
<value>Captcha uğursuz oldu. Zəhmət olmasa yenidən sınayın.</value>
|
<value>Captcha uğursuz oldu. Lütfən yenidən sınayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdatedMasterPassword" xml:space="preserve">
|
<data name="UpdatedMasterPassword" xml:space="preserve">
|
||||||
<value>Güncəllənmiş ana parol</value>
|
<value>Güncəllənmiş ana parol</value>
|
||||||
@@ -2110,19 +2110,19 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>FIDO2 WebAuthn</value>
|
<value>FIDO2 WebAuthn</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2Instruction" xml:space="preserve">
|
<data name="Fido2Instruction" xml:space="preserve">
|
||||||
<value>Davam etmək üçün FIDO2 WebAuthn fəal güvənlik açarınızı hazır saxlayın, daha sonra növbəti ekranda "WebAuthn-u təsdiqlə"yə kliklədikdən sonra təlimatları izləyin.</value>
|
<value>Davam etmək üçün FIDO2 WebAuthn üçün fəal olan güvənlik açarınızı hazır saxlayın, daha sonra növbəti ekranda "WebAuthn-u doğrula"ya kliklədikdən sonra təlimatları izləyin.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2Desc" xml:space="preserve">
|
<data name="Fido2Desc" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləmə, FIDO2 WebAuthn istifadə edir, xarici güvənlik açarı istifadə edərək kimliyi təsdiqləyə bilərsiniz.</value>
|
<value>Kimlik doğrulama, FIDO2 WebAuthn istifadə edir, xarici güvənlik açarı istifadə edərək kimliyi doğrulaya bilərsiniz.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2AuthenticateWebAuthn" xml:space="preserve">
|
<data name="Fido2AuthenticateWebAuthn" xml:space="preserve">
|
||||||
<value>WebAuthn-u təsdiqlə</value>
|
<value>WebAuthn kimlik doğrulama</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2ReturnToApp" xml:space="preserve">
|
<data name="Fido2ReturnToApp" xml:space="preserve">
|
||||||
<value>Tətbiqə qayıt</value>
|
<value>Tətbiqə qayıt</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2CheckBrowser" xml:space="preserve">
|
<data name="Fido2CheckBrowser" xml:space="preserve">
|
||||||
<value>Zəhmət olmasa ilkin brauzerinizin WebAuthn-u təsdiqlədiyinə əmin olub yenidən sınayın.</value>
|
<value>Lütfən ilkin brauzerinizin WebAuthn-u dəstəklədiyinə əmin olub yenidən sınayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResetPasswordAutoEnrollInviteWarning" xml:space="preserve">
|
<data name="ResetPasswordAutoEnrollInviteWarning" xml:space="preserve">
|
||||||
<value>Bu təşkilat, sizi "parol sıfırlama"da avtomatik olaraq qeydiyyata alan müəssisə siyasətinə sahibdir. Qeydiyyat, təşkilat administratorlarına ana parolunuzu dəyişdirmə icazəsi verəcək.</value>
|
<value>Bu təşkilat, sizi "parol sıfırlama"da avtomatik olaraq qeydiyyata alan müəssisə siyasətinə sahibdir. Qeydiyyat, təşkilat administratorlarına ana parolunuzu dəyişdirmə icazəsi verəcək.</value>
|
||||||
@@ -2131,16 +2131,16 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Təşkilatınızın siyasətləri, anbarınızın vaxt bitişinə təsir edir. Anbar vaxt bitişi üçün icazə verilən maksimum vaxt {0} saat {1} dəqiqədir</value>
|
<value>Təşkilatınızın siyasətləri, anbarınızın vaxt bitişinə təsir edir. Anbar vaxt bitişi üçün icazə verilən maksimum vaxt {0} saat {1} dəqiqədir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
<data name="VaultTimeoutPolicyWithActionInEffect" xml:space="preserve">
|
||||||
<value>Təşkilatınızın siyasətləri, anbarınızın vaxt bitişinə təsir edir. Anbar vaxt bitişi üçün icazə verilən maksimum vaxt {0} saat {1} dəqiqədir. Anbar vaxt bitişi əməliyyatı {2} olaraq tənzimləndi.</value>
|
<value>Təşkilatınızın siyasətləri, anbarınızın vaxt bitişinə təsir edir. Anbar vaxt bitişi üçün icazə verilən maksimum vaxt {0} saat {1} dəqiqədir. Anbar vaxt bitişi əməliyyatı {2} olaraq ayarlandı.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
<data name="VaultTimeoutActionPolicyInEffect" xml:space="preserve">
|
||||||
<value>Təşkilatınızın siyasətləri, anbar vaxt bitişi əməliyyatınızı {0} olaraq tənzimlədi.</value>
|
<value>Təşkilatınızın siyasətləri, anbar vaxt bitişi əməliyyatınızı {0} olaraq ayarladı.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
<data name="VaultTimeoutToLarge" xml:space="preserve">
|
||||||
<value>Anbar vaxt bitişi, təşkilatınız tərəfindən tənzimlənən məhdudiyyətləri aşır.</value>
|
<value>Anbar vaxt bitişi, təşkilatınız tərəfindən ayarlanan məhdudiyyətləri aşır.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
<data name="DisablePersonalVaultExportPolicyInEffect" xml:space="preserve">
|
||||||
<value>Bir və ya daha çox təşkilat siyasəti, fərdi anbarınızı ixrac etməyinizin qarşısını alır.</value>
|
<value>Bir və ya daha çox təşkilat siyasəti, fərdi anbarınızı xaricə köçürməyinizi əngəlləyir.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAccount" xml:space="preserve">
|
<data name="AddAccount" xml:space="preserve">
|
||||||
<value>Hesab əlavə et</value>
|
<value>Hesab əlavə et</value>
|
||||||
@@ -2173,7 +2173,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Hesabınız birdəfəlik silinəcək</value>
|
<value>Hesabınız birdəfəlik silinəcək</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeleteAccountExplanation" xml:space="preserve">
|
<data name="DeleteAccountExplanation" xml:space="preserve">
|
||||||
<value>Hesabınız və əlaqəli bütün verilənlər silinəcək və bərpa oluna bilməyəcək. Davam etmək istədiyinizə əminsiniz?</value>
|
<value>Hesabınız və əlaqəli bütün datalar silinəcək və bərpa oluna bilməyəcək. Davam etmək istədiyinizə əminsiniz?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DeletingYourAccount" xml:space="preserve">
|
<data name="DeletingYourAccount" xml:space="preserve">
|
||||||
<value>Hesabınız silinir</value>
|
<value>Hesabınız silinir</value>
|
||||||
@@ -2182,7 +2182,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Hesabınız birdəfəlik silindi</value>
|
<value>Hesabınız birdəfəlik silindi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidVerificationCode" xml:space="preserve">
|
<data name="InvalidVerificationCode" xml:space="preserve">
|
||||||
<value>Yararsız təsdiqləmə kodu.</value>
|
<value>Yararsız doğrulama kodu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestOTP" xml:space="preserve">
|
<data name="RequestOTP" xml:space="preserve">
|
||||||
<value>Tək istifadəlik parol tələb et</value>
|
<value>Tək istifadəlik parol tələb et</value>
|
||||||
@@ -2200,19 +2200,19 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Kod göndərilir</value>
|
<value>Kod göndərilir</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Verifying" xml:space="preserve">
|
<data name="Verifying" xml:space="preserve">
|
||||||
<value>Təsdiqlənir</value>
|
<value>Doğrulanır</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResendCode" xml:space="preserve">
|
<data name="ResendCode" xml:space="preserve">
|
||||||
<value>Kodu təkrar göndər</value>
|
<value>Kodu təkrar göndər</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve">
|
<data name="AVerificationCodeWasSentToYourEmail" xml:space="preserve">
|
||||||
<value>Təsdiqləmə kodu e-poçtunuza göndərildi</value>
|
<value>Doğrulama kodu e-poçtunuza göndərildi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AnErrorOccurredWhileSendingAVerificationCodeToYourEmailPleaseTryAgain" xml:space="preserve">
|
<data name="AnErrorOccurredWhileSendingAVerificationCodeToYourEmailPleaseTryAgain" xml:space="preserve">
|
||||||
<value>E-poçtunuza təsdiqləmə kodu göndərilərkən bir xəta baş verdi. Zəhmət olmasa yenidən sınayın</value>
|
<value>E-poçtunuza doğrulama kodu göndərilərkən bir xəta baş verdi. Lütfən yenidən sınayın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterTheVerificationCodeThatWasSentToYourEmail" xml:space="preserve">
|
<data name="EnterTheVerificationCodeThatWasSentToYourEmail" xml:space="preserve">
|
||||||
<value>E-poçtunuza göndərilmiş təsdiqləmə kodunu daxil edin</value>
|
<value>E-poçtunuza göndərilmiş doğrulama kodunu daxil edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SubmitCrashLogs" xml:space="preserve">
|
<data name="SubmitCrashLogs" xml:space="preserve">
|
||||||
<value>Çökmə jurnallarını göndər</value>
|
<value>Çökmə jurnallarını göndər</value>
|
||||||
@@ -2266,13 +2266,13 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>TOTP</value>
|
<value>TOTP</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationCodes" xml:space="preserve">
|
<data name="VerificationCodes" xml:space="preserve">
|
||||||
<value>Təsdiqləmə kodları</value>
|
<value>Doğrulama kodları</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PremiumSubscriptionRequired" xml:space="preserve">
|
<data name="PremiumSubscriptionRequired" xml:space="preserve">
|
||||||
<value>Premium abunəlik tələb olunur</value>
|
<value>Premium abunəlik tələb olunur</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CannotAddAuthenticatorKey" xml:space="preserve">
|
<data name="CannotAddAuthenticatorKey" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici açarı oxuna bilmir? </value>
|
<value>Kimlik doğrulayıcı açarı oxuna bilmir? </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ScanQRCode" xml:space="preserve">
|
<data name="ScanQRCode" xml:space="preserve">
|
||||||
<value>QR kodu skan edin</value>
|
<value>QR kodu skan edin</value>
|
||||||
@@ -2281,7 +2281,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>QR kodunu skan edə bilmədiniz? </value>
|
<value>QR kodunu skan edə bilmədiniz? </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AuthenticatorKeyScanner" xml:space="preserve">
|
<data name="AuthenticatorKeyScanner" xml:space="preserve">
|
||||||
<value>Kimlik təsdiqləyici açarı</value>
|
<value>Kimlik doğrulayıcı açarı</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterKeyManually" xml:space="preserve">
|
<data name="EnterKeyManually" xml:space="preserve">
|
||||||
<value>Kodu əllə daxil et</value>
|
<value>Kodu əllə daxil et</value>
|
||||||
@@ -2296,13 +2296,13 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Açar uğurla daxil edildikdən sonra, açarı güvənli şəkildə saxlamaq üçün "TOTP əlavə et"i seçin</value>
|
<value>Açar uğurla daxil edildikdən sonra, açarı güvənli şəkildə saxlamaq üçün "TOTP əlavə et"i seçin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NeverLockWarning" xml:space="preserve">
|
<data name="NeverLockWarning" xml:space="preserve">
|
||||||
<value>Kilid seçimlərini "Heç vaxt" olaraq tənzimləmək, anbarınızı cihazınıza müraciəti olan hər kəsə əlçatan edir. Bu seçimi istifadə etsəniz, cihazınızı düzgün qoruduğunuza əmin olmalısınız.</value>
|
<value>Kilid seçimlərini "Heç vaxt" olaraq ayarlamaq, anbarınızı cihazınıza müraciəti olan hər kəsə əlçatan edir. Bu seçimi istifadə etsəniz, cihazınızı düzgün qoruduğunuza əmin olmalısınız.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnvironmentPageUrlsError" xml:space="preserve">
|
<data name="EnvironmentPageUrlsError" xml:space="preserve">
|
||||||
<value>Daxil edilən bir və ya daha çox URL yararsızdır. Zəhmət olmasa nəzər salın və yenidən saxlamağa çalışın.</value>
|
<value>Daxil edilən bir və ya daha çox URL yararsızdır. Lütfən nəzər salın və yenidən saxlamağa çalışın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GenericErrorMessage" xml:space="preserve">
|
<data name="GenericErrorMessage" xml:space="preserve">
|
||||||
<value>Tələbinizi emal edə bilmədik. Zəhmət olmasa yenidən sınayın və ya bizimlə əlaqə saxlayın.</value>
|
<value>Tələbinizi emal edə bilmədik. Lütfən yenidən sınayın və ya bizimlə əlaqə saxlayın.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllowScreenCapture" xml:space="preserve">
|
<data name="AllowScreenCapture" xml:space="preserve">
|
||||||
<value>Ekranı çəkməyə icazə ver</value>
|
<value>Ekranı çəkməyə icazə ver</value>
|
||||||
@@ -2353,7 +2353,7 @@ Skan prosesi avtomatik baş tutacaq.</value>
|
|||||||
<value>Giriş tələblərini təsdiqlə</value>
|
<value>Giriş tələblərini təsdiqlə</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
||||||
<value>Digər cihazlardan edilən giriş tələblərini təsdiqləmək üçün bu cihazı istifadə edin.</value>
|
<value>Digər cihazlardan edilən giriş tələblərini təsdiqləmək üçün bu cihazı istifadə edin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllowNotifications" xml:space="preserve">
|
<data name="AllowNotifications" xml:space="preserve">
|
||||||
<value>Bildirişlərə icazə ver</value>
|
<value>Bildirişlərə icazə ver</value>
|
||||||
@@ -2505,7 +2505,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Cihazınıza bir bildiriş göndərildi.</value>
|
<value>Cihazınıza bir bildiriş göndərildi.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
<data name="PleaseMakeSureYourVaultIsUnlockedAndTheFingerprintPhraseMatchesOnTheOtherDevice" xml:space="preserve">
|
||||||
<value>Zəhmət olmasa anbarınızın kilidinin açıq olduğuna və Barmaq izi ifadəsinin digər cihazda uyğun gəldiyinə əmin olun.</value>
|
<value>Lütfən anbarınızın kilidinin açıq olduğuna və Barmaq izi ifadəsinin digər cihazda uyğun gəldiyinə əmin olun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ResendNotification" xml:space="preserve">
|
<data name="ResendNotification" xml:space="preserve">
|
||||||
<value>Bildirişi təkrar göndər</value>
|
<value>Bildirişi təkrar göndər</value>
|
||||||
@@ -2541,7 +2541,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Dil</value>
|
<value>Dil</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LanguageChangeXDescription" xml:space="preserve">
|
<data name="LanguageChangeXDescription" xml:space="preserve">
|
||||||
<value>Dil, {0} olaraq dəyişdirildi. Dəyişiklikləri görmək üçün zəhmət olmasa tətbiqi yenidən başladın</value>
|
<value>Dil, {0} olaraq dəyişdirildi. Dəyişiklikləri görmək üçün lütfən tətbiqi yenidən başladın</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
<data name="LanguageChangeRequiresAppRestart" xml:space="preserve">
|
||||||
<value>Dil dəyişikliyi, tətbiqin yenidən başladılmasını tələb edir</value>
|
<value>Dil dəyişikliyi, tətbiqin yenidən başladılmasını tələb edir</value>
|
||||||
@@ -2667,7 +2667,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 və ya biometrik kilid açmanı quraşdırın.</value>
|
<value>Yetərsiz yaddaşa görə kilid açma uğursuz ola bilər. Həll etmək üçün KDF yaddaş ayarlarınızı azaldın və ya biometrik kilid açmanı quraşdırın.</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>
|
||||||
@@ -2740,7 +2740,7 @@ Bu hesaba keçmək istəyirsiniz?</value>
|
|||||||
<value>Giriş təsdiqləndi</value>
|
<value>Giriş təsdiqləndi</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
|
<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>
|
<value>Cihazla giriş etmə, Bitwarden tətbiqinin ayarlarında qurulmalıdır. Başqa bir seçimə ehtiyacınız var?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDevice" xml:space="preserve">
|
<data name="LogInWithDevice" xml:space="preserve">
|
||||||
<value>Cihazla giriş et</value>
|
<value>Cihazla giriş et</value>
|
||||||
|
|||||||
@@ -2110,7 +2110,7 @@
|
|||||||
<value>FIDO2 WebAuthn</value>
|
<value>FIDO2 WebAuthn</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2Instruction" xml:space="preserve">
|
<data name="Fido2Instruction" xml:space="preserve">
|
||||||
<value>To continue, have your FIDO2 WebAuthn compatible security key ready, then follow the instructions after clicking 'Authenticate WebAuthn' on the next screen.</value>
|
<value>За да продължите, пригответе своето устройство за удостоверяване съвместимо с FIDO2 WebAuthn, натиснете „Идентификация WebAuthn“ на следващия екран и следвайте инструкциите.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Fido2Desc" xml:space="preserve">
|
<data name="Fido2Desc" xml:space="preserve">
|
||||||
<value>Идентификация чрез FIDO2 WebAuthn – можете да се идентифицирате чрез външен ключ за сигурност.</value>
|
<value>Идентификация чрез FIDO2 WebAuthn – можете да се идентифицирате чрез външен ключ за сигурност.</value>
|
||||||
@@ -2293,8 +2293,8 @@
|
|||||||
<value>Настройка на TOTP</value>
|
<value>Настройка на TOTP</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
|
<data name="OnceTheKeyIsSuccessfullyEntered" xml:space="preserve">
|
||||||
<value>Once the key is successfully entered,
|
<value>След като ключът бъде въведен успешно,
|
||||||
select Add TOTP to store the key safely</value>
|
изберете „Добавяне на код за потвърждаване“, за да запазите ключа</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NeverLockWarning" xml:space="preserve">
|
<data name="NeverLockWarning" xml:space="preserve">
|
||||||
<value>Ако изберете „Никога“ като настройка за заключването, трезорът Ви ще бъде достъпен за всеки, който има досег с устройството. Ако използвате тази настройка, трябва да се уверите, че устройството Ви е удачно защитено.</value>
|
<value>Ако изберете „Никога“ като настройка за заключването, трезорът Ви ще бъде достъпен за всеки, който има досег с устройството. Ако използвате тази настройка, трябва да се уверите, че устройството Ви е удачно защитено.</value>
|
||||||
|
|||||||
@@ -156,7 +156,7 @@
|
|||||||
<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 usuario</value>
|
<value>Copiar nombre de usuario</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">
|
||||||
@@ -186,11 +186,11 @@
|
|||||||
<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>Correo electrónico</value>
|
<value>Dirección de correo electrónico</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>Envíanos un correo</value>
|
<value>Envíanos correo electrónico</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmailUsDescription" xml:space="preserve">
|
<data name="EmailUsDescription" xml:space="preserve">
|
||||||
<value>Envíanos un correo directamente para obtener ayuda o dejar tus comentarios.</value>
|
<value>Envíanos un correo directamente para obtener ayuda o dejar tus comentarios.</value>
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
<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>Reportar un fallo</value>
|
<value>Enviar un informe de error</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FileBugReportDescription" xml:space="preserve">
|
<data name="FileBugReportDescription" xml:space="preserve">
|
||||||
<value>Abrir una incidencia en el repositorio de GitHub.</value>
|
<value>Abrir una incidencia en el repositorio de GitHub.</value>
|
||||||
@@ -229,10 +229,10 @@
|
|||||||
<value>Carpetas</value>
|
<value>Carpetas</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FolderUpdated" xml:space="preserve">
|
<data name="FolderUpdated" xml:space="preserve">
|
||||||
<value>Carpeta actualizada.</value>
|
<value>Carpeta guardada</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="GoToWebsite" xml:space="preserve">
|
<data name="GoToWebsite" xml:space="preserve">
|
||||||
<value>Ir a la web</value>
|
<value>Ir al sitio web</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">
|
||||||
@@ -285,7 +285,7 @@
|
|||||||
<value>Cuenta ya añadida</value>
|
<value>Cuenta ya añadida</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
||||||
<value>¿Quieres cambiarlo ahora?</value>
|
<value>¿Te gustaría cambiar a esa cuenta ahora?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPassword" xml:space="preserve">
|
<data name="MasterPassword" xml:space="preserve">
|
||||||
<value>Contraseña maestra</value>
|
<value>Contraseña maestra</value>
|
||||||
@@ -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>El elemento ha sido eliminado.</value>
|
<value>Elemento eliminado</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">
|
||||||
@@ -375,7 +375,7 @@
|
|||||||
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ValueHasBeenCopied" xml:space="preserve">
|
<data name="ValueHasBeenCopied" xml:space="preserve">
|
||||||
<value>{0} ha sido copiado.</value>
|
<value>{0} copiado</value>
|
||||||
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyFingerprint" xml:space="preserve">
|
<data name="VerifyFingerprint" xml:space="preserve">
|
||||||
@@ -419,16 +419,16 @@
|
|||||||
<value>Utiliza el servicio de accesibilidad de Bitwarden para autorellenar entradas entre aplicaciones y sitios web.</value>
|
<value>Utiliza el servicio de accesibilidad de Bitwarden para autorellenar entradas entre aplicaciones y sitios web.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillService" xml:space="preserve">
|
<data name="AutofillService" xml:space="preserve">
|
||||||
<value>Servicio de autorrellenado</value>
|
<value>Servicio de autocompletado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>Evitar caracteres ambiguos</value>
|
<value>Evitar caracteres ambiguos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtension" xml:space="preserve">
|
<data name="BitwardenAppExtension" xml:space="preserve">
|
||||||
<value>Extensión de Aplicación de Bitwarden</value>
|
<value>Extensión de Aplicación Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>La forma más fácil de añadir nuevas entradas a su caja fuerte es utilizando la extensión de navegador de Bitwarden. Aprenda más sobre cómo utilizar este servicio en la sección de "Ajustes".</value>
|
<value>La manera más fácil de añadir nuevos inicios de sesión a tu caja fuerte es utilizando la extensión de la aplicación de Bitwarden. Aprenda más sobre cómo utilizar la extensión de la aplicación de Bitwarden accediendo al menú de "Ajustes".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||||
<value>Utiliza Bitwarden en Safari y otras aplicaciones para autorellenar tus entradas.</value>
|
<value>Utiliza Bitwarden en Safari y otras aplicaciones para autorellenar tus entradas.</value>
|
||||||
@@ -471,13 +471,13 @@
|
|||||||
<value>Introduce el correo electrónico de tu cuenta para recibir la pista de tu contraseña maestra.</value>
|
<value>Introduce el correo electrónico de tu cuenta para recibir la pista de tu contraseña maestra.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExntesionReenable" xml:space="preserve">
|
<data name="ExntesionReenable" xml:space="preserve">
|
||||||
<value>Re-activar Extension de Aplicación</value>
|
<value>Reactivar extensión de la aplicación</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionAlmostDone" xml:space="preserve">
|
<data name="ExtensionAlmostDone" xml:space="preserve">
|
||||||
<value>¡Casi estamos!</value>
|
<value>¡Casi estamos!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionEnable" xml:space="preserve">
|
<data name="ExtensionEnable" xml:space="preserve">
|
||||||
<value>Activar Extensión de Aplicación</value>
|
<value>Activar extensión de la aplicación</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionInSafari" xml:space="preserve">
|
<data name="ExtensionInSafari" xml:space="preserve">
|
||||||
<value>En Safari, busca Bitwarden en el icono compartir (pista: desplazate a la derecha en la última fila del menú).</value>
|
<value>En Safari, busca Bitwarden en el icono compartir (pista: desplazate a la derecha en la última fila del menú).</value>
|
||||||
@@ -490,7 +490,7 @@
|
|||||||
<value>¡Ya estás identificado!</value>
|
<value>¡Ya estás identificado!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionSetup" xml:space="preserve">
|
<data name="ExtensionSetup" xml:space="preserve">
|
||||||
<value>Sus entradas son ahora fácilmente accesibles desde Safari, Chrome y otras aplicaciones soportadas.</value>
|
<value>Sus inicios de sesión son ahora fácilmente accesibles desde Safari, Chrome y otras aplicaciones soportadas.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionSetup2" xml:space="preserve">
|
<data name="ExtensionSetup2" xml:space="preserve">
|
||||||
<value>En Safari y Chrome, busca Bitwarden en el icono compartir (pista: desplazate a la derecha en la última fila del menú).</value>
|
<value>En Safari y Chrome, busca Bitwarden en el icono compartir (pista: desplazate a la derecha en la última fila del menú).</value>
|
||||||
@@ -553,7 +553,7 @@
|
|||||||
<value>Acción de tiempo de espera de la caja fuerte</value>
|
<value>Acción de tiempo de espera de la caja fuerte</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||||
<value>Cerrar sesión eliminará todo el acceso a su caja fuerte y requiere autenticación en línea después del período de espera. ¿Está seguro de que quiere usar esta configuración?</value>
|
<value>Cerrar sesión quitará todo el acceso a su caja fuerte y requiere autenticación en línea después del tiempo de espera. ¿Está seguro de que quiere usar este ajuste?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingIn" xml:space="preserve">
|
<data name="LoggingIn" xml:space="preserve">
|
||||||
<value>Iniciando sesión...</value>
|
<value>Iniciando sesión...</value>
|
||||||
@@ -598,7 +598,7 @@
|
|||||||
<value>Nunca</value>
|
<value>Nunca</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewItemCreated" xml:space="preserve">
|
<data name="NewItemCreated" xml:space="preserve">
|
||||||
<value>Nuevo elemento creado.</value>
|
<value>Elemento agregado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoFavorites" xml:space="preserve">
|
<data name="NoFavorites" xml:space="preserve">
|
||||||
<value>No hay favoritos en tu caja fuerte.</value>
|
<value>No hay favoritos en tu caja fuerte.</value>
|
||||||
@@ -626,7 +626,7 @@
|
|||||||
<value>Otro</value>
|
<value>Otro</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordGenerated" xml:space="preserve">
|
<data name="PasswordGenerated" xml:space="preserve">
|
||||||
<value>Contraseña generada.</value>
|
<value>Contraseña generada</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordGenerator" xml:space="preserve">
|
<data name="PasswordGenerator" xml:space="preserve">
|
||||||
<value>Generador de contraseñas</value>
|
<value>Generador de contraseñas</value>
|
||||||
@@ -641,7 +641,7 @@
|
|||||||
<value>¿Estás seguro de que quieres sobreescribir la contraseña actual?</value>
|
<value>¿Estás seguro de que quieres sobreescribir la contraseña actual?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PushNotificationAlert" xml:space="preserve">
|
<data name="PushNotificationAlert" xml:space="preserve">
|
||||||
<value>Bitwarden mantiene tu caja fuerte automáticamente sincronizada utilizando notificaciones push. Para tener la mejor experiencia posible, por favor, pulsa "Permitir" en la próxima notificación donde se te pregunta si quieres habilitar las notificaciones push.</value>
|
<value>Bitwarden mantiene tu caja fuerte automáticamente sincronizada utilizando notificaciones automáticas. Para tener la mejor experiencia posible, por favor, selecciona "Permitir" en la próxima notificación donde se te pregunta si quieres permitir las notificaciones automáticas.</value>
|
||||||
<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">
|
||||||
@@ -654,7 +654,7 @@
|
|||||||
<value>Regenerar contraseña</value>
|
<value>Regenerar contraseña</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RetypeMasterPassword" xml:space="preserve">
|
<data name="RetypeMasterPassword" xml:space="preserve">
|
||||||
<value>Vuelve a escribir tu contraseña maestra</value>
|
<value>Reescribir contraseña maestra</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SearchVault" xml:space="preserve">
|
<data name="SearchVault" xml:space="preserve">
|
||||||
<value>Buscar en caja fuerte</value>
|
<value>Buscar en caja fuerte</value>
|
||||||
@@ -675,7 +675,7 @@
|
|||||||
<value>Información del elemento</value>
|
<value>Información del elemento</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ItemUpdated" xml:space="preserve">
|
<data name="ItemUpdated" xml:space="preserve">
|
||||||
<value>Elemento actualizado.</value>
|
<value>Elemento guardado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Submitting" xml:space="preserve">
|
<data name="Submitting" xml:space="preserve">
|
||||||
<value>Enviando...</value>
|
<value>Enviando...</value>
|
||||||
@@ -686,10 +686,10 @@
|
|||||||
<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">
|
||||||
<value>Sincronización completada.</value>
|
<value>Sincronización completada</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncingFailed" xml:space="preserve">
|
<data name="SyncingFailed" xml:space="preserve">
|
||||||
<value>Sincronizado fallida.</value>
|
<value>Error en la Sincronización</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncVaultNow" xml:space="preserve">
|
<data name="SyncVaultNow" xml:space="preserve">
|
||||||
<value>Sincronizar caja fuerte ahora</value>
|
<value>Sincronizar caja fuerte ahora</value>
|
||||||
@@ -745,7 +745,7 @@
|
|||||||
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
|
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOverlay" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOverlay" xml:space="preserve">
|
||||||
<value>Cuando seleccione un campo de entrada y vea un recuadro flotante de autorellenado de Bitwarden, puede pulsarlo para iniciar el servicio de autorellenado.</value>
|
<value>Cuando seleccione un campo de entrada y vea una superposición de autocompletado de Bitwarden, puede pulsarla para iniciar el servicio de autocompletado.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
||||||
<value>Pulsa en esta notificación para autorellenar una entrada desde tu caja fuerte.</value>
|
<value>Pulsa en esta notificación para autorellenar una entrada desde tu caja fuerte.</value>
|
||||||
@@ -775,7 +775,7 @@
|
|||||||
<value>Estado</value>
|
<value>Estado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
||||||
<value>La forma más fácil de añadir nuevas entradas a su caja fuerte es utilizando el Servicio de Autorellenado de Bitwarden. Aprenda más sobre cómo utilizar este servicio en la sección de "Ajustes".</value>
|
<value>La forma más fácil de añadir nuevos inicios de sesión a tu caja fuerte es utilizando el Servicio de Autocompletar de Bitwarden. Aprenda más sobre cómo utilizar el Servicio de Autocompletar de Bitwarden en el menú "Ajustes".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Autofill" xml:space="preserve">
|
<data name="Autofill" xml:space="preserve">
|
||||||
<value>Autorellenar</value>
|
<value>Autorellenar</value>
|
||||||
@@ -787,10 +787,10 @@
|
|||||||
<value>¿Estás seguro de que quieres autorellenar esta entrada? No es una coincidencia completa para "{0}".</value>
|
<value>¿Estás seguro de que quieres autorellenar esta entrada? No es una coincidencia completa para "{0}".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MatchingItems" xml:space="preserve">
|
<data name="MatchingItems" xml:space="preserve">
|
||||||
<value>Elementos coincidientes</value>
|
<value>Elementos que coinciden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PossibleMatchingItems" xml:space="preserve">
|
<data name="PossibleMatchingItems" xml:space="preserve">
|
||||||
<value>Posibles elementos coincidientes</value>
|
<value>Posibles elementos que coinciden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Search" xml:space="preserve">
|
<data name="Search" xml:space="preserve">
|
||||||
<value>Buscar</value>
|
<value>Buscar</value>
|
||||||
@@ -799,7 +799,7 @@
|
|||||||
<value>Estás buscando una entrada para autorellenar "{0}".</value>
|
<value>Estás buscando una entrada para autorellenar "{0}".</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnOrg" xml:space="preserve">
|
<data name="LearnOrg" xml:space="preserve">
|
||||||
<value>Aprenda sobre Organizaciones</value>
|
<value>Aprende sobre organizaciones</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CannotOpenApp" xml:space="preserve">
|
<data name="CannotOpenApp" xml:space="preserve">
|
||||||
<value>No se puede abrir la aplicación "{0}".</value>
|
<value>No se puede abrir la aplicación "{0}".</value>
|
||||||
@@ -818,11 +818,11 @@
|
|||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginUnavailable" xml:space="preserve">
|
<data name="LoginUnavailable" xml:space="preserve">
|
||||||
<value>Entrada no disponible</value>
|
<value>Inicio de sesión no disponible</value>
|
||||||
<comment>For 2FA whenever there are no available providers on this device.</comment>
|
<comment>For 2FA whenever there are no available providers on this device.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoTwoStepAvailable" xml:space="preserve">
|
<data name="NoTwoStepAvailable" xml:space="preserve">
|
||||||
<value>Esta cuenta tiene habilitada la autenticación en dos pasos, pero ninguna de los métodos configurados es soportado por este dispositivo. Por favor, utiliza un dispositivo soportado o/y añade proveedores adicionales que tengan un mejor soporte entre dispositivos (como una aplicación autenticadora).</value>
|
<value>Esta cuenta tiene configuración de inicio de sesión en dos pasos, sin embargo, ninguno de los proveedores de dos pasos configurados son soportados en este dispositivo. Por favor, utilice un dispositivo soportado y/o añada proveedores adicionales que sean mejor soportados entre los dispositivos (como una aplicación de autenticación).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RecoveryCodeTitle" xml:space="preserve">
|
<data name="RecoveryCodeTitle" xml:space="preserve">
|
||||||
<value>Código de recuperación</value>
|
<value>Código de recuperación</value>
|
||||||
@@ -837,7 +837,7 @@
|
|||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginOptions" xml:space="preserve">
|
<data name="TwoStepLoginOptions" xml:space="preserve">
|
||||||
<value>Opciones de la autenticación en dos pasos</value>
|
<value>Opciones de inicio de sesión en dos pasos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
<data name="UseAnotherTwoStepMethod" xml:space="preserve">
|
||||||
<value>Utilizar otro método de autenticación en dos pasos</value>
|
<value>Utilizar otro método de autenticación en dos pasos</value>
|
||||||
@@ -847,18 +847,18 @@
|
|||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailSent" xml:space="preserve">
|
<data name="VerificationEmailSent" xml:space="preserve">
|
||||||
<value>Correo de verificación enviado.</value>
|
<value>Correo de verificación enviado</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="YubiKeyInstruction" xml:space="preserve">
|
<data name="YubiKeyInstruction" xml:space="preserve">
|
||||||
<value>Para continuar, mantén tu YubiKey NEO contra la parte trasera de tu dispositivo o inserta tu YubiKey en el puerto USB de tu dispositivo y luego pulsa su butón.</value>
|
<value>Para continuar, mantén tu YubiKey NEO contra la parte trasera de tu dispositivo o inserta tu YubiKey en el puerto USB de tu dispositivo y luego pulsa su butón.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YubiKeyTitle" xml:space="preserve">
|
<data name="YubiKeyTitle" xml:space="preserve">
|
||||||
<value>Llave de Seguridad YubiKey</value>
|
<value>Clave de seguridad YubiKey</value>
|
||||||
<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>Añadir nuevo adjunto</value>
|
<value>Añadir nuevo archivo adjunto</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Attachments" xml:space="preserve">
|
<data name="Attachments" xml:space="preserve">
|
||||||
<value>Adjuntos</value>
|
<value>Adjuntos</value>
|
||||||
@@ -907,10 +907,10 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Copiar código TOTP</value>
|
<value>Copiar código TOTP</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
<data name="CopyTotpAutomaticallyDescription" xml:space="preserve">
|
||||||
<value>Si un inicio de sesión tiene una clave de autenticador, copie el código de verificación TOTP a su portapapeles cuando autorrellene el inicio de sesión.</value>
|
<value>Si un inicio de sesión tiene una clave de autenticador, copie el código de verificación TOTP a su portapapeles cuando autocomplete el inicio de sesión.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomatically" xml:space="preserve">
|
<data name="CopyTotpAutomatically" xml:space="preserve">
|
||||||
<value>Copiar automáticamente TOTP</value>
|
<value>Copiar TOTP automáticamente</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PremiumRequired" xml:space="preserve">
|
<data name="PremiumRequired" xml:space="preserve">
|
||||||
<value>Se quiere membrasía Premium para poder utilizar esta característica.</value>
|
<value>Se quiere membrasía Premium para poder utilizar esta característica.</value>
|
||||||
@@ -922,7 +922,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Adjunto eliminado</value>
|
<value>Adjunto eliminado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChooseFile" xml:space="preserve">
|
<data name="ChooseFile" xml:space="preserve">
|
||||||
<value>Seleccionar archivo</value>
|
<value>Elegir archivo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="File" xml:space="preserve">
|
<data name="File" xml:space="preserve">
|
||||||
<value>Archivo</value>
|
<value>Archivo</value>
|
||||||
@@ -937,7 +937,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Fuente de archivo</value>
|
<value>Fuente de archivo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FeatureUnavailable" xml:space="preserve">
|
<data name="FeatureUnavailable" xml:space="preserve">
|
||||||
<value>Característica no disponible</value>
|
<value>Funcionalidad no disponible</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MaxFileSize" xml:space="preserve">
|
<data name="MaxFileSize" xml:space="preserve">
|
||||||
<value>El tamaño máximo de archivo es de 100MB.</value>
|
<value>El tamaño máximo de archivo es de 100MB.</value>
|
||||||
@@ -946,10 +946,10 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>No puedes usar esta característica hasta que actualices tu clave de cifrado.</value>
|
<value>No puedes usar esta característica hasta que actualices tu clave de cifrado.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
<data name="EncryptionKeyMigrationRequiredDescriptionLong" xml:space="preserve">
|
||||||
<value>Encryption key migration required. Please login through the web vault to update your encryption key.</value>
|
<value>Se requiere migración de la clave de cifrado. Por favor, inicie sesión a través de la caja fuerte web para actualizar su clave de cifrado.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMore" xml:space="preserve">
|
<data name="LearnMore" xml:space="preserve">
|
||||||
<value>Aprender más</value>
|
<value>Aprende más</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ApiUrl" xml:space="preserve">
|
<data name="ApiUrl" xml:space="preserve">
|
||||||
<value>URL del servidor de la API</value>
|
<value>URL del servidor de la API</value>
|
||||||
@@ -1032,7 +1032,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Marca</value>
|
<value>Marca</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CardholderName" xml:space="preserve">
|
<data name="CardholderName" xml:space="preserve">
|
||||||
<value>Nombre en la tarjeta</value>
|
<value>Nombre del propietario de la tarjeta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CityTown" xml:space="preserve">
|
<data name="CityTown" xml:space="preserve">
|
||||||
<value>Ciudad / Pueblo</value>
|
<value>Ciudad / Pueblo</value>
|
||||||
@@ -1077,7 +1077,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Nombre completo</value>
|
<value>Nombre completo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LicenseNumber" xml:space="preserve">
|
<data name="LicenseNumber" xml:space="preserve">
|
||||||
<value>Nº de licencia</value>
|
<value>Número de licencia</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="March" xml:space="preserve">
|
<data name="March" xml:space="preserve">
|
||||||
<value>Marzo</value>
|
<value>Marzo</value>
|
||||||
@@ -1086,7 +1086,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Mayo</value>
|
<value>Mayo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MiddleName" xml:space="preserve">
|
<data name="MiddleName" xml:space="preserve">
|
||||||
<value>2º nombre</value>
|
<value>Segundo nombre</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Mr" xml:space="preserve">
|
<data name="Mr" xml:space="preserve">
|
||||||
<value>Sr</value>
|
<value>Sr</value>
|
||||||
@@ -1098,7 +1098,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Srta</value>
|
<value>Srta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Mx" xml:space="preserve">
|
<data name="Mx" xml:space="preserve">
|
||||||
<value>"Mx" = "Sr./Sra</value>
|
<value>Mx</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="November" xml:space="preserve">
|
<data name="November" xml:space="preserve">
|
||||||
<value>Noviembre</value>
|
<value>Noviembre</value>
|
||||||
@@ -1107,7 +1107,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Octubre</value>
|
<value>Octubre</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PassportNumber" xml:space="preserve">
|
<data name="PassportNumber" xml:space="preserve">
|
||||||
<value>Nº de pasaporte</value>
|
<value>Número de pasaporte</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Phone" xml:space="preserve">
|
<data name="Phone" xml:space="preserve">
|
||||||
<value>Teléfono</value>
|
<value>Teléfono</value>
|
||||||
@@ -1116,7 +1116,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Septiembre</value>
|
<value>Septiembre</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SSN" xml:space="preserve">
|
<data name="SSN" xml:space="preserve">
|
||||||
<value>Nº de la seguridad social</value>
|
<value>Número de Seguro Social</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="StateProvince" xml:space="preserve">
|
<data name="StateProvince" xml:space="preserve">
|
||||||
<value>Estado / Provincia</value>
|
<value>Estado / Provincia</value>
|
||||||
@@ -1167,7 +1167,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Servicio de accesibilidad de autorellenado</value>
|
<value>Servicio de accesibilidad de autorellenado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceDescription" xml:space="preserve">
|
<data name="AutofillServiceDescription" xml:space="preserve">
|
||||||
<value>El servicio de autorellenado de Bitwarden utiliza el marco de autocompletado de Android para ayudarte a rellenar entradas, tarjetas de crédito e identidades en otras aplicaciones de tu dispositivo.</value>
|
<value>El servicio de autocompletar de Bitwarden utiliza el Marco de Autocompletar de Android para ayudarte a completar información de inicios de sesión en otras aplicaciones en tu dispositivo.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
||||||
<value>Utiliza el servicio de accesibilidad de Bitwarden para autorrellenar entradas.</value>
|
<value>Utiliza el servicio de accesibilidad de Bitwarden para autorrellenar entradas.</value>
|
||||||
@@ -1246,14 +1246,14 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Empieza con</value>
|
<value>Empieza con</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="URIMatchDetection" xml:space="preserve">
|
<data name="URIMatchDetection" xml:space="preserve">
|
||||||
<value>Tipo de detección de URI</value>
|
<value>Detección de coincidencia URI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MatchDetection" xml:space="preserve">
|
<data name="MatchDetection" xml:space="preserve">
|
||||||
<value>Tipo de detección</value>
|
<value>Detección de coincidencia</value>
|
||||||
<comment>URI match detection for auto-fill.</comment>
|
<comment>URI match detection for auto-fill.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="YesAndSave" xml:space="preserve">
|
<data name="YesAndSave" xml:space="preserve">
|
||||||
<value>Sí y guardar</value>
|
<value>Sí, y guardar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAndSave" xml:space="preserve">
|
<data name="AutofillAndSave" xml:space="preserve">
|
||||||
<value>Autorellenar y guardar</value>
|
<value>Autorellenar y guardar</value>
|
||||||
@@ -1289,7 +1289,7 @@ El escaneo se realizará automáticamente.</value>
|
|||||||
<value>Debes identificarte en la aplicación principal de Bitwarden antes de poder utilizar Autorellenado.</value>
|
<value>Debes identificarte en la aplicación principal de Bitwarden antes de poder utilizar Autorellenado.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillSetup" xml:space="preserve">
|
<data name="AutofillSetup" xml:space="preserve">
|
||||||
<value>Sus entradas son ahora fácilmente accesibles desde su teclado mientras se identifica en aplicaciones y sitios web.</value>
|
<value>Sus inicios de sesión ahora son fácilmente accesibles directamente desde su teclado mientras inician sesión en aplicaciones y sitios web.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillSetup2" xml:space="preserve">
|
<data name="AutofillSetup2" xml:space="preserve">
|
||||||
<value>Te recomendamos deshabilitar cualquier otra aplicación de Autorellenado desde Ajustes si no piensas utilizarlas.</value>
|
<value>Te recomendamos deshabilitar cualquier otra aplicación de Autorellenado desde Ajustes si no piensas utilizarlas.</value>
|
||||||
@@ -2630,16 +2630,16 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
|
|||||||
<value>Aprobar con mi otro dispositivo</value>
|
<value>Aprobar con mi otro dispositivo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestAdminApproval" xml:space="preserve">
|
<data name="RequestAdminApproval" xml:space="preserve">
|
||||||
<value>Request admin approval</value>
|
<value>Solicitar aprobación del administrador</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
||||||
<value>Approve with master password</value>
|
<value>Aprobar con contraseña maestra</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
|
<data name="TurnOffUsingPublicDevice" xml:space="preserve">
|
||||||
<value>Turn off using a public device</value>
|
<value>Deshabilitar usando un dispositivo público</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RememberThisDevice" xml:space="preserve">
|
<data name="RememberThisDevice" xml:space="preserve">
|
||||||
<value>Remember this device</value>
|
<value>Recordar este dispositivo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkey" xml:space="preserve">
|
<data name="Passkey" xml:space="preserve">
|
||||||
<value>Passkey</value>
|
<value>Passkey</value>
|
||||||
@@ -2648,28 +2648,29 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
|
|||||||
<value>Passkeys</value>
|
<value>Passkeys</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Application" xml:space="preserve">
|
<data name="Application" xml:space="preserve">
|
||||||
<value>Application</value>
|
<value>Aplicación</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 puedes editar la aplicación de contraseñas maestras porque podría invalidar la contraseña maestra</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||||
<value>Passkey will not be copied</value>
|
<value>La contraseña maestra no 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>La contraseña maestra no será copiada al elemento clonado.
|
||||||
|
¿Deseas continuar clonando este elemento?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyApplication" xml:space="preserve">
|
<data name="CopyApplication" xml:space="preserve">
|
||||||
<value>Copy application</value>
|
<value>Copiar aplicación</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvailableForTwoStepLogin" xml:space="preserve">
|
<data name="AvailableForTwoStepLogin" xml:space="preserve">
|
||||||
<value>Available for two-step login</value>
|
<value>Disponible para inicio de sesión en dos pasos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
<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>Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.</value>
|
<value>El desbloqueo puede fallar por falta de memoria. Disminuye los ajustes de memoria KDF o configura el desbloqueo biométrico para resolverlo.</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>
|
||||||
@@ -2678,197 +2679,197 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</value>
|
|||||||
<value>Token de API no válido</value>
|
<value>Token de API no válido</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdminApprovalRequested" xml:space="preserve">
|
<data name="AdminApprovalRequested" xml:space="preserve">
|
||||||
<value>Admin approval requested</value>
|
<value>Aprobación del administrador solicitada</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
||||||
<value>Your request has been sent to your admin.</value>
|
<value>Tu solicitud ha sido enviada a tu administrador.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
||||||
<value>You will be notified once approved. </value>
|
<value>Se te notificará una vez aprobada. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TroubleLoggingIn" xml:space="preserve">
|
<data name="TroubleLoggingIn" xml:space="preserve">
|
||||||
<value>Trouble logging in?</value>
|
<value>¿Problema para iniciar sesión?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInAsX" xml:space="preserve">
|
<data name="LoggingInAsX" xml:space="preserve">
|
||||||
<value>Logging in as {0}</value>
|
<value>Iniciando sesión como {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||||
<value>Vault timeout action changed to log out</value>
|
<value>Acción después del tiempo de espera de la caja fuerte cambiado a cerrar sesión</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>Block auto-fill</value>
|
<value>Bloquear autocompletar</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>Autocompletar no se ofrecerá para estas URLs.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewBlockedURI" xml:space="preserve">
|
<data name="NewBlockedURI" xml:space="preserve">
|
||||||
<value>New blocked URI</value>
|
<value>Nueva URI bloqueada</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="URISaved" xml:space="preserve">
|
<data name="URISaved" xml:space="preserve">
|
||||||
<value>URI saved</value>
|
<value>URI guardada</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>Formato no válido. Use 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>Editar URI</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterURI" xml:space="preserve">
|
<data name="EnterURI" xml:space="preserve">
|
||||||
<value>Enter URI</value>
|
<value>Escribir 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>Formato: {0}. Separar múltiples URIs con una coma.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FormatX" xml:space="preserve">
|
<data name="FormatX" xml:space="preserve">
|
||||||
<value>Format: {0}</value>
|
<value>Formato: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidURI" xml:space="preserve">
|
<data name="InvalidURI" xml:space="preserve">
|
||||||
<value>Invalid URI</value>
|
<value>URI no válida</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="URIRemoved" xml:space="preserve">
|
<data name="URIRemoved" xml:space="preserve">
|
||||||
<value>URI removed</value>
|
<value>URI eliminada</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThereAreNoBlockedURIs" xml:space="preserve">
|
<data name="ThereAreNoBlockedURIs" xml:space="preserve">
|
||||||
<value>There are no blocked URIs</value>
|
<value>No hay URIs bloqueadas</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TheURIXIsAlreadyBlocked" xml:space="preserve">
|
<data name="TheURIXIsAlreadyBlocked" xml:space="preserve">
|
||||||
<value>The URI {0} is already blocked</value>
|
<value>El URI {0} ya está bloqueada</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 se pueden editar múltiples URIs a la vez</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginApproved" xml:space="preserve">
|
<data name="LoginApproved" xml:space="preserve">
|
||||||
<value>Login approved</value>
|
<value>Inicio de sesión aprobado</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
|
<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>
|
<value>Iniciar sesión con el dispositivo debe configurarse en los ajustes de la aplicación Bitwarden. ¿Necesitas otra opción?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDevice" xml:space="preserve">
|
<data name="LogInWithDevice" xml:space="preserve">
|
||||||
<value>Log in with device</value>
|
<value>Iniciar sesión con el dispositivo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInOn" xml:space="preserve">
|
<data name="LoggingInOn" xml:space="preserve">
|
||||||
<value>Logging in on</value>
|
<value>Iniciando sesión en</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vault" xml:space="preserve">
|
<data name="Vault" xml:space="preserve">
|
||||||
<value>Vault</value>
|
<value>Caja fuerte</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Appearance" xml:space="preserve">
|
<data name="Appearance" xml:space="preserve">
|
||||||
<value>Appearance</value>
|
<value>Apariencia</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountSecurity" xml:space="preserve">
|
<data name="AccountSecurity" xml:space="preserve">
|
||||||
<value>Account security</value>
|
<value>Seguridad de la cuenta</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden Help Center</value>
|
<value>Centro de ayuda de Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Contactar al soporte de Bitwarden</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyAppInformation" xml:space="preserve">
|
<data name="CopyAppInformation" xml:space="preserve">
|
||||||
<value>Copy app information</value>
|
<value>Copiar información de la aplicación</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncNow" xml:space="preserve">
|
<data name="SyncNow" xml:space="preserve">
|
||||||
<value>Sync now</value>
|
<value>Sincronizar ahora</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockOptions" xml:space="preserve">
|
<data name="UnlockOptions" xml:space="preserve">
|
||||||
<value>Unlock options</value>
|
<value>Opciónes de desbloqueo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SessionTimeout" xml:space="preserve">
|
<data name="SessionTimeout" xml:space="preserve">
|
||||||
<value>Session timeout</value>
|
<value>Tiempo de espera de sesión</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SessionTimeoutAction" xml:space="preserve">
|
<data name="SessionTimeoutAction" xml:space="preserve">
|
||||||
<value>Session timeout action</value>
|
<value>Acción de tiempo de espera de sesión</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
||||||
<value>Account fingerprint phrase</value>
|
<value>Frase de huella digital de su cuenta</value>
|
||||||
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||||
<value>One hour and one minute</value>
|
<value>Una hora y un minuto</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHourAndXMinute" xml:space="preserve">
|
<data name="OneHourAndXMinute" xml:space="preserve">
|
||||||
<value>One hour and {0} minutes</value>
|
<value>Una hora y {0} minutos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHoursAndOneMinute" xml:space="preserve">
|
<data name="XHoursAndOneMinute" xml:space="preserve">
|
||||||
<value>{0} hours and one minute</value>
|
<value>{0} horas y un minuto</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHoursAndYMinutes" xml:space="preserve">
|
<data name="XHoursAndYMinutes" xml:space="preserve">
|
||||||
<value>{0} hours and {1} minutes</value>
|
<value>{0} horas y {1} minutos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="XHours" xml:space="preserve">
|
<data name="XHours" xml:space="preserve">
|
||||||
<value>{0} hours</value>
|
<value>{0} horas</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>The Android Autofill Framework is used to assist in filling login information into other apps on your device.</value>
|
<value>El Framework de Autofill de Android se utiliza para ayudar a rellenar información de inicio de sesión en otras aplicaciones en tu dispositivo.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
||||||
<value>Use inline autofill if your selected keyboard supports it. Otherwise, use the default overlay.</value>
|
<value>Utilice el autocompletado en línea si tu teclado seleccionado lo soporta. De otra manera, utilice la superposición por defecto.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdditionalOptions" xml:space="preserve">
|
<data name="AdditionalOptions" xml:space="preserve">
|
||||||
<value>Additional options</value>
|
<value>Opciones adicionales</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToWebApp" xml:space="preserve">
|
<data name="ContinueToWebApp" xml:space="preserve">
|
||||||
<value>Continue to web app?</value>
|
<value>¿Continuar a la aplicación web?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToX" xml:space="preserve">
|
<data name="ContinueToX" xml:space="preserve">
|
||||||
<value>Continue to {0}?</value>
|
<value>¿Continuar a {0}?</value>
|
||||||
<comment>The parameter is an URL, like bitwarden.com.</comment>
|
<comment>The parameter is an URL, like bitwarden.com.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToHelpCenter" xml:space="preserve">
|
<data name="ContinueToHelpCenter" xml:space="preserve">
|
||||||
<value>Continue to Help center?</value>
|
<value>¿Continuar al centro de ayuda?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||||
<value>Continue to contact support?</value>
|
<value>¿Continuar con el servicio de asistencia?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToAppStore" xml:space="preserve">
|
<data name="ContinueToAppStore" xml:space="preserve">
|
||||||
<value>Continue to app store?</value>
|
<value>¿Continuar a la App Store?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||||
<value>Make your account more secure by setting up two-step login in the Bitwarden web app.</value>
|
<value>Haz tu cuenta más segura al configurar el inicio de sesión en dos pasos en la aplicación web de Bitwarden.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
||||||
<value>You can change your master password on the Bitwarden web app.</value>
|
<value>Puedes cambiar tu contraseña maestra en la aplicación web de Bitwarden.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
||||||
<value>You can import data to your vault on {0}.</value>
|
<value>Puedes importar datos a tu caja fuerte en {0}.</value>
|
||||||
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
||||||
<value>Learn more about how to use Bitwarden on the Help center.</value>
|
<value>Más información sobre cómo usar Bitwarden en el centro de Ayuda.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
||||||
<value>Can’t find what you are looking for? Reach out to Bitwarden support on bitwarden.com.</value>
|
<value>¿No encuentras lo que estás buscando? Contacta con el soporte de Bitwarden en bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
||||||
<value>Explore more features of your Bitwarden account on the web app.</value>
|
<value>Explora más características de tu cuenta de Bitwarden en la aplicación web.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||||
<value>Bitwarden allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website.</value>
|
<value>Bitwarden te permite compartir tus elementos de la caja fuerte con otros utilizando una organización. Más información en el sitio web de bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||||
<value>Help others find out if Bitwarden is right for them. Visit the app store and leave a rating now.</value>
|
<value>Ayuda a otros a averiguar si Bitwarden es correcto para ellos. Visita la tienda de aplicaciones y deja una calificación ahora.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultDarkThemeDescriptionLong" xml:space="preserve">
|
<data name="DefaultDarkThemeDescriptionLong" xml:space="preserve">
|
||||||
<value>Choose the dark theme to use when your device’s dark mode is in use</value>
|
<value>Elige el tema oscuro a usar cuando el modo oscuro de tu dispositivo esté en uso</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CreatedXY" xml:space="preserve">
|
<data name="CreatedXY" xml:space="preserve">
|
||||||
<value>Creado {0}, {1}</value>
|
<value>Creado {0}, {1}</value>
|
||||||
<comment>To state the date/time in which the cipher was created: Created 03/21/2023, 09:25 AM. First parameter is the date and the second parameter is the time.</comment>
|
<comment>To state the date/time in which the cipher was created: Created 03/21/2023, 09:25 AM. First parameter is the date and the second parameter is the time.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="TooManyAttempts" xml:space="preserve">
|
<data name="TooManyAttempts" xml:space="preserve">
|
||||||
<value>Too many attempts</value>
|
<value>Demasiados intentos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
||||||
<value>Account logged out.</value>
|
<value>Sesión de la cuenta cerrada.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Your organization permissions were updated, requiring you to set a master password.</value>
|
<value>Los permisos de su organización han sido actualizados, requiriendo que establezca una contraseña maestra.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Your organization requires you to set a master password.</value>
|
<value>Tu organización requiere que establezcas una contraseña maestra.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Set up an unlock option to change your vault timeout action.</value>
|
<value>Configura una opción de desbloqueo para cambiar tu acción de tiempo de espera de tu caja fuerte.</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -416,10 +416,10 @@
|
|||||||
<value>Sovelluslaajennus</value>
|
<value>Sovelluslaajennus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojesi automaattiseen täyttöön sovelluksissa ja verkossa.</value>
|
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojesi automaattitäyttöön sovelluksissa ja verkossa.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillService" xml:space="preserve">
|
<data name="AutofillService" xml:space="preserve">
|
||||||
<value>Automaattisen täytön palvelu</value>
|
<value>Automaattitäytön palvelu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>Vältä epäselviä merkkejä</value>
|
<value>Vältä epäselviä merkkejä</value>
|
||||||
@@ -431,13 +431,13 @@
|
|||||||
<value>Helpoin tapa lisätä holviisi uusia kirjautumistietoja on käyttää Bitwardenin sovelluslaajennusta. "Asetukset" -osiosta löydät lisätietoja laajennuksen käytöstä.</value>
|
<value>Helpoin tapa lisätä holviisi uusia kirjautumistietoja on käyttää Bitwardenin sovelluslaajennusta. "Asetukset" -osiosta löydät lisätietoja laajennuksen käytöstä.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenia kirjautumistietojesi automaattiseen täyttöön Safarissa ja muissa sovelluksissa.</value>
|
<value>Käytä Bitwardenia kirjautumistietojesi automaattitäyttöön Safarissa ja muissa sovelluksissa.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillService" xml:space="preserve">
|
<data name="BitwardenAutofillService" xml:space="preserve">
|
||||||
<value>Bitwardenin automaattisen täytön palvelu</value>
|
<value>Bitwardenin automaattitäytön palvelu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
|
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojen automaattiseen täyttöön.</value>
|
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojen automaattitäyttöön.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmail" xml:space="preserve">
|
<data name="ChangeEmail" xml:space="preserve">
|
||||||
<value>Vaihda sähköpostiosoite</value>
|
<value>Vaihda sähköpostiosoite</value>
|
||||||
@@ -745,10 +745,10 @@
|
|||||||
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
|
<comment>This is used for the autofill service. ex. "There are no items in your vault for twitter.com".</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOverlay" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOverlay" xml:space="preserve">
|
||||||
<value>Kun valitset syöttökentän ja näet Bitwardenin ponnahdusvalinnan, voit napauttaa sitä avataksesi automaattisen täytön palvelun.</value>
|
<value>Kun valitset syöttökentän ja näet Bitwardenin ponnahdusvalinnan, voit napauttaa sitä avataksesi automaattitäytön palvelun.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
<data name="BitwardenAutofillServiceNotificationContent" xml:space="preserve">
|
||||||
<value>Napauta tätä ilmoitusta täyttääksesi kohteen holvistasi automaattisesti.</value>
|
<value>Automaattitäytä holvisi kohde automaattisesti napauttamalla tätä ilmoitusta.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOpenAccessibilitySettings" xml:space="preserve">
|
||||||
<value>Avaa "Esteettömyys" -asetukset</value>
|
<value>Avaa "Esteettömyys" -asetukset</value>
|
||||||
@@ -775,16 +775,16 @@
|
|||||||
<value>Tila</value>
|
<value>Tila</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillServiceAlert2" xml:space="preserve">
|
||||||
<value>Helpoin tapa lisätä holviisi uusia kirjautumistietoja on Bitwardenin automaattisen täytön palvelu. Asetuksista löydät lisätietoja palvelun käytöstä.</value>
|
<value>Helpoin tapa lisätä holviisi uusia kirjautumistietoja on Bitwardenin automaattitäytön palvelu. Asetuksista löydät lisätietoja sen käytöstä.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Autofill" xml:space="preserve">
|
<data name="Autofill" xml:space="preserve">
|
||||||
<value>Automaattinen täyttö</value>
|
<value>Automaattitäyttö</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillOrView" xml:space="preserve">
|
<data name="AutofillOrView" xml:space="preserve">
|
||||||
<value>Täytetäänkö automaatisesti vai näytetäänkö tiedot?</value>
|
<value>Haluatko automaattitäyttää vai tarkastella kohdetta?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceMatchConfirm" xml:space="preserve">
|
<data name="BitwardenAutofillServiceMatchConfirm" xml:space="preserve">
|
||||||
<value>Haluatko varmasti täyttää automaattisesti tällä kohteella? Se ei täsmää täysin osoitteen "{0}" kanssa.</value>
|
<value>Haluatko varmasti automaattitäyttää tällä kohteella? Se ei ole täysin osoitetta "{0}" vastaava.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MatchingItems" xml:space="preserve">
|
<data name="MatchingItems" xml:space="preserve">
|
||||||
<value>Tunnistetut kohteet</value>
|
<value>Tunnistetut kohteet</value>
|
||||||
@@ -796,7 +796,7 @@
|
|||||||
<value>Etsi</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 automaattitäyttöön kohdetta osoitteelle ”{0}”.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnOrg" xml:space="preserve">
|
<data name="LearnOrg" xml:space="preserve">
|
||||||
<value>Lisätietoja organisaatioista</value>
|
<value>Lisätietoja organisaatioista</value>
|
||||||
@@ -907,7 +907,7 @@ Koodi skannataan 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 TOTP-todennusavaimen, kopioidaan todennuskoodi automaattisesti leikepöydälle automaattisen täytön yhteydessä.</value>
|
<value>Jos kirjautumistieto sisältää kaksivaiheisen TOTP-todennusavaimen, kopioidaan todennuskoodi automaattitäytön yhteydessä automaattisesti leikepöydälle.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyTotpAutomatically" xml:space="preserve">
|
<data name="CopyTotpAutomatically" xml:space="preserve">
|
||||||
<value>TOTP-koodin kopiointi</value>
|
<value>TOTP-koodin kopiointi</value>
|
||||||
@@ -1143,7 +1143,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Kuvakepalvelimen URL</value>
|
<value>Kuvakepalvelimen URL</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillWithBitwarden" xml:space="preserve">
|
<data name="AutofillWithBitwarden" xml:space="preserve">
|
||||||
<value>Täytä automaattisesti Bitwardenilla</value>
|
<value>Automaattitäytä Bitwardenilla</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultIsLocked" xml:space="preserve">
|
<data name="VaultIsLocked" xml:space="preserve">
|
||||||
<value>Holvi on lukittu</value>
|
<value>Holvi on lukittu</value>
|
||||||
@@ -1164,13 +1164,13 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Roskakorissa ei ole kohteita.</value>
|
<value>Roskakorissa ei ole kohteita.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAccessibilityService" xml:space="preserve">
|
<data name="AutofillAccessibilityService" xml:space="preserve">
|
||||||
<value>Automaattisen täytön esteettömyyspalvelu</value>
|
<value>Automaattitäytön esteettömyyspalvelu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceDescription" xml:space="preserve">
|
<data name="AutofillServiceDescription" xml:space="preserve">
|
||||||
<value>Bitwardenin automaattisen täytön palvelu käyttää Android Autofill Framework -rajapintaa kirjautumistietojen täyttöön laitteen sovelluksissa.</value>
|
<value>Bitwardenin automaattitäytön palvelu käyttää Android Autofill Framework -rajapintaa kirjautumistietojen täyttöön laitteen sovelluksissa.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
<data name="BitwardenAutofillServiceDescription" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenin automaattisen täytön palvelua kirjautumistietojen täyttöön sovelluksissa.</value>
|
<value>Käytä Bitwardenin automaattitäytön palvelua kirjautumistietojen täyttöön sovelluksissa.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
|
||||||
<value>Avaa "Automaattinen täyttö -palvelu" -asetukset</value>
|
<value>Avaa "Automaattinen täyttö -palvelu" -asetukset</value>
|
||||||
@@ -1256,7 +1256,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Kyllä, ja tallenna</value>
|
<value>Kyllä, ja tallenna</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAndSave" xml:space="preserve">
|
<data name="AutofillAndSave" xml:space="preserve">
|
||||||
<value>Täytä automaattisesti ja tallenna</value>
|
<value>Automaattitäytä ja tallenna</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Organization" xml:space="preserve">
|
<data name="Organization" xml:space="preserve">
|
||||||
<value>Organisaatio</value>
|
<value>Organisaatio</value>
|
||||||
@@ -1272,7 +1272,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Jatka pitämällä YubiKey NEO -todennuslaitetta laitteen taustaa 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 automaattitäytön palvelua.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DatePasswordUpdated" xml:space="preserve">
|
<data name="DatePasswordUpdated" xml:space="preserve">
|
||||||
<value>Salasana vaihdettiin</value>
|
<value>Salasana vaihdettiin</value>
|
||||||
@@ -1298,7 +1298,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Käytä holviasi suoraan näppäimistöltä nopeaa salasanojen automaattista täyttöä varten.</value>
|
<value>Käytä holviasi suoraan näppäimistöltä nopeaa salasanojen automaattista täyttöä varten.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn" xml:space="preserve">
|
<data name="AutofillTurnOn" xml:space="preserve">
|
||||||
<value>Ota salasanojen automaattinen täyttö laitteellasi käyttöön seuraavilla ohjeilla:</value>
|
<value>Ota salasanojen automaattitäyttö käyttöön laitteellasi seuraavilla ohjeilla:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTurnOn1" xml:space="preserve">
|
<data name="AutofillTurnOn1" xml:space="preserve">
|
||||||
<value>1. Siirry iOS:n "Asetukset" -sovellukseen</value>
|
<value>1. Siirry iOS:n "Asetukset" -sovellukseen</value>
|
||||||
@@ -1316,7 +1316,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>5. Valitse "Bitwarden"</value>
|
<value>5. Valitse "Bitwarden"</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordAutofill" xml:space="preserve">
|
<data name="PasswordAutofill" xml:space="preserve">
|
||||||
<value>Salasanojen automaattinen täyttö</value>
|
<value>Salasanojen automaattitäyttö</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
<data name="BitwardenAutofillAlert2" xml:space="preserve">
|
||||||
<value>Helpoin tapa lisätä uusia kirjautumistietoja holviisi on Bitwardenin automaattisen täytön laajennus. Asetuksista löydät lisätietoja laajennuksen käytöstä.</value>
|
<value>Helpoin tapa lisätä uusia kirjautumistietoja holviisi on Bitwardenin automaattisen täytön laajennus. Asetuksista löydät lisätietoja laajennuksen käytöstä.</value>
|
||||||
@@ -1530,11 +1530,11 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<comment>Clipboard is the operating system thing where you copy/paste data to on your device.</comment>
|
<comment>Clipboard is the operating system thing where you copy/paste data to on your device.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultUriMatchDetection" xml:space="preserve">
|
<data name="DefaultUriMatchDetection" xml:space="preserve">
|
||||||
<value>URI:n tunnistuksen oletustapa</value>
|
<value>URI:n oletuarvoinen tunnistustapa</value>
|
||||||
<comment>Default URI match detection for auto-fill.</comment>
|
<comment>Default URI match detection for auto-fill.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultUriMatchDetectionDescription" xml:space="preserve">
|
<data name="DefaultUriMatchDetectionDescription" xml:space="preserve">
|
||||||
<value>Valitse oletustapa, jolla kirjautumistietojen URI tunnistetaan kun suoritetaan toimintoja kuten automaattinen täyttö.</value>
|
<value>Valitse kirjautumistietojen URI:en oletusarvoinen tunnistustapa suoritettaessa automaattitäytön kaltaisia toimintoja.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Theme" xml:space="preserve">
|
<data name="Theme" xml:space="preserve">
|
||||||
<value>Teema</value>
|
<value>Teema</value>
|
||||||
@@ -1586,7 +1586,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Kun sovellus käynnistetään uudelleen</value>
|
<value>Kun sovellus käynnistetään uudelleen</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
<data name="AutofillServiceNotEnabled" xml:space="preserve">
|
||||||
<value>Automaattinen täyttö tekee Bitwarden-holvisi käytöstä sivustoilla ja muissa sovelluksissa helppoa. Näyttää siltä, ettei Bitwardenille ole määritetty automaattisen täytön palvelua. Määritys onnistuu "Asetukset" -ruudusta.</value>
|
<value>Automaattitäytön avulla Bitwarden-holviasi on helppo käyttää sivustoilla ja muissa sovelluksissa. Näyttää siltä, ettei Bitwardenia ole määritetty automaattitäytön palveluksi. Määritys onnistuu "Asetukset"-ruudusta.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
<data name="ThemeAppliedOnRestart" xml:space="preserve">
|
||||||
<value>Teema vaihtuu kun sovellus käynnistetään uudelleen.</value>
|
<value>Teema vaihtuu kun sovellus käynnistetään uudelleen.</value>
|
||||||
@@ -1620,7 +1620,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Avaa biometrialla</value>
|
<value>Avaa biometrialla</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityOverlayPermissionAlert" xml:space="preserve">
|
<data name="AccessibilityOverlayPermissionAlert" xml:space="preserve">
|
||||||
<value>Bitwarden vaatii huomiota - Katso Bitwardenin asetuksista "Automaattisen täytön esteettömyyspalvelu"</value>
|
<value>Bitwarden vaatii huomiota - Katso Bitwardenin asetuksista "Automaattitäytön esteettömyyspalvelu"</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
<data name="BitwardenAutofillServiceOverlayPermission" xml:space="preserve">
|
||||||
<value>3. Siirry Android-sovellusasetuksien Bitwarden-ruudulta "Näkyminen muiden päällä" -asetukseen (lisäasetusten alla) ja ota ominaisuus kytkinvalinnasta käyttöön.</value>
|
<value>3. Siirry Android-sovellusasetuksien Bitwarden-ruudulta "Näkyminen muiden päällä" -asetukseen (lisäasetusten alla) ja ota ominaisuus kytkinvalinnasta käyttöön.</value>
|
||||||
@@ -1695,7 +1695,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Tiedostoliite tallennettiin</value>
|
<value>Tiedostoliite tallennettiin</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTileAccessibilityRequired" xml:space="preserve">
|
<data name="AutofillTileAccessibilityRequired" xml:space="preserve">
|
||||||
<value>Ota "Automaattisen täytön esteettömyyspalvelu" käyttöön Bitwardenin asetuksista käyttääksesi automaattisen täytön pikavalintapalkkia.</value>
|
<value>Ota "Automaattitäytön esteettömyyspalvelu" käyttöön Bitwardenin asetuksista käyttääksesi automaattitäytön pikavalintapalkkia.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillTileUriNotFound" xml:space="preserve">
|
<data name="AutofillTileUriNotFound" xml:space="preserve">
|
||||||
<value>Salasanakenttiä ei havaittu</value>
|
<value>Salasanakenttiä ei havaittu</value>
|
||||||
@@ -1814,10 +1814,10 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Tietosuojakäytäntö</value>
|
<value>Tietosuojakäytäntö</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
|
<data name="AccessibilityDrawOverPermissionAlert" xml:space="preserve">
|
||||||
<value>Bitwarden edellyttää toimenpiteitä - Kytke "Näkyminen muiden päällä" -asetus käyttöön Bitwardenin asetusten kohdasta "Automaattisen täytön palvelut"</value>
|
<value>Bitwarden edellyttää toimenpiteitä - Kytke "Näkyminen muiden päällä" -asetus käyttöön Bitwardenin asetusten kohdasta "Automaattitäytön palvelut"</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServices" xml:space="preserve">
|
<data name="AutofillServices" xml:space="preserve">
|
||||||
<value>Automaattisen täytön palvelut</value>
|
<value>Automaattitäytön palvelut</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InlineAutofill" xml:space="preserve">
|
<data name="InlineAutofill" xml:space="preserve">
|
||||||
<value>Tekstinsisäinen täyttö</value>
|
<value>Tekstinsisäinen täyttö</value>
|
||||||
@@ -1829,10 +1829,10 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Esteettömyyspalvelu</value>
|
<value>Esteettömyyspalvelu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription" xml:space="preserve">
|
<data name="AccessibilityDescription" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojen automaattiseen täyttöön sovelluksissa ja verkkosivustoilla. Kun määritetty, näytetään aktiivisten kirjautumiskenttien ohessa pikavalintapalkki.</value>
|
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojen automaattitäyttöön sovelluksissa ja verkkosivustoilla. Kun määritetty, näytetään aktiivisten kirjautumiskenttien ohessa pikavalintapalkki.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription2" xml:space="preserve">
|
<data name="AccessibilityDescription2" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojen automaattiseen täyttöön sovelluksissa ja verkkosivustoilla (myös "Näkyminen muiden päällä" -asetuksen on oltava käytössä).</value>
|
<value>Käytä Bitwardenin esteettömyyspalvelua kirjautumistietojen automaattitäyttöön sovelluksissa ja verkkosivustoilla (myös "Näkyminen muiden päällä" -asetuksen on oltava käytössä).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccessibilityDescription3" xml:space="preserve">
|
<data name="AccessibilityDescription3" xml:space="preserve">
|
||||||
<value>Käytä Bitwardenin esteettömyyspalvelua käyttääksesi Automaattisen täytön pikavalintapalkkia ja/tai näytä palkki käyttäen "Näkyminen muiden päällä" -asetusta.</value>
|
<value>Käytä Bitwardenin esteettömyyspalvelua käyttääksesi Automaattisen täytön pikavalintapalkkia ja/tai näytä palkki käyttäen "Näkyminen muiden päällä" -asetusta.</value>
|
||||||
@@ -1847,7 +1847,7 @@ Koodi skannataan automaattisesti.</value>
|
|||||||
<value>Sallii Bitwardenin esteettömyyspalvelun näyttää pikavalintapalkin aktiivisten kirjautumiskenttien ohessa.</value>
|
<value>Sallii Bitwardenin esteettömyyspalvelun näyttää pikavalintapalkin aktiivisten kirjautumiskenttien ohessa.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription2" xml:space="preserve">
|
<data name="DrawOverDescription2" xml:space="preserve">
|
||||||
<value>Kun käytössä, Bitwardenin esteettömyyspalvelu näyttää aktiivisten kirjautumiskenttien ohessa pikavalintapalkin helpottaakseen kirjautumistietojen automaattista täyttöä.</value>
|
<value>Kun käytössä, Bitwardenin esteettömyyspalvelu näyttää aktiivisten kirjautumiskenttien ohessa pikavalintapalkin helpottaakseen kirjautumistietojen automaattitäyttöä.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DrawOverDescription3" xml:space="preserve">
|
<data name="DrawOverDescription3" xml:space="preserve">
|
||||||
<value>Jos käytössä, esteettömyyspalvelu näyttää pikavalintapalkin laajentaakseen automaattisen täytön palvelun toiminnan kattamaan myös vanhemmat sovellukset, jotka eivät tue Android Autofill Framework -rajapintaa.</value>
|
<value>Jos käytössä, esteettömyyspalvelu näyttää pikavalintapalkin laajentaakseen automaattisen täytön palvelun toiminnan kattamaan myös vanhemmat sovellukset, jotka eivät tue Android Autofill Framework -rajapintaa.</value>
|
||||||
@@ -2426,7 +2426,7 @@ turvallisesti valitsemalla "Lisää TOTP"</value>
|
|||||||
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ForwardEmail" xml:space="preserve">
|
<data name="ForwardEmail" xml:space="preserve">
|
||||||
<value>ForwardEmail</value>
|
<value>Forward Email</value>
|
||||||
<comment>"ForwardEmail" is the product name and should not be translated.</comment>
|
<comment>"ForwardEmail" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="APIAccessToken" xml:space="preserve">
|
<data name="APIAccessToken" xml:space="preserve">
|
||||||
@@ -2696,10 +2696,10 @@ Haluatko vaihtaa tähän tiliin?</value>
|
|||||||
<value>Holvin aikakatkaisutoiminnoksi vaihdettiin uloskirjaus</value>
|
<value>Holvin aikakatkaisutoiminnoksi vaihdettiin uloskirjaus</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>Estä automaattinen täyttö</value>
|
<value>Estä automaattitäyttö</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
|
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
|
||||||
<value>Automaattista täyttöä ei tarjota näille URI-osoitteille.</value>
|
<value>Automaattitäyttöä ei tarjota näille URI-osoitteille.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewBlockedURI" xml:space="preserve">
|
<data name="NewBlockedURI" xml:space="preserve">
|
||||||
<value>Uusi estetty URI</value>
|
<value>Uusi estetty URI</value>
|
||||||
|
|||||||
@@ -121,14 +121,14 @@
|
|||||||
<value>हमारे बारे में</value>
|
<value>हमारे बारे में</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Add" xml:space="preserve">
|
<data name="Add" xml:space="preserve">
|
||||||
<value>जोड़ें</value>
|
<value>बनाएं</value>
|
||||||
<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">
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
<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">
|
||||||
<value>रद्द करें</value>
|
<value>कैंसिल करें</value>
|
||||||
<comment>Cancel an operation.</comment>
|
<comment>Cancel an operation.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Copy" xml:space="preserve">
|
<data name="Copy" xml:space="preserve">
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
<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>यूज़रनाम कॉपी करें</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">
|
||||||
@@ -164,22 +164,22 @@
|
|||||||
<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">
|
||||||
<value>मिटाएं</value>
|
<value>हटाएं</value>
|
||||||
<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>
|
||||||
@@ -206,10 +206,10 @@
|
|||||||
<value>बग रिपोर्ट भेजें</value>
|
<value>बग रिपोर्ट भेजें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FileBugReportDescription" xml:space="preserve">
|
<data name="FileBugReportDescription" xml:space="preserve">
|
||||||
<value>हमारे गिटहब रिपॉज़िटरी में समस्या बताएं।</value>
|
<value>हमारे गिटहब रिपॉज़िटरी में दिक्कत बताएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FingerprintDirection" xml:space="preserve">
|
<data name="FingerprintDirection" xml:space="preserve">
|
||||||
<value>फिंगरप्रिंट से सत्यापन करें।</value>
|
<value>फिंगरप्रिंट से खोलें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Folder" xml:space="preserve">
|
<data name="Folder" xml:space="preserve">
|
||||||
<value>फोल्डर</value>
|
<value>फोल्डर</value>
|
||||||
@@ -219,7 +219,7 @@
|
|||||||
<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>
|
||||||
@@ -243,7 +243,7 @@
|
|||||||
<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">
|
||||||
@@ -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>मुख्य पासवर्ड गलत है। वापस कोशिश करें।</value>
|
<value>मास्टर पासवर्ड गलत है। वापस कोशिश करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidPIN" xml:space="preserve">
|
<data name="InvalidPIN" xml:space="preserve">
|
||||||
<value>पिन गलत है। वापस कोशिश करें।</value>
|
<value>पिन गलत है। वापस कोशिश करें।</value>
|
||||||
@@ -265,7 +265,7 @@
|
|||||||
<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">
|
||||||
@@ -276,19 +276,19 @@
|
|||||||
<value>पक्का लॉगआउट करें?</value>
|
<value>पक्का लॉगआउट करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemoveAccount" xml:space="preserve">
|
<data name="RemoveAccount" xml:space="preserve">
|
||||||
<value>खाता हटाएं</value>
|
<value>अकाउंट हटाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RemoveAccountConfirmation" xml:space="preserve">
|
<data name="RemoveAccountConfirmation" xml:space="preserve">
|
||||||
<value>पक्का खाता हटाएं?</value>
|
<value>अकाउंट पक्का हटाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountAlreadyAdded" xml:space="preserve">
|
<data name="AccountAlreadyAdded" xml:space="preserve">
|
||||||
<value>खाता पहले से जोड़ा गया</value>
|
<value>अकाउंट पहले से है</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
<data name="SwitchToAlreadyAddedAccountConfirmation" xml:space="preserve">
|
||||||
<value>खाता अभी इस्तेमाल करें?</value>
|
<value>अकाउंट अभी इस्तेमाल करें?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPassword" xml:space="preserve">
|
<data name="MasterPassword" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड</value>
|
<value>मास्टर पासवर्ड</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,11 +296,11 @@
|
|||||||
<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>मेरा तिजोरी</value>
|
<value>मेरी तिजोरी</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">
|
||||||
<value>सत्यापन करनेवाला</value>
|
<value>ऑथेंटिकेटर</value>
|
||||||
<comment>Authenticator TOTP feature</comment>
|
<comment>Authenticator TOTP feature</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Name" xml:space="preserve">
|
<data name="Name" xml:space="preserve">
|
||||||
@@ -327,7 +327,7 @@
|
|||||||
<comment>Button text for a save operation (verb).</comment>
|
<comment>Button text for a save operation (verb).</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Move" xml:space="preserve">
|
<data name="Move" xml:space="preserve">
|
||||||
<value>ले जाएं</value>
|
<value>ट्रांस्फर करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Saving" xml:space="preserve">
|
<data name="Saving" xml:space="preserve">
|
||||||
<value>सेव कर रहे है...</value>
|
<value>सेव कर रहे है...</value>
|
||||||
@@ -342,21 +342,21 @@
|
|||||||
<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>चीज़ मिटाया गया।</value>
|
<value>आइटम हटाया गया</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">
|
||||||
<value>जमा करें</value>
|
<value>भेजें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Sync" xml:space="preserve">
|
<data name="Sync" xml:space="preserve">
|
||||||
<value>सिंक</value>
|
<value>सिंक</value>
|
||||||
<comment>The title for the sync page.</comment>
|
<comment>The title for the sync page.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ThankYou" xml:space="preserve">
|
<data name="ThankYou" xml:space="preserve">
|
||||||
<value>शुक्रिया</value>
|
<value>थैंक यू</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Tools" xml:space="preserve">
|
<data name="Tools" xml:space="preserve">
|
||||||
<value>औज़ार</value>
|
<value>टूल्स</value>
|
||||||
<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">
|
||||||
@@ -367,11 +367,11 @@
|
|||||||
<value>फिंगरप्रिंट से खोलें</value>
|
<value>फिंगरप्रिंट से खोलें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Username" xml:space="preserve">
|
<data name="Username" xml:space="preserve">
|
||||||
<value>यूज़रनाम</value>
|
<value>यूज़रनेम</value>
|
||||||
<comment>Label for a username.</comment>
|
<comment>Label for a username.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ValidationFieldRequired" xml:space="preserve">
|
<data name="ValidationFieldRequired" xml:space="preserve">
|
||||||
<value>{0} फील्ड चाहिए।</value>
|
<value>{0} चाहिए।</value>
|
||||||
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
<comment>Validation message for when a form field is left blank and is required to be entered.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ValueHasBeenCopied" xml:space="preserve">
|
<data name="ValueHasBeenCopied" xml:space="preserve">
|
||||||
@@ -379,13 +379,13 @@
|
|||||||
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
<comment>Confirmation message after successfully copying a value to the clipboard.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyFingerprint" xml:space="preserve">
|
<data name="VerifyFingerprint" xml:space="preserve">
|
||||||
<value>फिंगरप्रिंट सत्यापित करें</value>
|
<value>फिंगरप्रिंट दें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyMasterPassword" xml:space="preserve">
|
<data name="VerifyMasterPassword" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड सत्यापित करें</value>
|
<value>मास्टर पासवर्ड दें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyPIN" xml:space="preserve">
|
<data name="VerifyPIN" xml:space="preserve">
|
||||||
<value>पिन सत्यापित करें।</value>
|
<value>पिन दें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Version" xml:space="preserve">
|
<data name="Version" xml:space="preserve">
|
||||||
<value>संस्करण</value>
|
<value>संस्करण</value>
|
||||||
@@ -404,40 +404,40 @@
|
|||||||
<value>हां</value>
|
<value>हां</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Account" xml:space="preserve">
|
<data name="Account" xml:space="preserve">
|
||||||
<value>खाता</value>
|
<value>अकाउंट</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountCreated" xml:space="preserve">
|
<data name="AccountCreated" xml:space="preserve">
|
||||||
<value>आपका नया खाता बनाया गया! अब लॉगइन कर सकते हैं।</value>
|
<value>आपका नया अकाउंट बनाया गया! अब लॉगइन कर सकते हैं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddAnItem" xml:space="preserve">
|
<data name="AddAnItem" xml:space="preserve">
|
||||||
<value>चीज़ जोड़ें</value>
|
<value>आइटम बनाएं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AppExtension" xml:space="preserve">
|
<data name="AppExtension" xml:space="preserve">
|
||||||
<value>ऐप एक्सटेंशन</value>
|
<value>ऐप एक्सटेंशन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
<data name="AutofillAccessibilityDescription" xml:space="preserve">
|
||||||
<value>दूसरे ऐप और वेबसाइट पर अपनेआप लॉगइन भरने के लिए बिटवार्डन सुलभता सेवा इस्तेमाल करें।</value>
|
<value>दूसरे ऐप और वेबसाइट पर अपनेआप लॉगइन करने के लिए बिटवार्डन एक्सेसिबिलिटी सर्विस इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillService" xml:space="preserve">
|
<data name="AutofillService" xml:space="preserve">
|
||||||
<value>अपनेआप-भर सेवा</value>
|
<value>ऑटो-फिल सर्विस</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
<data name="AvoidAmbiguousCharacters" xml:space="preserve">
|
||||||
<value>अस्पष्ट अक्षर से बचें</value>
|
<value>कई मतलबवाले अक्षर ना इस्तेमाल करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtension" xml:space="preserve">
|
<data name="BitwardenAppExtension" xml:space="preserve">
|
||||||
<value>बिटवार्डन ऐप एक्सटेंशन</value>
|
<value>बिटवार्डन ऐप एक्सटेंशन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>बिटवार्डन ऐप एक्सटेंशन तिजोरी में नए चीज़ डालने का सबसे आसात तरीका है। बिटवार्डन ऐप एक्सटेंशन के इस्तेमाल से जुड़ी जानकारी लेने के लिए "सेटिंग" में जाएं।</value>
|
<value>बिटवार्डन ऐप एक्सटेंशन तिजोरी में नए आइटम डालने का सबसे आसात तरीका है। बिटवार्डन ऐप एक्सटेंशन के इस्तेमाल से जुड़ी जानकारी लेने के लिए "सेटिंग" में जाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
<data name="BitwardenAppExtensionDescription" xml:space="preserve">
|
||||||
<value>सफारी और दूसरे ऐप में अपने लॉगइन अपनेआप भरने के लिए बिटवार्डन इस्तेमाल करें।</value>
|
<value>सफारी और दूसरे ऐप में अपनेआप लॉगइन करने के लिए बिटवार्डन इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillService" xml:space="preserve">
|
<data name="BitwardenAutofillService" xml:space="preserve">
|
||||||
<value>बिटवार्डन अपनेआप-भर सेवा</value>
|
<value>बिटवार्डन ऑटो-फिल सर्विस</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
|
<data name="BitwardenAutofillAccessibilityServiceDescription" xml:space="preserve">
|
||||||
<value>अपने लॉगइन अपनेआप भरने के लिए बिटवार्डन सुलभता सेवा इस्तेमाल करें।</value>
|
<value>अपनेआप लॉगइन करने के लिए बिटवार्डन एक्सेसिबिलिटी सर्विस इस्तेमाल करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeEmail" xml:space="preserve">
|
<data name="ChangeEmail" xml:space="preserve">
|
||||||
<value>ईमेल बदलें</value>
|
<value>ईमेल बदलें</value>
|
||||||
@@ -446,41 +446,41 @@
|
|||||||
<value>Bitwarden.com वेब तिजोरी पर ईमेल पता बदला जा सकता है। इस वेबसाइट पर अभी जाएं?</value>
|
<value>Bitwarden.com वेब तिजोरी पर ईमेल पता बदला जा सकता है। इस वेबसाइट पर अभी जाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPassword" xml:space="preserve">
|
<data name="ChangeMasterPassword" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड बदलें</value>
|
<value>मास्टर पासवर्ड बदलें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Close" xml:space="preserve">
|
<data name="Close" xml:space="preserve">
|
||||||
<value>बंद करें</value>
|
<value>बंद करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Continue" xml:space="preserve">
|
<data name="Continue" xml:space="preserve">
|
||||||
<value>जारी रखें</value>
|
<value>आगे बढ़ें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CreateAccount" xml:space="preserve">
|
<data name="CreateAccount" xml:space="preserve">
|
||||||
<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">
|
||||||
<value>चीज़ बदलाव करें</value>
|
<value>आइटम बदलें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
<data name="EnableAutomaticSyncing" xml:space="preserve">
|
||||||
<value>अपनेआप-सिंक की अनुमति दें</value>
|
<value>ऑटो-सिंक चालू करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EnterEmailForHint" xml:space="preserve">
|
<data name="EnterEmailForHint" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड इशारा लेने के लिए अपने खाते का ईमेल पता डालें।</value>
|
<value>मास्टर पासवर्ड हिंट लेने के लिए अपने अकाउंट का ईमेल पता डालें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExntesionReenable" xml:space="preserve">
|
<data name="ExntesionReenable" xml:space="preserve">
|
||||||
<value>ऐप एक्सटेंशन वापस चालू करें</value>
|
<value>ऐप एक्सटेंशन वापस चालू करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionAlmostDone" xml:space="preserve">
|
<data name="ExtensionAlmostDone" xml:space="preserve">
|
||||||
<value>करीब-करीब खत्म!</value>
|
<value>खत्म होने ही वाला है!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionEnable" xml:space="preserve">
|
<data name="ExtensionEnable" xml:space="preserve">
|
||||||
<value>ऐप एक्सटेंशन चालू करें</value>
|
<value>ऐप एक्सटेंशन चालू करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionInSafari" xml:space="preserve">
|
<data name="ExtensionInSafari" xml:space="preserve">
|
||||||
<value>सफारी में, शेयर आइकन से बिटवार्डन का पता लगाएं (इशारा: मेन्यू के सबसे निचले पट्टी पर दाएं तरफ जाएं)।</value>
|
<value>सफारी में, शेयर आइकन से बिटवार्डन को ढूंढें (हिंट: मेन्यू के सबसे निचले पट्टी पर राइट में जाएं)।</value>
|
||||||
<comment>Safari is the name of apple's web browser</comment>
|
<comment>Safari is the name of apple's web browser</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionInstantAccess" xml:space="preserve">
|
<data name="ExtensionInstantAccess" xml:space="preserve">
|
||||||
@@ -490,10 +490,10 @@
|
|||||||
<value>आप लॉगइन करने के लिए तैयार हैं!</value>
|
<value>आप लॉगइन करने के लिए तैयार हैं!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionSetup" xml:space="preserve">
|
<data name="ExtensionSetup" xml:space="preserve">
|
||||||
<value>अब सफारी, क्रोम, और दूसरे सपोर्ट किए गए ऐप से लॉगइन आसानी से एक्सेस किए जा सकते है।</value>
|
<value>अब सफारी, क्रोम, और दूसरे सपोर्ट किए गए ऐप से सारे लॉगइन आसानी से एक्सेस किए जा सकते है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionSetup2" xml:space="preserve">
|
<data name="ExtensionSetup2" xml:space="preserve">
|
||||||
<value>सफारी और क्रोम में, शेयर आइकन से बिटवार्डन का पता लगाएं (इशारा: मेन्यू के सबसे निचले पट्टी पर दाएं तरफ जाएं)</value>
|
<value>सफारी और क्रोम में, शेयर आइकन से बिटवार्डन को ढूंढें (हिंट: शेयर मेन्यू के सबसे निचले पट्टी पर राइट में जाएं)।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExtensionTapIcon" xml:space="preserve">
|
<data name="ExtensionTapIcon" xml:space="preserve">
|
||||||
<value>एक्सटेंशन खोलने के लिए मेन्यू में बिटवार्डन आइकन पर दबाएं।</value>
|
<value>एक्सटेंशन खोलने के लिए मेन्यू में बिटवार्डन आइकन पर दबाएं।</value>
|
||||||
@@ -511,16 +511,16 @@
|
|||||||
<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>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItemsConfirmation" xml:space="preserve">
|
<data name="ImportItemsConfirmation" xml:space="preserve">
|
||||||
<value>Bitwarden.com वेब तिजोरी से थोक में चीज़ आयात किए जा सकते हैं। वेबसाइट पर अभी जाएं?</value>
|
<value>Bitwarden.com वेब तिजोरी से थोक में आइटम इंपोर्ट किए जा सकते हैं। वेबसाइट पर अभी जाएं?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ImportItemsDescription" xml:space="preserve">
|
<data name="ImportItemsDescription" xml:space="preserve">
|
||||||
<value>दूसरे पासवर्ड मैनेजमेंट ऐप से थोक में चीज़ जल्दी आयात करें।</value>
|
<value>दूसरे पासवर्ड मैनेजमेंट ऐप से अपने आइटम जल्दी इंपोर्ट करें।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LastSync" xml:space="preserve">
|
<data name="LastSync" xml:space="preserve">
|
||||||
<value>आखिरी सिंक:</value>
|
<value>आखिरी सिंक:</value>
|
||||||
@@ -547,20 +547,20 @@
|
|||||||
<value>तुरंत</value>
|
<value>तुरंत</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeout" xml:space="preserve">
|
<data name="VaultTimeout" xml:space="preserve">
|
||||||
<value>तिजोरी वक्त खत्म</value>
|
<value>तिजोरी टाइमआउट</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutAction" xml:space="preserve">
|
<data name="VaultTimeoutAction" xml:space="preserve">
|
||||||
<value>तिजोरी वक्त खत्म</value>
|
<value>तिजोरी टाइमआउट एक्शन</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
<data name="VaultTimeoutLogOutConfirmation" xml:space="preserve">
|
||||||
<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>
|
||||||
@@ -569,58 +569,58 @@
|
|||||||
<value>पासवर्ड गलत है।</value>
|
<value>पासवर्ड गलत है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordDescription" xml:space="preserve">
|
<data name="MasterPasswordDescription" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड वो पासवर्ड है जो तिजोरी एक्सेस करने के लिए इस्तेमाल होता है। मुख्य पासवर्ड ना भूलना बहुत ज़रूरी है। भूलने के बाद पासवर्ड वापस पाना मुमकिन नहीं होगा।</value>
|
<value>मास्टर पासवर्ड वो पासवर्ड है जो तिजोरी एक्सेस करने के लिए इस्तेमाल होता है। मास्टर पासवर्ड ना भूलना बहुत ज़रूरी है। भूलने के बाद पासवर्ड वापस पाना मुमकिन नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordHint" xml:space="preserve">
|
<data name="MasterPasswordHint" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड इशारा (ज़रूरी नहीं)</value>
|
<value>मास्टर पासवर्ड हिंट (ज़रूरी नहीं)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordHintDescription" xml:space="preserve">
|
<data name="MasterPasswordHintDescription" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड इशारा आपको पासवर्ड भूल जाने के स्थिति में उसको याद करने में मदद करता है।</value>
|
<value>मास्टर पासवर्ड हिंट पासवर्ड भूल जाने के हालत में उसको याद करने में मदद करता है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
<data name="MasterPasswordLengthValMessageX" xml:space="preserve">
|
||||||
<value>मुख्य पासवर्ड कम-से-कम {0} अक्षर लंबा होना चाहिए।</value>
|
<value>मास्टर पासवर्ड कम-से-कम {0} अक्षर लंबा होना चाहिए।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MinNumbers" xml:space="preserve">
|
<data name="MinNumbers" xml:space="preserve">
|
||||||
<value>कम-से-कम अंक</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>कम-से-कम खास अक्षर</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">
|
||||||
<value>ज़्यादा सेटिंग</value>
|
<value>ज़्यादा सेटिंग</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MustLogInMainApp" xml:space="preserve">
|
<data name="MustLogInMainApp" xml:space="preserve">
|
||||||
<value>एक्सटेशन इस्तेमाल करने से पहले मुख्य बिटवार्डन ऐप में लॉगइन करना पड़ेगा।</value>
|
<value>एक्सटेशन इस्तेमाल करने से पहले मेन बिटवार्डन ऐप में लॉगइन करना पड़ेगा।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Never" xml:space="preserve">
|
<data name="Never" xml:space="preserve">
|
||||||
<value>कभी नहीं</value>
|
<value>कभी नहीं</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NewItemCreated" xml:space="preserve">
|
<data name="NewItemCreated" xml:space="preserve">
|
||||||
<value>नया चीज़ बनाया गया</value>
|
<value>नया आइटम बनाया गया</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoFavorites" xml:space="preserve">
|
<data name="NoFavorites" xml:space="preserve">
|
||||||
<value>तिजोरी में कोई मनपसंद चीज़ नहीं है।</value>
|
<value>तिजोरी में कोई मनपसंद चीज़ नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItems" xml:space="preserve">
|
<data name="NoItems" xml:space="preserve">
|
||||||
<value>तिजोरी में कोई चीज़ नहीं है।</value>
|
<value>तिजोरी में कोई आइटम नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoItemsTap" xml:space="preserve">
|
<data name="NoItemsTap" xml:space="preserve">
|
||||||
<value>इस वेबसाइट/ऐप के लिए तिजोरी में कोई चीज़ नहीं है। चीज़ जोड़ने के लिए दबाएं।</value>
|
<value>इस वेबसाइट/ऐप के लिए तिजोरी में कोई आइटम नहीं है। आइटम बनाने के लिए दबाएं।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
<data name="NoUsernamePasswordConfigured" xml:space="preserve">
|
||||||
<value>इस लॉगइन में कोई यूजरनाम या पासवर्ड नहीं है।</value>
|
<value>इस लॉगइन में कोई यूजरनेम या पासवर्ड नहीं है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="OkGotIt" xml:space="preserve">
|
<data name="OkGotIt" xml:space="preserve">
|
||||||
<value>ठीक है, समझ गए!</value>
|
<value>ठीक है, समझ गए!</value>
|
||||||
<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>विकल्प डिफॉल्ट मुख्य बिटवार्डन ऐप के पासवर्ड जनरेटर औज़ार से सेट होता है।</value>
|
<value>ऑप्शन के डिफॉल्ट मेन बिटवार्डन ऐप के पासवर्ड जेनरेटर टूल से सेट होता है।</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>
|
||||||
@@ -629,13 +629,13 @@
|
|||||||
<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>
|
||||||
@@ -843,11 +843,11 @@
|
|||||||
<value>कोई दूसरा दो-कदम लॉगइन तरीका इस्तेमाल करें</value>
|
<value>कोई दूसरा दो-कदम लॉगइन तरीका इस्तेमाल करें</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailNotSent" xml:space="preserve">
|
<data name="VerificationEmailNotSent" xml:space="preserve">
|
||||||
<value>Could not send verification email. Try again.</value>
|
<value>जांच के लिए मेईल भेजने में असमर्थ। फिर से प्रयास करें ।</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerificationEmailSent" xml:space="preserve">
|
<data name="VerificationEmailSent" xml:space="preserve">
|
||||||
<value>Verification email sent</value>
|
<value>जांच के लिए मेईल भेजा गया है</value>
|
||||||
<comment>For 2FA</comment>
|
<comment>For 2FA</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="YubiKeyInstruction" xml:space="preserve">
|
<data name="YubiKeyInstruction" xml:space="preserve">
|
||||||
@@ -858,23 +858,23 @@
|
|||||||
<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>Add new attachment</value>
|
<value>नई अटैचमेंट जोडे</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Attachments" xml:space="preserve">
|
<data name="Attachments" xml:space="preserve">
|
||||||
<value>अटॅचमेंट्स</value>
|
<value>अटॅचमेंट्स</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnableToDownloadFile" xml:space="preserve">
|
<data name="UnableToDownloadFile" xml:space="preserve">
|
||||||
<value>Unable to download file.</value>
|
<value>फाइल डाउनलोड करने में असफल</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnableToOpenFile" xml:space="preserve">
|
<data name="UnableToOpenFile" xml:space="preserve">
|
||||||
<value>Your device cannot open this type of file.</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">
|
||||||
<value>This attachment is {0} in size. Are you sure you want to download it onto your device?</value>
|
<value>इस अटैचमेंट की साईज {0} है. क्या आप निश्चित रूप से उसे अपने उपकरण में डाउनलोड करना चाहते हैं?</value>
|
||||||
<comment>The placeholder will show the file size of the attachment. Ex "25 MB"</comment>
|
<comment>The placeholder will show the file size of the attachment. Ex "25 MB"</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="AuthenticatorKey" xml:space="preserve">
|
<data name="AuthenticatorKey" xml:space="preserve">
|
||||||
@@ -891,8 +891,7 @@
|
|||||||
<value>Cannot read authenticator key.</value>
|
<value>Cannot read authenticator key.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
<data name="PointYourCameraAtTheQRCode" xml:space="preserve">
|
||||||
<value>Point your camera at the QR Code.
|
<value>अपने कैमरे को QR CODE कि और रखें। स्कैन अपने आप होगा।</value>
|
||||||
Scanning will happen automatically.</value>
|
|
||||||
</data>
|
</data>
|
||||||
<data name="ScanQrTitle" xml:space="preserve">
|
<data name="ScanQrTitle" xml:space="preserve">
|
||||||
<value>QR कोड को स्कैन करें</value>
|
<value>QR कोड को स्कैन करें</value>
|
||||||
@@ -913,10 +912,10 @@ Scanning will happen automatically.</value>
|
|||||||
<value>Copy TOTP automatically</value>
|
<value>Copy TOTP automatically</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PremiumRequired" xml:space="preserve">
|
<data name="PremiumRequired" xml:space="preserve">
|
||||||
<value>A premium membership is required to use this feature.</value>
|
<value>इस सुविधा का उपयोग करने के लिए प्रीमियम सदस्यता की आवश्यकता होती है।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AttachementAdded" xml:space="preserve">
|
<data name="AttachementAdded" xml:space="preserve">
|
||||||
<value>Attachment added</value>
|
<value>अटैचमेंट डालि गई।</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AttachmentDeleted" xml:space="preserve">
|
<data name="AttachmentDeleted" xml:space="preserve">
|
||||||
<value>संग्लित वस्तु डिलीट करी गई</value>
|
<value>संग्लित वस्तु डिलीट करी गई</value>
|
||||||
|
|||||||
@@ -2423,7 +2423,7 @@
|
|||||||
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
<comment>"Fastmail" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ForwardEmail" xml:space="preserve">
|
<data name="ForwardEmail" xml:space="preserve">
|
||||||
<value>FowardEmail</value>
|
<value>ForwardEmail</value>
|
||||||
<comment>"ForwardEmail" is the product name and should not be translated.</comment>
|
<comment>"ForwardEmail" is the product name and should not be translated.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="APIAccessToken" xml:space="preserve">
|
<data name="APIAccessToken" xml:space="preserve">
|
||||||
|
|||||||
@@ -425,7 +425,7 @@
|
|||||||
<value>あいまいな文字を避ける</value>
|
<value>あいまいな文字を避ける</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtension" xml:space="preserve">
|
<data name="BitwardenAppExtension" xml:space="preserve">
|
||||||
<value>Bitwarden App Extension</value>
|
<value>Bitwarden アプリ拡張機能</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
<data name="BitwardenAppExtensionAlert2" xml:space="preserve">
|
||||||
<value>ログイン情報を保管庫に追加する一番簡単な方法はApp Extensionを使うことです。詳しくは「設定」画面に進んでください。</value>
|
<value>ログイン情報を保管庫に追加する一番簡単な方法はApp Extensionを使うことです。詳しくは「設定」画面に進んでください。</value>
|
||||||
|
|||||||
@@ -2670,7 +2670,7 @@
|
|||||||
<value>Помоћ поновно тражење главне лозинке</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 or set up biometric unlock to resolve.</value>
|
<value>Откључавање можда неће успети због недовољне меморије. Умањите подешавање KDF меморије или подесите биометрију за решење.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidAPIKey" xml:space="preserve">
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
<value>Неисправан API кључ</value>
|
<value>Неисправан API кључ</value>
|
||||||
@@ -2749,7 +2749,7 @@
|
|||||||
<value>Пријавите се са уређајем</value>
|
<value>Пријавите се са уређајем</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoggingInOn" xml:space="preserve">
|
<data name="LoggingInOn" xml:space="preserve">
|
||||||
<value>Logging in on</value>
|
<value>Пријављено на</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Vault" xml:space="preserve">
|
<data name="Vault" xml:space="preserve">
|
||||||
<value>Сеф</value>
|
<value>Сеф</value>
|
||||||
|
|||||||
@@ -1742,7 +1742,7 @@ Skanningen sker automatiskt.</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">
|
||||||
<value>Biometrisk upplåsning för automatisk ifyllnad är inaktiverad i väntan på bekräftelse av huvudlösenordet.</value>
|
<value>Biometrisk upplåsning har inaktiverats för det här kontot tills huvudlösenordet har angetts.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
<data name="AccountBiometricInvalidatedExtension" xml:space="preserve">
|
||||||
<value>Den biometriska upplåsningen av automatisk ifyllning för detta konto är inaktiverat i väntan på verifiering av huvudlösenordet.</value>
|
<value>Den biometriska upplåsningen av automatisk ifyllning för detta konto är inaktiverat i väntan på verifiering av huvudlösenordet.</value>
|
||||||
@@ -2613,10 +2613,10 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Lokalt installerad</value>
|
<value>Lokalt installerad</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DataRegion" xml:space="preserve">
|
<data name="DataRegion" xml:space="preserve">
|
||||||
<value>Dataområde</value>
|
<value>Dataregion</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Region" xml:space="preserve">
|
<data name="Region" xml:space="preserve">
|
||||||
<value>Område</value>
|
<value>Region</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
<data name="UpdateWeakMasterPasswordWarning" xml:space="preserve">
|
||||||
<value>Ditt huvudlösenord följer inte ett eller flera av din organisations regler. För att komma åt ditt valv så måste du ändra ditt huvudlösenord nu. Om du gör det kommer du att loggas du ut ur din nuvarande session så du måste logga in på nytt. Aktiva sessioner på andra enheter kommer fortsatt vara aktiva i upp till en timme.</value>
|
<value>Ditt huvudlösenord följer inte ett eller flera av din organisations regler. För att komma åt ditt valv så måste du ändra ditt huvudlösenord nu. Om du gör det kommer du att loggas du ut ur din nuvarande session så du måste logga in på nytt. Aktiva sessioner på andra enheter kommer fortsatt vara aktiva i upp till en timme.</value>
|
||||||
@@ -2631,7 +2631,7 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Godkänn med min andra enhet</value>
|
<value>Godkänn med min andra enhet</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestAdminApproval" xml:space="preserve">
|
<data name="RequestAdminApproval" xml:space="preserve">
|
||||||
<value>Request admin approval</value>
|
<value>Be om godkännande från administratör</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
<data name="ApproveWithMasterPassword" xml:space="preserve">
|
||||||
<value>Godkänn med huvudlösenord</value>
|
<value>Godkänn med huvudlösenord</value>
|
||||||
@@ -2643,34 +2643,34 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Kom ihåg denna enhet</value>
|
<value>Kom ihåg denna enhet</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkey" xml:space="preserve">
|
<data name="Passkey" xml:space="preserve">
|
||||||
<value>Passkey</value>
|
<value>Nyckel</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Passkeys" xml:space="preserve">
|
<data name="Passkeys" xml:space="preserve">
|
||||||
<value>Passkeys</value>
|
<value>Nycklar</value>
|
||||||
</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>Du kan inte ändra nyckelns applikation eftersom det skulle göra nyckeln ogiltig</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
<data name="PasskeyWillNotBeCopied" xml:space="preserve">
|
||||||
<value>Passkey will not be copied</value>
|
<value>Nyckel kommer inte kopieras</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>Nyckeln kommer inte att kopieras till det klonade objektet. Vill du klona det här objektet?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyApplication" xml:space="preserve">
|
<data name="CopyApplication" xml:space="preserve">
|
||||||
<value>Copy application</value>
|
<value>Kopiera applikation</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AvailableForTwoStepLogin" xml:space="preserve">
|
<data name="AvailableForTwoStepLogin" xml:space="preserve">
|
||||||
<value>Available for two-step login</value>
|
<value>Tillgänglig för tvåstegsverifiering</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
<data name="MasterPasswordRePromptHelp" xml:space="preserve">
|
||||||
<value>Återupprepa huvudlösenord hjälp</value>
|
<value>Återupprepa huvudlösenord hjälp</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 or set up biometric unlock to resolve.</value>
|
<value>Upplåsning kan misslyckas på grund av otillräckligt minne. Minska dina KDF-minnesinställningar för att lösa detta.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InvalidAPIKey" xml:space="preserve">
|
<data name="InvalidAPIKey" xml:space="preserve">
|
||||||
<value>Ogiltig API-nyckel</value>
|
<value>Ogiltig API-nyckel</value>
|
||||||
@@ -2679,10 +2679,10 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Ogiltig API-token</value>
|
<value>Ogiltig API-token</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdminApprovalRequested" xml:space="preserve">
|
<data name="AdminApprovalRequested" xml:space="preserve">
|
||||||
<value>Admin approval requested</value>
|
<value>Godkännande från administratör har begärts</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
<data name="YourRequestHasBeenSentToYourAdmin" xml:space="preserve">
|
||||||
<value>Your request has been sent to your admin.</value>
|
<value>Din begäran har skickats till din administratör.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
<data name="YouWillBeNotifiedOnceApproved" xml:space="preserve">
|
||||||
<value>Du kommer att meddelas vid godkännande. </value>
|
<value>Du kommer att meddelas vid godkännande. </value>
|
||||||
@@ -2694,10 +2694,10 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Loggar in som {0}</value>
|
<value>Loggar in som {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
<data name="VaultTimeoutActionChangedToLogOut" xml:space="preserve">
|
||||||
<value>Vault timeout action changed to log out</value>
|
<value>Tidsgränsåtgärd har ändrats till utloggning</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlockAutoFill" xml:space="preserve">
|
<data name="BlockAutoFill" xml:space="preserve">
|
||||||
<value>Block auto-fill</value>
|
<value>Blockera autofyll</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
|
<data name="AutoFillWillNotBeOfferedForTheseURIs" xml:space="preserve">
|
||||||
<value>Autofyll kommer inte att erbjudas för dessa URI:er.</value>
|
<value>Autofyll kommer inte att erbjudas för dessa URI:er.</value>
|
||||||
@@ -2740,10 +2740,10 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Det går inte att redigera flera URI:er samtidigt</value>
|
<value>Det går inte att redigera flera URI:er samtidigt</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LoginApproved" xml:space="preserve">
|
<data name="LoginApproved" xml:space="preserve">
|
||||||
<value>Login approved</value>
|
<value>Inloggning godkänd</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDeviceMustBeSetUpInTheSettingsOfTheBitwardenAppNeedAnotherOption" xml:space="preserve">
|
<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>
|
<value>"Logga in med enhet" måste ställas in i inställningarna i Bitwardens app. Behöver du ett annat alternativ?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LogInWithDevice" xml:space="preserve">
|
<data name="LogInWithDevice" xml:space="preserve">
|
||||||
<value>Logga in med enhet</value>
|
<value>Logga in med enhet</value>
|
||||||
@@ -2758,31 +2758,31 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Utseende</value>
|
<value>Utseende</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountSecurity" xml:space="preserve">
|
<data name="AccountSecurity" xml:space="preserve">
|
||||||
<value>Account security</value>
|
<value>Kontosäkerhet</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BitwardenHelpCenter" xml:space="preserve">
|
<data name="BitwardenHelpCenter" xml:space="preserve">
|
||||||
<value>Bitwarden Hjälpcenter</value>
|
<value>Bitwarden Hjälpcenter</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactBitwardenSupport" xml:space="preserve">
|
<data name="ContactBitwardenSupport" xml:space="preserve">
|
||||||
<value>Contact Bitwarden support</value>
|
<value>Kontakta Bitwarden support</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CopyAppInformation" xml:space="preserve">
|
<data name="CopyAppInformation" xml:space="preserve">
|
||||||
<value>Copy app information</value>
|
<value>Kopiera appinformation</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SyncNow" xml:space="preserve">
|
<data name="SyncNow" xml:space="preserve">
|
||||||
<value>Synkronisera nu</value>
|
<value>Synkronisera nu</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UnlockOptions" xml:space="preserve">
|
<data name="UnlockOptions" xml:space="preserve">
|
||||||
<value>Unlock options</value>
|
<value>Upplåsning</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SessionTimeout" xml:space="preserve">
|
<data name="SessionTimeout" xml:space="preserve">
|
||||||
<value>Session timeout</value>
|
<value>Tidsgräns för session</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SessionTimeoutAction" xml:space="preserve">
|
<data name="SessionTimeoutAction" xml:space="preserve">
|
||||||
<value>Session timeout action</value>
|
<value>Åtgärd när tidsgränsen uppnås</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
||||||
<value>Account fingerprint phrase</value>
|
<value>Kontots fingeravtrycksfras</value>
|
||||||
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||||
@@ -2801,13 +2801,13 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>{0} timmar</value>
|
<value>{0} timmar</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
<data name="AutofillServicesExplanationLong" xml:space="preserve">
|
||||||
<value>The Android Autofill Framework is used to assist in filling login information into other apps on your device.</value>
|
<value>Androids autofyll-ramverk används för att fylla i inloggningsuppgifter i appar på din enhet.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
<data name="UseInlineAutofillExplanationLong" xml:space="preserve">
|
||||||
<value>Use inline autofill if your selected keyboard supports it. Otherwise, use the default overlay.</value>
|
<value>Använd autofyll inbyggt i tangentbordet om ditt tangentbord stöder det. Annars, använd popup-fönstret.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AdditionalOptions" xml:space="preserve">
|
<data name="AdditionalOptions" xml:space="preserve">
|
||||||
<value>Additional options</value>
|
<value>Ytterligare alternativ</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToWebApp" xml:space="preserve">
|
<data name="ContinueToWebApp" xml:space="preserve">
|
||||||
<value>Fortsätt till webbapp?</value>
|
<value>Fortsätt till webbapp?</value>
|
||||||
@@ -2820,56 +2820,56 @@ Vill du byta till detta konto?</value>
|
|||||||
<value>Fortsätt till Hjälpcenter?</value>
|
<value>Fortsätt till Hjälpcenter?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToContactSupport" xml:space="preserve">
|
<data name="ContinueToContactSupport" xml:space="preserve">
|
||||||
<value>Continue to contact support?</value>
|
<value>Fortsätt att kontakta supporten?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContinueToAppStore" xml:space="preserve">
|
<data name="ContinueToAppStore" xml:space="preserve">
|
||||||
<value>Continue to app store?</value>
|
<value>Fortsätt till appbutiken?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
<data name="TwoStepLoginDescriptionLong" xml:space="preserve">
|
||||||
<value>Make your account more secure by setting up two-step login in the Bitwarden web app.</value>
|
<value>Gör ditt konto säkrare genom att konfigurera tvåstegsverifiering i Bitwardens webbapp.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
<data name="ChangeMasterPasswordDescriptionLong" xml:space="preserve">
|
||||||
<value>You can change your master password on the Bitwarden web app.</value>
|
<value>Du kan ändra ditt huvudlösenord i Bitwardens webbapp.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
<data name="YouCanImportDataToYourVaultOnX" xml:space="preserve">
|
||||||
<value>You can import data to your vault on {0}.</value>
|
<value>Du kan importera data till ditt valv på {0}.</value>
|
||||||
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
<comment>The parameter is an URL, like vault.bitwarden.com.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
<data name="LearnMoreAboutHowToUseBitwardenOnTheHelpCenter" xml:space="preserve">
|
||||||
<value>Learn more about how to use Bitwarden on the Help center.</value>
|
<value>Läs mer om hur du använder Bitwarden i hjälpcentret.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
<data name="ContactSupportDescriptionLong" xml:space="preserve">
|
||||||
<value>Can’t find what you are looking for? Reach out to Bitwarden support on bitwarden.com.</value>
|
<value>Hittar du inte det du söker? Hör av dig till Bitwardens support på bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
<data name="ExploreMoreFeaturesOfYourBitwardenAccountOnTheWebApp" xml:space="preserve">
|
||||||
<value>Explore more features of your Bitwarden account on the web app.</value>
|
<value>Utforska fler funktioner i ditt Bitwarden-konto i webbappen.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
<data name="LearnAboutOrganizationsDescriptionLong" xml:space="preserve">
|
||||||
<value>Bitwarden allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website.</value>
|
<value>Bitwarden låter dig dela objekt i ditt valv med andra med hjälp av en organisation. Läs mer på webbplatsen bitwarden.com.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RateAppDescriptionLong" xml:space="preserve">
|
<data name="RateAppDescriptionLong" xml:space="preserve">
|
||||||
<value>Help others find out if Bitwarden is right for them. Visit the app store and leave a rating now.</value>
|
<value>Hjälp andra att ta reda på om Bitwarden är rätt för dem. Besök appbutiken och lämna en recension nu.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultDarkThemeDescriptionLong" xml:space="preserve">
|
<data name="DefaultDarkThemeDescriptionLong" xml:space="preserve">
|
||||||
<value>Choose the dark theme to use when your device’s dark mode is in use</value>
|
<value>Välj vilket tema som ska användas när enheten är i mörkt läge</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="CreatedXY" xml:space="preserve">
|
<data name="CreatedXY" xml:space="preserve">
|
||||||
<value>Created {0}, {1}</value>
|
<value>Skapad {0}, {1}</value>
|
||||||
<comment>To state the date/time in which the cipher was created: Created 03/21/2023, 09:25 AM. First parameter is the date and the second parameter is the time.</comment>
|
<comment>To state the date/time in which the cipher was created: Created 03/21/2023, 09:25 AM. First parameter is the date and the second parameter is the time.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="TooManyAttempts" xml:space="preserve">
|
<data name="TooManyAttempts" xml:space="preserve">
|
||||||
<value>För många försök</value>
|
<value>För många försök</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
<data name="AccountLoggedOutBiometricExceeded" xml:space="preserve">
|
||||||
<value>Account logged out.</value>
|
<value>Kontot har loggats ut.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationPermissionsWereUpdatedRequeringYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Your organization permissions were updated, requiring you to set a master password.</value>
|
<value>Din organisations behörigheter uppdaterades, vilket kräver att du anger ett huvudlösenord.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
<data name="YourOrganizationRequiresYouToSetAMasterPassword" xml:space="preserve">
|
||||||
<value>Your organization requires you to set a master password.</value>
|
<value>Din organisation kräver att du anger ett huvudlösenord.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
<data name="SetUpAnUnlockOptionToChangeYourVaultTimeoutAction" xml:space="preserve">
|
||||||
<value>Set up an unlock option to change your vault timeout action.</value>
|
<value>Ställ in ett upplåsningsalternativ för att ändra vad som händer när tidsgränsen uppnås.</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -1176,17 +1176,17 @@
|
|||||||
<value>Відкрити налаштування автозаповнення</value>
|
<value>Відкрити налаштування автозаповнення</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="FaceID" xml:space="preserve">
|
<data name="FaceID" xml:space="preserve">
|
||||||
<value>Розпізнавання обличчя</value>
|
<value>Face ID</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">
|
||||||
<value>Використовувати розпізнавання обличчя для підтвердження.</value>
|
<value>Використовувати Face ID для підтвердження.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseFaceIDToUnlock" xml:space="preserve">
|
<data name="UseFaceIDToUnlock" xml:space="preserve">
|
||||||
<value>Розблокування з Face ID</value>
|
<value>Розблокування з Face ID</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="VerifyFaceID" xml:space="preserve">
|
<data name="VerifyFaceID" xml:space="preserve">
|
||||||
<value>Підтвердження розпізнавання обличчя</value>
|
<value>Підтвердження Face ID</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="WindowsHello" xml:space="preserve">
|
<data name="WindowsHello" xml:space="preserve">
|
||||||
<value>Windows Hello</value>
|
<value>Windows Hello</value>
|
||||||
@@ -2354,7 +2354,7 @@
|
|||||||
<value>Схвалювати запити на вхід</value>
|
<value>Схвалювати запити на вхід</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
<data name="UseThisDeviceToApproveLoginRequestsMadeFromOtherDevices" xml:space="preserve">
|
||||||
<value>Використовувати цей пристрій для схвалення запитів на вхід, виконаних з інших пристроїв</value>
|
<value>Схвалювати запити на вхід, виконані з інших пристроїв</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AllowNotifications" xml:space="preserve">
|
<data name="AllowNotifications" xml:space="preserve">
|
||||||
<value>Дозволити сповіщення</value>
|
<value>Дозволити сповіщення</value>
|
||||||
|
|||||||
@@ -2185,7 +2185,7 @@
|
|||||||
<value>无效的验证码</value>
|
<value>无效的验证码</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RequestOTP" xml:space="preserve">
|
<data name="RequestOTP" xml:space="preserve">
|
||||||
<value>请求一次性密码</value>
|
<value>要求一次性密码</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="SendCode" xml:space="preserve">
|
<data name="SendCode" xml:space="preserve">
|
||||||
<value>发送验证码</value>
|
<value>发送验证码</value>
|
||||||
@@ -2780,7 +2780,7 @@
|
|||||||
<value>会话超时动作</value>
|
<value>会话超时动作</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
<data name="AccountFingerprintPhrase" xml:space="preserve">
|
||||||
<value>账户的指纹短语</value>
|
<value>账户指纹短语</value>
|
||||||
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
<comment>A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="OneHourAndOneMinute" xml:space="preserve">
|
<data name="OneHourAndOneMinute" xml:space="preserve">
|
||||||
|
|||||||
@@ -63,12 +63,20 @@ namespace Bit.Core.Services
|
|||||||
/// </param>
|
/// </param>
|
||||||
public async Task<bool> IsLockedAsync(string userId = null)
|
public async Task<bool> IsLockedAsync(string userId = null)
|
||||||
{
|
{
|
||||||
|
// If biometrics are used, we can use the flag to determine locked state taking into account the auto unlock key for vault timeout never.
|
||||||
|
var biometricSet = await IsBiometricLockSetAsync(userId);
|
||||||
|
var hasAutoUnlockKey = await _cryptoService.HasAutoUnlockKeyAsync(userId);
|
||||||
|
if (biometricSet && await _stateService.GetBiometricLockedAsync(userId) && !hasAutoUnlockKey)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!await _cryptoService.HasUserKeyAsync(userId))
|
if (!await _cryptoService.HasUserKeyAsync(userId))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Filter out accounts without auto key
|
// Filter out accounts without auto key
|
||||||
if (!await _cryptoService.HasAutoUnlockKeyAsync(userId))
|
if (!hasAutoUnlockKey)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -84,7 +92,6 @@ namespace Bit.Core.Services
|
|||||||
// Legacy users must migrate on web vault before login
|
// Legacy users must migrate on web vault before login
|
||||||
await LogOutAsync(false, userId);
|
await LogOutAsync(false, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check again to verify auto key was set
|
// Check again to verify auto key was set
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ namespace Bit.App.Utilities
|
|||||||
string image = null;
|
string image = null;
|
||||||
if (cipher.Login.HasUris)
|
if (cipher.Login.HasUris)
|
||||||
{
|
{
|
||||||
foreach (var uri in cipher.Login.Uris)
|
foreach (var uri in cipher.Login.Uris.Where(u => u.Uri != null))
|
||||||
{
|
{
|
||||||
var hostnameUri = uri.Uri;
|
var hostnameUri = uri.Uri;
|
||||||
var isWebsite = false;
|
var isWebsite = false;
|
||||||
|
|||||||
15
src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml
Normal file
15
src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version = "1.0" encoding = "UTF-8" ?>
|
||||||
|
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
xmlns:local="clr-namespace:Bit.Core"
|
||||||
|
x:Class="Bit.Core.App">
|
||||||
|
<Application.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="Resources/Styles/Colors.xaml" />
|
||||||
|
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
||||||
|
|
||||||
12
src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml.cs
Normal file
12
src/Samples/EmbeddedIOSNavigationIssue/Core/App.xaml.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
namespace Bit.Core;
|
||||||
|
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
public App(AppOptions appOptions = null)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
MainPage = new MainPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using System;
|
||||||
|
namespace Bit.Core
|
||||||
|
{
|
||||||
|
public class AppOptions
|
||||||
|
{
|
||||||
|
public bool IosExtension { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
39
src/Samples/EmbeddedIOSNavigationIssue/Core/Core.csproj
Normal file
39
src/Samples/EmbeddedIOSNavigationIssue/Core/Core.csproj
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>net8.0-android;net8.0-ios</TargetFrameworks>
|
||||||
|
<RootNamespace>Bit.Core</RootNamespace>
|
||||||
|
|
||||||
|
<UseMaui>true</UseMaui>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
|
||||||
|
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">12.0</SupportedOSPlatformVersion>
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
|
||||||
|
<CreatePackage>false</CreatePackage>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'">
|
||||||
|
<CreatePackage>false</CreatePackage>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<DefineConstants Condition=" '$(CustomConstants)' != '' ">$(DefineConstants);$(CustomConstants)</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
|
||||||
|
<PackageReference Include="CommunityToolkit.Maui" Version="5.2.0" />
|
||||||
|
<PackageReference Include="AsyncAwaitBestPractices.MVVM" Version="6.0.6" />
|
||||||
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="Resources\" />
|
||||||
|
<None Remove="Resources\Styles\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Resources\" />
|
||||||
|
<Folder Include="Resources\" />
|
||||||
|
<Folder Include="Resources\Styles\" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
26
src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml
Normal file
26
src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="Bit.Core.HomePage"
|
||||||
|
Title="HomePage">
|
||||||
|
<VerticalStackLayout>
|
||||||
|
<Label
|
||||||
|
Text="This is the HOME"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
HorizontalOptions="Center" />
|
||||||
|
<Label
|
||||||
|
Text="GO TO LOGIN"
|
||||||
|
FontSize="Large">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Tapped="Login_Clicked" />
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
<Label
|
||||||
|
Text="CANCEL"
|
||||||
|
FontSize="Large">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Tapped="Cancel_Clicked" />
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
</VerticalStackLayout>
|
||||||
|
</ContentPage>
|
||||||
28
src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml.cs
Normal file
28
src/Samples/EmbeddedIOSNavigationIssue/Core/HomePage.xaml.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
namespace Bit.Core;
|
||||||
|
|
||||||
|
public partial class HomePage : ContentPage
|
||||||
|
{
|
||||||
|
public HomePage(AppOptions appOptions = null)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
if (appOptions is null)
|
||||||
|
{
|
||||||
|
StartLoginAction = () => Navigation.PushModalAsync(new LoginPage());
|
||||||
|
CloseAction = () => Navigation.PopModalAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action StartLoginAction { get; set; }
|
||||||
|
public Action CloseAction { get; set; }
|
||||||
|
|
||||||
|
void Login_Clicked(System.Object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
StartLoginAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cancel_Clicked(System.Object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
CloseAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
26
src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml
Normal file
26
src/Samples/EmbeddedIOSNavigationIssue/Core/LoginPage.xaml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="Bit.Core.LoginPage"
|
||||||
|
Title="LoginPage">
|
||||||
|
<VerticalStackLayout>
|
||||||
|
<Label
|
||||||
|
Text="This is the login!"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
HorizontalOptions="Center" />
|
||||||
|
<Label
|
||||||
|
Text="Tap me to login successfully"
|
||||||
|
FontSize="Large">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Tapped="LoginSuccess_Tapped" />
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
<Label
|
||||||
|
Text="Tap me to close"
|
||||||
|
FontSize="Large">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Tapped="Close_Tapped" />
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
</VerticalStackLayout>
|
||||||
|
</ContentPage>
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
namespace Bit.Core;
|
||||||
|
|
||||||
|
public partial class LoginPage : ContentPage
|
||||||
|
{
|
||||||
|
public LoginPage(AppOptions appOptions = null)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
if (appOptions is null)
|
||||||
|
{
|
||||||
|
LogInSuccessAction = () => DisplayAlert("Login", "Success", "Cancel");
|
||||||
|
CloseAction = () => Navigation.PopModalAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action LogInSuccessAction { get; set; }
|
||||||
|
public Action CloseAction { get; set; }
|
||||||
|
|
||||||
|
void LoginSuccess_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
|
||||||
|
{
|
||||||
|
LogInSuccessAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Close_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
|
||||||
|
{
|
||||||
|
CloseAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
17
src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml
Normal file
17
src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="Bit.Core.MainPage">
|
||||||
|
|
||||||
|
<ScrollView>
|
||||||
|
<VerticalStackLayout
|
||||||
|
Padding="30,0"
|
||||||
|
Spacing="25">
|
||||||
|
<Button
|
||||||
|
Text="Go to Home"
|
||||||
|
Clicked="Button_Clicked" />
|
||||||
|
</VerticalStackLayout>
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</ContentPage>
|
||||||
|
|
||||||
16
src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml.cs
Normal file
16
src/Samples/EmbeddedIOSNavigationIssue/Core/MainPage.xaml.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
namespace Bit.Core;
|
||||||
|
|
||||||
|
public partial class MainPage : ContentPage
|
||||||
|
{
|
||||||
|
public MainPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Button_Clicked(System.Object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
Navigation.PushModalAsync(new HomePage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
33
src/Samples/EmbeddedIOSNavigationIssue/Core/MauiProgram.cs
Normal file
33
src/Samples/EmbeddedIOSNavigationIssue/Core/MauiProgram.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using CommunityToolkit.Maui;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Bit.Core;
|
||||||
|
|
||||||
|
public static class MauiProgram
|
||||||
|
{
|
||||||
|
public static MauiAppBuilder ConfigureMauiAppBuilder(bool useMauiApp, Action<IMauiHandlersCollection> customHandlers = null)
|
||||||
|
{
|
||||||
|
var builder = MauiApp.CreateBuilder();
|
||||||
|
if (useMauiApp)
|
||||||
|
{
|
||||||
|
builder.UseMauiApp<Bit.Core.App>();
|
||||||
|
}
|
||||||
|
builder.UseMauiCommunityToolkit()
|
||||||
|
.ConfigureFonts(fonts =>
|
||||||
|
{
|
||||||
|
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
|
||||||
|
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
|
||||||
|
})
|
||||||
|
.ConfigureMauiHandlers(handlers =>
|
||||||
|
{
|
||||||
|
customHandlers?.Invoke(handlers);
|
||||||
|
});
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
builder.Logging.AddDebug();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"profiles": {
|
||||||
|
"Windows Machine": {
|
||||||
|
"commandName": "MsixPackage",
|
||||||
|
"nativeDebugging": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<?xaml-comp compile="true" ?>
|
||||||
|
<ResourceDictionary
|
||||||
|
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
|
||||||
|
|
||||||
|
<!-- Note: For Android please see also Platforms\Android\Resources\values\colors.xml -->
|
||||||
|
|
||||||
|
<Color x:Key="Primary">#512BD4</Color>
|
||||||
|
<Color x:Key="PrimaryDark">#ac99ea</Color>
|
||||||
|
<Color x:Key="PrimaryDarkText">#242424</Color>
|
||||||
|
<Color x:Key="Secondary">#DFD8F7</Color>
|
||||||
|
<Color x:Key="SecondaryDarkText">#9880e5</Color>
|
||||||
|
<Color x:Key="Tertiary">#2B0B98</Color>
|
||||||
|
|
||||||
|
<Color x:Key="White">White</Color>
|
||||||
|
<Color x:Key="Black">Black</Color>
|
||||||
|
<Color x:Key="Magenta">#D600AA</Color>
|
||||||
|
<Color x:Key="MidnightBlue">#190649</Color>
|
||||||
|
<Color x:Key="OffBlack">#1f1f1f</Color>
|
||||||
|
|
||||||
|
<Color x:Key="Gray100">#E1E1E1</Color>
|
||||||
|
<Color x:Key="Gray200">#C8C8C8</Color>
|
||||||
|
<Color x:Key="Gray300">#ACACAC</Color>
|
||||||
|
<Color x:Key="Gray400">#919191</Color>
|
||||||
|
<Color x:Key="Gray500">#6E6E6E</Color>
|
||||||
|
<Color x:Key="Gray600">#404040</Color>
|
||||||
|
<Color x:Key="Gray900">#212121</Color>
|
||||||
|
<Color x:Key="Gray950">#141414</Color>
|
||||||
|
|
||||||
|
<SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource Primary}"/>
|
||||||
|
<SolidColorBrush x:Key="SecondaryBrush" Color="{StaticResource Secondary}"/>
|
||||||
|
<SolidColorBrush x:Key="TertiaryBrush" Color="{StaticResource Tertiary}"/>
|
||||||
|
<SolidColorBrush x:Key="WhiteBrush" Color="{StaticResource White}"/>
|
||||||
|
<SolidColorBrush x:Key="BlackBrush" Color="{StaticResource Black}"/>
|
||||||
|
|
||||||
|
<SolidColorBrush x:Key="Gray100Brush" Color="{StaticResource Gray100}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray200Brush" Color="{StaticResource Gray200}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray300Brush" Color="{StaticResource Gray300}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray400Brush" Color="{StaticResource Gray400}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray500Brush" Color="{StaticResource Gray500}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray600Brush" Color="{StaticResource Gray600}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray900Brush" Color="{StaticResource Gray900}"/>
|
||||||
|
<SolidColorBrush x:Key="Gray950Brush" Color="{StaticResource Gray950}"/>
|
||||||
|
</ResourceDictionary>
|
||||||
@@ -0,0 +1,427 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<?xaml-comp compile="true" ?>
|
||||||
|
<ResourceDictionary
|
||||||
|
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
|
||||||
|
|
||||||
|
<Style TargetType="ActivityIndicator">
|
||||||
|
<Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="IndicatorView">
|
||||||
|
<Setter Property="IndicatorColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}"/>
|
||||||
|
<Setter Property="SelectedIndicatorColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray100}}"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Border">
|
||||||
|
<Setter Property="Stroke" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
|
||||||
|
<Setter Property="StrokeShape" Value="Rectangle"/>
|
||||||
|
<Setter Property="StrokeThickness" Value="1"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="BoxView">
|
||||||
|
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Button">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource PrimaryDarkText}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource PrimaryDark}}" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14"/>
|
||||||
|
<Setter Property="BorderWidth" Value="0"/>
|
||||||
|
<Setter Property="CornerRadius" Value="8"/>
|
||||||
|
<Setter Property="Padding" Value="14,10"/>
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
<VisualState x:Name="PointerOver" />
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="CheckBox">
|
||||||
|
<Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="DatePicker">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14"/>
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Editor">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14" />
|
||||||
|
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Entry">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14" />
|
||||||
|
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Frame">
|
||||||
|
<Setter Property="HasShadow" Value="False" />
|
||||||
|
<Setter Property="BorderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />
|
||||||
|
<Setter Property="CornerRadius" Value="8" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="ImageButton">
|
||||||
|
<Setter Property="Opacity" Value="1" />
|
||||||
|
<Setter Property="BorderColor" Value="Transparent"/>
|
||||||
|
<Setter Property="BorderWidth" Value="0"/>
|
||||||
|
<Setter Property="CornerRadius" Value="0"/>
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="Opacity" Value="0.5" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
<VisualState x:Name="PointerOver" />
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Label">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular" />
|
||||||
|
<Setter Property="FontSize" Value="14" />
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Span">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Label" x:Key="Headline">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource MidnightBlue}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="FontSize" Value="32" />
|
||||||
|
<Setter Property="HorizontalOptions" Value="Center" />
|
||||||
|
<Setter Property="HorizontalTextAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Label" x:Key="SubHeadline">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource MidnightBlue}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="FontSize" Value="24" />
|
||||||
|
<Setter Property="HorizontalOptions" Value="Center" />
|
||||||
|
<Setter Property="HorizontalTextAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="ListView">
|
||||||
|
<Setter Property="SeparatorColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
|
||||||
|
<Setter Property="RefreshControlColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Picker">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="TitleColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14"/>
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
<Setter Property="TitleColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="ProgressBar">
|
||||||
|
<Setter Property="ProgressColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="ProgressColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="RadioButton">
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent"/>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14"/>
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="RefreshView">
|
||||||
|
<Setter Property="RefreshColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="SearchBar">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="PlaceholderColor" Value="{StaticResource Gray500}" />
|
||||||
|
<Setter Property="CancelButtonColor" Value="{StaticResource Gray500}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular" />
|
||||||
|
<Setter Property="FontSize" Value="14" />
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="SearchHandler">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="PlaceholderColor" Value="{StaticResource Gray500}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent" />
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular" />
|
||||||
|
<Setter Property="FontSize" Value="14" />
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Shadow">
|
||||||
|
<Setter Property="Radius" Value="15" />
|
||||||
|
<Setter Property="Opacity" Value="0.5" />
|
||||||
|
<Setter Property="Brush" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="Offset" Value="10,10" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Slider">
|
||||||
|
<Setter Property="MinimumTrackColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="MaximumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" />
|
||||||
|
<Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="MinimumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/>
|
||||||
|
<Setter Property="MaximumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/>
|
||||||
|
<Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/>
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="SwipeItem">
|
||||||
|
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Switch">
|
||||||
|
<Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="ThumbColor" Value="{StaticResource White}" />
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
<Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
<VisualState x:Name="On">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Secondary}, Dark={StaticResource Gray200}}" />
|
||||||
|
<Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
<VisualState x:Name="Off">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray400}, Dark={StaticResource Gray500}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="TimePicker">
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="BackgroundColor" Value="Transparent"/>
|
||||||
|
<Setter Property="FontFamily" Value="OpenSansRegular"/>
|
||||||
|
<Setter Property="FontSize" Value="14"/>
|
||||||
|
<Setter Property="MinimumHeightRequest" Value="44"/>
|
||||||
|
<Setter Property="MinimumWidthRequest" Value="44"/>
|
||||||
|
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||||
|
<VisualStateGroupList>
|
||||||
|
<VisualStateGroup x:Name="CommonStates">
|
||||||
|
<VisualState x:Name="Normal" />
|
||||||
|
<VisualState x:Name="Disabled">
|
||||||
|
<VisualState.Setters>
|
||||||
|
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
|
||||||
|
</VisualState.Setters>
|
||||||
|
</VisualState>
|
||||||
|
</VisualStateGroup>
|
||||||
|
</VisualStateGroupList>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Page" ApplyToDerivedTypes="True">
|
||||||
|
<Setter Property="Padding" Value="0"/>
|
||||||
|
<Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="Shell" ApplyToDerivedTypes="True">
|
||||||
|
<Setter Property="Shell.BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" />
|
||||||
|
<Setter Property="Shell.ForegroundColor" Value="{OnPlatform WinUI={StaticResource Primary}, Default={StaticResource White}}" />
|
||||||
|
<Setter Property="Shell.TitleColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource SecondaryDarkText}}" />
|
||||||
|
<Setter Property="Shell.DisabledColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />
|
||||||
|
<Setter Property="Shell.UnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray200}}" />
|
||||||
|
<Setter Property="Shell.NavBarHasShadow" Value="False" />
|
||||||
|
<Setter Property="Shell.TabBarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" />
|
||||||
|
<Setter Property="Shell.TabBarForegroundColor" Value="{AppThemeBinding Light={StaticResource Magenta}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="Shell.TabBarTitleColor" Value="{AppThemeBinding Light={StaticResource Magenta}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="Shell.TabBarUnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="NavigationPage">
|
||||||
|
<Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" />
|
||||||
|
<Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="IconColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style TargetType="TabbedPage">
|
||||||
|
<Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Gray950}}" />
|
||||||
|
<Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Magenta}, Dark={StaticResource White}}" />
|
||||||
|
<Setter Property="UnselectedTabColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />
|
||||||
|
<Setter Property="SelectedTabColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
namespace Bit.Core
|
||||||
|
{
|
||||||
|
public class ServiceContainer
|
||||||
|
{
|
||||||
|
public ServiceContainer()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Reset()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
11
src/Samples/EmbeddedIOSNavigationIssue/Core/State.cs
Normal file
11
src/Samples/EmbeddedIOSNavigationIssue/Core/State.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
namespace Bit.Core
|
||||||
|
{
|
||||||
|
public static class State
|
||||||
|
{
|
||||||
|
public static bool IsAuthed { get; set; } = false;
|
||||||
|
|
||||||
|
public static bool IsLocked { get; set; } = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
namespace Core
|
||||||
|
{
|
||||||
|
public static class TaskExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Fires a task and ignores any exception.
|
||||||
|
/// See http://stackoverflow.com/a/22864616/344182
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="task">The task to be forgotten.</param>
|
||||||
|
/// <param name="onException">Action to be called on exception.</param>
|
||||||
|
public static async void FireAndForget(this Task task, Action<Exception> onException = null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await task.ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.ToString());
|
||||||
|
onException?.Invoke(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 25.0.1706.7
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbeddedIOSNavigationIssue", "EmbeddedIOSNavigationIssue\EmbeddedIOSNavigationIssue.csproj", "{E8CBD3FE-E964-45B2-A308-B0DAEB3266E6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOSExtensionSample", "IOSExtensionSample\IOSExtensionSample.csproj", "{66607AD1-2F9F-43C2-98E6-8ECFFE80A61E}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{452ACDA9-B7B3-4BDE-AAF3-A1453CAE2B21}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{E8CBD3FE-E964-45B2-A308-B0DAEB3266E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{E8CBD3FE-E964-45B2-A308-B0DAEB3266E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{E8CBD3FE-E964-45B2-A308-B0DAEB3266E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{E8CBD3FE-E964-45B2-A308-B0DAEB3266E6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{66607AD1-2F9F-43C2-98E6-8ECFFE80A61E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{66607AD1-2F9F-43C2-98E6-8ECFFE80A61E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{66607AD1-2F9F-43C2-98E6-8ECFFE80A61E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{66607AD1-2F9F-43C2-98E6-8ECFFE80A61E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{452ACDA9-B7B3-4BDE-AAF3-A1453CAE2B21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{452ACDA9-B7B3-4BDE-AAF3-A1453CAE2B21}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{452ACDA9-B7B3-4BDE-AAF3-A1453CAE2B21}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{452ACDA9-B7B3-4BDE-AAF3-A1453CAE2B21}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {54599F8D-8A3F-4A2A-AD7D-D7396CE679D6}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>net8.0-android;net8.0-ios</TargetFrameworks>
|
||||||
|
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
|
||||||
|
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>EmbeddedIOSNavigationIssue</RootNamespace>
|
||||||
|
<UseMaui>true</UseMaui>
|
||||||
|
<SingleProject>true</SingleProject>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
|
||||||
|
|
||||||
|
<!-- Display name -->
|
||||||
|
<ApplicationTitle>EmbeddedIOSNavigationIssue</ApplicationTitle>
|
||||||
|
|
||||||
|
<!-- App Identifier -->
|
||||||
|
<ApplicationId>com.8bit.bitwarden</ApplicationId>
|
||||||
|
|
||||||
|
<!-- Versions -->
|
||||||
|
<ApplicationDisplayVersion>2023.12.1</ApplicationDisplayVersion>
|
||||||
|
<ApplicationVersion>1</ApplicationVersion>
|
||||||
|
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">12.0</SupportedOSPlatformVersion>
|
||||||
|
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
|
||||||
|
<CreatePackage>false</CreatePackage>
|
||||||
|
<CodesignProvision>Automatic</CodesignProvision>
|
||||||
|
<CodesignKey>iPhone Developer</CodesignKey>
|
||||||
|
<CodesignEntitlements>Platforms\iOS\Entitlements.plist</CodesignEntitlements>
|
||||||
|
<UseInterpreter>true</UseInterpreter>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- App Icon -->
|
||||||
|
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />
|
||||||
|
|
||||||
|
<!-- Splash Screen -->
|
||||||
|
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />
|
||||||
|
|
||||||
|
<!-- Images -->
|
||||||
|
<MauiFont Include="Resources\Fonts\*" />
|
||||||
|
|
||||||
|
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
|
||||||
|
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
|
||||||
|
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
|
||||||
|
<ProjectReference Include="..\IOSExtensionSample\IOSExtensionSample.csproj">
|
||||||
|
<IsAppExtension>true</IsAppExtension>
|
||||||
|
<IsWatchApp>false</IsWatchApp>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Core\Core.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="Resources\Images\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Resources\Images\" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using Microsoft.Maui.Hosting;
|
||||||
|
|
||||||
|
namespace EmbeddedIOSNavigationIssue;
|
||||||
|
|
||||||
|
public static class MauiProgram
|
||||||
|
{
|
||||||
|
public static MauiApp CreateMauiApp()
|
||||||
|
{
|
||||||
|
return Bit.Core.MauiProgram.ConfigureMauiAppBuilder(true).Build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
</manifest>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using Android.App;
|
||||||
|
using Android.Content.PM;
|
||||||
|
using Android.OS;
|
||||||
|
|
||||||
|
namespace EmbeddedIOSNavigationIssue;
|
||||||
|
|
||||||
|
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
|
||||||
|
public class MainActivity : MauiAppCompatActivity
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Android.App;
|
||||||
|
using Android.Runtime;
|
||||||
|
|
||||||
|
namespace EmbeddedIOSNavigationIssue;
|
||||||
|
|
||||||
|
[Application]
|
||||||
|
public class MainApplication : MauiApplication
|
||||||
|
{
|
||||||
|
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
|
||||||
|
: base(handle, ownership)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="colorPrimary">#512BD4</color>
|
||||||
|
<color name="colorPrimaryDark">#2B0B98</color>
|
||||||
|
<color name="colorAccent">#2B0B98</color>
|
||||||
|
</resources>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using Foundation;
|
||||||
|
using Microsoft.Maui.Hosting;
|
||||||
|
|
||||||
|
namespace EmbeddedIOSNavigationIssue;
|
||||||
|
|
||||||
|
[Register("AppDelegate")]
|
||||||
|
public class AppDelegate : MauiUIApplicationDelegate
|
||||||
|
{
|
||||||
|
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.developer.authentication-services.autofill-credential-provider</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.application-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>group.com.8bit.bitwarden</string>
|
||||||
|
</array>
|
||||||
|
<key>keychain-access-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>$(AppIdentifierPrefix)com.8bit.bitwarden</string>
|
||||||
|
</array>
|
||||||
|
<key>com.apple.developer.ubiquity-container-identifiers</key>
|
||||||
|
<array>
|
||||||
|
<string>iCloud.$(CFBundleIdentifier)</string>
|
||||||
|
</array>
|
||||||
|
<key>com.apple.developer.associated-domains</key>
|
||||||
|
<array>
|
||||||
|
<string>webcredentials:bitwarden.com</string>
|
||||||
|
</array>
|
||||||
|
<key>aps-environment</key>
|
||||||
|
<string>development</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIDeviceFamily</key>
|
||||||
|
<array>
|
||||||
|
<integer>1</integer>
|
||||||
|
<integer>2</integer>
|
||||||
|
</array>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>arm64</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>XSAppIconAssets</key>
|
||||||
|
<string>Assets.xcassets/appicon.appiconset</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using ObjCRuntime;
|
||||||
|
using UIKit;
|
||||||
|
|
||||||
|
namespace EmbeddedIOSNavigationIssue;
|
||||||
|
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
// This is the main entry point of the application.
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
// if you want to use a different Application Delegate class from "AppDelegate"
|
||||||
|
// you can specify it here.
|
||||||
|
UIApplication.Main(args, null, typeof(AppDelegate));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"profiles": {
|
||||||
|
"Windows Machine": {
|
||||||
|
"commandName": "MsixPackage",
|
||||||
|
"nativeDebugging": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect x="0" y="0" width="456" height="456" fill="#512BD4" />
|
||||||
|
</svg>
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<path d="m 105.50037,281.60863 c -2.70293,0 -5.00091,-0.90042 -6.893127,-2.70209 -1.892214,-1.84778 -2.837901,-4.04181 -2.837901,-6.58209 0,-2.58722 0.945687,-4.80389 2.837901,-6.65167 1.892217,-1.84778 4.190197,-2.77167 6.893127,-2.77167 2.74819,0 5.06798,0.92389 6.96019,2.77167 1.93749,1.84778 2.90581,4.06445 2.90581,6.65167 0,2.54028 -0.96832,4.73431 -2.90581,6.58209 -1.89221,1.80167 -4.212,2.70209 -6.96019,2.70209 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||||
|
<path d="M 213.56111,280.08446 H 195.99044 L 149.69953,207.0544 c -1.17121,-1.84778 -2.14037,-3.76515 -2.90581,-5.75126 h -0.40578 c 0.36051,2.12528 0.54076,6.67515 0.54076,13.6496 v 65.13172 h -15.54349 v -99.36009 h 18.71925 l 44.7374,71.29798 c 1.89222,2.95695 3.1087,4.98917 3.64945,6.09751 h 0.26996 c -0.45021,-2.6325 -0.67573,-7.09015 -0.67573,-13.37293 v -64.02256 h 15.47557 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||||
|
<path d="m 289.25134,280.08446 h -54.40052 v -99.36009 h 52.23835 v 13.99669 h -36.15411 v 28.13085 h 33.31621 v 13.9271 h -33.31621 v 29.37835 h 38.31628 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||||
|
<path d="M 366.56466,194.72106 H 338.7222 v 85.3634 h -16.08423 v -85.3634 h -27.77455 v -13.99669 h 71.70124 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||||
|
</svg>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,18 @@
|
|||||||
|
Any raw assets you want to be deployed with your application can be placed in
|
||||||
|
this directory (and child directories). Deployment of the asset to your application
|
||||||
|
is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.
|
||||||
|
|
||||||
|
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
|
||||||
|
|
||||||
|
These files will be deployed with you package and will be accessible using Essentials:
|
||||||
|
|
||||||
|
async Task LoadMauiAsset()
|
||||||
|
{
|
||||||
|
using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
|
||||||
|
using var reader = new StreamReader(stream);
|
||||||
|
|
||||||
|
var contents = reader.ReadToEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user